Liron Ar has uploaded a new change for review. Change subject: core: Introducing RetrieveImageDataVDSCommand ......................................................................
core: Introducing RetrieveImageDataVDSCommand This patch adds RetrieveImageDataVDSCommand which is used to download image data to the engine up to a given size. The data is returned by the command as a byte array. Change-Id: I87be49262b1e06a12f55055360a6c7ddc7486897 Signed-off-by: Liron Aravot <[email protected]> --- M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskType.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/RetrieveImageDataVDSCommand.java 4 files changed, 75 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/75/26675/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskType.java index a5c9e94..8a9b75a 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/asynctasks/AsyncTaskType.java @@ -11,7 +11,8 @@ cloneImageStructure, syncImageData, extendImageSize, - downloadImageFromStream; + downloadImageFromStream, + uploadImage; public int getValue() { return this.ordinal(); diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java index c64ab25..298c0ee 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java @@ -404,6 +404,7 @@ UPLOAD_FAILURE(5003), // The VDS does not exist in memory RESOURCE_MANAGER_VDS_NOT_FOUND(5004), + RETRIEVE_FAILURE(5005), IRS_IMAGE_STATUS_ILLEGAL(5006), IRS_REPOSITORY_NOT_FOUND(5009), MAC_POOL_INITIALIZATION_FAILED(5010), diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java index 9910ba6..21dcb00 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java @@ -105,6 +105,7 @@ SPMRevertTask("org.ovirt.engine.core.vdsbroker.irsbroker"), UpdateVM("org.ovirt.engine.core.vdsbroker.irsbroker"), UploadStream("org.ovirt.engine.core.vdsbroker.irsbroker"), + RetrieveImageData("org.ovirt.engine.core.vdsbroker.irsbroker"), RemoveVM("org.ovirt.engine.core.vdsbroker.irsbroker"), SpmStopOnIrs("org.ovirt.engine.core.vdsbroker.irsbroker"), ResetISOPath("org.ovirt.engine.core.vdsbroker.vdsbroker"), diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/RetrieveImageDataVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/RetrieveImageDataVDSCommand.java new file mode 100644 index 0000000..e024d9e --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/RetrieveImageDataVDSCommand.java @@ -0,0 +1,71 @@ +package org.ovirt.engine.core.vdsbroker.irsbroker; + +import java.io.IOException; + +import org.apache.commons.httpclient.methods.GetMethod; +import org.ovirt.engine.core.common.asynctasks.AsyncTaskType; +import org.ovirt.engine.core.common.config.ConfigValues; +import org.ovirt.engine.core.common.errors.VdcBllErrors; +import org.ovirt.engine.core.common.vdscommands.ImageHttpAccessVDSCommandParameters; + +public class RetrieveImageDataVDSCommand<P extends ImageHttpAccessVDSCommandParameters> extends HttpImageTaskVDSCommand<GetMethod, P> { + + public RetrieveImageDataVDSCommand(P parameters) { + super(parameters); + } + + @Override + protected void beforeExecution() { + getMethod().setRequestHeader("Size", getParameters().getSize().toString()); + } + + @Override + protected void afterExecution() { + String response; + try { + response = getMethod().getResponseHeader("Result").getValue(); + } catch (Exception e) { + throw createNetworkException(e); + } + + handleJsonResponse(response); + + processResponseHeaderValue(getMethod(), "Content-Length", getParameters().getSize().toString()); + byte[] result; + try { + result = getMethod().getResponseBody(); + } catch (IOException e) { + log.debug(e); + throw createNetworkException(e); + } + + if (result.length != getParameters().getSize()) { + throwVdsErrorException(String.format("retrieving failed: requested %s bytes, received %s bytes ", + result.length, + getParameters().getSize()), VdcBllErrors.RETRIEVE_FAILURE); + } + + getVDSReturnValue().setReturnValue(result); + getVDSReturnValue().setSucceeded(true); + } + + @Override + protected AsyncTaskType getTaskType() { + return AsyncTaskType.uploadImage; + } + + @Override + protected VdcBllErrors getCommandError() { + return VdcBllErrors.RETRIEVE_FAILURE; + } + + @Override + protected ConfigValues getConfigValueTimeLimitForOperation() { + return ConfigValues.RetrieveDataMaxTimeInMinutes; + } + + @Override + protected GetMethod concreteCreateMethod(String url) { + return new GetMethod(url); + } +} -- To view, visit http://gerrit.ovirt.org/26675 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I87be49262b1e06a12f55055360a6c7ddc7486897 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Liron Ar <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
