This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch 4.19
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.19 by this push:
     new 027149487b5 Fix: Update rootdisksize detail on restore VM (#8981)
027149487b5 is described below

commit 027149487b509be5cccef1b8ea73de7707bc35d7
Author: Vishesh <vishes...@gmail.com>
AuthorDate: Mon Apr 29 22:15:06 2024 +0530

    Fix: Update rootdisksize detail on restore VM (#8981)
    
    * Fix: Update rootdisksize detail on restore VM
    
    * minor fixup
---
 .../main/java/com/cloud/vm/UserVmManagerImpl.java  | 26 +++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java 
b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
index e574d9887c3..4283b44e171 100644
--- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
@@ -7975,17 +7975,25 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
     private void updateVolume(Volume vol, VMTemplateVO template, UserVmVO 
userVm, DiskOffering diskOffering, Map<String, String> details) {
         VolumeVO resizedVolume = (VolumeVO) vol;
 
-        if (userVmDetailsDao.findDetail(userVm.getId(), 
VmDetailConstants.ROOT_DISK_SIZE) == null && 
!vol.getSize().equals(template.getSize())) {
-            if (template.getSize() != null) {
+        if (template != null && template.getSize() != null) {
+            UserVmDetailVO vmRootDiskSizeDetail = 
userVmDetailsDao.findDetail(userVm.getId(), VmDetailConstants.ROOT_DISK_SIZE);
+            if (vmRootDiskSizeDetail == null) {
                 resizedVolume.setSize(template.getSize());
+            } else {
+                long rootDiskSize = 
Long.parseLong(vmRootDiskSizeDetail.getValue()) * GiB_TO_BYTES;
+                if (template.getSize() >= rootDiskSize) {
+                    resizedVolume.setSize(template.getSize());
+                    userVmDetailsDao.remove(vmRootDiskSizeDetail.getId());
+                } else {
+                    resizedVolume.setSize(rootDiskSize);
+                }
             }
         }
 
         if (diskOffering != null) {
             resizedVolume.setDiskOfferingId(diskOffering.getId());
-            resizedVolume.setSize(diskOffering.getDiskSize());
-            if (diskOffering.isCustomized()) {
-                resizedVolume.setSize(vol.getSize());
+            if (!diskOffering.isCustomized()) {
+                resizedVolume.setSize(diskOffering.getDiskSize());
             }
             if (diskOffering.getMinIops() != null) {
                 resizedVolume.setMinIops(diskOffering.getMinIops());
@@ -7999,6 +8007,14 @@ public class UserVmManagerImpl extends ManagerBase 
implements UserVmManager, Vir
             if 
(StringUtils.isNumeric(details.get(VmDetailConstants.ROOT_DISK_SIZE))) {
                 Long rootDiskSize = 
Long.parseLong(details.get(VmDetailConstants.ROOT_DISK_SIZE)) * GiB_TO_BYTES;
                 resizedVolume.setSize(rootDiskSize);
+                UserVmDetailVO vmRootDiskSizeDetail = 
userVmDetailsDao.findDetail(userVm.getId(), VmDetailConstants.ROOT_DISK_SIZE);
+                if (vmRootDiskSizeDetail != null) {
+                    
vmRootDiskSizeDetail.setValue(details.get(VmDetailConstants.ROOT_DISK_SIZE));
+                    userVmDetailsDao.update(vmRootDiskSizeDetail.getId(), 
vmRootDiskSizeDetail);
+                } else {
+                    userVmDetailsDao.persist(new 
UserVmDetailVO(userVm.getId(), VmDetailConstants.ROOT_DISK_SIZE,
+                            details.get(VmDetailConstants.ROOT_DISK_SIZE), 
true));
+                }
             }
 
             String minIops = details.get(MIN_IOPS);

Reply via email to