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