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