diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index ef62718a9e1..bdbe34a2af3 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -7581,20 +7581,33 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir protected void executeStepsToChangeOwnershipOfVm(AssignVMCmd cmd, Account caller, Account oldAccount, Account newAccount, UserVmVO vm, ServiceOfferingVO offering, List volumes, VirtualMachineTemplate template, Long domainId) { - logger.trace("Generating destroy event for VM [{}].", vm); - UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_DESTROY, vm.getAccountId(), vm.getDataCenterId(), vm.getId(), vm.getHostName(), vm.getServiceOfferingId(), - vm.getTemplateId(), vm.getHypervisorType().toString(), VirtualMachine.class.getName(), vm.getUuid(), vm.isDisplayVm()); - - logger.trace("Decrementing old account [{}] resource count.", oldAccount); - resourceCountDecrement(oldAccount.getAccountId(), vm.isDisplayVm(), offering, template); - - logger.trace("Removing VM [{}] from its instance group.", vm); - removeInstanceFromInstanceGroup(vm.getId()); - Long newAccountId = newAccount.getAccountId(); AtomicBoolean isNetworkAutoCreated = new AtomicBoolean(false); try { updateVmNetwork(cmd, caller, vm, newAccount, template, isNetworkAutoCreated); + + logger.trace("Generating destroy event for VM [{}].", vm); + UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_DESTROY, vm.getAccountId(), vm.getDataCenterId(), vm.getId(), vm.getHostName(), vm.getServiceOfferingId(), + vm.getTemplateId(), vm.getHypervisorType().toString(), VirtualMachine.class.getName(), vm.getUuid(), vm.isDisplayVm()); + + logger.trace("Decrementing old account [{}] resource count.", oldAccount); + resourceCountDecrement(oldAccount.getAccountId(), vm.isDisplayVm(), offering, template); + + logger.trace("Removing VM [{}] from its instance group.", vm); + removeInstanceFromInstanceGroup(vm.getId()); + + updateVmOwner(newAccount, vm, domainId, newAccountId); + + updateVolumesOwner(volumes, oldAccount, newAccount, newAccountId); + + logger.trace(String.format("Incrementing new account [%s] resource count.", newAccount)); + if (!isResourceCountRunningVmsOnlyEnabled()) { + resourceCountIncrement(newAccountId, vm.isDisplayVm(), offering, template); + } + + logger.trace(String.format("Generating create event for VM [%s].", vm)); + UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_CREATE, vm.getAccountId(), vm.getDataCenterId(), vm.getId(), vm.getHostName(), vm.getServiceOfferingId(), + vm.getTemplateId(), vm.getHypervisorType().toString(), VirtualMachine.class.getName(), vm.getUuid(), vm.isDisplayVm()); } catch (InsufficientCapacityException | ResourceAllocationException e) { List networkVOS = _networkDao.listByAccountIdNetworkName(newAccountId, newAccount.getAccountName() + "-network"); if (networkVOS.size() == 1 && isNetworkAutoCreated.get()) { @@ -7602,19 +7615,6 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir } throw new CloudRuntimeException(String.format("Unable to update networks when assigning VM [%s] due to [%s].", vm, e.getMessage()), e); } - - updateVmOwner(newAccount, vm, domainId, newAccountId); - - updateVolumesOwner(volumes, oldAccount, newAccount, newAccountId); - - logger.trace(String.format("Incrementing new account [%s] resource count.", newAccount)); - if (!isResourceCountRunningVmsOnlyEnabled()) { - resourceCountIncrement(newAccountId, vm.isDisplayVm(), offering, template); - } - - logger.trace(String.format("Generating create event for VM [%s].", vm)); - UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_CREATE, vm.getAccountId(), vm.getDataCenterId(), vm.getId(), vm.getHostName(), vm.getServiceOfferingId(), - vm.getTemplateId(), vm.getHypervisorType().toString(), VirtualMachine.class.getName(), vm.getUuid(), vm.isDisplayVm()); } protected void updateVmOwner(Account newAccount, UserVmVO vm, Long domainId, Long newAccountId) { diff --git a/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java b/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java index 591bad37096..ccf4ba1ff4e 100644 --- a/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java +++ b/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java @@ -3055,8 +3055,6 @@ public class UserVmManagerImplTest { LinkedList volumes = new LinkedList(); try (MockedStatic ignored = Mockito.mockStatic(UsageEventUtils.class)) { - Mockito.doReturn(Hypervisor.HypervisorType.KVM).when(userVmVoMock).getHypervisorType(); - configureDoNothingForMethodsThatWeDoNotWantToTest(); Mockito.doThrow(InsufficientAddressCapacityException.class).when(userVmManagerImpl).updateVmNetwork(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), @@ -3064,10 +3062,6 @@ public class UserVmManagerImplTest { Assert.assertThrows(CloudRuntimeException.class, () -> userVmManagerImpl.executeStepsToChangeOwnershipOfVm(assignVmCmdMock, callerAccount, accountMock, accountMock, userVmVoMock, serviceOfferingVoMock, volumes, virtualMachineTemplateMock, 1l)); - - Mockito.verify(userVmManagerImpl).resourceCountDecrement(Mockito.anyLong(), Mockito.any(), Mockito.any(), Mockito.any()); - Mockito.verify(userVmManagerImpl).updateVmOwner(Mockito.any(), Mockito.any(), Mockito.anyLong(), Mockito.anyLong()); - Mockito.verify(userVmManagerImpl).updateVolumesOwner(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyLong()); } } @@ -3078,8 +3072,6 @@ public class UserVmManagerImplTest { LinkedList volumes = new LinkedList(); try (MockedStatic ignored = Mockito.mockStatic(UsageEventUtils.class)) { - Mockito.doReturn(Hypervisor.HypervisorType.KVM).when(userVmVoMock).getHypervisorType(); - configureDoNothingForMethodsThatWeDoNotWantToTest(); Mockito.doThrow(ResourceAllocationException.class).when(userVmManagerImpl).updateVmNetwork(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), @@ -3088,9 +3080,6 @@ public class UserVmManagerImplTest { Assert.assertThrows(CloudRuntimeException.class, () -> userVmManagerImpl.executeStepsToChangeOwnershipOfVm(assignVmCmdMock, callerAccount, accountMock, accountMock, userVmVoMock, serviceOfferingVoMock, volumes, virtualMachineTemplateMock, 1l)); - Mockito.verify(userVmManagerImpl).resourceCountDecrement(Mockito.anyLong(), Mockito.any(), Mockito.any(), Mockito.any()); - Mockito.verify(userVmManagerImpl).updateVmOwner(Mockito.any(), Mockito.any(), Mockito.anyLong(), Mockito.anyLong()); - Mockito.verify(userVmManagerImpl).updateVolumesOwner(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyLong()); } }