X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-remoterpc-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fremote%2Frpc%2FRemoteDOMRpcFuture.java;h=c6b796d26d8d585ce4d67b448fc12264f8966e5a;hp=e97a499fdbd19833316b84cdc4a7ba5c08ac0a9f;hb=168591eb3dfc298b631e8dc51e25b0331c105cfc;hpb=396cfb3692d1db20e429462cc1862e5eeb7fe4a4 diff --git a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RemoteDOMRpcFuture.java b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RemoteDOMRpcFuture.java index e97a499fdb..c6b796d26d 100644 --- a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RemoteDOMRpcFuture.java +++ b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RemoteDOMRpcFuture.java @@ -8,6 +8,7 @@ package org.opendaylight.controller.remote.rpc; import akka.dispatch.OnComplete; +import com.google.common.base.Preconditions; import com.google.common.base.Throwables; import com.google.common.util.concurrent.AbstractFuture; import com.google.common.util.concurrent.CheckedFuture; @@ -19,22 +20,38 @@ import org.opendaylight.controller.md.sal.dom.api.DOMRpcException; import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; import org.opendaylight.controller.md.sal.dom.spi.DefaultDOMRpcResult; import org.opendaylight.controller.remote.rpc.messages.RpcResponse; +import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import scala.concurrent.ExecutionContext; import scala.concurrent.Future; +/** + * @author tony + * + */ class RemoteDOMRpcFuture extends AbstractFuture implements CheckedFuture { private static final Logger LOG = LoggerFactory.getLogger(RemoteDOMRpcFuture.class); - private RemoteDOMRpcFuture(final Future future) { - future.onComplete(new FutureUpdater(), ExecutionContext.Implicits$.MODULE$.global()); + private final QName rpcName; + + private RemoteDOMRpcFuture(final QName rpcName) { + this.rpcName = Preconditions.checkNotNull(rpcName,"rpcName"); } - public static CheckedFuture from(final Future future) { - return new RemoteDOMRpcFuture(future); + public static RemoteDOMRpcFuture create(final QName rpcName) { + return new RemoteDOMRpcFuture(rpcName); + } + + protected void failNow(final Throwable error) { + LOG.debug("Failing future {} for rpc {}", this, rpcName, error); + setException(error); + } + + protected void completeWith(final Future future) { + future.onComplete(new FutureUpdater(), ExecutionContext.Implicits$.MODULE$.global()); } @Override @@ -72,20 +89,21 @@ class RemoteDOMRpcFuture extends AbstractFuture implements Checked @Override public void onComplete(final Throwable error, final Object reply) throws Throwable { if (error != null) { - RemoteDOMRpcFuture.this.setException(error); + RemoteDOMRpcFuture.this.failNow(error); } else if (reply instanceof RpcResponse) { final RpcResponse rpcReply = (RpcResponse) reply; final NormalizedNode result; if (rpcReply.getResultNormalizedNode() == null) { result = null; - LOG.debug("Received response for invoke rpc: result is null"); + LOG.debug("Received response for rpc {}: result is null", rpcName); } else { result = NormalizedNodeSerializer.deSerialize(rpcReply.getResultNormalizedNode()); - LOG.debug("Received response for invoke rpc: result is {}", result); + LOG.debug("Received response for rpc {}: result is {}", rpcName, result); } RemoteDOMRpcFuture.this.set(new DefaultDOMRpcResult(result)); + LOG.debug("Future {} for rpc {} successfully completed", RemoteDOMRpcFuture.this, rpcName); } - RemoteDOMRpcFuture.this.setException(new IllegalStateException("Incorrect reply type " + reply + RemoteDOMRpcFuture.this.failNow(new IllegalStateException("Incorrect reply type " + reply + "from Akka")); } }