From da7689ec7435979da4ae5cb05608b4f40de77f6d Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Mon, 1 Feb 2021 15:38:43 +0530 Subject: [PATCH 1/2] server: fix root disk size on vm reset On resize of ROOT volume add detail in the VM for `rootdisksize` which will allow resizing root disk when VM reset is performed. Signed-off-by: Abhishek Kumar --- .../java/com/cloud/storage/VolumeApiServiceImpl.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java index 1d442306955e..32107588da5b 100644 --- a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java +++ b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java @@ -175,6 +175,7 @@ import com.cloud.vm.VmWorkSerializer; import com.cloud.vm.VmWorkTakeVolumeSnapshot; import com.cloud.vm.dao.UserVmDao; +import com.cloud.vm.dao.UserVmDetailsDao; import com.cloud.vm.dao.VMInstanceDao; import com.cloud.vm.snapshot.VMSnapshotVO; import com.cloud.vm.snapshot.dao.VMSnapshotDao; @@ -214,6 +215,8 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic @Inject private UserVmDao _userVmDao; @Inject + private UserVmDetailsDao userVmDetailsDao; + @Inject private UserVmService _userVmService; @Inject private VolumeDataStoreDao _volumeStoreDao; @@ -901,9 +904,10 @@ public VolumeVO resizeVolume(ResizeVolumeCmd cmd) throws ResourceAllocationExcep HypervisorType hypervisorType = _volsDao.getHypervisorType(volume.getId()); - if (hypervisorType != HypervisorType.KVM && hypervisorType != HypervisorType.XenServer && hypervisorType != HypervisorType.VMware && hypervisorType != HypervisorType.Any + if (hypervisorType != HypervisorType.KVM && hypervisorType != HypervisorType.XenServer + && hypervisorType != HypervisorType.VMware && hypervisorType != HypervisorType.Any && hypervisorType != HypervisorType.None) { - throw new InvalidParameterValueException("Hypervisor " + hypervisorType + " does not support rootdisksize override"); + throw new InvalidParameterValueException("Hypervisor " + hypervisorType + " does not support volume resize"); } if (volume.getState() != Volume.State.Ready && volume.getState() != Volume.State.Allocated) { @@ -1255,6 +1259,10 @@ private VolumeVO orchestrateResizeVolume(long volumeId, long currentSize, long n } _volsDao.update(volume.getId(), volume); + if (userVm != null && Volume.Type.ROOT.equals(volume.getVolumeType())) { + Long sizeInGB = newSize / (1024 * 1024 * 1024); + userVmDetailsDao.addDetail(userVm.getId(), VmDetailConstants.ROOT_DISK_SIZE, String.valueOf(sizeInGB), true); + } /* Update resource count for the account on primary storage resource */ if (!shrinkOk) { From fbfb1f463a4c568d1bbb69fceadfd748b019117d Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Mon, 29 Mar 2021 11:07:18 +0530 Subject: [PATCH 2/2] Resize root disk to original disk size (template size) if root disk size wasn't overridden during deployment --- .../main/java/com/cloud/storage/VolumeApiServiceImpl.java | 4 ---- server/src/main/java/com/cloud/vm/UserVmManagerImpl.java | 6 ++++++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java index 32107588da5b..44c74a191bc3 100644 --- a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java +++ b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java @@ -1259,10 +1259,6 @@ private VolumeVO orchestrateResizeVolume(long volumeId, long currentSize, long n } _volsDao.update(volume.getId(), volume); - if (userVm != null && Volume.Type.ROOT.equals(volume.getVolumeType())) { - Long sizeInGB = newSize / (1024 * 1024 * 1024); - userVmDetailsDao.addDetail(userVm.getId(), VmDetailConstants.ROOT_DISK_SIZE, String.valueOf(sizeInGB), true); - } /* Update resource count for the account on primary storage resource */ if (!shrinkOk) { diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index a084d63eb399..d64599b04712 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -6678,6 +6678,12 @@ public UserVm restoreVirtualMachine(final Account caller, final long vmId, final newVol = volumeMgr.allocateDuplicateVolume(root, null); } + if (userVmDetailsDao.findDetail(vm.getId(), VmDetailConstants.ROOT_DISK_SIZE) == null && !newVol.getSize().equals(template.getSize())) { + VolumeVO resizedVolume = (VolumeVO) newVol; + resizedVolume.setSize(template.getSize()); + _volsDao.update(resizedVolume.getId(), resizedVolume); + } + // 1. Save usage event and update resource count for user vm volumes _resourceLimitMgr.incrementResourceCount(newVol.getAccountId(), ResourceType.volume, newVol.isDisplay()); _resourceLimitMgr.incrementResourceCount(newVol.getAccountId(), ResourceType.primary_storage, newVol.isDisplay(), new Long(newVol.getSize()));