Binding v2 - remove checked future 57/59757/3
authorJakub Toth <jakub.toth@pantheon.tech>
Fri, 23 Jun 2017 10:25:00 +0000 (12:25 +0200)
committerRobert Varga <nite@hq.sk>
Sat, 15 Jul 2017 22:17:44 +0000 (22:17 +0000)
Change-Id: I641ae876a76ba8e06d60ec5c63d6bdf7e3695973
Signed-off-by: Jakub Toth <jakub.toth@pantheon.tech>
binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/operation/BindingDOMOperationImplementationAdapter.java
binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/operation/LazyDOMOperationResultFuture.java
binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/operation/RpcServiceAdapter.java
binding2/mdsal-binding2-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/adapter/impl/transaction/BindingDOMTransactionChainAdapter.java

index 749a9ff1af567347d874d9c757933b9cc9070fd0..e7775b3fe4f66bef8ce0f918a38d32f6de7dba1c 100644 (file)
@@ -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<DOMRpcResult, DOMRpcException> 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<RpcResult<?>> bindingResult = invoke(schemaPath, bindingInput);
-        return transformResult(bindingResult);
+        return Futures.makeChecked(transformResult(bindingResult),
+                new ExceptionMapper<DOMRpcException>("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<DOMRpcResult, DOMRpcException>
+    private ListenableFuture<DOMRpcResult>
             transformResult(final ListenableFuture<RpcResult<?>> bindingResult) {
         return LazyDOMOperationResultFuture.create(codec, bindingResult);
     }
index 878e8e9eb7aae194a838ffb07fbfb6610da41557..c1d9a0aa288417e679bedbad5def8bcd600bc627 100644 (file)
@@ -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<DOMRpcResult, DOMRpcException> {
+final class LazyDOMOperationResultFuture implements ListenableFuture<DOMRpcResult> {
 
     private final ListenableFuture<RpcResult<?>> bindingFuture;
     private final BindingNormalizedNodeCodecRegistry codec;
@@ -42,7 +39,7 @@ final class LazyDOMOperationResultFuture implements CheckedFuture<DOMRpcResult,
         this.codec = Preconditions.checkNotNull(codec, "codec");
     }
 
-    static CheckedFuture<DOMRpcResult, DOMRpcException> create(final BindingNormalizedNodeCodecRegistry codec,
+    static ListenableFuture<DOMRpcResult> create(final BindingNormalizedNodeCodecRegistry codec,
             final ListenableFuture<RpcResult<?>> bindingResult) {
         return new LazyDOMOperationResultFuture(bindingResult, codec);
     }
@@ -78,27 +75,6 @@ final class LazyDOMOperationResultFuture implements CheckedFuture<DOMRpcResult,
         return transformIfNecessary(bindingFuture.get(timeout, unit));
     }
 
-    @Override
-    public DOMRpcResult checkedGet() throws DOMRpcException {
-        try {
-            return get();
-        } catch (InterruptedException | ExecutionException e) {
-            // FIXME: Add exception mapping
-            throw Throwables.propagate(e);
-        }
-    }
-
-    @Override
-    public DOMRpcResult checkedGet(@Nonnull final long timeout, final TimeUnit unit)
-            throws TimeoutException, DOMRpcException {
-        try {
-            return get(timeout, unit);
-        } catch (InterruptedException | ExecutionException e) {
-            // FIXME: Add exception mapping
-            throw Throwables.propagate(e);
-        }
-    }
-
     @Override
     public boolean isCancelled() {
         return bindingFuture.isCancelled();
index e988616f28e1dd0801a3414ec0107f691da0e527..7681df8db5caf6ad3f42dec7037ce56b458b5d8f 100644 (file)
@@ -12,9 +12,10 @@ import com.google.common.base.Function;
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableMap;
-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 com.google.common.util.concurrent.MoreExecutors;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
@@ -28,7 +29,6 @@ import org.opendaylight.mdsal.binding.javav2.spec.base.InstanceIdentifier;
 import org.opendaylight.mdsal.binding.javav2.spec.base.Instantiable;
 import org.opendaylight.mdsal.binding.javav2.spec.base.Rpc;
 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.api.DOMRpcService;
 import org.opendaylight.mdsal.dom.spi.RpcRoutingStrategy;
@@ -149,13 +149,13 @@ class RpcServiceAdapter implements InvocationHandler {
         }
 
         private ListenableFuture<RpcResult<?>> invoke0(final SchemaPath schemaPath, final NormalizedNode<?, ?> input) {
-            final CheckedFuture<DOMRpcResult, DOMRpcException> result = delegate.invokeRpc(schemaPath, input);
-
-            if (result instanceof LazyDOMOperationResultFuture) {
-                return ((LazyDOMOperationResultFuture) result).getBindingFuture();
+            final ListenableFuture<DOMRpcResult> 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<RpcResult<?>> transformFuture(final SchemaPath rpc,
@@ -170,7 +170,7 @@ class RpcServiceAdapter implements InvocationHandler {
                     bindingResult = null;
                 }
                 return RpcResult.class.cast(RpcResultBuilder.success(bindingResult).build());
-            });
+            }, MoreExecutors.directExecutor());
         }
 
     }
index 4824f18ce43dfdb3f1c816f0112a4a5b610de9ba..3de3ddf68dfb83cf145faa8af854a1001d0ed7ba 100644 (file)
@@ -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<Void, TransactionCommitFailedException> listenForFailure(final WriteTransaction tx,
-            final CheckedFuture<Void, TransactionCommitFailedException> future) {
-        Futures.addCallback(future, new FutureCallback<Void>() {
+    private <T, F extends ListenableFuture<T>> F listenForFailure(final WriteTransaction tx, final F future) {
+        Futures.addCallback(future, new FutureCallback<T>() {
             @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;
     }