Daniel Erez has uploaded a new change for review.

Change subject: core: RemoveDiskSnapshots - sort non-consecutive images
......................................................................

core: RemoveDiskSnapshots - sort non-consecutive images

RemoveDiskSnapshots -> initTaskHandlers:
fix images sorting in case of non consecutive images
(e.g. image_index_0, image_index_3, image_index_7).

Change-Id: Ia736aa93a76dd8df13bfdcf97587cee82bea6700
Bug-Url: https://bugzilla.redhat.com/1151841
Signed-off-by: Daniel Erez <de...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskSnapshotsCommand.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveDiskSnapshotsCommandTest.java
2 files changed, 36 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/80/34380/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskSnapshotsCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskSnapshotsCommand.java
index 40346c1..fd27f18 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskSnapshotsCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskSnapshotsCommand.java
@@ -6,6 +6,8 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.Predicate;
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
 import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
@@ -96,6 +98,13 @@
         return images;
     }
 
+    /**
+     * Returns the images chain of the disk.
+     */
+    protected List<DiskImage> getAllImages() {
+        return 
getDiskImageDao().getAllSnapshotsForImageGroup(getImageGroupId());
+    }
+
     protected SnapshotsValidator getSnapshotsValidator() {
         if (snapshotsValidator == null) {
             snapshotsValidator = new SnapshotsValidator();
@@ -170,8 +179,16 @@
         // Sort images from parent to leaf (active) - needed only on first 
task handler
         // as the sorted list is being saved in the parameters.
         if (isFirstTaskHandler()) {
-            ImagesHandler.sortImageList(getImages());
-            getParameters().setImageIds(new 
ArrayList<>(ImagesHandler.getDiskImageIds(getImages())));
+            // Retrieve and sort the entire chain of images
+            ImagesHandler.sortImageList(getAllImages());
+            // Get a sorted list of the selected images
+            CollectionUtils.filter(images, new Predicate() {
+                @Override
+                public boolean evaluate(Object image) {
+                    return getImages().contains(image);
+                }
+            });
+            getParameters().setImageIds(new 
ArrayList<>(ImagesHandler.getDiskImageIds(images)));
         }
 
         for (Guid imageId : getParameters().getImageIds()) {
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveDiskSnapshotsCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveDiskSnapshotsCommandTest.java
index 579ffb0..dad1e33 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveDiskSnapshotsCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveDiskSnapshotsCommandTest.java
@@ -77,6 +77,7 @@
     private static final Guid STORAGE_POOLD_ID = Guid.newGuid();
     private static final Guid IMAGE_ID_1 = Guid.newGuid();
     private static final Guid IMAGE_ID_2 = Guid.newGuid();
+    private static final Guid IMAGE_ID_3 = Guid.newGuid();
 
     @Before
     public void setUp() {
@@ -88,6 +89,10 @@
         cmd = spy(new 
RemoveDiskSnapshotsCommand<RemoveDiskSnapshotsParameters>(params) {
             protected List<DiskImage> getImages() {
                 return mockImages();
+            }
+
+            protected List<DiskImage> getAllImages() {
+                return mockAllImages();
             }
         });
 
@@ -149,6 +154,18 @@
         return new ArrayList<>(Arrays.asList(image1, image2));
     }
 
+    private List<DiskImage> mockAllImages() {
+        List<DiskImage> images = mockImages();
+
+        DiskImage image3 = new DiskImage();
+        image3.setImageId(IMAGE_ID_3);
+        image3.setStorageIds(new 
ArrayList<>(Arrays.asList(STORAGE_DOMAIN_ID)));
+
+        images.add(image3);
+
+        return images;
+    }
+
     @Test
     public void testCanDoActionVmUp() {
         prepareForVmValidatorTests();


-- 
To view, visit http://gerrit.ovirt.org/34380
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia736aa93a76dd8df13bfdcf97587cee82bea6700
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Daniel Erez <de...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to