You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by pr...@apache.org on 2013/01/31 21:09:29 UTC

[4/7] git commit: refs/heads/master - [EC2 Query API] DescribeAddresses fails with Null Pointer Exception.

[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 <Li...@citrix.com>
Authored: Thu Jan 31 11:45:38 2013 -0800
Committer: Prachi Damle <pr...@cloud.com>
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
 	 *