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 <lara...@redhat.com>
---
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, 22 insertions(+), 7 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/12/21112/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 bb55337..af48456 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 baa82f3..fb3ae28 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,20 @@
         return result;
     }
 
+    /**
+     * Sum and return the size of the given disks and their snapshots
+     * Note: This method assumes that the given {@diskImages} are already 
loaded with their snapshots.
+     * @param the disk images for size summing
+     * @return The total size taken by the disks and their 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/21112
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8d7b8eae635ac88af5c3e1ffbe08be7fcdf9da72
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.3
Gerrit-Owner: Liron Ar <lara...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to