Liron Ar has uploaded a new change for review. Change subject: core: export vm/create template shouldn't include ILLEGAL disks ......................................................................
core: export vm/create template shouldn't include ILLEGAL disks When exporting a VM/Creating a template - ignore image disks which are in ILLEGAL status, this prevents the following: *additional vdsm commands *possible status change from ILLEGAL to ok *failure of the entire operation In this patch I changed the filtering method in ImagesHandler so it'll be able to filter out ILLEGAL disks and used it in the following commands. I kept the signature of the previous call for "backward" compatibility to avoid possible regressions till full refactor will be done around the ILLEGAL status. Change-Id: I6e608c0c87c6e3a8d275fd74658b888cde6c8694 Bug-Url: https://bugzilla.redhat.com/921489 Signed-off-by: Liron Aravot <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java 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 3 files changed, 21 insertions(+), 9 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/03/13203/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java index 3d6cd7c..bcd19318 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java @@ -154,9 +154,9 @@ addCanDoActionMessage(VdcBllMessages.VDS_CLUSTER_IS_NOT_VALID); return false; } - for (DiskImage diskImage : getVm().getDiskList()) { - mImages.add(diskImage); - } + + mImages.addAll(ImagesHandler.filterImageDisks(getVm().getDiskList(), false, false, false)); + if (!VmHandler.isMemorySizeLegal(getParameters().getMasterVm().getOs(), getParameters().getMasterVm().getMemSizeMb(), getReturnValue().getCanDoActionMessages(), getVdsGroup().getcompatibility_version().toString())) { @@ -256,7 +256,7 @@ Map<StorageDomain, Integer> domainMap = StorageDomainValidator.getSpaceRequirementsForStorageDomains( - ImagesHandler.filterImageDisks(getVm().getDiskMap().values(), true, false), + ImagesHandler.filterImageDisks(getVm().getDiskMap().values(), true, false, false), storageDomains, diskInfoDestinationMap); for (Map.Entry<StorageDomain, Integer> entry : domainMap.entrySet()) { 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 337f365..7f2712f 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 @@ -118,14 +118,15 @@ } } - 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()), + new ArrayList<Disk>(getDisksBasedOnImage()), getReturnValue().getCanDoActionMessages())) { return false; } + Map<Guid, ? extends Disk> images = getVm().getDiskMap(); if (getParameters().getCopyCollapse()) { for (DiskImage img : getDisksBasedOnImage()) { if (images.containsKey(img.getId())) { @@ -277,7 +278,7 @@ private Collection<DiskImage> getDisksBasedOnImage() { if (disksImages == null) { - disksImages = ImagesHandler.filterImageDisks(getVm().getDiskMap().values(), true, false); + disksImages = ImagesHandler.filterImageDisks(getVm().getDiskMap().values(), true, false, false); } return disksImages; } 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 40f4c23..c977e18 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 @@ -656,22 +656,33 @@ * - Indication whether to allow only disks that are not shareable * @param allowOnlySnapableDisks * - Indication whether to allow only disks which are allowed to be snapshoted. + * @param allowIllegalDisks + * - Indication whether to allow only image disks which are in ILLEGAL status. * @return - List filtered of disk images. */ public static List<DiskImage> filterImageDisks(Collection<? extends Disk> listOfDisks, boolean allowOnlyNotShareableDisks, - boolean allowOnlySnapableDisks) { + boolean allowOnlySnapableDisks, boolean allowIllegalDisks) { List<DiskImage> diskImages = new ArrayList<DiskImage>(); for (Disk disk : listOfDisks) { if (disk.getDiskStorageType() == DiskStorageType.IMAGE && (!allowOnlyNotShareableDisks || !disk.isShareable()) && (!allowOnlySnapableDisks || disk.isAllowSnapshot())) { - diskImages.add((DiskImage) disk); + DiskImage diskImage = (DiskImage) disk; + if (allowIllegalDisks || diskImage.getImageStatus() != ImageStatus.ILLEGAL){ + diskImages.add(diskImage); + } } } return diskImages; } + public static List<DiskImage> filterImageDisks(Collection<? extends Disk> listOfDisks, + boolean allowOnlyNotShareableDisks, + boolean allowOnlySnapableDisks) { + return filterImageDisks(listOfDisks, allowOnlyNotShareableDisks, allowOnlySnapableDisks, true); + } + public static List<LunDisk> filterDiskBasedOnLuns(Collection<Disk> listOfDisks) { List<LunDisk> lunDisks = new ArrayList<LunDisk>(); for (Disk disk : listOfDisks) { -- To view, visit http://gerrit.ovirt.org/13203 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I6e608c0c87c6e3a8d275fd74658b888cde6c8694 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
