Daniel Erez has uploaded a new change for review.

Change subject: core: RemoveDiskSnapshots - sort images from parent to leaf
......................................................................

core: RemoveDiskSnapshots - sort images from parent to leaf

When removing multiple disk snapshots that belongs to the same disk,
the images should be sorted from parent to leaf (active).
Sorting is needed since removing a child image and a parent image
afterwards, might be invalid - as the parent will point to another child
and when deletion is done in consecutive order there's a race condition
between DB update and removing next parent.

Change-Id: I759537f7c32fc9b19a968f32767bba633f3f3366
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/ImagesHandler.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDiskSnapshotsCommand.java
2 files changed, 24 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/41/34141/1

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 d29ed85..8dc6eb8 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
@@ -242,6 +242,22 @@
     }
 
     /**
+     * Returns a collection of image IDs by a specified DiskImages collection
+     *
+     * @param diskImages collection of DiskImages
+     * @return list of image IDs
+     */
+    public static Collection<Guid> getDiskImageIds(Collection<DiskImage> 
diskImages) {
+        Collection<Guid> result = new ArrayList<>();
+        if (diskImages != null) {
+            for (DiskImage diskImage : diskImages) {
+                result.add(diskImage.getImageId());
+            }
+        }
+        return result;
+    }
+
+    /**
      * Adds a disk image (Adds image, disk, and relevant entities , but not 
VmDevice) This may be useful for Clone VMs,
      * where besides adding images it is required to copy all vm devices 
(VmDeviceUtils.copyVmDevices) from the source
      * VM
@@ -608,7 +624,7 @@
         return retVal;
     }
 
-    private static void sortImageList(List<DiskImage> images) {
+    public static void sortImageList(List<DiskImage> images) {
         List<DiskImage> hold = new ArrayList<DiskImage>();
         DiskImage curr = null;
 
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 365a097..40346c1 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
@@ -167,6 +167,13 @@
     protected List<SPMAsyncTaskHandler> initTaskHandlers() {
         List<SPMAsyncTaskHandler> taskHandlers = new ArrayList<>();
 
+        // 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())));
+        }
+
         for (Guid imageId : getParameters().getImageIds()) {
             taskHandlers.add(new RemoveDiskSnapshotTaskHandler(this, imageId, 
getImageGroupId(), getVmId()));
         }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I759537f7c32fc9b19a968f32767bba633f3f3366
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
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