package org.ovirt.engine.core.vdsbroker.irsbroker; import org.apache.commons.httpclient.HttpStatus; 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.EngineError; import org.ovirt.engine.core.common.vdscommands.ImageHttpAccessVDSCommandParameters; import org.ovirt.engine.core.utils.log.Logged; import org.ovirt.engine.core.utils.log.Logged.LogLevel; @Logged(returnLevel = LogLevel.DEBUG) public class RetrieveImageDataVDSCommand<P extends ImageHttpAccessVDSCommandParameters> extends HttpImageTaskVDSCommand<GetMethod, P> { public RetrieveImageDataVDSCommand(P parameters) { super(parameters); } protected void prepareMethod() { getMethod().setRequestHeader("Range", String.format("bytes=0-%s", getParameters().getSize() - 1)); } @Override protected void handleOkResponse() { processResponseHeaderValue(getMethod(), "Content-Length", getParameters().getSize().toString()); byte[] data; try { data = getMethod().getResponseBody(); } catch (Exception e) { throw createNetworkException(e); } if (data.length != getParameters().getSize()) { throwVdsErrorException(String.format("received downloaded data size is wrong (requested %d, received %d)", getParameters().getSize(), data.length), EngineError.GeneralException); } getVDSReturnValue().setReturnValue(data); } @Override protected ConfigValues getConfigValueTimeLimitForOperation() { return ConfigValues.RetrieveDataMaxTimeInMinutes; } @Override protected AsyncTaskType getCreatedTaskType() { return AsyncTaskType.uploadImageToStream; } @Override protected GetMethod concreteCreateMethod(String url) { return new GetMethod(url); } @Override protected int getSuccessCode() { return HttpStatus.SC_PARTIAL_CONTENT; } }