From: Jakub Toth Date: Fri, 23 Jun 2017 10:25:00 +0000 (+0200) Subject: Binding v2 - remove checked future X-Git-Tag: release/carbon-sr2~70 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=3deb23905245286b6ae07ee16a6ca127a0ff53aa;hp=d5166b5332267a0c94a3ace626d94622c9c22e63;p=mdsal.git Binding v2 - remove checked future Change-Id: I641ae876a76ba8e06d60ec5c63d6bdf7e3695973 Signed-off-by: Jakub Toth --- diff --git a/binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/operation/BindingDOMOperationImplementationAdapter.java b/binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/operation/BindingDOMOperationImplementationAdapter.java index 749a9ff1af..e7775b3fe4 100644 --- a/binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/operation/BindingDOMOperationImplementationAdapter.java +++ b/binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/operation/BindingDOMOperationImplementationAdapter.java @@ -12,6 +12,7 @@ import com.google.common.base.Preconditions; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import com.google.common.util.concurrent.CheckedFuture; +import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.JdkFutureAdapters; import com.google.common.util.concurrent.ListenableFuture; import java.lang.reflect.Method; @@ -31,6 +32,7 @@ import org.opendaylight.mdsal.dom.api.DOMRpcException; import org.opendaylight.mdsal.dom.api.DOMRpcIdentifier; import org.opendaylight.mdsal.dom.api.DOMRpcImplementation; import org.opendaylight.mdsal.dom.api.DOMRpcResult; +import org.opendaylight.yangtools.util.concurrent.ExceptionMapper; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; @@ -74,6 +76,7 @@ public class BindingDOMOperationImplementationAdapter implements DOMRpcImplement inputQname = QName.create(BindingReflections.getQNameModule(type), "input").intern(); } + @SuppressWarnings("deprecation") @Nonnull @Override public CheckedFuture invokeRpc(@Nonnull final DOMRpcIdentifier rpc, @@ -82,7 +85,23 @@ public class BindingDOMOperationImplementationAdapter implements DOMRpcImplement final SchemaPath schemaPath = rpc.getType(); final TreeNode bindingInput = input != null ? deserialize(rpc.getType(), input) : null; final ListenableFuture> bindingResult = invoke(schemaPath, bindingInput); - return transformResult(bindingResult); + return Futures.makeChecked(transformResult(bindingResult), + new ExceptionMapper("invokeRPc", DOMRpcException.class) { + + @Override + protected DOMRpcException newWithCause(final String message, final Throwable cause) { + return new DOMRpcInvokeException(message, cause); + } + }); + } + + private class DOMRpcInvokeException extends DOMRpcException { + + private static final long serialVersionUID = 1L; + + protected DOMRpcInvokeException(final String message, final Throwable cause) { + super(message, cause); + } } @Override @@ -102,7 +121,7 @@ public class BindingDOMOperationImplementationAdapter implements DOMRpcImplement return JdkFutureAdapters.listenInPoolThread(invoker.invoke(delegate, schemaPath.getLastComponent(), input)); } - private CheckedFuture + private ListenableFuture transformResult(final ListenableFuture> bindingResult) { return LazyDOMOperationResultFuture.create(codec, bindingResult); } diff --git a/binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/operation/LazyDOMOperationResultFuture.java b/binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/operation/LazyDOMOperationResultFuture.java index 878e8e9eb7..c1d9a0aa28 100644 --- a/binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/operation/LazyDOMOperationResultFuture.java +++ b/binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/operation/LazyDOMOperationResultFuture.java @@ -9,8 +9,6 @@ package org.opendaylight.mdsal.binding.javav2.dom.adapter.impl.operation; import com.google.common.annotations.Beta; import com.google.common.base.Preconditions; -import com.google.common.base.Throwables; -import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.ListenableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor; @@ -19,7 +17,6 @@ import java.util.concurrent.TimeoutException; import javax.annotation.Nonnull; import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.BindingNormalizedNodeCodecRegistry; import org.opendaylight.mdsal.binding.javav2.spec.base.TreeNode; -import org.opendaylight.mdsal.dom.api.DOMRpcException; import org.opendaylight.mdsal.dom.api.DOMRpcResult; import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult; import org.opendaylight.yangtools.yang.binding.DataContainer; @@ -30,7 +27,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; * DOM operation result from Binding. */ @Beta -final class LazyDOMOperationResultFuture implements CheckedFuture { +final class LazyDOMOperationResultFuture implements ListenableFuture { private final ListenableFuture> bindingFuture; private final BindingNormalizedNodeCodecRegistry codec; @@ -42,7 +39,7 @@ final class LazyDOMOperationResultFuture implements CheckedFuture create(final BindingNormalizedNodeCodecRegistry codec, + static ListenableFuture create(final BindingNormalizedNodeCodecRegistry codec, final ListenableFuture> bindingResult) { return new LazyDOMOperationResultFuture(bindingResult, codec); } @@ -78,27 +75,6 @@ final class LazyDOMOperationResultFuture implements CheckedFuture> invoke0(final SchemaPath schemaPath, final NormalizedNode input) { - final CheckedFuture result = delegate.invokeRpc(schemaPath, input); - - if (result instanceof LazyDOMOperationResultFuture) { - return ((LazyDOMOperationResultFuture) result).getBindingFuture(); + final ListenableFuture listenInPoolThread = + JdkFutureAdapters.listenInPoolThread(delegate.invokeRpc(schemaPath, input)); + if (listenInPoolThread instanceof LazyDOMOperationResultFuture) { + return ((LazyDOMOperationResultFuture) listenInPoolThread).getBindingFuture(); } - return transformFuture(schemaPath, result, codec.getCodecFactory()); + return transformFuture(schemaPath, listenInPoolThread, codec.getCodecFactory()); } private ListenableFuture> transformFuture(final SchemaPath rpc, @@ -170,7 +170,7 @@ class RpcServiceAdapter implements InvocationHandler { bindingResult = null; } return RpcResult.class.cast(RpcResultBuilder.success(bindingResult).build()); - }); + }, MoreExecutors.directExecutor()); } } diff --git a/binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/transaction/BindingDOMTransactionChainAdapter.java b/binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/transaction/BindingDOMTransactionChainAdapter.java index 4824f18ce4..3de3ddf68d 100644 --- a/binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/transaction/BindingDOMTransactionChainAdapter.java +++ b/binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/transaction/BindingDOMTransactionChainAdapter.java @@ -12,7 +12,8 @@ import com.google.common.base.Preconditions; import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; -import javax.annotation.Nonnull; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.MoreExecutors; import org.opendaylight.mdsal.binding.javav2.api.BindingTransactionChain; import org.opendaylight.mdsal.binding.javav2.api.ReadTransaction; import org.opendaylight.mdsal.binding.javav2.api.WriteTransaction; @@ -74,19 +75,18 @@ public final class BindingDOMTransactionChainAdapter }; } - private CheckedFuture listenForFailure(final WriteTransaction tx, - final CheckedFuture future) { - Futures.addCallback(future, new FutureCallback() { + private > F listenForFailure(final WriteTransaction tx, final F future) { + Futures.addCallback(future, new FutureCallback() { @Override - public void onFailure(@Nonnull final Throwable throwable) { + public void onFailure(final Throwable throwable) { failTransactionChain(tx, throwable); } @Override - public void onSuccess(final Void result) { + public void onSuccess(final T result) { // Intentionally NOOP } - }); + }, MoreExecutors.directExecutor()); return future; }