Ravi Nori has uploaded a new change for review. Change subject: engine : Introduce getVolumeInfoAsync method ......................................................................
engine : Introduce getVolumeInfoAsync method Introduce getVolumeInfoAsync at IIrsServer so the command can asynchronously retrieve the image volume info. Using the isRequestCompleted method at OneImageInfoReturnForXmlRpc the command can determine if the request has been completed. Change-Id: I6e0ef961927c3fb17656ecac12d245c25b2ee367 Signed-off-by: Ravi Nori <[email protected]> --- M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImageInfoVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/OneImageInfoReturnForXmlRpc.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/StatusReturnForXmlRpc.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/FutureMap.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcIIrsServer.java 7 files changed, 60 insertions(+), 5 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/73/39373/1 diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImageInfoVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImageInfoVDSCommand.java index 7b04ed9..8777789 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImageInfoVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImageInfoVDSCommand.java @@ -41,7 +41,7 @@ DiskImage di = null; try { proceedProxyReturnValue(); - di = buildImageEntity(imageInfoReturn.mInfo); + di = buildImageEntity(imageInfoReturn.getInfo()); } catch (Exception e) { printReturnValue(); // nothing to do - logging inside upper functions diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java index a09da95..9349264 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java @@ -30,6 +30,8 @@ OneImageInfoReturnForXmlRpc getVolumeInfo(String sdUUID, String spUUID, String imgGUID, String volUUID); + OneImageInfoReturnForXmlRpc getVolumeInfoAsync(String sdUUID, String spUUID, String imgGUID, String volUUID); + StatusOnlyReturnForXmlRpc setVolumeDescription(String sdUUID, String spUUID, String imgGUID, String volUUID, String description); IrsStatsAndStatusXmlRpc getIrsStats(); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java index 7388e88..d4934f3 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java @@ -86,6 +86,13 @@ } @Override + public OneImageInfoReturnForXmlRpc getVolumeInfoAsync(String sdUUID, String spUUID, String imgGUID, String volUUID) { + Map<String, Object> xmlRpcReturnValue = irsServer.getVolumeInfo(sdUUID, spUUID, imgGUID, volUUID); + OneImageInfoReturnForXmlRpc wrapper = new OneImageInfoReturnForXmlRpc(xmlRpcReturnValue); + return wrapper; + } + + @Override public StatusOnlyReturnForXmlRpc setVolumeDescription(String sdUUID, String spUUID, String imgGUID, String volUUID, String description) { Map<String, Object> xmlRpcReturnValue = irsServer.setVolumeDescription(sdUUID, spUUID, imgGUID, volUUID, description); StatusOnlyReturnForXmlRpc wrapper = new StatusOnlyReturnForXmlRpc(xmlRpcReturnValue); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/OneImageInfoReturnForXmlRpc.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/OneImageInfoReturnForXmlRpc.java index 7c8cad6..4cd1e59 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/OneImageInfoReturnForXmlRpc.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/OneImageInfoReturnForXmlRpc.java @@ -2,6 +2,8 @@ import java.util.Map; +import org.ovirt.engine.core.vdsbroker.jsonrpc.FutureMap; +import org.ovirt.engine.core.vdsbroker.vdsbroker.StatusForXmlRpc; import org.ovirt.engine.core.vdsbroker.xmlrpc.XmlRpcObjectDescriptor; //----------------------------------------------------- @@ -11,10 +13,13 @@ public final class OneImageInfoReturnForXmlRpc extends StatusReturnForXmlRpc { private static final String INFO = "info"; + + Map<String, Object> innerMap; + // We are ignoring missing fields after the status, because on failure it is // not sent. // [XmlRpcMissingMapping(MappingAction.Ignore), XmlRpcMember("info")] - public Map<String, Object> mInfo; + private Map<String, Object> mInfo; @Override public String toString() { @@ -22,14 +27,36 @@ builder.append("\n"); builder.append(super.toString()); builder.append("\n"); - XmlRpcObjectDescriptor.toStringBuilder(mInfo, builder); + if (mInfo != null) { + XmlRpcObjectDescriptor.toStringBuilder(mInfo, builder); + } return builder.toString(); } @SuppressWarnings("unchecked") public OneImageInfoReturnForXmlRpc(Map<String, Object> innerMap) { - super(innerMap); + super(); + this.innerMap = innerMap; + } + + public boolean isRequestCompleted() { + if (innerMap instanceof FutureMap) { + return ((FutureMap) innerMap).isRequestCompleted(); + } + return true; + } + + public StatusForXmlRpc getStatus() { + if (innerMap instanceof FutureMap && super.mStatus == null) { + Map<String, Object> statusMap = (Map<String, Object>) innerMap.get(STATUS); + mStatus = new StatusForXmlRpc(statusMap); + } + return super.mStatus; + } + + public Map<String, Object> getInfo() { mInfo = (Map<String, Object>) innerMap.get(INFO); + return mInfo; } } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/StatusReturnForXmlRpc.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/StatusReturnForXmlRpc.java index 81031bd..f803be8 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/StatusReturnForXmlRpc.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/StatusReturnForXmlRpc.java @@ -5,10 +5,12 @@ import org.ovirt.engine.core.vdsbroker.vdsbroker.StatusForXmlRpc; public class StatusReturnForXmlRpc { - private static final String STATUS = "status"; + protected static final String STATUS = "status"; public StatusForXmlRpc mStatus; + public StatusReturnForXmlRpc() {} + public StatusReturnForXmlRpc(Map<String, Object> innerMap) { Map<String, Object> statusMap = (Map<String, Object>) innerMap.get(STATUS); mStatus = new StatusForXmlRpc(statusMap); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/FutureMap.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/FutureMap.java index c1027b4..51ea380 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/FutureMap.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/FutureMap.java @@ -239,6 +239,10 @@ return this.responseMap.get(key); } + public boolean isRequestCompleted() { + return response.isDone() || response.isCancelled(); + } + @Override public Object remove(Object key) { lazyEval(); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcIIrsServer.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcIIrsServer.java index 1b5580f..b3e67c4 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcIIrsServer.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcIIrsServer.java @@ -208,6 +208,19 @@ } @Override + public OneImageInfoReturnForXmlRpc getVolumeInfoAsync(String sdUUID, String spUUID, String imgGUID, String volUUID) { + JsonRpcRequest request = + new RequestBuilder("Volume.getInfo").withParameter("volumeID", volUUID) + .withParameter("storagepoolID", spUUID) + .withParameter("storagedomainID", sdUUID) + .withParameter("imageID", imgGUID) + .build(); + Map<String, Object> response = + new FutureMap(this.client, request); + return new OneImageInfoReturnForXmlRpc(response); + } + + @Override public IrsStatsAndStatusXmlRpc getIrsStats() { JsonRpcRequest request = new RequestBuilder("Host.getStorageRepoStats").build(); Map<String, Object> response = -- To view, visit https://gerrit.ovirt.org/39373 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I6e0ef961927c3fb17656ecac12d245c25b2ee367 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Ravi Nori <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
