Sergey Gotliv has uploaded a new change for review.

Change subject: [wip]engine: Removes not used image groups after snapshot 
removal
......................................................................

[wip]engine: Removes not used image groups after snapshot removal

Change-Id: I07928bc8ff4225055586b96e47d3787d741a95b4
Bug-Url: https://bugzilla.redhat.com/987994
Signed-off-by: Sergey Gotliv <sgot...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreAllSnapshotsCommand.java
1 file changed, 32 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/47/18647/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreAllSnapshotsCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreAllSnapshotsCommand.java
index 1b2479b..2304cdc 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreAllSnapshotsCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreAllSnapshotsCommand.java
@@ -111,6 +111,7 @@
         }
 
         removeSnapshotsFromDB();
+        removeNotUsedImageGroups();
 
         if (!getTaskIdList().isEmpty()) {
             deleteOrphanedImages();
@@ -158,6 +159,37 @@
         }
     }
 
+    private void removeNotUsedImageGroups() {
+        Set<Guid> imageGroupIdsUsedByActiveSnapshot = new HashSet<>();
+        for (DiskImage diskImage : getImagesList()) {
+            imageGroupIdsUsedByActiveSnapshot.add(diskImage.getId());
+        }
+
+        List<DiskImage> imageGroupsToRemove = new ArrayList<>();
+        for (Guid snapshotToRemove : snapshotsToRemove) {
+            List<DiskImage> snapshotDiskImages = 
getDiskImageDao().getAllSnapshotsForVmSnapshot(snapshotToRemove);
+            imageGroupsToRemove.addAll(snapshotDiskImages);
+        }
+
+        Set<Guid> removeInProcessImageGroupsIds = new HashSet<>();
+        for (DiskImage diskImage : imageGroupsToRemove) {
+            if (imageGroupIdsUsedByActiveSnapshot.contains(diskImage.getId()) 
||
+                    removeInProcessImageGroupsIds.contains(diskImage.getId())) 
{
+                continue;
+            }
+
+            // This command responsible to delete the entire image group
+            VdcReturnValueBase retValue = 
runAsyncTask(VdcActionType.RemoveImage,
+                    new RemoveImageParameters(diskImage.getImageId()));
+
+            if (retValue.getSucceeded()) {
+                removeInProcessImageGroupsIds.add(diskImage.getImageId());
+            } else {
+                log.infoFormat("Failed to remove image <{0}>", 
diskImage.getImageId());
+            }
+        }
+    }
+
     /**
      * Run the given command as async task, which includes these steps:
      * <ul>


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

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

Reply via email to