[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
This commit is contained in:
Likitha Shetty 2013-01-31 11:45:38 -08:00 committed by Prachi Damle
parent de517d95b0
commit d738c81a46
2 changed files with 47 additions and 26 deletions

View File

@ -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);

View File

@ -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);
EC2DescribeAddressesResponse response = listAddresses(request.getPublicIpsSet());
EC2AddressFilterSet afs = request.getFilterSet();
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);
}
}
}
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
*