Amit Aviram has uploaded a new change for review. Change subject: core: Image configuration adjustments for cloning a VM ......................................................................
core: Image configuration adjustments for cloning a VM While cloning a VM, in some cases disk image configurations must be applied before executing the command. Specifically when cloning a VM's snapshot with thin NFS, raw disk allocation, to a VM with thin block disk allocation- the raw format needs to be changed to COW. Change-Id: Id924e9beab5d84277fad4f3a2a40b14571beaf22 Bug-Url: https://bugzilla.redhat.com/1121397 Signed-off-by: Amit Aviram <[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/AddVmFromSnapshotCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneVmCommand.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommandTest.java 4 files changed, 29 insertions(+), 9 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/99/35599/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 ae9e442..4379aaf 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 @@ -317,10 +317,10 @@ * @return */ protected Collection<DiskImage> getDiskImagesToBeCloned() { - return getDiskImagesFromConfiguration(); + return getAdjustedDiskImagesFromConfiguration(); } - protected abstract Collection<DiskImage> getDiskImagesFromConfiguration(); + protected abstract Collection<DiskImage> getAdjustedDiskImagesFromConfiguration(); protected DiskImage getDiskImageToRemoveByParam(MoveOrCopyImageGroupParameters param) { Guid imageGroupId = param.getDestImageGroupId(); @@ -396,9 +396,9 @@ protected boolean addVmImages() { int numberOfStartedCopyTasks = 0; try { - if (!getDiskImagesFromConfiguration().isEmpty()) { + if (!getAdjustedDiskImagesFromConfiguration().isEmpty()) { lockEntities(); - for (DiskImage diskImage : getDiskImagesFromConfiguration()) { + for (DiskImage diskImage : getAdjustedDiskImagesFromConfiguration()) { // For illegal image check if it was snapshot as illegal (therefore // still exists at DB, or was it erased after snapshot - therefore the // query returned to UI an illegal image) diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java index 937d8c6..55c469f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommand.java @@ -11,9 +11,12 @@ import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.Snapshot; import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotStatus; +import org.ovirt.engine.core.common.businessentities.StorageType; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.VmStatic; +import org.ovirt.engine.core.common.businessentities.VolumeFormat; +import org.ovirt.engine.core.common.businessentities.VolumeType; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.common.locks.LockingGroup; import org.ovirt.engine.core.common.queries.IdQueryParameters; @@ -83,15 +86,31 @@ return (getSnapshot() != null) ? getSnapshot().getVmId() : Guid.Empty; } - protected Collection<DiskImage> getDiskImagesFromConfiguration() { + @Override + protected Collection<DiskImage> getAdjustedDiskImagesFromConfiguration() { if (diskImagesFromConfiguration == null) { diskImagesFromConfiguration = ImagesHandler.filterImageDisks(vmFromConfiguration.getDiskMap().values(), false, true, true); + adjustDisksImageConfiguration(diskImagesFromConfiguration); } return diskImagesFromConfiguration; + } + + private void adjustDisksImageConfiguration(Collection<DiskImage> diskImages) { + for (DiskImage diskImage : diskImages) { + // Adjust disk image configuration if needed. + if ( diskImage.getVolumeType().equals(VolumeType.Sparse) && diskImage.getVolumeFormat().equals(VolumeFormat.RAW) && + getDestintationDomainTypeFromDisk(diskImage).isBlockDomain()) { + diskImage.setvolumeFormat(VolumeFormat.COW); + } + } + } + + private StorageType getDestintationDomainTypeFromDisk(DiskImage diskImage) { + return destStorages.get(diskInfoDestinationMap.get(diskImage.getId()).getStorageIds().get(0)).getStorageStaticData().getStorageType(); } @Override @@ -131,7 +150,7 @@ VmValidator vmValidator = createVmValidator(vmFromConfiguration); if (Boolean.FALSE.equals(getParameters().isVirtioScsiEnabled()) && - !validate(vmValidator.canDisableVirtioScsi(getDiskImagesFromConfiguration()))) { + !validate(vmValidator.canDisableVirtioScsi(getAdjustedDiskImagesFromConfiguration()))) { return false; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneVmCommand.java index 96fdd96..23c9b96 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneVmCommand.java @@ -88,7 +88,8 @@ return locks; } - protected Collection<DiskImage> getDiskImagesFromConfiguration() { + @Override + protected Collection<DiskImage> getAdjustedDiskImagesFromConfiguration() { VdcQueryReturnValue vdcReturnValue = runInternalQuery( VdcQueryType.GetAllDisksByVmId, new IdQueryParameters(oldVmId)); @@ -151,7 +152,7 @@ private void fillDisksToParameters() { - for (Disk image : getDiskImagesFromConfiguration()) { + for (Disk image : getAdjustedDiskImagesFromConfiguration()) { diskInfoDestinationMap.put(image.getId(), (DiskImage) image); } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommandTest.java index ba66f30..e440bbc 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddVmFromSnapshotCommandTest.java @@ -97,7 +97,7 @@ DiskImage disk = new DiskImage(); disk.setDiskInterface(DiskInterface.VirtIO_SCSI); disk.setPlugged(true); - doReturn(Collections.singletonList(disk)).when(command).getDiskImagesFromConfiguration(); + doReturn(Collections.singletonList(disk)).when(command).getAdjustedDiskImagesFromConfiguration(); VmValidator vmValidator = spy(new VmValidator(vm)); doReturn(vmValidator).when(command).createVmValidator(vm); -- To view, visit http://gerrit.ovirt.org/35599 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id924e9beab5d84277fad4f3a2a40b14571beaf22 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Amit Aviram <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
