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
