Liron Ar has uploaded a new change for review.

Change subject: core: export vm - perform space checks only for relevant disks
......................................................................

core: export vm - perform space checks only for relevant disks

Currently the space check on export vm will be done for the image disks,
including shareable and snapshot disks that aren't part of the export.
In this patch the check is changed so that the needed space would be
checked only for the exported disks.

Change-Id: I8d7b8eae635ac88af5c3e1ffbe08be7fcdf9da72
Signed-off-by: Liron Aravot <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java
2 files changed, 23 insertions(+), 7 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/56/20756/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java
index 58b9a4a..3e3f169 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ExportVmCommand.java
@@ -96,8 +96,8 @@
 
         // load the disks of vm from database
         VmHandler.updateDisksFromDb(getVm());
-
-        DiskImagesValidator diskImagesValidator = new 
DiskImagesValidator(getDisksBasedOnImage());
+        List<DiskImage> disksForExport = getDisksBasedOnImage();
+        DiskImagesValidator diskImagesValidator = new 
DiskImagesValidator(disksForExport);
         if (!validate(diskImagesValidator.diskImagesNotIllegal()) ||
                 !validate(diskImagesValidator.diskImagesNotLocked())) {
             return false;
@@ -123,16 +123,17 @@
             }
         }
 
-        Map<Guid, ? extends Disk> images = getVm().getDiskMap();
+
         // check that the images requested format are valid (COW+Sparse)
         if 
(!ImagesHandler.checkImagesConfiguration(getParameters().getStorageDomainId(),
-                new ArrayList<Disk>(images.values()),
+                disksForExport,
                 getReturnValue().getCanDoActionMessages())) {
             return false;
         }
 
+        Map<Guid, ? extends Disk> images = getVm().getDiskMap();
         if (getParameters().getCopyCollapse()) {
-            for (DiskImage img : getDisksBasedOnImage()) {
+            for (DiskImage img : disksForExport) {
                 if (images.containsKey(img.getId())) {
                     // check that no RAW format exists (we are in collapse 
mode)
                     if (((DiskImage) 
images.get(img.getId())).getVolumeFormat() == VolumeFormat.RAW
@@ -154,7 +155,7 @@
         snapshotsWithMemory = getSnapshotsToBeExportedWithMemory();
 
         // check destination storage have free space
-        int sizeInGB = (int) getVm().getActualDiskWithSnapshotsSize() + 
getTotalMemoryStatesSizeGb();
+        int sizeInGB = (int) 
ImagesHandler.sumImagesTotalSizeWithSnapshotSize(disksForExport) + 
getTotalMemoryStatesSizeGb();
         if (!doesStorageDomainhaveSpaceForRequest(getStorageDomain(), 
sizeInGB)) {
             return false;
         }
@@ -166,7 +167,7 @@
                 && validate(snapshotValidator.vmNotInPreview(getVmId()))
                 && validate(new VmValidator(getVm()).vmDown())
                 && validate(new 
MultipleStorageDomainsValidator(getVm().getStoragePoolId(),
-                
ImagesHandler.getAllStorageIdsForImageIds(getDisksBasedOnImage())).allDomainsExistAndActive())))
 {
+                
ImagesHandler.getAllStorageIdsForImageIds(disksForExport)).allDomainsExistAndActive())))
 {
             return false;
         }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java
index 3b8c2f1..dd2dbf5 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java
@@ -457,6 +457,21 @@
         return result;
     }
 
+    /**
+     * sum and returns the size of the given disks and their snapshots
+     * note: the snapshots of the disks should be loaded prior to calling
+     * this method.
+     * @param diskImages
+     * @return the sum of the given disks size with snapshots
+     */
+    public static double 
sumImagesTotalSizeWithSnapshotSize(Collection<DiskImage> diskImages) {
+        double sum = 0;
+        for (DiskImage diskImage : diskImages) {
+            sum += diskImage.getActualDiskWithSnapshotsSize();
+        }
+        return sum;
+    }
+
     public static List<DiskImage> getPluggedActiveImagesForVm(Guid vmId) {
         return 
filterImageDisks(DbFacade.getInstance().getDiskDao().getAllForVm(vmId, true), 
true, false, true);
     }


-- 
To view, visit http://gerrit.ovirt.org/20756
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8d7b8eae635ac88af5c3e1ffbe08be7fcdf9da72
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Liron Ar <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to