Daniel Erez has uploaded a new change for review. Change subject: core: extract PrepareSnapshotConfig method to ImagesHandler ......................................................................
core: extract PrepareSnapshotConfig method to ImagesHandler Extracted PrepareSnapshotConfigWithoutImageSingleImage from BaseImagesCommand into ImagesHandler for reusability in other commands. Change-Id: I8c5e8d2763df3bcf18fb13a030148de352f57846 Bug-Url: https://bugzilla.redhat.com/1056935 Signed-off-by: Daniel Erez <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/BaseImagesCommand.java 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 M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveImageCommandTest.java 5 files changed, 55 insertions(+), 50 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/10/27610/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/BaseImagesCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/BaseImagesCommand.java index fa61bd5..089f282 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/BaseImagesCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/BaseImagesCommand.java @@ -1,9 +1,7 @@ package org.ovirt.engine.core.bll; -import java.util.ArrayList; import java.util.Collections; import java.util.Date; -import java.util.Iterator; import java.util.List; import java.util.Map; @@ -11,17 +9,14 @@ import org.ovirt.engine.core.bll.context.CompensationContext; import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator; import org.ovirt.engine.core.bll.storage.StorageDomainCommandBase; -import org.ovirt.engine.core.bll.utils.ClusterUtils; import org.ovirt.engine.core.common.action.ImagesActionsParametersBase; import org.ovirt.engine.core.common.action.ImagesContainterParametersBase; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.DiskImageDynamic; import org.ovirt.engine.core.common.businessentities.ImageStatus; -import org.ovirt.engine.core.common.businessentities.Snapshot; import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotType; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.image_storage_domain_map; -import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.common.errors.VdcBLLException; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.common.locks.LockingGroup; @@ -36,8 +31,6 @@ import org.ovirt.engine.core.dao.ImageDao; import org.ovirt.engine.core.dao.SnapshotDao; import org.ovirt.engine.core.utils.lock.EngineLock; -import org.ovirt.engine.core.utils.ovf.OvfManager; -import org.ovirt.engine.core.utils.ovf.OvfReaderException; /** * Base class for all image handling commands @@ -413,44 +406,5 @@ LockMessagesMatchUtil.makeLockingPair(LockingGroup.VM_SNAPSHOTS, VdcBllMessages.ACTION_TYPE_FAILED_OBJECT_LOCKED)); snapshotsEngineLock.setExclusiveLocks(snapshotsExlusiveLockMap); getLockManager().acquireLockWait(snapshotsEngineLock); - } - - /** - * Prepare a single {@link org.ovirt.engine.core.common.businessentities.Snapshot} object representing a snapshot of a given VM without the give disk. - */ - protected Snapshot prepareSnapshotConfigWithoutImageSingleImage(Guid vmSnapshotId, Guid imageId) { - Snapshot snap = null; - try { - OvfManager ovfManager = new OvfManager(); - snap = getSnapshotDao().get(vmSnapshotId); - String snapConfig = snap.getVmConfiguration(); - - if (snap.isVmConfigurationAvailable() && snapConfig != null) { - VM vmSnapshot = new VM(); - ArrayList<DiskImage> snapshotImages = new ArrayList<DiskImage>(); - - ovfManager.ImportVm(snapConfig, - vmSnapshot, - snapshotImages, - new ArrayList<VmNetworkInterface>()); - - // Remove the image form the disk list - Iterator<DiskImage> diskIter = snapshotImages.iterator(); - while (diskIter.hasNext()) { - DiskImage imageInList = diskIter.next(); - if (imageInList.getImageId().equals(imageId)) { - log.debugFormat("Recreating vmSnapshot {0} without the image {1}", vmSnapshotId, imageId); - diskIter.remove(); - break; - } - } - - String newOvf = ovfManager.ExportVm(vmSnapshot, snapshotImages, ClusterUtils.getCompatibilityVersion(vmSnapshot)); - snap.setVmConfiguration(newOvf); - } - } catch (OvfReaderException e) { - log.errorFormat("Can't remove image {0} from snapshot {1}", imageId, vmSnapshotId); - } - return snap; } } 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 db2f0fe..f110eff 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 @@ -6,6 +6,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -13,6 +14,7 @@ import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.context.CompensationContext; import org.ovirt.engine.core.bll.storage.StorageHelperDirector; +import org.ovirt.engine.core.bll.utils.ClusterUtils; import org.ovirt.engine.core.bll.utils.VmDeviceUtils; import org.ovirt.engine.core.bll.validator.StorageDomainValidator; import org.ovirt.engine.core.common.businessentities.BaseDisk; @@ -25,6 +27,7 @@ import org.ovirt.engine.core.common.businessentities.ImageStatus; import org.ovirt.engine.core.common.businessentities.LUNs; import org.ovirt.engine.core.common.businessentities.LunDisk; +import org.ovirt.engine.core.common.businessentities.Snapshot; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; @@ -37,6 +40,7 @@ import org.ovirt.engine.core.common.businessentities.VolumeFormat; import org.ovirt.engine.core.common.businessentities.VolumeType; import org.ovirt.engine.core.common.businessentities.image_storage_domain_map; +import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.common.errors.VdcBLLException; import org.ovirt.engine.core.common.errors.VdcBllErrors; import org.ovirt.engine.core.common.errors.VdcBllMessages; @@ -50,6 +54,8 @@ import org.ovirt.engine.core.utils.collections.MultiValueMapUtils; import org.ovirt.engine.core.utils.log.Log; import org.ovirt.engine.core.utils.log.LogFactory; +import org.ovirt.engine.core.utils.ovf.OvfManager; +import org.ovirt.engine.core.utils.ovf.OvfReaderException; import org.ovirt.engine.core.utils.transaction.TransactionMethod; import org.ovirt.engine.core.utils.transaction.TransactionSupport; @@ -766,4 +772,49 @@ } return intersection; } + + public static Snapshot prepareSnapshotConfigWithoutImageSingleImage(Guid vmSnapshotId, Guid imageId) { + Snapshot snapshot = DbFacade.getInstance().getSnapshotDao().get(vmSnapshotId); + if (snapshot == null) { + log.errorFormat("Can't remove image {0} from snapshot {1}", imageId, vmSnapshotId); + } + return prepareSnapshotConfigWithoutImageSingleImage(snapshot, imageId); + } + + /** + * Prepare a single {@link org.ovirt.engine.core.common.businessentities.Snapshot} object representing a snapshot of a given VM without the give disk. + */ + public static Snapshot prepareSnapshotConfigWithoutImageSingleImage(Snapshot snapshot, Guid imageId) { + try { + OvfManager ovfManager = new OvfManager(); + String snapConfig = snapshot.getVmConfiguration(); + + if (snapshot.isVmConfigurationAvailable() && snapConfig != null) { + VM vmSnapshot = new VM(); + ArrayList<DiskImage> snapshotImages = new ArrayList<DiskImage>(); + + ovfManager.ImportVm(snapConfig, + vmSnapshot, + snapshotImages, + new ArrayList<VmNetworkInterface>()); + + // Remove the image form the disk list + Iterator<DiskImage> diskIter = snapshotImages.iterator(); + while (diskIter.hasNext()) { + DiskImage imageInList = diskIter.next(); + if (imageInList.getImageId().equals(imageId)) { + log.debugFormat("Recreating vmSnapshot {0} without the image {1}", snapshot.getId(), imageId); + diskIter.remove(); + break; + } + } + + String newOvf = ovfManager.ExportVm(vmSnapshot, snapshotImages, ClusterUtils.getCompatibilityVersion(vmSnapshot)); + snapshot.setVmConfiguration(newOvf); + } + } catch (OvfReaderException e) { + log.errorFormat("Can't remove image {0} from snapshot {1}", imageId, snapshot.getId()); + } + return snapshot; + } } 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 3599d13..645cfef 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 @@ -171,7 +171,7 @@ protected void updateSnapshotVmConfiguration() { Guid imageId = getParameters().getImageIds().get(getParameters().getExecutionIndex()); - Snapshot snapshotWithoutImage = prepareSnapshotConfigWithoutImageSingleImage(getSnapshotId(), imageId); + Snapshot snapshotWithoutImage = ImagesHandler.prepareSnapshotConfigWithoutImageSingleImage(getSnapshotId(), imageId); getSnapshotDao().update(snapshotWithoutImage); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java index 913fb8b..6bfc71c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveImageCommand.java @@ -231,7 +231,7 @@ Guid vmSnapshotId = snapshotDisk.getVmSnapshotId(); if (vmSnapshotId != null && !Guid.Empty.equals(vmSnapshotId)) { Snapshot updated = - prepareSnapshotConfigWithoutImageSingleImage(vmSnapshotId, + ImagesHandler.prepareSnapshotConfigWithoutImageSingleImage(vmSnapshotId, snapshotDisk.getImageId()); if (updated != null) { result.add(updated); diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveImageCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveImageCommandTest.java index 39a543e..58b2986 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveImageCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RemoveImageCommandTest.java @@ -112,7 +112,7 @@ doReturn(disk2).when(cmd).getDiskImage(); doReturn(disk2).when(cmd).getImage(); doReturn(disk2.getId()).when(cmd).getImageId(); - Snapshot actual = cmd.prepareSnapshotConfigWithoutImageSingleImage(vmSnapshotId, disk2.getImageId()); + Snapshot actual = ImagesHandler.prepareSnapshotConfigWithoutImageSingleImage(snap, disk2.getImageId()); String actualOvf = actual.getVmConfiguration(); ArrayList<DiskImage> actualImages = new ArrayList<DiskImage>(); @@ -146,7 +146,7 @@ doReturn(disk2).when(cmd).getDiskImage(); doReturn(disk2).when(cmd).getImage(); doReturn(disk2.getId()).when(cmd).getImageId(); - Snapshot actual = cmd.prepareSnapshotConfigWithoutImageSingleImage(vmSnapshotId, disk2.getImageId()); + Snapshot actual = ImagesHandler.prepareSnapshotConfigWithoutImageSingleImage(snap, disk2.getImageId()); String actualOvf = actual.getVmConfiguration(); ArrayList<DiskImage> actualImages = new ArrayList<DiskImage>(); -- To view, visit http://gerrit.ovirt.org/27610 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I8c5e8d2763df3bcf18fb13a030148de352f57846 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Daniel Erez <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
