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