Ravi Nori has uploaded a new change for review.

Change subject: core : Change AddVmTemplateCommand
......................................................................

core : Change AddVmTemplateCommand

This patch changes AddVmTemplateCommand and its child
CreateImageTemplateCommand to persist all async task placeholders
before executing the command on vdsm

Change-Id: I2d61e6b2a0f7967bcee463ff2384cb6daba892b9
Signed-off-by: Ravi Nori <rn...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java
2 files changed, 35 insertions(+), 16 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/62/15562/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
index a90647b..1264dc6 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
@@ -64,6 +64,7 @@
     private List<PermissionSubject> permissionCheckSubject;
     protected Map<Guid, DiskImage> diskInfoDestinationMap;
     private boolean isVmInDb;
+    private Map<Guid, CommandBase<?>> commandsMap = new HashMap<>();
 
     /**
      * A list of the new disk images which were saved for the Template.
@@ -121,6 +122,34 @@
         default:
             return AuditLogType.USER_ADD_VM_TEMPLATE_FINISHED_FAILURE;
         }
+    }
+
+    @Override
+    protected Map<Guid, CommandBase<?>> buildChildCommands() {
+        Guid vmSnapshotId = Guid.NewGuid();
+        for (DiskImage diskImage : mImages) {
+            commandsMap.put(diskImage.getImageId(), constructCommand(
+                    VdcActionType.CreateImageTemplate,
+                    buildChildCommandParameters(diskImage, vmSnapshotId),
+                    true,
+                    
ExecutionHandler.createDefaultContexForTasks(getExecutionContext())));
+        }
+        return commandsMap;
+    }
+
+    private CreateImageTemplateParameters 
buildChildCommandParameters(DiskImage diskImage, Guid vmSnapshotId) {
+        CreateImageTemplateParameters createParams = new 
CreateImageTemplateParameters(diskImage.getImageId(),
+                getVmTemplateId(), getVmTemplateName(), getVmId());
+        createParams.setStorageDomainId(diskImage.getStorageIds().get(0));
+        createParams.setVmSnapshotId(vmSnapshotId);
+        createParams.setEntityId(getParameters().getEntityId());
+        
createParams.setDestinationStorageDomainId(diskInfoDestinationMap.get(diskImage.getId())
+                .getStorageIds()
+                .get(0));
+        
createParams.setDiskAlias(diskInfoDestinationMap.get(diskImage.getId()).getDiskAlias());
+        createParams.setParentParameters(getParameters());
+        createParams.setQuotaId(getQuotaIdForDisk(diskImage));
+        return createParams;
     }
 
     @Override
@@ -402,22 +431,8 @@
         Guid vmSnapshotId = Guid.NewGuid();
 
         for (DiskImage diskImage : mImages) {
-            CreateImageTemplateParameters createParams = new 
CreateImageTemplateParameters(diskImage.getImageId(),
-                    getVmTemplateId(), getVmTemplateName(), getVmId());
-            createParams.setStorageDomainId(diskImage.getStorageIds().get(0));
-            createParams.setVmSnapshotId(vmSnapshotId);
-            createParams.setEntityId(getParameters().getEntityId());
-            
createParams.setDestinationStorageDomainId(diskInfoDestinationMap.get(diskImage.getId())
-                    .getStorageIds()
-                    .get(0));
-            
createParams.setDiskAlias(diskInfoDestinationMap.get(diskImage.getId()).getDiskAlias());
-            createParams.setParentParameters(getParameters());
-            createParams.setQuotaId(getQuotaIdForDisk(diskImage));
             // The return value of this action is the 'copyImage' task GUID:
-            VdcReturnValueBase retValue = 
Backend.getInstance().runInternalAction(
-                    VdcActionType.CreateImageTemplate,
-                    createParams,
-                    
ExecutionHandler.createDefaultContexForTasks(getExecutionContext()));
+            VdcReturnValueBase retValue = 
runCommand(commandsMap.get(diskImage.getImageId()));
 
             if (!retValue.getSucceeded()) {
                 throw new VdcBLLException(retValue.getFault().getError(), 
retValue.getFault().getMessage());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java
index 0914b25..cfb88ef 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java
@@ -31,6 +31,11 @@
     }
 
     @Override
+    protected void insertAsyncTaskPlaceHolders() {
+        persistAsyncTaskPlaceHolder(VdcActionType.AddVmTemplate);
+    }
+
+    @Override
     protected void executeCommand() {
         Guid storagePoolId = getDiskImage().getStoragePoolId() != null ? 
getDiskImage().getStoragePoolId()
                 .getValue() : Guid.Empty;
@@ -47,7 +52,6 @@
         DiskImage newImage = cloneDiskImage(getDestinationImageId());
         fillVolumeInformation(newImage);
 
-        persistAsyncTaskPlaceHolder(VdcActionType.AddVmTemplate);
         Guid taskId = getAsyncTaskId();
         getReturnValue().getTaskPlaceHolderIdList().add(taskId);
 


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2d61e6b2a0f7967bcee463ff2384cb6daba892b9
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Ravi Nori <rn...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to