From d3f3fb0590f14c540493d5f27c18cea13fa092af Mon Sep 17 00:00:00 2001 From: nvazquez Date: Mon, 6 Jun 2016 11:47:45 -0300 Subject: [PATCH 1/2] CLOUDSTACK-9407: Release network resources on expunge command --- .../com/cloud/vm/VirtualMachineManagerImpl.java | 5 +++-- server/src/com/cloud/vm/UserVmManagerImpl.java | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java index 9523b928ed4..b8d6b80e266 100644 --- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -1577,8 +1577,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac } try { - _networkMgr.release(profile, cleanUpEvenIfUnableToStop); - s_logger.debug("Successfully released network resources for the vm " + vm); + s_logger.debug("Not releasing network resources until expunge command is sent"); + //_networkMgr.release(profile, cleanUpEvenIfUnableToStop); + //s_logger.debug("Successfully released network resources for the vm " + vm); } catch (final Exception e) { s_logger.warn("Unable to release some network resources.", e); } diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 9eddf6dabd9..5e1ad3bd1a8 100644 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2046,6 +2046,9 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir return false; } try { + + releaseNetworkResourcesOnExpunge(vm.getId()); + List rootVol = _volsDao.findByInstanceAndType(vm.getId(), Volume.Type.ROOT); // expunge the vm _itMgr.advanceExpunge(vm.getUuid()); @@ -2086,6 +2089,18 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir } } + /** + * Release network resources, it was done on vm stop previously. + * @param id vm id + * @throws ConcurrentOperationException + * @throws ResourceUnavailableException + */ + private void releaseNetworkResourcesOnExpunge(long id) throws ConcurrentOperationException, ResourceUnavailableException { + final VMInstanceVO vmInstance = _vmDao.findById(id); + final VirtualMachineProfile profile = new VirtualMachineProfileImpl(vmInstance); + _networkMgr.release(profile, false); + } + private boolean cleanupVmResources(long vmId) { boolean success = true; // Remove vm from security groups From c754a0cf304aa2e40d0747543c023983f201540c Mon Sep 17 00:00:00 2001 From: nvazquez Date: Tue, 21 Jun 2016 13:49:55 -0300 Subject: [PATCH 2/2] CLOUDSTACK-9407: Refactor --- .../com/cloud/vm/VirtualMachineManagerImpl.java | 17 +++++++++-------- server/src/com/cloud/vm/UserVmManagerImpl.java | 9 +++++++-- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java index b8d6b80e266..a1cf7665655 100644 --- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -1428,6 +1428,15 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac advanceStop(vm, cleanUpEvenIfUnableToStop); } + /** + * Send StopCommand to stop vm.
+ * Not releasing network resources until expunge command is sent + * @param vm virtual machine + * @param cleanUpEvenIfUnableToStop if true -> cleanup even if vm cannot be stopped. if false -> not cleaning up if vm cannot be stopped. + * @throws AgentUnavailableException + * @throws OperationTimedoutException + * @throws ConcurrentOperationException + */ private void advanceStop(final VMInstanceVO vm, final boolean cleanUpEvenIfUnableToStop) throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException { final State state = vm.getState(); @@ -1576,14 +1585,6 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac s_logger.debug(vm + " is stopped on the host. Proceeding to release resource held."); } - try { - s_logger.debug("Not releasing network resources until expunge command is sent"); - //_networkMgr.release(profile, cleanUpEvenIfUnableToStop); - //s_logger.debug("Successfully released network resources for the vm " + vm); - } catch (final Exception e) { - s_logger.warn("Unable to release some network resources.", e); - } - try { if (vm.getHypervisorType() != HypervisorType.BareMetal) { volumeMgr.release(profile); diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 5e1ad3bd1a8..dd7e817aaea 100644 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2097,8 +2097,13 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir */ private void releaseNetworkResourcesOnExpunge(long id) throws ConcurrentOperationException, ResourceUnavailableException { final VMInstanceVO vmInstance = _vmDao.findById(id); - final VirtualMachineProfile profile = new VirtualMachineProfileImpl(vmInstance); - _networkMgr.release(profile, false); + if (vmInstance != null){ + final VirtualMachineProfile profile = new VirtualMachineProfileImpl(vmInstance); + _networkMgr.release(profile, false); + } + else { + s_logger.error("Couldn't find vm with id = " + id + ", unable to release network resources"); + } } private boolean cleanupVmResources(long vmId) {