Arik Hadas has uploaded a new change for review. Change subject: core: extract disk clone creation ......................................................................
core: extract disk clone creation Extract creation of cloned image to ImagesHandler 1. It can be considered to be a utility method for disk image 2. It can be used for create template from snapshot as well Change-Id: If2ad5fff400942b4786a58e0210bc5b3d2b7d8b4 Signed-off-by: Arik Hadas <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndCloneImageCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java 2 files changed, 59 insertions(+), 52 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/28/41028/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndCloneImageCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndCloneImageCommand.java index adc1c59..3652d97 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndCloneImageCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndCloneImageCommand.java @@ -2,7 +2,6 @@ import java.util.ArrayList; import java.util.Collection; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -74,12 +73,14 @@ Guid destStorageDomainId, Guid diskProfileId, VdcActionType parentCommandType) { - DiskImage newDiskImage = cloneDiskImage(getVmId(), + DiskImage newDiskImage = ImagesHandler.cloneDiskImage(getVmId(), destStorageDomainId, Guid.newGuid(), Guid.newGuid(), diskImage, - diskProfileId); + diskProfileId, + getVmSnapshotId(), + diskInfoDestinationMap != null ? diskInfoDestinationMap.get(diskImage.getId()) : null); ImagesHandler.setDiskAlias(newDiskImage, getVm()); MoveOrCopyImageGroupParameters parameters = createCopyParameters(newDiskImage, srcStorageDomainId, @@ -178,54 +179,6 @@ .getStorageStaticData(), diskImage, getReturnValue().getCanDoActionMessages()); - } - - protected DiskImage cloneDiskImage(Guid newVmId, - Guid storageDomainId, - Guid newImageGroupId, - Guid newImageGuid, - DiskImage srcDiskImage, - Guid diskProfileId) { - - DiskImage clonedDiskImage = DiskImage.copyOf(srcDiskImage); - clonedDiskImage.setImageId(newImageGuid); - clonedDiskImage.setParentId(Guid.Empty); - clonedDiskImage.setImageTemplateId(Guid.Empty); - clonedDiskImage.setVmSnapshotId(getVmSnapshotId()); - clonedDiskImage.setId(newImageGroupId); - clonedDiskImage.setLastModifiedDate(new Date()); - clonedDiskImage.setvolumeFormat(srcDiskImage.getVolumeFormat()); - clonedDiskImage.setVolumeType(srcDiskImage.getVolumeType()); - ArrayList<Guid> storageIds = new ArrayList<Guid>(); - storageIds.add(storageDomainId); - clonedDiskImage.setStorageIds(storageIds); - clonedDiskImage.setDiskProfileId(diskProfileId); - - // If volume information was changed at client , use its volume information. - // If volume information was not changed at client - use the volume information of the ancestral image - if (diskInfoDestinationMap != null && diskInfoDestinationMap.containsKey(srcDiskImage.getId())) { - DiskImage diskImageFromClient = diskInfoDestinationMap.get(srcDiskImage.getId()); - if (volumeInfoChanged(diskImageFromClient, srcDiskImage)) { - changeVolumeInfo(clonedDiskImage, diskImageFromClient); - } else { - DiskImage ancestorDiskImage = getDiskImageDao().getAncestor(srcDiskImage.getImageId()); - changeVolumeInfo(clonedDiskImage, ancestorDiskImage); - } - } else { - DiskImage ancestorDiskImage = getDiskImageDao().getAncestor(srcDiskImage.getImageId()); - changeVolumeInfo(clonedDiskImage, ancestorDiskImage); - } - - return clonedDiskImage; - } - - private boolean volumeInfoChanged(DiskImage diskImageFromClient, DiskImage srcDiskImage) { - return (diskImageFromClient.getVolumeFormat() != srcDiskImage.getVolumeFormat() || diskImageFromClient.getVolumeType() != srcDiskImage.getVolumeType()); - } - - protected void changeVolumeInfo(DiskImage clonedDiskImage, DiskImage diskImageFromClient) { - clonedDiskImage.setvolumeFormat(diskImageFromClient.getVolumeFormat()); - clonedDiskImage.setVolumeType(diskImageFromClient.getVolumeType()); } /** 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 7c78ba0..1e8b0b5 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 @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -32,11 +33,11 @@ import org.ovirt.engine.core.common.businessentities.storage.BaseDisk; import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; import org.ovirt.engine.core.common.businessentities.storage.Disk; -import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.businessentities.storage.DiskImageBase; import org.ovirt.engine.core.common.businessentities.storage.DiskImageDynamic; import org.ovirt.engine.core.common.businessentities.storage.DiskLunMapId; +import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType; import org.ovirt.engine.core.common.businessentities.storage.ImageStatus; import org.ovirt.engine.core.common.businessentities.storage.ImageStorageDomainMap; import org.ovirt.engine.core.common.businessentities.storage.LUNs; @@ -54,6 +55,7 @@ import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.TransactionScopeOption; import org.ovirt.engine.core.dal.dbbroker.DbFacade; +import org.ovirt.engine.core.dao.DiskImageDAO; import org.ovirt.engine.core.utils.JsonHelper; import org.ovirt.engine.core.utils.collections.MultiValueMapUtils; import org.ovirt.engine.core.utils.ovf.OvfManager; @@ -909,4 +911,56 @@ return diskDummies; } + protected static DiskImage cloneDiskImage(Guid newVmId, + Guid storageDomainId, + Guid newImageGroupId, + Guid newImageGuid, + DiskImage srcDiskImage, + Guid diskProfileId, + Guid snapshotId, + DiskImage diskImageFromClient) { + + DiskImage clonedDiskImage = DiskImage.copyOf(srcDiskImage); + clonedDiskImage.setImageId(newImageGuid); + clonedDiskImage.setParentId(Guid.Empty); + clonedDiskImage.setImageTemplateId(Guid.Empty); + clonedDiskImage.setVmSnapshotId(snapshotId); + clonedDiskImage.setId(newImageGroupId); + clonedDiskImage.setLastModifiedDate(new Date()); + clonedDiskImage.setvolumeFormat(srcDiskImage.getVolumeFormat()); + clonedDiskImage.setVolumeType(srcDiskImage.getVolumeType()); + ArrayList<Guid> storageIds = new ArrayList<Guid>(); + storageIds.add(storageDomainId); + clonedDiskImage.setStorageIds(storageIds); + clonedDiskImage.setDiskProfileId(diskProfileId); + + // If volume information was changed at client , use its volume information. + // If volume information was not changed at client - use the volume information of the ancestral image + if (diskImageFromClient != null) { + if (volumeInfoChanged(diskImageFromClient, srcDiskImage)) { + changeVolumeInfo(clonedDiskImage, diskImageFromClient); + } else { + DiskImage ancestorDiskImage = getDiskImageDao().getAncestor(srcDiskImage.getImageId()); + changeVolumeInfo(clonedDiskImage, ancestorDiskImage); + } + } else { + DiskImage ancestorDiskImage = getDiskImageDao().getAncestor(srcDiskImage.getImageId()); + changeVolumeInfo(clonedDiskImage, ancestorDiskImage); + } + + return clonedDiskImage; + } + + private static DiskImageDAO getDiskImageDao() { + return DbFacade.getInstance().getDiskImageDao(); + } + + private static boolean volumeInfoChanged(DiskImage diskImageFromClient, DiskImage srcDiskImage) { + return (diskImageFromClient.getVolumeFormat() != srcDiskImage.getVolumeFormat() || diskImageFromClient.getVolumeType() != srcDiskImage.getVolumeType()); + } + + protected static void changeVolumeInfo(DiskImage clonedDiskImage, DiskImage diskImageFromClient) { + clonedDiskImage.setvolumeFormat(diskImageFromClient.getVolumeFormat()); + clonedDiskImage.setVolumeType(diskImageFromClient.getVolumeType()); + } } -- To view, visit https://gerrit.ovirt.org/41028 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If2ad5fff400942b4786a58e0210bc5b3d2b7d8b4 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Arik Hadas <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
