Fixed NPE in vm expunge process - when cleanup static nat rules after corresponding vm is expunged, make search for guest Nic including removed.

This commit is contained in:
alena 2011-02-24 18:19:19 -08:00
parent b1a7cecd39
commit d3d558f2fb
3 changed files with 14 additions and 2 deletions

View File

@ -159,6 +159,8 @@ public interface NetworkManager extends NetworkService {
Nic getNicInNetwork(long vmId, long networkId);
Nic getNicInNetworkIncludingRemoved(long vmId, long networkId);
Nic getNicForTraffic(long vmId, TrafficType type);
Network getDefaultNetworkForVm(long vmId);

View File

@ -1823,6 +1823,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
@DB
@Override
public boolean destroyNetwork(long networkId, ReservationContext context) {
Account callerAccount = _accountMgr.getAccount(context.getCaller().getAccountId());
NetworkVO network = _networksDao.findById(networkId);
if (network == null) {
s_logger.debug("Unable to find network with id: " + networkId);
@ -1845,6 +1847,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
List<IPAddressVO> ipsToRelease = _ipAddressDao.listByAssociatedNetwork(networkId);
if (ipsToRelease != null && !ipsToRelease.isEmpty()) {
for (IPAddressVO ip : ipsToRelease) {
//delete load balancer rules associated with the ip address before unassigning it
_lbMgr.removeAllLoadBalanacers(ip.getId(), callerAccount, context.getCaller().getId());
unassignPublicIpAddress(ip);
}
@ -2181,6 +2185,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
public Nic getNicInNetwork(long vmId, long networkId) {
return _nicDao.findByInstanceIdAndNetworkId(networkId, vmId);
}
@Override
public Nic getNicInNetworkIncludingRemoved(long vmId, long networkId) {
return _nicDao.findByInstanceIdAndNetworkIdIncludingRemoved(networkId, vmId);
}
@Override @DB
public boolean associateIpAddressListToAccount(long userId, long accountId, long zoneId, Long vlanId, Network network) throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException {

View File

@ -689,7 +689,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager {
throw new CloudRuntimeException("Unable to find ip address to map to in vm id=" + vm.getId());
}
Nic guestNic = _networkMgr.getNicInNetwork(vm.getId(), networkId);
Nic guestNic = _networkMgr.getNicInNetworkIncludingRemoved(vm.getId(), networkId);
FirewallRuleVO ruleVO = _firewallDao.findById(rule.getId());
staticNatRules.add(new StaticNatRuleImpl(ruleVO, guestNic.getIp4Address()));
@ -755,7 +755,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager {
UserVmVO vm = _vmDao.findById(sourceIp.getAssociatedWithVmId());
Nic guestNic = _networkMgr.getNicInNetwork(vm.getId(), networkId);
Nic guestNic = _networkMgr.getNicInNetworkIncludingRemoved(vm.getId(), networkId);
String dstIp = guestNic.getIp4Address();
staticNatRules.add(new StaticNatRuleImpl(rule, dstIp));