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