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

Reply via email to