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

Reply via email to