mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
server: fix on changeServiceForVirtualMachine when updating read/write rate (#4491)
When changing the service offering of a VM the disk_offering_id is not updated in volumes DB table and VM could not start Fixes #4125
This commit is contained in:
parent
b84a675de9
commit
4a779deab2
@ -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<VolumeVO> 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<VolumeVO> 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 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user