[EC2 Query API] DescribeAddresses fails with Null Pointer Exception.

https://reviews.apache.org/r/8492/

As a part of EC2 Query API support, resolve the NPE obtained when 
DescribeAddresses is called
In EC2Engine modify DescribeAddresses implementation to be consistent with the 
other Describe* API implementation


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/d738c81a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/d738c81a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/d738c81a

Branch: refs/heads/master
Commit: d738c81a4613f70783676a2d9657b9467c4e16a8
Parents: de517d9
Author: Likitha Shetty <[email protected]>
Authored: Thu Jan 31 11:45:38 2013 -0800
Committer: Prachi Damle <[email protected]>
Committed: Thu Jan 31 12:00:32 2013 -0800

----------------------------------------------------------------------
 .../service/core/ec2/EC2AddressFilterSet.java      |   17 ++---
 .../cloud/bridge/service/core/ec2/EC2Engine.java   |   56 ++++++++++-----
 2 files changed, 47 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d738c81a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AddressFilterSet.java
----------------------------------------------------------------------
diff --git 
a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AddressFilterSet.java 
b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AddressFilterSet.java
index cb21fb2..1823b26 100644
--- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AddressFilterSet.java
+++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AddressFilterSet.java
@@ -63,22 +63,21 @@ public class EC2AddressFilterSet {
        }
 
 
-       public EC2DescribeAddressesResponse evaluate( List<EC2Address> 
addresses) throws ParseException {
+    public EC2DescribeAddressesResponse evaluate( EC2DescribeAddressesResponse 
response) throws ParseException {
                EC2DescribeAddressesResponse resultList = new 
EC2DescribeAddressesResponse();
                
                boolean matched;
                
+        EC2Address[] addresses = response.getAddressSet();
                EC2Filter[] filterSet = getFilterSet();
                for ( EC2Address address : addresses ) {
                        matched = true;
-                       if (filterSet != null) {
-                               for (EC2Filter filter : filterSet) {
-                                       if (!filterMatched(address, filter)) {
-                                               matched = false;
-                                               break;
-                                       }
-                               }
-                       }
+            for (EC2Filter filter : filterSet) {
+                if (!filterMatched(address, filter)) {
+                    matched = false;
+                    break;
+                }
+            }
                        if (matched == true)
                                resultList.addAddress(address);
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d738c81a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java 
b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java
index 6f54d38..17752af 100644
--- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java
+++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java
@@ -812,24 +812,13 @@ public class EC2Engine {
         */
        public EC2DescribeAddressesResponse describeAddresses( 
EC2DescribeAddresses request ) {
                try {
-                       List<CloudStackIpAddress> addrList = 
getApi().listPublicIpAddresses(null, null, null, null, null, null, null, null, 
null);
-
-                       EC2AddressFilterSet filterSet = request.getFilterSet();
-                       List<EC2Address> addressList = new 
ArrayList<EC2Address>();
-                       if (addrList != null && addrList.size() > 0) {
-                               for (CloudStackIpAddress addr: addrList) {
-                                       // remember, if no filters are set, 
request.inPublicIpSet always returns true
-                                       if 
(request.inPublicIpSet(addr.getIpAddress())) {
-                                               EC2Address ec2Address = new 
EC2Address();
-                                               
ec2Address.setIpAddress(addr.getIpAddress());
-                                               if (addr.getVirtualMachineId() 
!= null) 
-                                                       
ec2Address.setAssociatedInstanceId(addr.getVirtualMachineId().toString());
-                                               addressList.add(ec2Address);
-                                       }
-                               }
-                       }
+            EC2DescribeAddressesResponse response = 
listAddresses(request.getPublicIpsSet());
+            EC2AddressFilterSet afs = request.getFilterSet();
 
-                       return filterSet.evaluate(addressList);
+            if (afs ==null)
+                return response;
+            else
+                return afs.evaluate(response);
                } catch(Exception e) {
                        logger.error("EC2 DescribeAddresses - ", e);
                        throw new 
EC2ServiceException(ServerError.InternalError, e.getMessage());
@@ -2079,6 +2068,39 @@ public class EC2Engine {
         }
     }
 
+    private EC2DescribeAddressesResponse listAddresses(String[] addressNames) 
throws Exception {
+        try {
+            EC2DescribeAddressesResponse addressSet = new 
EC2DescribeAddressesResponse();
+
+            List<CloudStackIpAddress> addresses = 
getApi().listPublicIpAddresses(null, null, null, null, null, null, null, null, 
null);
+            if (addresses != null && addresses.size() > 0) {
+                for (CloudStackIpAddress address : addresses) {
+                    boolean matched = false;
+                    if ( addressNames.length > 0) {
+                        for (String addressName : addressNames) {
+                            if 
(address.getIpAddress().equalsIgnoreCase(addressName)) {
+                                matched = true;
+                                break;
+                            }
+                        }
+                    } else matched = true;
+
+                    if (!matched) continue ;
+
+                    EC2Address ec2Address = new EC2Address();
+                    ec2Address.setIpAddress(address.getIpAddress());
+                    if (address.getVirtualMachineId() != null)
+                        
ec2Address.setAssociatedInstanceId(address.getVirtualMachineId().toString());
+                    addressSet.addAddress(ec2Address);
+                }
+            }
+            return addressSet;
+        } catch(Exception e) {
+            logger.error( "List Addresses - ", e);
+            throw new EC2ServiceException(ServerError.InternalError, 
e.getMessage());
+        }
+    }
+
        /**
         * Convert ingress rule to EC2IpPermission records
         * 

Reply via email to