From 3b846961ce7af880fae9f3230f63f0da8304a2c4 Mon Sep 17 00:00:00 2001 From: Kelven Yang Date: Thu, 27 Jan 2011 10:29:55 -0800 Subject: [PATCH] Bug 8229: Add finalizeExpunge to VirtualMachineGuru interface to allow overriding cleanup operations at expunging stage Status 8229: Resolved Fixed --- .../AgentBasedConsoleProxyManager.java | 8 ++++++-- .../consoleproxy/ConsoleProxyManagerImpl.java | 10 ++++++++++ .../VirtualNetworkApplianceManagerImpl.java | 16 ++++++++++------ .../secondary/SecondaryStorageManagerImpl.java | 10 +++++++--- server/src/com/cloud/vm/UserVmManagerImpl.java | 18 +++++++++++------- .../src/com/cloud/vm/VirtualMachineGuru.java | 2 ++ .../cloud/vm/VirtualMachineManagerImpl.java | 9 ++------- 7 files changed, 48 insertions(+), 25 deletions(-) diff --git a/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java b/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java index d53fe6b0ad1..db29232dbd9 100644 --- a/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java +++ b/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java @@ -56,10 +56,10 @@ import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.ReservationContext; import com.cloud.vm.UserVmVO; import com.cloud.vm.VMInstanceVO; -import com.cloud.vm.VirtualMachine.Type; import com.cloud.vm.VirtualMachineGuru; import com.cloud.vm.VirtualMachineName; import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.VirtualMachine.Type; import com.cloud.vm.dao.ConsoleProxyDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.VMInstanceDao; @@ -347,5 +347,9 @@ public class AgentBasedConsoleProxyManager implements ConsoleProxyManager, Virtu public void finalizeStop(VirtualMachineProfile profile, StopAnswer answer) { // TODO Auto-generated method stub - } + } + + @Override + public void finalizeExpunge(ConsoleProxyVO proxy) { + } } diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index 34651c85d12..dc3dd6b28f8 100644 --- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -1515,6 +1515,16 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx return true; } + @Override + public void finalizeExpunge(ConsoleProxyVO proxy) { + proxy.setPublicIpAddress(null); + proxy.setPublicMacAddress(null); + proxy.setPublicNetmask(null); + proxy.setPrivateMacAddress(null); + proxy.setPrivateIpAddress(null); + _consoleProxyDao.update(proxy.getId(), proxy); + } + @Override public boolean applyCustomCertToNewProxy(StartupProxyCommand cmd){ //this is the case for updating cust cert on each new starting proxy, if such cert exists diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index ab6dba20b9b..11ffe5faeb6 100644 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -89,18 +89,18 @@ import com.cloud.network.IPAddressVO; import com.cloud.network.IpAddress; import com.cloud.network.LoadBalancerVO; import com.cloud.network.Network; -import com.cloud.network.Network.GuestIpType; import com.cloud.network.NetworkManager; import com.cloud.network.NetworkVO; -import com.cloud.network.Networks.BroadcastDomainType; -import com.cloud.network.Networks.IsolationType; -import com.cloud.network.Networks.TrafficType; import com.cloud.network.PublicIpAddress; import com.cloud.network.RemoteAccessVpn; import com.cloud.network.SshKeysDistriMonitor; import com.cloud.network.VirtualNetworkApplianceService; import com.cloud.network.VpnUser; import com.cloud.network.VpnUserVO; +import com.cloud.network.Network.GuestIpType; +import com.cloud.network.Networks.BroadcastDomainType; +import com.cloud.network.Networks.IsolationType; +import com.cloud.network.Networks.TrafficType; import com.cloud.network.addr.PublicIp; import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.IPAddressDao; @@ -111,8 +111,8 @@ import com.cloud.network.dao.NetworkRuleConfigDao; import com.cloud.network.dao.RemoteAccessVpnDao; import com.cloud.network.dao.VpnUserDao; import com.cloud.network.lb.LoadBalancingRule; -import com.cloud.network.lb.LoadBalancingRule.LbDestination; import com.cloud.network.lb.LoadBalancingRulesManager; +import com.cloud.network.lb.LoadBalancingRule.LbDestination; import com.cloud.network.ovs.OvsNetworkManager; import com.cloud.network.ovs.OvsTunnelManager; import com.cloud.network.router.VirtualRouter.Role; @@ -160,11 +160,11 @@ import com.cloud.vm.ReservationContext; import com.cloud.vm.UserVmVO; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; -import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.VirtualMachineGuru; import com.cloud.vm.VirtualMachineManager; import com.cloud.vm.VirtualMachineName; import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.UserVmDao; @@ -1225,6 +1225,10 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian _ovsNetworkMgr.handleVmStateTransition(router, State.Stopped); _ovsTunnelMgr.CheckAndDestroyTunnel(router); } + + @Override + public void finalizeExpunge(DomainRouterVO vm) { + } @Override public boolean startRemoteAccessVpn(Network network, RemoteAccessVpn vpn) throws ResourceUnavailableException { diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java index e74bdb160cd..2126c1a6eb0 100644 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java @@ -52,8 +52,8 @@ import com.cloud.cluster.ClusterManager; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.DataCenter; -import com.cloud.dc.DataCenter.NetworkType; import com.cloud.dc.DataCenterVO; +import com.cloud.dc.DataCenter.NetworkType; import com.cloud.dc.dao.DataCenterDao; import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; @@ -78,8 +78,8 @@ import com.cloud.offerings.NetworkOfferingVO; import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.storage.VMTemplateHostVO; -import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.storage.VMTemplateVO; +import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.storage.dao.StoragePoolHostDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VMTemplateHostDao; @@ -106,11 +106,11 @@ import com.cloud.vm.NicVO; import com.cloud.vm.ReservationContext; import com.cloud.vm.SecondaryStorageVmVO; import com.cloud.vm.VirtualMachine; -import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.VirtualMachineGuru; import com.cloud.vm.VirtualMachineManager; import com.cloud.vm.VirtualMachineName; import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.SecondaryStorageVmDao; @@ -1160,4 +1160,8 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V @Override public void finalizeStop(VirtualMachineProfile profile, StopAnswer answer) { } + + @Override + public void finalizeExpunge(SecondaryStorageVmVO vm) { + } } diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index e05c163bc44..8f465102967 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -78,9 +78,9 @@ import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.ResourceCount.ResourceType; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.configuration.dao.ResourceLimitDao; -import com.cloud.dc.DataCenter.NetworkType; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; +import com.cloud.dc.DataCenter.NetworkType; import com.cloud.dc.dao.AccountVlanMapDao; import com.cloud.dc.dao.ClusterDao; import com.cloud.dc.dao.DataCenterDao; @@ -132,18 +132,18 @@ import com.cloud.storage.DiskOfferingVO; import com.cloud.storage.GuestOSVO; import com.cloud.storage.SnapshotVO; import com.cloud.storage.Storage; +import com.cloud.storage.StorageManager; +import com.cloud.storage.StoragePoolVO; +import com.cloud.storage.VMTemplateHostVO; +import com.cloud.storage.VMTemplateVO; +import com.cloud.storage.Volume; +import com.cloud.storage.VolumeVO; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.Storage.StorageResourceType; import com.cloud.storage.Storage.TemplateType; -import com.cloud.storage.StorageManager; -import com.cloud.storage.StoragePoolVO; -import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; -import com.cloud.storage.VMTemplateVO; -import com.cloud.storage.Volume; import com.cloud.storage.Volume.VolumeType; -import com.cloud.storage.VolumeVO; import com.cloud.storage.dao.DiskOfferingDao; import com.cloud.storage.dao.GuestOSCategoryDao; import com.cloud.storage.dao.GuestOSDao; @@ -2227,6 +2227,10 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager return true; } + @Override + public void finalizeExpunge(UserVmVO vm) { + } + @Override public UserVmVO persist(UserVmVO vm) { return _vmDao.persist(vm); diff --git a/server/src/com/cloud/vm/VirtualMachineGuru.java b/server/src/com/cloud/vm/VirtualMachineGuru.java index 6329c7ae41c..63955d999c9 100644 --- a/server/src/com/cloud/vm/VirtualMachineGuru.java +++ b/server/src/com/cloud/vm/VirtualMachineGuru.java @@ -65,6 +65,8 @@ public interface VirtualMachineGuru { void finalizeStop(VirtualMachineProfile profile, StopAnswer answer); + void finalizeExpunge(T vm); + /** * Returns the id parsed from the name. If it cannot parse the name, * then return null. This method is used to determine if this is diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java index 356d9c491b5..34b1e910d23 100644 --- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -375,13 +375,8 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, StateLi //Clean up volumes based on the vm's instance id _storageMgr.cleanupVolumes(vm.getId()); - ConsoleProxyVO proxy = _consoleDao.findById(vm.getId()); - proxy.setPublicIpAddress(null); - proxy.setPublicMacAddress(null); - proxy.setPublicNetmask(null); - proxy.setPrivateMacAddress(null); - proxy.setPrivateIpAddress(null); - _consoleDao.update(vm.getId(), proxy); + VirtualMachineGuru guru = (VirtualMachineGuru)_vmGurus.get(vm.getType()); + guru.finalizeExpunge(vm); if (s_logger.isDebugEnabled()) { s_logger.debug("Expunged " + vm);