From 4f9986896a20502e5dda4eeb14ca8c3c80572c26 Mon Sep 17 00:00:00 2001 From: Slavka Peleva Date: Fri, 20 Nov 2020 18:35:03 +0200 Subject: [PATCH 1/2] fix for changeServiceForVirtualMachnie When changing the service offering of a VM the disk_offering_id is not updated in volumes DB table and VM could not start --- .../java/com/cloud/vm/UserVmManagerImpl.java | 33 +++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index 192a027512a7..3dc782b13624 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -1055,6 +1055,8 @@ public UserVm upgradeVirtualMachine(UpgradeVMCmd cmd) throws ResourceAllocationE UserVmVO userVm = _vmDao.findById(vmId); generateUsageEvent( userVm, userVm.isDisplayVm(), EventTypes.EVENT_VM_UPGRADE); + resizeVolumeWithNewOfferings(vmInstance, newServiceOffering); + return userVm; } @@ -1139,19 +1141,7 @@ private UserVm upgradeStoppedVirtualMachine(Long vmId, Long svcOffId, Map vols = _volsDao.findReadyRootVolumesByInstance(vmInstance.getId()); - - for (final VolumeVO rootVolumeOfVm : vols) { - rootVolumeOfVm.setDiskOfferingId(newROOTDiskOffering.getId()); - - _volsDao.update(rootVolumeOfVm.getId(), rootVolumeOfVm); - - ResizeVolumeCmd resizeVolumeCmd = new ResizeVolumeCmd(rootVolumeOfVm.getId(), newROOTDiskOffering.getMinIops(), newROOTDiskOffering.getMaxIops()); - - _volumeService.resizeVolume(resizeVolumeCmd); - } + resizeVolumeWithNewOfferings(vmInstance, newServiceOffering); // Check if the new service offering can be applied to vm instance ServiceOffering newSvcOffering = _offeringDao.findById(svcOffId); @@ -1177,6 +1167,23 @@ private UserVm upgradeStoppedVirtualMachine(Long vmId, Long svcOffId, Map vols = _volsDao.findReadyRootVolumesByInstance(vmInstance.getId()); + + for (final VolumeVO rootVolumeOfVm : vols) { + rootVolumeOfVm.setDiskOfferingId(newROOTDiskOffering.getId()); + + _volsDao.update(rootVolumeOfVm.getId(), rootVolumeOfVm); + + ResizeVolumeCmd resizeVolumeCmd = new ResizeVolumeCmd(rootVolumeOfVm.getId(), newROOTDiskOffering.getMinIops(), newROOTDiskOffering.getMaxIops()); + + _volumeService.resizeVolume(resizeVolumeCmd); + } + } + @Override @ActionEvent(eventType = EventTypes.EVENT_NIC_CREATE, eventDescription = "Creating Nic", async = true) public UserVm addNicToVirtualMachine(AddNicToVMCmd cmd) throws InvalidParameterValueException, PermissionDeniedException, CloudRuntimeException { From 327f29ce589cdf064b7645c57295a9c85a4fe52f Mon Sep 17 00:00:00 2001 From: Slavka Peleva Date: Tue, 24 Nov 2020 11:00:11 +0200 Subject: [PATCH 2/2] change method name and move its invokation before VM DB update --- .../main/java/com/cloud/vm/UserVmManagerImpl.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index 3dc782b13624..d8310dd1cca8 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -1035,6 +1035,8 @@ public UserVm upgradeVirtualMachine(UpgradeVMCmd cmd) throws ResourceAllocationE // Check that the specified service offering ID is valid _itMgr.checkIfCanUpgrade(vmInstance, newServiceOffering); + resizeRootVolumeOfVmWithNewOffering(vmInstance, newServiceOffering); + _itMgr.upgradeVmDb(vmId, newServiceOffering, currentServiceOffering); // Increment or decrement CPU and Memory count accordingly. @@ -1055,8 +1057,6 @@ public UserVm upgradeVirtualMachine(UpgradeVMCmd cmd) throws ResourceAllocationE UserVmVO userVm = _vmDao.findById(vmId); generateUsageEvent( userVm, userVm.isDisplayVm(), EventTypes.EVENT_VM_UPGRADE); - resizeVolumeWithNewOfferings(vmInstance, newServiceOffering); - return userVm; } @@ -1141,7 +1141,7 @@ private UserVm upgradeStoppedVirtualMachine(Long vmId, Long svcOffId, Map