diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index fe8d8a45bcb..20c7930d379 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 class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir // 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. @@ -1139,19 +1141,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir // Check that the specified service offering ID is valid _itMgr.checkIfCanUpgrade(vmInstance, newServiceOffering); - DiskOfferingVO newROOTDiskOffering = _diskOfferingDao.findById(newServiceOffering.getId()); - - List 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); - } + resizeRootVolumeOfVmWithNewOffering(vmInstance, newServiceOffering); // Check if the new service offering can be applied to vm instance ServiceOffering newSvcOffering = _offeringDao.findById(svcOffId); @@ -1177,6 +1167,23 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir } + private void resizeRootVolumeOfVmWithNewOffering(VMInstanceVO vmInstance, ServiceOfferingVO newServiceOffering) + throws ResourceAllocationException { + DiskOfferingVO newROOTDiskOffering = _diskOfferingDao.findById(newServiceOffering.getId()); + + List vols = _volsDao.findReadyRootVolumesByInstance(vmInstance.getId()); + + for (final VolumeVO rootVolumeOfVm : vols) { + rootVolumeOfVm.setDiskOfferingId(newROOTDiskOffering.getId()); + + ResizeVolumeCmd resizeVolumeCmd = new ResizeVolumeCmd(rootVolumeOfVm.getId(), newROOTDiskOffering.getMinIops(), newROOTDiskOffering.getMaxIops()); + + _volumeService.resizeVolume(resizeVolumeCmd); + + _volsDao.update(rootVolumeOfVm.getId(), rootVolumeOfVm); + } + } + @Override @ActionEvent(eventType = EventTypes.EVENT_NIC_CREATE, eventDescription = "Creating Nic", async = true) public UserVm addNicToVirtualMachine(AddNicToVMCmd cmd) throws InvalidParameterValueException, PermissionDeniedException, CloudRuntimeException {