Liron Ar has uploaded a new change for review.

Change subject: core: Introducing HttpImageTaskVDSCommand
......................................................................

core: Introducing HttpImageTaskVDSCommand

This patch adds HttpImageTaskVDSCommand to contain common logic related
to http image related operations. The related logic was extracted to it
from UploadStreamVDSCommand.

Change-Id: Idc9284e62f75cc4958909bcb03c9b4fa8e30d7d1
Signed-off-by: Liron Aravot <lara...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UploadStreamCommand.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ImageHttpAccessVDSCommandParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/UploadStreamVDSCommandParameters.java
A 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/HttpImageTaskVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/UploadStreamVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerCommand.java
6 files changed, 290 insertions(+), 207 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/74/26674/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UploadStreamCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UploadStreamCommand.java
index a7a932e..96d661a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UploadStreamCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UploadStreamCommand.java
@@ -88,8 +88,8 @@
                         getParameters().getStorageDomainId(),
                         getParameters().getImageGroupID(),
                         getParameters().getImageId(),
-                        getParameters().getInputStream(),
-                        getParameters().getStreamLength());
+                        getParameters().getStreamLength(),
+                        getParameters().getInputStream());
 
         VDSReturnValue vdsReturnValue = 
runVdsCommand(VDSCommandType.UploadStream, vdsCommandParameters);
 
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ImageHttpAccessVDSCommandParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ImageHttpAccessVDSCommandParameters.java
new file mode 100644
index 0000000..9a859aa
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ImageHttpAccessVDSCommandParameters.java
@@ -0,0 +1,63 @@
+package org.ovirt.engine.core.common.vdscommands;
+
+import org.ovirt.engine.core.compat.Guid;
+
+public class ImageHttpAccessVDSCommandParameters extends 
VdsIdVDSCommandParametersBase{
+    private Guid storagePoolId;
+    private Guid storageDomainId;
+    private Guid imageGroupId;
+    private Guid imageId;
+    private Long size;
+
+    public ImageHttpAccessVDSCommandParameters(Guid vdsId, Guid storagePoolId, 
Guid storageDomainId, Guid imageGroupId, Guid imageId, Long size) {
+        super(vdsId);
+        this.storagePoolId = storagePoolId;
+        this.storageDomainId = storageDomainId;
+        this.imageGroupId = imageGroupId;
+        this.imageId = imageId;
+        this.size = size;
+    }
+
+    public ImageHttpAccessVDSCommandParameters() {
+    }
+
+    public Guid getStoragePoolId() {
+        return storagePoolId;
+    }
+
+    public void setStoragePoolId(Guid storagePoolId) {
+        this.storagePoolId = storagePoolId;
+    }
+
+    public Guid getStorageDomainId() {
+        return storageDomainId;
+    }
+
+    public void setStorageDomainId(Guid storageDomainId) {
+        this.storageDomainId = storageDomainId;
+    }
+
+    public Guid getImageGroupId() {
+        return imageGroupId;
+    }
+
+    public void setImageGroupId(Guid imageGroupId) {
+        this.imageGroupId = imageGroupId;
+    }
+
+    public Guid getImageId() {
+        return imageId;
+    }
+
+    public void setImageId(Guid imageId) {
+        this.imageId = imageId;
+    }
+
+    public Long getSize() {
+        return size;
+    }
+
+    public void setSize(Long size) {
+        this.size = size;
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/UploadStreamVDSCommandParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/UploadStreamVDSCommandParameters.java
index 665578e..c075b93 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/UploadStreamVDSCommandParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/UploadStreamVDSCommandParameters.java
@@ -4,22 +4,12 @@
 
 import org.ovirt.engine.core.compat.Guid;
 
-public class UploadStreamVDSCommandParameters extends 
VdsIdVDSCommandParametersBase {
+public class UploadStreamVDSCommandParameters extends 
ImageHttpAccessVDSCommandParameters {
     private InputStream inputStream;
-    private Long streamLength;
-    private Guid storagePoolId;
-    private Guid storageDomainId;
-    private Guid imageGroupId;
-    private Guid imageId;
 
-    public UploadStreamVDSCommandParameters(Guid vdsId, Guid storagePoolId, 
Guid storageDomainId, Guid imageGroupId, Guid imageId, InputStream inputStream, 
Long streamLength) {
-        super(vdsId);
+    public UploadStreamVDSCommandParameters(Guid vdsId, Guid storagePoolId, 
Guid storageDomainId, Guid imageGroupId, Guid imageId, Long size, InputStream 
inputStream) {
+        super(vdsId, storagePoolId, storageDomainId, imageGroupId, imageId, 
size);
         this.inputStream = inputStream;
-        this.streamLength = streamLength;
-        this.storagePoolId = storagePoolId;
-        this.storageDomainId = storageDomainId;
-        this.imageGroupId = imageGroupId;
-        this.imageId = imageId;
     }
 
     public UploadStreamVDSCommandParameters() {
@@ -31,45 +21,5 @@
 
     public void setInputStream(InputStream inputStream) {
         this.inputStream = inputStream;
-    }
-
-    public Long getStreamLength() {
-        return streamLength;
-    }
-
-    public void setStreamLength(Long streamLength) {
-        this.streamLength = streamLength;
-    }
-
-    public Guid getStoragePoolId() {
-        return storagePoolId;
-    }
-
-    public void setStoragePoolId(Guid storagePoolId) {
-        this.storagePoolId = storagePoolId;
-    }
-
-    public Guid getStorageDomainId() {
-        return storageDomainId;
-    }
-
-    public void setStorageDomainId(Guid storageDomainId) {
-        this.storageDomainId = storageDomainId;
-    }
-
-    public Guid getImageGroupId() {
-        return imageGroupId;
-    }
-
-    public void setImageGroupId(Guid imageGroupId) {
-        this.imageGroupId = imageGroupId;
-    }
-
-    public Guid getImageId() {
-        return imageId;
-    }
-
-    public void setImageId(Guid imageId) {
-        this.imageId = imageId;
     }
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/HttpImageTaskVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/HttpImageTaskVDSCommand.java
new file mode 100644
index 0000000..b76e68a
--- /dev/null
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/HttpImageTaskVDSCommand.java
@@ -0,0 +1,180 @@
+package org.ovirt.engine.core.vdsbroker.irsbroker;
+
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Future;
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.httpclient.Header;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpMethodBase;
+import org.apache.commons.httpclient.HttpStatus;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.ovirt.engine.core.common.asynctasks.AsyncTaskCreationInfo;
+import org.ovirt.engine.core.common.asynctasks.AsyncTaskType;
+import org.ovirt.engine.core.common.businessentities.VdsStatic;
+import org.ovirt.engine.core.common.config.Config;
+import org.ovirt.engine.core.common.config.ConfigValues;
+import org.ovirt.engine.core.common.errors.VDSError;
+import org.ovirt.engine.core.common.errors.VdcBllErrors;
+import org.ovirt.engine.core.common.utils.Pair;
+import 
org.ovirt.engine.core.common.vdscommands.ImageHttpAccessVDSCommandParameters;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil;
+import org.ovirt.engine.core.vdsbroker.ResourceManager;
+import org.ovirt.engine.core.vdsbroker.VdsManager;
+import org.ovirt.engine.core.vdsbroker.vdsbroker.StatusOnlyReturnForXmlRpc;
+import org.ovirt.engine.core.vdsbroker.vdsbroker.VDSErrorException;
+import org.ovirt.engine.core.vdsbroker.vdsbroker.VdsBrokerCommand;
+import org.ovirt.engine.core.vdsbroker.vdsbroker.VdsServerWrapper;
+import org.ovirt.engine.core.vdsbroker.xmlrpc.XmlRpcUtils;
+
+public abstract class HttpImageTaskVDSCommand<T extends HttpMethodBase, P 
extends ImageHttpAccessVDSCommandParameters> extends VdsBrokerCommand<P> {
+    private T method;
+
+    public HttpImageTaskVDSCommand(P parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void executeVdsBrokerCommand() {
+        logExecution();
+        beforeExecution();
+        addImageHeaders();
+        try {
+            executeHttpMethod(getMethod());
+            afterExecution();
+        } finally {
+            try {
+                method.releaseConnection();
+            } catch (RuntimeException releaseException) {
+                log.error("failed when attempting to release connection", 
releaseException);
+            }
+        }
+    }
+
+    private void addImageHeaders() {
+        getMethod().setRequestHeader("connection", "close");
+        getMethod().setRequestHeader("Storage-Pool-Id", 
getParameters().getStoragePoolId().toString());
+        getMethod().setRequestHeader("Storage-Domain-Id", 
getParameters().getStorageDomainId().toString());
+        getMethod().setRequestHeader("Image-Id", 
getParameters().getImageGroupId().toString());
+        getMethod().setRequestHeader("Volume-Id", 
getParameters().getImageId().toString());
+    }
+
+    protected void executeHttpMethod(final T method) {
+        int responseCode = -1;
+        VdsManager manager = 
ResourceManager.getInstance().GetVdsManager(getParameters().getVdsId());
+        final HttpClient httpclient = ((VdsServerWrapper) 
manager.getVdsProxy()).getHttpClient();
+        try {
+            FutureTask<Integer> futureTask = new FutureTask(new 
Callable<Integer>() {
+                @Override
+                public Integer call() throws Exception {
+                    return httpclient.executeMethod(method);
+                }
+            });
+            Future<Integer> f = ThreadPoolUtil.execute(futureTask);
+            if (f.get(Config.<Integer> 
getValue(getConfigValueTimeLimitForOperation()), TimeUnit.MINUTES) == null) {
+                responseCode = futureTask.get();
+            }
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
+        } catch (Exception e) {
+            log.debug(e);
+            throw createNetworkException(e);
+        }
+
+        if (responseCode != HttpStatus.SC_OK) {
+            throwVdsErrorException("upload failed with response code " + 
responseCode, getCommandError());
+        }
+    }
+
+    protected String processResponseHeaderValue(HttpMethodBase method, String 
headerName, String expectedValue) {
+        Header header = method.getResponseHeader(headerName);
+        if (header == null) {
+            throwVdsErrorException("response was missing the following header: 
"
+                    + headerName, VdcBllErrors.GeneralException);
+        }
+
+        if (expectedValue != null && !expectedValue.equals(header.getValue())) 
{
+            throwVdsErrorException("response header value unexpected for 
header: "
+                    + headerName, VdcBllErrors.GeneralException);
+        }
+
+        return header.getValue();
+    }
+
+    protected void handleJsonResponse(String response) {
+        Map<String, Object> resultMap = null;
+        try {
+            resultMap = new ObjectMapper().readValue(response, HashMap.class);
+            status = new StatusOnlyReturnForXmlRpc(resultMap);
+        } catch (Exception e) {
+            throwVdsErrorException("failed to parse response " + response, 
VdcBllErrors.GeneralException);
+        }
+
+        proceedProxyReturnValue();
+
+        String createdTaskId = new OneUuidReturnForXmlRpc(resultMap).mUuid;
+
+        Guid createdTask = Guid.createGuidFromString(createdTaskId);
+
+        getVDSReturnValue().setCreationInfo(new 
AsyncTaskCreationInfo(createdTask,
+                getTaskType(),
+                getParameters().getStoragePoolId()));
+    }
+
+    protected T getMethod() {
+        if (method == null) {
+            VdsStatic vdsStatic = getAndSetVdsStatic();
+
+            Pair<String, URL> urlInfo = 
XmlRpcUtils.getConnectionUrl(vdsStatic.getHostName(),
+                    vdsStatic.getPort(),
+                    "",
+                    Config.<Boolean> 
getValue(ConfigValues.EncryptHostCommunication));
+
+            method = concreteCreateMethod(urlInfo.getFirst());
+        }
+
+        return method;
+    }
+
+    private void logExecution() {
+        log.info("-- executeVdsBrokerCommand: ");
+        log.infoFormat("-- parameters:" + "\r\n"
+                + "                spUUID={0}" + "\r\n"
+                + "                sdUUID={1}" + "\r\n"
+                + "                imageGUID={2}" + "\r\n"
+                + "                volUUID={3}" + "\r\n"
+                + "                size={4}" + "\r\n",
+                getParameters().getStoragePoolId().toString(),
+                getParameters().getStorageDomainId().toString(),
+                getParameters().getImageGroupId().toString(),
+                getParameters().getImageId().toString(),
+                getParameters().getSize());
+    }
+
+
+    protected void throwVdsErrorException(String message, VdcBllErrors error) {
+        VDSErrorException outEx = new VDSErrorException(message);
+        VDSError tempVar = new VDSError();
+        tempVar.setCode(error);
+        tempVar.setMessage(message);
+        outEx.setVdsError(tempVar);
+        throw outEx;
+    }
+
+    protected void beforeExecution() {}
+
+    protected void afterExecution() {}
+
+    protected abstract ConfigValues getConfigValueTimeLimitForOperation();
+
+    protected abstract VdcBllErrors getCommandError();
+
+    protected abstract AsyncTaskType getTaskType();
+
+    protected abstract T concreteCreateMethod(String url);
+}
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/UploadStreamVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/UploadStreamVDSCommand.java
index 97a97c9..15f5220 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/UploadStreamVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/UploadStreamVDSCommand.java
@@ -1,178 +1,68 @@
 package org.ovirt.engine.core.vdsbroker.irsbroker;
 
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.Callable;
-import java.util.concurrent.Future;
-import java.util.concurrent.FutureTask;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.commons.httpclient.Header;
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpMethodBase;
-import org.apache.commons.httpclient.HttpStatus;
 import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
 import org.apache.commons.httpclient.methods.PutMethod;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.ovirt.engine.core.common.asynctasks.AsyncTaskCreationInfo;
 import org.ovirt.engine.core.common.asynctasks.AsyncTaskType;
-import org.ovirt.engine.core.common.businessentities.VdsStatic;
-import org.ovirt.engine.core.common.config.Config;
 import org.ovirt.engine.core.common.config.ConfigValues;
-import org.ovirt.engine.core.common.errors.VDSError;
 import org.ovirt.engine.core.common.errors.VdcBllErrors;
-import org.ovirt.engine.core.common.utils.Pair;
 import 
org.ovirt.engine.core.common.vdscommands.UploadStreamVDSCommandParameters;
-import org.ovirt.engine.core.compat.Guid;
-import org.ovirt.engine.core.dal.dbbroker.DbFacade;
-import org.ovirt.engine.core.utils.log.Log;
-import org.ovirt.engine.core.utils.log.LogFactory;
-import org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil;
-import org.ovirt.engine.core.vdsbroker.ResourceManager;
-import org.ovirt.engine.core.vdsbroker.VdsManager;
-import org.ovirt.engine.core.vdsbroker.vdsbroker.StatusOnlyReturnForXmlRpc;
-import org.ovirt.engine.core.vdsbroker.vdsbroker.VDSErrorException;
-import org.ovirt.engine.core.vdsbroker.vdsbroker.VdsBrokerCommand;
-import org.ovirt.engine.core.vdsbroker.vdsbroker.VdsServerWrapper;
-import org.ovirt.engine.core.vdsbroker.xmlrpc.XmlRpcUtils;
 
-public class UploadStreamVDSCommand<P extends 
UploadStreamVDSCommandParameters> extends VdsBrokerCommand<P> {
-
-    private static final Log log = 
LogFactory.getLog(UploadStreamVDSCommand.class);
+public class UploadStreamVDSCommand<P extends 
UploadStreamVDSCommandParameters> extends HttpImageTaskVDSCommand<PutMethod, P> 
{
 
     public UploadStreamVDSCommand(P parameters) {
         super(parameters);
     }
 
     @Override
-    protected void executeVdsBrokerCommand() {
-        log.info("-- executeVdsBrokerCommand: ");
-        log.infoFormat("-- upload parameters:" + "\r\n"
-                + "                dstSpUUID={0}" + "\r\n"
-                + "                dstSdUUID={1}" + "\r\n"
-                + "                dstImageGUID={2}" + "\r\n"
-                + "                dstVolUUID={3}" + "\r\n",
-                getParameters().getStoragePoolId().toString(),
-                getParameters().getStorageDomainId().toString(),
-                getParameters().getImageGroupId().toString(),
-                getParameters().getImageId().toString());
-        VdsManager manager = 
ResourceManager.getInstance().GetVdsManager(getParameters().getVdsId());
-        final HttpClient httpclient = ((VdsServerWrapper) 
manager.getVdsProxy()).getHttpClient();
-        VdsStatic vdsStatic =
-                
DbFacade.getInstance().getVdsStaticDao().get(manager.getVdsId());
+    protected void beforeExecution() {
+        InputStreamRequestEntity inputStreamRequestEntity;
+        if (getParameters().getSize() != null) {
+            inputStreamRequestEntity =
+                    new 
InputStreamRequestEntity(getParameters().getInputStream(),
+                            getParameters().getSize());
+        } else {
+            inputStreamRequestEntity = new 
InputStreamRequestEntity((getParameters().getInputStream()));
+        }
 
-        Pair<String, URL> urlInfo = 
XmlRpcUtils.getConnectionUrl(vdsStatic.getHostName(),
-                vdsStatic.getPort(),
-                "",
-                Config.<Boolean> 
getValue(ConfigValues.EncryptHostCommunication));
+        getMethod().setRequestEntity(inputStreamRequestEntity);
+        getMethod().setRequestHeader("Content-Type", 
"application/octet-stream");
+        if (getParameters().getSize() != null) {
+            getMethod().setRequestHeader("Content-Length", 
getParameters().getSize().toString());
+        }
+    }
 
-        final PutMethod putMethod =
-                new PutMethod(urlInfo.getFirst());
+    protected void afterExecution() {
+        processResponseHeaderValue(getMethod(), "Content-type", 
"application/json");
+
+        String response;
         try {
-            InputStreamRequestEntity inputStreamRequestEntity = null;
-            if (getParameters().getStreamLength() != null) {
-                inputStreamRequestEntity =
-                        new 
InputStreamRequestEntity(getParameters().getInputStream(),
-                                getParameters().getStreamLength());
-            } else {
-                inputStreamRequestEntity = new 
InputStreamRequestEntity((getParameters().getInputStream()));
-            }
-
-            putMethod.setRequestEntity(inputStreamRequestEntity);
-            putMethod.setRequestHeader("Content-Type", 
"application/octet-stream");
-            if (getParameters().getStreamLength() != null) {
-                putMethod.setRequestHeader("Content-Length", 
getParameters().getStreamLength().toString());
-            }
-
-            putMethod.setRequestHeader("connection", "close");
-            putMethod.setRequestHeader("Storage-Pool-Id", 
getParameters().getStoragePoolId().toString());
-            putMethod.setRequestHeader("Storage-Domain-Id", 
getParameters().getStorageDomainId().toString());
-            putMethod.setRequestHeader("Image-Id", 
getParameters().getImageGroupId().toString());
-            putMethod.setRequestHeader("Volume-Id", 
getParameters().getImageId().toString());
-
-            int responseCode = -1;
-
-            try {
-                FutureTask<Integer> futureTask = new FutureTask(new 
Callable<Integer>() {
-                    @Override
-                    public Integer call() throws Exception {
-                        return httpclient.executeMethod(putMethod);
-                    }
-                });
-                Future<Integer> f = ThreadPoolUtil.execute(futureTask);
-                if (f.get(Config.<Integer> 
getValue(ConfigValues.UploadFileMaxTimeInMinutes), TimeUnit.MINUTES) == null) {
-                    responseCode = futureTask.get();
-                }
-            } catch (InterruptedException e) {
-                throw new RuntimeException(e);
-            } catch (Exception e) {
-                log.debug(e);
-                throw createNetworkException(e);
-            }
-
-            if (responseCode != HttpStatus.SC_OK) {
-                throwVdsErrorException("upload failed with response code " + 
responseCode, VdcBllErrors.UPLOAD_FAILURE);
-            }
-
-            processResponseHeaderValue(putMethod, "Content-type", 
"application/json");
-
-            String response;
-            try {
-                response = putMethod.getResponseBodyAsString();
-            } catch (Exception e) {
-                throw createNetworkException(e);
-            }
-
-            Map<String, Object> resultMap = null;
-            try {
-                resultMap = new ObjectMapper().readValue(response, 
HashMap.class);
-                status = new StatusOnlyReturnForXmlRpc(resultMap);
-            } catch (Exception e){
-                throwVdsErrorException("failed to parse response " + response, 
VdcBllErrors.GeneralException);
-            }
-
-            proceedProxyReturnValue();
-
-            String createdTaskId = new OneUuidReturnForXmlRpc(resultMap).mUuid;
-
-            Guid createdTask = Guid.createGuidFromString(createdTaskId);
-
-            getVDSReturnValue().setCreationInfo(
-                    new AsyncTaskCreationInfo(createdTask, 
AsyncTaskType.downloadImageFromStream, getParameters()
-                            .getStoragePoolId()));
-
-            getVDSReturnValue().setSucceeded(true);
-        } finally {
-            try {
-                putMethod.releaseConnection();
-            } catch (RuntimeException releaseException) {
-                log.error("failed when attempting to release connection", 
releaseException);
-            }
+            response = getMethod().getResponseBodyAsString();
+        } catch (Exception e) {
+            throw createNetworkException(e);
         }
+
+        handleJsonResponse(response);
+
+        getVDSReturnValue().setSucceeded(true);
     }
 
-    private void throwVdsErrorException(String message, VdcBllErrors error) {
-        VDSErrorException outEx = new VDSErrorException(message);
-        VDSError tempVar = new VDSError();
-        tempVar.setCode(error);
-        tempVar.setMessage(message);
-        outEx.setVdsError(tempVar);
-        throw outEx;
+    @Override
+    protected AsyncTaskType getTaskType() {
+        return AsyncTaskType.downloadImageFromStream;
     }
 
-    private String processResponseHeaderValue(HttpMethodBase method, String 
headerName, String expectedValue) {
-        Header header = method.getResponseHeader(headerName);
-        if (header == null) {
-            throwVdsErrorException("UploadStreamVDSCommand - response was 
missing the following header: "
-                    + headerName, VdcBllErrors.GeneralException);
-        }
+    @Override
+    protected PutMethod concreteCreateMethod(String url) {
+        return new PutMethod(url);
+    }
 
-        if (expectedValue != null && !expectedValue.equals(header.getValue())) 
{
-            throwVdsErrorException("UploadStreamVDSCommand - response header 
value unexpected for header: "
-                    + headerName, VdcBllErrors.GeneralException);
-        }
+    @Override
+    protected VdcBllErrors getCommandError() {
+        return VdcBllErrors.UPLOAD_FAILURE;
+    }
 
-        return header.getValue();
+    @Override
+    protected ConfigValues getConfigValueTimeLimitForOperation() {
+        return ConfigValues.UploadFileMaxTimeInMinutes;
     }
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerCommand.java
index 0d9cb1b..11f30ad 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerCommand.java
@@ -70,7 +70,7 @@
         }
     }
 
-    private VdsStatic getAndSetVdsStatic() {
+    protected VdsStatic getAndSetVdsStatic() {
         if (vdsStatic == null) {
             vdsStatic = 
getDbFacade().getVdsStaticDao().get(getParameters().getVdsId());
         }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Idc9284e62f75cc4958909bcb03c9b4fa8e30d7d1
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Liron Ar <lara...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to