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: I97b7f155e2de8d9b68583a472b747843b16c479f
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, 38 insertions(+), 19 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/58/15258/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 4e9de52..b205639 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
@@ -400,22 +429,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 b1a4be8..fc1a2ec 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
@@ -30,6 +30,14 @@
         super.setVmTemplateName(parameters.getVmTemplateName());
     }
 
+    private Guid taskId;
+    protected void insertAsyncTaskPlaceHolders() {
+        taskId = createAsyncTask(VdcActionType.AddVmTemplate,
+                VdcObjectType.Storage,
+                getParameters().getStorageDomainId(),
+                getParameters().getDestinationStorageDomainId());
+    }
+
     @Override
     protected void executeCommand() {
         Guid storagePoolId = getDiskImage().getStoragePoolId() != null ? 
getDiskImage().getStoragePoolId()
@@ -47,10 +55,6 @@
         DiskImage newImage = cloneDiskImage(getDestinationImageId());
         fillVolumeInformation(newImage);
 
-        Guid taskId = this.createAsyncTask(VdcActionType.AddVmTemplate,
-                        VdcObjectType.Storage,
-                        getParameters().getStorageDomainId(),
-                        getParameters().getDestinationStorageDomainId());
         getReturnValue().getAsyncTaskIdList().add(taskId);
 
         VDSReturnValue vdsReturnValue = Backend


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I97b7f155e2de8d9b68583a472b747843b16c479f
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