X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-remoterpc-connector%2Fimplementation%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fconnector%2Fremoterpc%2FClientImpl.java;h=8f95e73b15cdcd8307612bb155a0c3c406647a57;hb=26cb66156fe0e1f533d0e6a7dd39040c7423999f;hp=30e11c0806731c24ab151dd7cf585408916fd233;hpb=1f2754487ab1e3a37c830909806f90cd54180c7b;p=controller.git diff --git a/opendaylight/md-sal/sal-remoterpc-connector/implementation/src/main/java/org/opendaylight/controller/sal/connector/remoterpc/ClientImpl.java b/opendaylight/md-sal/sal-remoterpc-connector/implementation/src/main/java/org/opendaylight/controller/sal/connector/remoterpc/ClientImpl.java index 30e11c0806..8f95e73b15 100644 --- a/opendaylight/md-sal/sal-remoterpc-connector/implementation/src/main/java/org/opendaylight/controller/sal/connector/remoterpc/ClientImpl.java +++ b/opendaylight/md-sal/sal-remoterpc-connector/implementation/src/main/java/org/opendaylight/controller/sal/connector/remoterpc/ClientImpl.java @@ -7,7 +7,16 @@ package org.opendaylight.controller.sal.connector.remoterpc; -import com.google.common.base.Optional; +import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Preconditions.checkState; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.FutureTask; +import java.util.concurrent.TimeUnit; + import org.opendaylight.controller.sal.common.util.RpcErrors; import org.opendaylight.controller.sal.common.util.Rpcs; import org.opendaylight.controller.sal.connector.api.RpcRouter; @@ -27,15 +36,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.zeromq.ZMQ; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.FutureTask; -import java.util.concurrent.TimeUnit; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; +import com.google.common.base.Optional; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; /** * An implementation of {@link RpcImplementation} that makes @@ -45,8 +48,8 @@ public class ClientImpl implements RemoteRpcClient { private final Logger _logger = LoggerFactory.getLogger(ClientImpl.class); - private ZMQ.Context context = ZMQ.context(1); - private ClientRequestHandler handler; + private final ZMQ.Context context = ZMQ.context(1); + private final ClientRequestHandler handler; private RoutingTableProvider routingTableProvider; public ClientImpl(){ @@ -63,6 +66,7 @@ public class ClientImpl implements RemoteRpcClient { return routingTableProvider; } + @Override public void setRoutingTableProvider(RoutingTableProvider routingTableProvider) { this.routingTableProvider = routingTableProvider; } @@ -92,7 +96,7 @@ public class ClientImpl implements RemoteRpcClient { * @param input payload for the remote service * @return */ - public RpcResult invokeRpc(QName rpc, CompositeNode input) { + public ListenableFuture> invokeRpc(QName rpc, CompositeNode input) { RouteIdentifierImpl routeId = new RouteIdentifierImpl(); routeId.setType(rpc); @@ -114,7 +118,7 @@ public class ClientImpl implements RemoteRpcClient { * payload * @return */ - public RpcResult invokeRpc(QName rpc, InstanceIdentifier identifier, CompositeNode input) { + public ListenableFuture> invokeRpc(QName rpc, InstanceIdentifier identifier, CompositeNode input) { RouteIdentifierImpl routeId = new RouteIdentifierImpl(); routeId.setType(rpc); @@ -125,7 +129,7 @@ public class ClientImpl implements RemoteRpcClient { return sendMessage(input, routeId, address); } - private RpcResult sendMessage(CompositeNode input, RouteIdentifierImpl routeId, String address) { + private ListenableFuture> sendMessage(CompositeNode input, RouteIdentifierImpl routeId, String address) { Message request = new Message.MessageBuilder() .type(Message.MessageType.REQUEST) .sender(Context.getInstance().getLocalUri()) @@ -140,14 +144,34 @@ public class ClientImpl implements RemoteRpcClient { Message response = handler.handle(request); CompositeNode payload = null; - if ( response != null ) - payload = XmlUtils.xmlToCompositeNode((String) response.getPayload()); + if ( response != null ) { + + _logger.info("Received response [{}]", response); + + Object rawPayload = response.getPayload(); + switch (response.getType()) { + case ERROR: + if ( rawPayload instanceof List ) + errors = (List) rawPayload; + break; + + case RESPONSE: + payload = XmlUtils.xmlToCompositeNode((String) rawPayload); + break; - return Rpcs.getRpcResult(true, payload, errors); + default: + errors.add( + RpcErrors.getRpcError(null, null,null,null,"Unable to get response from remote controller", null, null) + ); + break; + + } + } + return Futures.immediateFuture(Rpcs.getRpcResult(true, payload, errors)); } catch (Exception e){ collectErrors(e, errors); - return Rpcs.getRpcResult(false, null, errors); + return Futures.immediateFuture(Rpcs.getRpcResult(false, null, errors)); } }