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