Ravi Nori has uploaded a new change for review.

Change subject: engine : Change CreateAllSnapshotsFromVmCommand to persist all 
placeholders
......................................................................

engine : Change CreateAllSnapshotsFromVmCommand to persist all placeholders

This patch changes CreateAllSnapshotsFromVmCommand and its child
CreateSnapshotCommand to persist all async task placeholders
before executing the command on vdsm.

Change-Id: I1f9524667922b99bfe47fc3659f7969efef72996
Signed-off-by: Ravi Nori <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateSnapshotCommand.java
2 files changed, 36 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/41/14841/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 affbf5d..1436477 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
@@ -3,6 +3,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -93,6 +94,30 @@
         getVmStaticDAO().incrementDbGeneration(getVm().getId());
     }
 
+    Map<Guid, CommandBase<?>> diskIdsToCommandMap = new HashMap<>();
+
+    @Override
+    protected void insertAsyncTaskPlaceHolders() {
+        Guid vmSnapshotId = Guid.NewGuid();
+        for (DiskImage image : getDisksList()) {
+            diskIdsToCommandMap.put(image.getImageId(),
+                    constructCommand(VdcActionType.CreateSnapshot,
+                    buildCreateSnapshotParameters(image, vmSnapshotId),
+                    true,
+                    
ExecutionHandler.createDefaultContexForTasks(getExecutionContext())));
+        }
+
+        TransactionSupport.executeInNewTransaction(new 
TransactionMethod<Void>() {
+            @Override
+            public Void runInTransaction() {
+                for (DiskImage diskImage : getDisksList()) {
+                    
checkCanDoActionInsertAsyncTaskPlaceHolders(diskIdsToCommandMap.get(diskImage.getImageId()));
+                }
+                return null;
+            }
+        });
+    }
+
     @Override
     protected void executeVmCommand() {
         Guid newActiveSnapshotId = Guid.NewGuid();
@@ -136,10 +161,7 @@
     private void createSnapshotsForDisks(Guid vmSnapshotId) {
         for (DiskImage image : getDisksList()) {
 
-            VdcReturnValueBase vdcReturnValue = 
Backend.getInstance().runInternalAction(
-                            VdcActionType.CreateSnapshot,
-                            buildCreateSnapshotParameters(image, vmSnapshotId),
-                            
ExecutionHandler.createDefaultContexForTasks(getExecutionContext()));
+            VdcReturnValueBase vdcReturnValue = 
runCommand(diskIdsToCommandMap.get(image.getImageId()));
 
             if (vdcReturnValue.getSucceeded()) {
                 getTaskIdList().addAll(vdcReturnValue.getInternalTaskIdList());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateSnapshotCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateSnapshotCommand.java
index 57635a4..832fe0b 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateSnapshotCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateSnapshotCommand.java
@@ -46,6 +46,16 @@
         return (ImagesContainterParametersBase) ((tempVar instanceof 
ImagesContainterParametersBase) ? tempVar : null);
     }
 
+    Guid taskId;
+
+    @Override
+    protected void insertAsyncTaskPlaceHolders() {
+        taskId = this.createAsyncTask(getParameters().getParentCommand(),
+                VdcObjectType.Storage,
+                getParameters().getStorageDomainId(),
+                getParameters().getDestinationImageId());
+    }
+
     @Override
     protected void executeCommand() {
         if (canCreateSnapshot()) {
@@ -88,10 +98,6 @@
         VDSReturnValue vdsReturnValue = null;
 
         try {
-           Guid taskId = 
this.createAsyncTask(getParameters().getParentCommand(),
-                                VdcObjectType.Storage,
-                                getParameters().getStorageDomainId(),
-                                getParameters().getDestinationImageId());
 
            getReturnValue().getAsyncTaskIdList().add(taskId);
 


--
To view, visit http://gerrit.ovirt.org/14841
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I1f9524667922b99bfe47fc3659f7969efef72996
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Ravi Nori <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to