Change in vdsm[master]: java_bindings: Minor imporovements
smizrahi at redhat.com
smizrahi at redhat.com
Thu May 16 17:24:20 UTC 2013
Saggi Mizrahi has uploaded a new change for review.
Change subject: java_bindings: Minor imporovements
......................................................................
java_bindings: Minor imporovements
- Move more code to a common location
- Make it so that calls don't throw an exception if it fails to connect
to the server. Instead they return an error through the regular
json-rpc mechanism.
Change-Id: I5ceb7f58122accf6c911120b99b87d38b656e8e4
Signed-off-by: Saggi Mizrahi <smizrahi at redhat.com>
---
M client/java/vdsm-api/generate.py
M client/java/vdsm-api/src/main/java/org/ovirt/vdsm/VDSMClientBase.java
M client/java/vdsm-api/src/main/java/org/ovirt/vdsm/VDSMTransportProvider.java
M client/java/vdsm-api/src/test/java/org/ovirt/vdsm/TestVDSMAPI.java
4 files changed, 60 insertions(+), 27 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/21/14821/1
diff --git a/client/java/vdsm-api/generate.py b/client/java/vdsm-api/generate.py
index 1480264..b43b47e 100644
--- a/client/java/vdsm-api/generate.py
+++ b/client/java/vdsm-api/generate.py
@@ -218,17 +218,9 @@
package $package_name;
import java.net.URI;
-import java.util.List;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.node.ObjectNode;
-
-import org.ovirt.vdsm.jsonrpc.JsonRpcRequest;
-import org.ovirt.vdsm.jsonrpc.JsonRpcResponse;
-import org.ovirt.vdsm.util.FutureResultWrapper;
-import org.ovirt.vdsm.util.FutureResultWrapper.ResultWrapper;
public class VDSMClient extends VDSMClientBase {
public VDSMClient(VDSMClientPool pool, URI uri) {
@@ -244,7 +236,7 @@
${param.type.typeName} ${param.name},
#end for
String id
- ) throws TimeoutException {
+ ) {
final RequestBuilder builder =
new RequestBuilder(
"${command.ownerClass.name}.${command.name}");
@@ -254,14 +246,8 @@
#for $param in $command.parameters
builder.addParameter("${param.realName}", ${param.name});
#end for
-
- final JsonRpcRequest __req = builder.build();
- final Future<JsonRpcResponse> __call = _transport.call(__req);
- return new FutureResultWrapper<VDSMResponse<$rtype>,
- JsonRpcResponse>(
- __call,
- new VDSMResultWrapper(
- new ${command.returnType.genericTypeAdapter.typeName}()));
+ return _call(builder,
+ new ${command.returnType.genericTypeAdapter.typeName}());
}
#end for
diff --git a/client/java/vdsm-api/src/main/java/org/ovirt/vdsm/VDSMClientBase.java b/client/java/vdsm-api/src/main/java/org/ovirt/vdsm/VDSMClientBase.java
index 500c0dc..7c26896 100644
--- a/client/java/vdsm-api/src/main/java/org/ovirt/vdsm/VDSMClientBase.java
+++ b/client/java/vdsm-api/src/main/java/org/ovirt/vdsm/VDSMClientBase.java
@@ -2,9 +2,14 @@
import java.net.URI;
import java.util.UUID;
+import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
+import org.ovirt.vdsm.jsonrpc.JsonRpcRequest;
+import org.ovirt.vdsm.jsonrpc.JsonRpcResponse;
+import org.ovirt.vdsm.util.FutureResultWrapper;
public class VDSMClientBase {
+
final protected VDSMTransportProvider _transport;
public VDSMClientBase(VDSMClientPool pool, URI uri) {
@@ -19,6 +24,16 @@
return _transport.closed();
}
+ protected <T> Future<VDSMResponse<T>> _call(RequestBuilder rb,
+ VDSMObject.TypeAdapter<T> rtypeAdapter) {
+
+ final JsonRpcRequest __req = rb.build();
+ final Future<JsonRpcResponse> __call = _transport.call(__req);
+ return new FutureResultWrapper<>(
+ __call, new VDSMResultWrapper<>(rtypeAdapter));
+
+ }
+
public void connectTimeout(long timeout, TimeUnit unit) {
_transport.connectTimeout(timeout, unit);
@@ -27,9 +42,8 @@
public URI uri() {
return _transport.uri();
}
-
+
public String newID() {
return UUID.randomUUID().toString();
}
-
}
diff --git a/client/java/vdsm-api/src/main/java/org/ovirt/vdsm/VDSMTransportProvider.java b/client/java/vdsm-api/src/main/java/org/ovirt/vdsm/VDSMTransportProvider.java
index 7b2a8c2..83a20ee 100644
--- a/client/java/vdsm-api/src/main/java/org/ovirt/vdsm/VDSMTransportProvider.java
+++ b/client/java/vdsm-api/src/main/java/org/ovirt/vdsm/VDSMTransportProvider.java
@@ -2,16 +2,25 @@
import java.net.URI;
import java.util.List;
+import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
+import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.codehaus.jackson.JsonNode;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.node.NullNode;
import org.ovirt.vdsm.jsonrpc.JsonRpcClient;
+import org.ovirt.vdsm.jsonrpc.JsonRpcError;
import org.ovirt.vdsm.jsonrpc.JsonRpcRequest;
import org.ovirt.vdsm.jsonrpc.JsonRpcResponse;
public final class VDSMTransportProvider {
+
final private URI _uri;
final private VDSMClientPool _pool;
final private Object _connectOpLock = new Object();
@@ -40,14 +49,14 @@
}
try {
client = _connectOp.get(_connectTimeoutValue,
- _connectTimeoutUnit);
+ _connectTimeoutUnit);
} catch (InterruptedException e) {
continue;
} catch (ExecutionException e) {
_connectOp = null;
continue;
}
-
+
if ((client == null) || (client.closed())) {
_connectOp = null;
continue;
@@ -61,15 +70,39 @@
return _uri;
}
- public Future<JsonRpcResponse> call(JsonRpcRequest request)
- throws TimeoutException {
- final JsonRpcClient client = getClient();
+ public Future<JsonRpcResponse> call(final JsonRpcRequest request) {
+ final VDSMTransportProvider self = this;
+ final JsonRpcClient client;
+ try {
+ client = self.getClient();
+ } catch (TimeoutException ex) {
+ final FutureTask<JsonRpcResponse> fakeTask =
+ new FutureTask<>(new Callable<JsonRpcResponse>() {
+ @Override
+ public JsonRpcResponse call() throws Exception {
+ final ObjectMapper mapper =
+ new ObjectMapper();
+ final NullNode nn =
+ mapper.createObjectNode().nullNode();
+ final JsonRpcError err =
+ new JsonRpcError(-1,
+ "Could not connect to client",
+ nn);
+ return new JsonRpcResponse(nn, err,
+ request.id());
+
+ }
+ });
+ fakeTask.run();
+ return fakeTask;
+ }
+
return client.call(request);
}
public Future<List<JsonRpcResponse>> batchCall(
- List<JsonRpcRequest> requests)
- throws TimeoutException {
+ List<JsonRpcRequest> requests)
+ throws TimeoutException {
final JsonRpcClient client = getClient();
return client.batchCall(requests);
}
diff --git a/client/java/vdsm-api/src/test/java/org/ovirt/vdsm/TestVDSMAPI.java b/client/java/vdsm-api/src/test/java/org/ovirt/vdsm/TestVDSMAPI.java
index e65ee76..b003997 100644
--- a/client/java/vdsm-api/src/test/java/org/ovirt/vdsm/TestVDSMAPI.java
+++ b/client/java/vdsm-api/src/test/java/org/ovirt/vdsm/TestVDSMAPI.java
@@ -82,7 +82,7 @@
}
@Test
- public void testPing() throws TimeoutException {
+ public void testPing() {
final VDSMClient client = _cpool.createClient(_server.uri());
try {
VDSMClient.Host host = client.new Host();
--
To view, visit http://gerrit.ovirt.org/14821
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I5ceb7f58122accf6c911120b99b87d38b656e8e4
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Saggi Mizrahi <smizrahi at redhat.com>
More information about the vdsm-patches
mailing list