bug 6443,6445: fixing exupunge and port forwarding issues around vms, domrs

status 6443,6445: resolved fixed
This commit is contained in:
abhishek 2010-10-07 10:45:48 -07:00
parent b593fcd721
commit 46793343e9
1 changed files with 31 additions and 15 deletions

View File

@ -177,6 +177,7 @@ import com.cloud.vm.VirtualMachine.Event;
import com.cloud.vm.VirtualMachine.Type;
import com.cloud.vm.dao.DomainRouterDao;
import com.cloud.vm.dao.UserVmDao;
import com.xensource.xenapi.Types.UserIsNotLocalSuperuser;
@Local(value={UserVmManager.class})
public class UserVmManagerImpl implements UserVmManager {
@ -1941,6 +1942,7 @@ public class UserVmManagerImpl implements UserVmManager {
s_logger.info("Found " + vms.size() + " vms to expunge.");
for (UserVmVO vm : vms)
{
boolean deleteRules = true;
String privateIpAddress = vm.getPrivateIpAddress();
long vmId = vm.getId();
releaseGuestIpAddress(vm);
@ -1950,24 +1952,38 @@ public class UserVmManagerImpl implements UserVmManager {
s_logger.info("vm " + vmId + " is skipped because it is no longer in Destroyed state");
continue;
}
if(vm.getName().startsWith("r-") && !vm.getState().equals(State.Running)){
deleteRules = false;
}
List<FirewallRuleVO> forwardingRules = null;
forwardingRules = _rulesDao.listByPrivateIp(privateIpAddress);
for(FirewallRuleVO rule: forwardingRules)
{
try
if(deleteRules)
{
List<FirewallRuleVO> forwardingRules = null;
forwardingRules = _rulesDao.listByPrivateIp(privateIpAddress);
for(FirewallRuleVO rule: forwardingRules)
{
_networkMgr.deleteRule(rule.getId(), Long.valueOf(User.UID_SYSTEM), Long.valueOf(User.UID_SYSTEM));
if(s_logger.isDebugEnabled())
s_logger.debug("Rule "+rule.getId()+" for vm:"+vm.getName()+" is deleted successfully during expunge operation");
try
{
IPAddressVO publicIp = _ipAddressDao.findById(rule.getPublicIpAddress());
if(publicIp!=null)
{
if((publicIp.getAccountId().longValue() == vm.getAccountId()))
{
_networkMgr.deleteRule(rule.getId(), Long.valueOf(User.UID_SYSTEM), Long.valueOf(User.UID_SYSTEM));
if(s_logger.isDebugEnabled())
s_logger.debug("Rule "+rule.getId()+" for vm:"+vm.getName()+" is deleted successfully during expunge operation");
}
}
}
catch(Exception e)
{
s_logger.warn("Failed to delete rule:"+rule.getId()+" for vm:"+vm.getName());
}
}
catch(Exception e)
{
s_logger.warn("Failed to delete rule:"+rule.getId()+" for vm:"+vm.getName());
}
}
}
List<VolumeVO> vols = null;
try {