Remove deprecated CheckedFuture. 83/61583/3
authorJozef Bacigal <jozef.bacigal@pantheon.tech>
Mon, 14 Aug 2017 07:53:08 +0000 (09:53 +0200)
committerJozef Bacigal <jozef.bacigal@pantheon.tech>
Thu, 17 Aug 2017 13:34:21 +0000 (13:34 +0000)
Change-Id: Ica92197df035bffc032e27e0805816a1a8e264a8
Signed-off-by: Jozef Bacigal <jozef.bacigal@pantheon.tech>
openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/device/DeviceManager.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImpl.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/TransactionChainManager.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/lifecycle/ContextChainHolderImpl.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImplTest.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/lifecycle/ContextChainHolderImplTest.java

index 223cb4c14f110e039d4d07a33b8012c6c2357ee5..8463b1f3cc90bb4630b20982b3cfc21ae3829653 100644 (file)
@@ -9,6 +9,7 @@
 package org.opendaylight.openflowplugin.api.openflow.device;
 
 import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.ListenableFuture;
 import javax.annotation.Nonnull;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
 import org.opendaylight.openflowplugin.api.openflow.OFPManager;
@@ -32,7 +33,7 @@ public interface DeviceManager extends
      */
     void initialize();
 
-    CheckedFuture<Void, TransactionCommitFailedException> removeDeviceFromOperationalDS(
+    ListenableFuture<Void> removeDeviceFromOperationalDS(
             @Nonnull KeyedInstanceIdentifier<Node, NodeKey> ii);
 
     DeviceContext createContext(@Nonnull ConnectionContext connectionContext);
index a28bbf726f4e89c5cc90a5a30133cc53c9ed3f9c..414f127eb0974d167001fdefc0be3204c7bd16f1 100644 (file)
@@ -7,9 +7,10 @@
  */
 package org.opendaylight.openflowplugin.impl.device;
 
-import com.google.common.util.concurrent.CheckedFuture;
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
 import io.netty.util.HashedWheelTimer;
 import io.netty.util.internal.ConcurrentSet;
 import java.util.Optional;
@@ -23,7 +24,6 @@ import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
 import org.opendaylight.openflowjava.protocol.api.connection.OutboundQueueHandlerRegistration;
 import org.opendaylight.openflowplugin.api.openflow.OFPContext;
 import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext;
@@ -126,26 +126,13 @@ public class DeviceManagerImpl implements DeviceManager, ExtensionConverterProvi
     }
 
     @Override
-    public CheckedFuture<Void, TransactionCommitFailedException> removeDeviceFromOperationalDS(final KeyedInstanceIdentifier<Node, NodeKey> ii) {
+    public ListenableFuture<Void> removeDeviceFromOperationalDS(
+            @Nonnull final KeyedInstanceIdentifier<Node, NodeKey> ii) {
+
         final WriteTransaction delWtx = dataBroker.newWriteOnlyTransaction();
         delWtx.delete(LogicalDatastoreType.OPERATIONAL, ii);
-        final CheckedFuture<Void, TransactionCommitFailedException> delFuture = delWtx.submit();
-
-        Futures.addCallback(delFuture, new FutureCallback<Void>() {
-            @Override
-            public void onSuccess(final Void result) {
-                if (LOG.isDebugEnabled()) {
-                    LOG.debug("Delete Node {} was successful", ii);
-                }
-            }
-
-            @Override
-            public void onFailure(@Nonnull final Throwable t) {
-                LOG.warn("Delete node {} failed with exception {}", ii, t);
-            }
-        });
+        return delWtx.submit();
 
-        return delFuture;
     }
 
     public DeviceContext createContext(@Nonnull final ConnectionContext connectionContext) {
index b21392ec250c4474d9cc7877c2e7fc62224d3a7e..79d025dcde7b8c177ca253da1826aeaa5367299c 100644 (file)
@@ -10,10 +10,10 @@ package org.opendaylight.openflowplugin.impl.device;
 
 import com.google.common.annotations.VisibleForTesting;
 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 com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.CancellationException;
@@ -170,7 +170,7 @@ class TransactionChainManager implements TransactionChainListener, AutoCloseable
             Preconditions.checkState(TransactionChainManagerStatus.WORKING == transactionChainManagerStatus,
                     "we have here Uncompleted Transaction for node {} and we are not MASTER",
                     this.nodeId);
-            final CheckedFuture<Void, TransactionCommitFailedException> submitFuture = wTx.submit();
+            final ListenableFuture<Void> submitFuture = wTx.submit();
             lastSubmittedFuture = submitFuture;
             wTx = null;
 
@@ -204,7 +204,7 @@ class TransactionChainManager implements TransactionChainListener, AutoCloseable
                         }
                     }
                 }
-            });
+            }, MoreExecutors.directExecutor());
         }
         return true;
     }
index f521e971527b72d14c1bb6ea11a5cb09cd84a5f9..9ad10e494e2bd4d7136b706ef57a13ca199883e3 100644 (file)
@@ -18,6 +18,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
@@ -272,13 +273,13 @@ public class ContextChainHolderImpl implements ContextChainHolder, MasterChecker
 
                 deviceManager.sendNodeRemovedNotification(nodeInstanceIdentifier);
 
-                LOG.info("Removing device {} from operational DS", nodeId);
+                LOG.info("Try to remove device {} from operational DS", nodeId);
                 deviceManager
                         .removeDeviceFromOperationalDS(nodeInstanceIdentifier)
-                        .checkedGet(REMOVE_DEVICE_FROM_DS_TIMEOUT, TimeUnit.MILLISECONDS);
-            } catch (TimeoutException | TransactionCommitFailedException | NullPointerException e) {
-                LOG.info("Not able to remove device {} from operational DS. Probably removed by another cluster node.",
-                        nodeId);
+                        .get(REMOVE_DEVICE_FROM_DS_TIMEOUT, TimeUnit.MILLISECONDS);
+                LOG.info("Removing device from operational DS {} was successful", nodeId);
+            } catch (TimeoutException | ExecutionException | NullPointerException | InterruptedException e) {
+                LOG.warn("Not able to remove device {} from operational DS. ",nodeId, e);
             }
         }
     }
index bb52fb953ea8cec1815765bc0a2a800346465b35..3be489dede78b4e6edbdd413c32ac1381a3c12ae 100644 (file)
@@ -17,15 +17,19 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
 import io.netty.util.HashedWheelTimer;
 import java.lang.reflect.Field;
 import java.math.BigInteger;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutionException;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.mockito.Mockito;
 import org.mockito.runners.MockitoJUnitRunner;
 import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
@@ -56,6 +60,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow.provider.config.rev160510.NonZeroUint32Type;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow.provider.config.rev160510.OpenflowProviderConfigBuilder;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcError;
 
 @RunWith(MockitoJUnitRunner.class)
 public class DeviceManagerImplTest {
@@ -152,7 +157,7 @@ public class DeviceManagerImplTest {
 
     @Test
     public void removeDeviceFromOperationalDS() throws Exception {
-        final CheckedFuture<Void, TransactionCommitFailedException> future = deviceManager
+        final ListenableFuture<Void> future = deviceManager
                 .removeDeviceFromOperationalDS(DUMMY_IDENTIFIER);
 
         future.get();
@@ -160,6 +165,19 @@ public class DeviceManagerImplTest {
         verify(writeTransaction).delete(LogicalDatastoreType.OPERATIONAL, DUMMY_IDENTIFIER);
     }
 
+    @Test(expected = ExecutionException.class)
+    public void removeDeviceFromOperationalDSException() throws Exception {
+        final CheckedFuture<Void, TransactionCommitFailedException> failedFuture =
+                Futures.immediateFailedCheckedFuture(
+                        new TransactionCommitFailedException("Test failed transaction", null, null));
+        Mockito.when(writeTransaction.submit()).thenReturn(failedFuture);
+        final ListenableFuture<Void> future = deviceManager
+                .removeDeviceFromOperationalDS(DUMMY_IDENTIFIER);
+        future.get();
+        assertTrue(future.isDone());
+        verify(writeTransaction).delete(LogicalDatastoreType.OPERATIONAL, DUMMY_IDENTIFIER);
+    }
+
     @Test
     public void sendNodeAddedNotification() throws Exception {
         deviceManager.sendNodeAddedNotification(DUMMY_IDENTIFIER);
index dfe08e01cc0a1ae8dfe4dec2e37c7442e7fb1f4d..8c6b03bef0b2965c77430ae95db15cccac8760d7 100644 (file)
@@ -21,6 +21,7 @@ import org.opendaylight.controller.md.sal.common.api.clustering.Entity;
 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipChange;
 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipListenerRegistration;
 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
 import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext;
@@ -40,6 +41,7 @@ import org.opendaylight.openflowplugin.api.openflow.statistics.StatisticsManager
 import org.opendaylight.openflowplugin.impl.mastership.MastershipChangeServiceManagerImpl;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FeaturesReply;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.rf.state.rev170713.ResultState;
+import org.opendaylight.yangtools.yang.common.RpcError;
 
 @RunWith(MockitoJUnitRunner.class)
 public class ContextChainHolderImplTest {
@@ -273,8 +275,8 @@ public class ContextChainHolderImplTest {
         contextChainHolder.ownershipChanged(ownershipChange);
         Mockito.verify(deviceManager).removeDeviceFromOperationalDS(Mockito.any());
     }
-    @Test
 
+    @Test
     public void ownershipChangedButHasOwner() throws Exception {
         registration.close();
         contextChainHolder.createContextChain(connectionContext);