Daniel Erez has uploaded a new change for review. Change subject: core: support for partial snapshot creation ......................................................................
core: support for partial snapshot creation Introducing a support for creating a snapshot using a specified disks list, i.e. taking a snapshot only one the selected disks. * Updated CreateAllSnapshotsFromVmParameters: ** Added an optional disks list member. * Updated CreateAllSnapshotsFromVmCommand: ** Handles the specified disks list. Change-Id: Ieb7cb389229219bbb0212e3ee58cc45c39727c75 Feature: http://www.ovirt.org/Features/Single_Disk_Snapshot Signed-off-by: Daniel Erez <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CreateAllSnapshotsFromVmParameters.java 2 files changed, 42 insertions(+), 4 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/75/22775/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java index 4fe65e3..2721aad 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java @@ -90,16 +90,19 @@ return jobProperties; } + + private List<DiskImage> getDiskImagesForVm() { + return ImagesHandler.filterImageDisks(DbFacade.getInstance().getDiskDao().getAllForVm(getVmId()), true, true, true); + } + /** * Filter all allowed snapshot disks. * @return list of disks to be snapshot. */ protected List<DiskImage> getDisksList() { if (cachedSelectedActiveDisks == null) { - cachedSelectedActiveDisks = ImagesHandler.filterImageDisks(DbFacade.getInstance().getDiskDao().getAllForVm(getVmId()), - true, - true, - true); + // Get disks from the specified parameters or according to the VM + cachedSelectedActiveDisks = getParameters().getDisks() != null ? getParameters().getDisks() : getDiskImagesForVm(); } return cachedSelectedActiveDisks; } @@ -144,6 +147,7 @@ MemoryImageBuilder memoryImageBuilder = createMemoryImageBuilder(); addSnapshotToDB(createdSnapshotId, memoryImageBuilder); createSnapshotsForDisks(); + fastForwardDisksToActiveSnapshot(); memoryImageBuilder.build(); if (getTaskIdList().isEmpty()) { @@ -190,6 +194,7 @@ getVm(), true, memoryImageBuilder.getVolumeStringRepresentation(), + getDisksList(), getCompensationContext()); } @@ -206,6 +211,21 @@ } } + private void fastForwardDisksToActiveSnapshot() { + if (getParameters().getDisks() != null) { + // Get all image disks for VM + List<DiskImage> diskImagesToUpdate = getDiskImagesForVm(); + + // Remove disks included in snapshot + diskImagesToUpdate.removeAll(getParameters().getDisks()); + + // Fast-forward non-included disks to active snapshot + for (DiskImage diskImage : diskImagesToUpdate) { + getImageDao().updateImageVmSnapshotId(diskImage.getImageId(), newActiveSnapshotId); + } + } + } + private ImagesActionsParametersBase buildCreateSnapshotParameters(DiskImage image) { VdcActionType parentCommand = getParameters().getParentCommand() != VdcActionType.Unknown ? getParameters().getParentCommand() : VdcActionType.CreateAllSnapshotsFromVm; diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CreateAllSnapshotsFromVmParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CreateAllSnapshotsFromVmParameters.java index 5ad7bb8..dda28d6 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CreateAllSnapshotsFromVmParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CreateAllSnapshotsFromVmParameters.java @@ -7,10 +7,13 @@ import org.codehaus.jackson.annotate.JsonIgnore; import org.hibernate.validator.constraints.NotEmpty; import org.ovirt.engine.core.common.businessentities.BusinessEntitiesDefinitions; +import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotType; import org.ovirt.engine.core.common.validation.annotation.ValidDescription; import org.ovirt.engine.core.common.validation.group.CreateEntity; import org.ovirt.engine.core.compat.Guid; + +import java.util.List; public class CreateAllSnapshotsFromVmParameters extends VmOperationParameterBase implements java.io.Serializable { private static final long serialVersionUID = 847791941815264795L; @@ -33,6 +36,8 @@ @JsonIgnore private Set<Guid> diskIdsToIgnoreInChecks; + private List<DiskImage> disks; + public CreateAllSnapshotsFromVmParameters() { needsLocking = true; diskIdsToIgnoreInChecks = Collections.emptySet(); @@ -48,6 +53,11 @@ public CreateAllSnapshotsFromVmParameters(Guid vmId, String description, boolean saveMemory) { this(vmId, description); this.saveMemory = saveMemory; + } + + public CreateAllSnapshotsFromVmParameters(Guid vmId, String description, boolean saveMemory, List<DiskImage> disks) { + this(vmId, description, saveMemory); + this.disks = disks; } public String getDescription() { @@ -90,4 +100,12 @@ public void setDiskIdsToIgnoreInChecks(Set<Guid> diskIdsToIgnoreInChecks) { this.diskIdsToIgnoreInChecks = diskIdsToIgnoreInChecks; } + + public List<DiskImage> getDisks() { + return disks; + } + + public void setDisks(List<DiskImage> disks) { + this.disks = disks; + } } -- To view, visit http://gerrit.ovirt.org/22775 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ieb7cb389229219bbb0212e3ee58cc45c39727c75 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
