From d19bc648ae039b47fab3bebe1d501aa9a0522258 Mon Sep 17 00:00:00 2001 From: Jozef Bacigal Date: Mon, 14 Aug 2017 09:53:08 +0200 Subject: [PATCH] Remove deprecated CheckedFuture. Change-Id: Ica92197df035bffc032e27e0805816a1a8e264a8 Signed-off-by: Jozef Bacigal --- .../api/openflow/device/DeviceManager.java | 3 ++- .../impl/device/DeviceManagerImpl.java | 25 +++++-------------- .../impl/device/TransactionChainManager.java | 6 ++--- .../lifecycle/ContextChainHolderImpl.java | 11 ++++---- .../impl/device/DeviceManagerImplTest.java | 20 ++++++++++++++- .../lifecycle/ContextChainHolderImplTest.java | 4 ++- 6 files changed, 39 insertions(+), 30 deletions(-) diff --git a/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/device/DeviceManager.java b/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/device/DeviceManager.java index 223cb4c14f..8463b1f3cc 100644 --- a/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/device/DeviceManager.java +++ b/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/device/DeviceManager.java @@ -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 removeDeviceFromOperationalDS( + ListenableFuture removeDeviceFromOperationalDS( @Nonnull KeyedInstanceIdentifier ii); DeviceContext createContext(@Nonnull ConnectionContext connectionContext); diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImpl.java index a28bbf726f..414f127eb0 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImpl.java @@ -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 removeDeviceFromOperationalDS(final KeyedInstanceIdentifier ii) { + public ListenableFuture removeDeviceFromOperationalDS( + @Nonnull final KeyedInstanceIdentifier ii) { + final WriteTransaction delWtx = dataBroker.newWriteOnlyTransaction(); delWtx.delete(LogicalDatastoreType.OPERATIONAL, ii); - final CheckedFuture delFuture = delWtx.submit(); - - Futures.addCallback(delFuture, new FutureCallback() { - @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) { diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/TransactionChainManager.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/TransactionChainManager.java index b21392ec25..79d025dcde 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/TransactionChainManager.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/TransactionChainManager.java @@ -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 submitFuture = wTx.submit(); + final ListenableFuture submitFuture = wTx.submit(); lastSubmittedFuture = submitFuture; wTx = null; @@ -204,7 +204,7 @@ class TransactionChainManager implements TransactionChainListener, AutoCloseable } } } - }); + }, MoreExecutors.directExecutor()); } return true; } diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/lifecycle/ContextChainHolderImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/lifecycle/ContextChainHolderImpl.java index f521e97152..9ad10e494e 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/lifecycle/ContextChainHolderImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/lifecycle/ContextChainHolderImpl.java @@ -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); } } } diff --git a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImplTest.java b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImplTest.java index bb52fb953e..3be489dede 100644 --- a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImplTest.java +++ b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImplTest.java @@ -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 future = deviceManager + final ListenableFuture 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 failedFuture = + Futures.immediateFailedCheckedFuture( + new TransactionCommitFailedException("Test failed transaction", null, null)); + Mockito.when(writeTransaction.submit()).thenReturn(failedFuture); + final ListenableFuture 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); diff --git a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/lifecycle/ContextChainHolderImplTest.java b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/lifecycle/ContextChainHolderImplTest.java index dfe08e01cc..8c6b03bef0 100644 --- a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/lifecycle/ContextChainHolderImplTest.java +++ b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/lifecycle/ContextChainHolderImplTest.java @@ -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); -- 2.36.6