Liron Aravot has uploaded a new change for review. Change subject: core: adding RetrieveImageDataCommand ......................................................................
core: adding RetrieveImageDataCommand This patch adds RetrieveImageDataCommand and changes AttachStorageDomainToPoolCommand to use it instead of executing the vds command directly. This is done so that the needed CDA checks/locks will be taken. Furthermore, this patch takes care of polling the created upload task on vdsm side. Change-Id: I4ed10f1d3fc74e1deb6c69fc826f02abfd5d679e Bug-Url: https://bugzilla.redhat.com/1136840 Signed-off-by: Liron Aravot <lara...@redhat.com> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RetrieveImageDataCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/bll/RetrieveImageDataParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java 4 files changed, 75 insertions(+), 7 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/78/33278/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RetrieveImageDataCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RetrieveImageDataCommand.java new file mode 100644 index 0000000..7c88912 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RetrieveImageDataCommand.java @@ -0,0 +1,35 @@ +package org.ovirt.engine.core.bll; + +import org.ovirt.engine.core.bll.context.CommandContext; +import org.ovirt.engine.core.common.asynctasks.AsyncTaskType; +import org.ovirt.engine.core.common.vdscommands.ImageHttpAccessVDSCommandParameters; +import org.ovirt.engine.core.common.vdscommands.VDSCommandType; +import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; + +@NonTransactiveCommandAttribute +@InternalCommandAttribute +public class RetrieveImageDataCommand<T extends RetrieveImageDataParameters> extends ImageSpmCommand<T> { + + public RetrieveImageDataCommand(T parameters, CommandContext cmdContext) { + super(parameters, cmdContext); + } + + @Override + protected VDSReturnValue executeVdsCommand() { + VDSReturnValue vdsReturnValue = runVdsCommand(VDSCommandType.RetrieveImageData, + new ImageHttpAccessVDSCommandParameters(getVdsId(), + getParameters().getStoragePoolId(), + getParameters().getStorageDomainId(), + getParameters().getImageGroupID(), + getParameters().getImageId(), + getParameters().getLength())); + + setActionReturnValue(vdsReturnValue.getReturnValue()); + return vdsReturnValue; + } + + @Override + protected AsyncTaskType getTaskType() { + return AsyncTaskType.uploadImageToStream; + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java index 01d3a1e..9a57721 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java @@ -10,6 +10,7 @@ import java.util.Map; import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; +import org.ovirt.engine.core.bll.RetrieveImageDataParameters; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.FeatureSupported; @@ -39,7 +40,6 @@ import org.ovirt.engine.core.common.vdscommands.AttachStorageDomainVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.DetachStorageDomainVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.HSMGetStorageDomainInfoVDSCommandParameters; -import org.ovirt.engine.core.common.vdscommands.ImageHttpAccessVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; import org.ovirt.engine.core.compat.Guid; @@ -205,16 +205,16 @@ DiskImage ovfDisk = ovfDiskAndSize.getFirst(); if (ovfDisk != null) { try { - VDSReturnValue retrievedByteData = runVdsCommand(VDSCommandType.RetrieveImageData, - new ImageHttpAccessVDSCommandParameters(getVdsId(), - getParameters().getStoragePoolId(), + VdcReturnValueBase vdcReturnValue = runInternalAction(VdcActionType.RetrieveImageData, + new RetrieveImageDataParameters(getParameters().getStoragePoolId(), getParameters().getStorageDomainId(), ovfDisk.getId(), ovfDisk.getImage().getId(), - ovfDiskAndSize.getSecond())); + ovfDiskAndSize.getSecond()), cloneContextAndDetachFromParent()); - if (retrievedByteData.getSucceeded()) { - return OvfUtils.getOvfEntities((byte[]) retrievedByteData.getReturnValue(), + getReturnValue().getVdsmTaskIdList().addAll(vdcReturnValue.getInternalVdsmTaskIdList()); + if (vdcReturnValue.getSucceeded()) { + return OvfUtils.getOvfEntities((byte[]) vdcReturnValue.getActionReturnValue(), getParameters().getStorageDomainId()); } else { log.errorFormat("Image data could not be retrieved for disk id {0} in storage domain id {1}", diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/bll/RetrieveImageDataParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/bll/RetrieveImageDataParameters.java new file mode 100644 index 0000000..1fdb365 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/bll/RetrieveImageDataParameters.java @@ -0,0 +1,32 @@ +package org.ovirt.engine.core.bll; + +import org.ovirt.engine.core.common.action.ImagesContainterParametersBase; +import org.ovirt.engine.core.compat.Guid; + +public class RetrieveImageDataParameters extends ImagesContainterParametersBase { + private Long length; + + public RetrieveImageDataParameters(Guid storagePoolId, + Guid storageDomainId, + Guid imageGroupId, + Guid imageId, + Long length) { + super(imageId); + this.length = length; + setStoragePoolId(storagePoolId); + setStorageDomainId(storageDomainId); + setImageGroupID(imageGroupId); + } + + public RetrieveImageDataParameters() { + super(); + } + + public Long getLength() { + return length; + } + + public void setLength(Long length) { + this.length = length; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java index a21fcc2..dafe0cb 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java @@ -361,6 +361,7 @@ ProcessOvfUpdateForStorageDomain(1902, QuotaDependency.NONE), CreateOvfVolumeForStorageDomain(1903, QuotaDependency.NONE), CreateOvfStoresForStorageDomain(1904, QuotaDependency.NONE), + RetrieveImageData(1905, QuotaDependency.NONE), // Affinity Groups AddAffinityGroup(1950, ActionGroup.MANIPULATE_AFFINITY_GROUPS, false, QuotaDependency.NONE), -- To view, visit http://gerrit.ovirt.org/33278 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I4ed10f1d3fc74e1deb6c69fc826f02abfd5d679e Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Liron Aravot <lara...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches