From: Robert Varga Date: Wed, 4 Jul 2018 15:06:27 +0000 (+0200) Subject: Convert users from submit() to commit() X-Git-Tag: release/fluorine~35 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=8283d3531a40ff2f8b00ed02cd00b152fb2111fb;p=netconf.git Convert users from submit() to commit() This gets rid of CheckedFutures and allows us to use FluentFuture features. Change-Id: Ie95bb9ce0d0bb6195f9c6355e644a8563165a953 Signed-off-by: Robert Varga --- diff --git a/netconf/mdsal-netconf-monitoring/src/main/java/org/opendaylight/controller/config/yang/netconf/mdsal/monitoring/MonitoringToMdsalWriter.java b/netconf/mdsal-netconf-monitoring/src/main/java/org/opendaylight/controller/config/yang/netconf/mdsal/monitoring/MonitoringToMdsalWriter.java index 66079b9ed8..27d0280d26 100644 --- a/netconf/mdsal-netconf-monitoring/src/main/java/org/opendaylight/controller/config/yang/netconf/mdsal/monitoring/MonitoringToMdsalWriter.java +++ b/netconf/mdsal-netconf-monitoring/src/main/java/org/opendaylight/controller/config/yang/netconf/mdsal/monitoring/MonitoringToMdsalWriter.java @@ -10,14 +10,13 @@ package org.opendaylight.controller.config.yang.netconf.mdsal.monitoring; import com.google.common.base.Preconditions; import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.MoreExecutors; import java.util.Collection; import java.util.function.Consumer; -import javax.annotation.Nullable; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.netconf.api.monitoring.NetconfMonitoringService; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.NetconfState; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Capabilities; @@ -103,9 +102,9 @@ public final class MonitoringToMdsalWriter implements AutoCloseable, NetconfMoni Preconditions.checkState(dataBroker != null); final WriteTransaction tx = dataBroker.newWriteOnlyTransaction(); txUser.accept(tx); - Futures.addCallback(tx.submit(), new FutureCallback() { + tx.commit().addCallback(new FutureCallback() { @Override - public void onSuccess(@Nullable final Void result) { + public void onSuccess(final CommitInfo result) { LOG.debug("Netconf state updated successfully"); } diff --git a/netconf/mdsal-netconf-monitoring/src/test/java/org/opendaylight/controller/config/yang/netconf/mdsal/monitoring/MonitoringToMdsalWriterTest.java b/netconf/mdsal-netconf-monitoring/src/test/java/org/opendaylight/controller/config/yang/netconf/mdsal/monitoring/MonitoringToMdsalWriterTest.java index 5304743c8c..a200940d74 100644 --- a/netconf/mdsal-netconf-monitoring/src/test/java/org/opendaylight/controller/config/yang/netconf/mdsal/monitoring/MonitoringToMdsalWriterTest.java +++ b/netconf/mdsal-netconf-monitoring/src/test/java/org/opendaylight/controller/config/yang/netconf/mdsal/monitoring/MonitoringToMdsalWriterTest.java @@ -15,7 +15,6 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.verify; -import com.google.common.util.concurrent.Futures; import java.util.ArrayList; import java.util.List; import org.junit.Before; @@ -26,6 +25,7 @@ import org.mockito.MockitoAnnotations; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.netconf.api.monitoring.NetconfMonitoringService; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.NetconfState; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Capabilities; @@ -35,6 +35,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.mon import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Sessions; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.Session; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.SessionBuilder; +import org.opendaylight.yangtools.util.concurrent.FluentFutures; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; public class MonitoringToMdsalWriterTest { @@ -42,6 +43,9 @@ public class MonitoringToMdsalWriterTest { private static final InstanceIdentifier INSTANCE_IDENTIFIER = InstanceIdentifier.create(NetconfState.class); + @Mock + private CommitInfo info; + @Mock private NetconfMonitoringService monitoring; @Mock @@ -62,7 +66,7 @@ public class MonitoringToMdsalWriterTest { doNothing().when(writeTransaction).put(eq(LogicalDatastoreType.OPERATIONAL), any(), any()); doNothing().when(writeTransaction).delete(eq(LogicalDatastoreType.OPERATIONAL), any()); - doReturn(Futures.immediateCheckedFuture(null)).when(writeTransaction).submit(); + doReturn(FluentFutures.immediateFluentFuture(info)).when(writeTransaction).commit(); writer = new MonitoringToMdsalWriter(monitoring, dataBroker); } @@ -73,7 +77,7 @@ public class MonitoringToMdsalWriterTest { writer.close(); InOrder inOrder = inOrder(writeTransaction); inOrder.verify(writeTransaction).delete(LogicalDatastoreType.OPERATIONAL, INSTANCE_IDENTIFIER); - inOrder.verify(writeTransaction).submit(); + inOrder.verify(writeTransaction).commit(); } @Test @@ -85,7 +89,7 @@ public class MonitoringToMdsalWriterTest { writer.onCapabilitiesChanged(capabilities); InOrder inOrder = inOrder(writeTransaction); inOrder.verify(writeTransaction).put(LogicalDatastoreType.OPERATIONAL, capabilitiesId, capabilities); - inOrder.verify(writeTransaction).submit(); + inOrder.verify(writeTransaction).commit(); } @Test @@ -97,7 +101,7 @@ public class MonitoringToMdsalWriterTest { writer.onSchemasChanged(schemas); InOrder inOrder = inOrder(writeTransaction); inOrder.verify(writeTransaction).put(LogicalDatastoreType.OPERATIONAL, schemasId, schemas); - inOrder.verify(writeTransaction).submit(); + inOrder.verify(writeTransaction).commit(); } @Test @@ -113,7 +117,7 @@ public class MonitoringToMdsalWriterTest { writer.onSessionStarted(session); InOrder inOrder = inOrder(writeTransaction); inOrder.verify(writeTransaction).put(LogicalDatastoreType.OPERATIONAL, id, session); - inOrder.verify(writeTransaction).submit(); + inOrder.verify(writeTransaction).commit(); } @Test @@ -129,7 +133,7 @@ public class MonitoringToMdsalWriterTest { writer.onSessionEnded(session); InOrder inOrder = inOrder(writeTransaction); inOrder.verify(writeTransaction).delete(LogicalDatastoreType.OPERATIONAL, id); - inOrder.verify(writeTransaction).submit(); + inOrder.verify(writeTransaction).commit(); } @Test @@ -156,7 +160,7 @@ public class MonitoringToMdsalWriterTest { InOrder inOrder = inOrder(writeTransaction); inOrder.verify(writeTransaction).put(LogicalDatastoreType.OPERATIONAL, id1, session1); inOrder.verify(writeTransaction).put(LogicalDatastoreType.OPERATIONAL, id2, session2); - inOrder.verify(writeTransaction).submit(); + inOrder.verify(writeTransaction).commit(); } @Test diff --git a/netconf/mdsal-netconf-yang-library/src/main/java/org/opendaylight/netconf/mdsal/yang/library/SchemaServiceToMdsalWriter.java b/netconf/mdsal-netconf-yang-library/src/main/java/org/opendaylight/netconf/mdsal/yang/library/SchemaServiceToMdsalWriter.java index b3fc2abfb0..7fa35c7365 100644 --- a/netconf/mdsal-netconf-yang-library/src/main/java/org/opendaylight/netconf/mdsal/yang/library/SchemaServiceToMdsalWriter.java +++ b/netconf/mdsal-netconf-yang-library/src/main/java/org/opendaylight/netconf/mdsal/yang/library/SchemaServiceToMdsalWriter.java @@ -9,17 +9,16 @@ package org.opendaylight.netconf.mdsal.yang.library; import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.MoreExecutors; import java.util.List; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; -import javax.annotation.Nullable; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.sal.core.api.model.SchemaService; +import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesState; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesStateBuilder; @@ -80,9 +79,9 @@ public class SchemaServiceToMdsalWriter implements SchemaContextListener, AutoCl MODULES_STATE_INSTANCE_IDENTIFIER, newModuleState); LOG.debug("Trying to write new module-state: {}", newModuleState); - Futures.addCallback(tx.submit(), new FutureCallback() { + tx.commit().addCallback(new FutureCallback() { @Override - public void onSuccess(@Nullable final Void result) { + public void onSuccess(final CommitInfo result) { LOG.debug("Modules state updated successfully"); } diff --git a/netconf/mdsal-netconf-yang-library/src/test/java/org/opendaylight/netconf/mdsal/yang/library/SchemaServiceToMdsalWriterTest.java b/netconf/mdsal-netconf-yang-library/src/test/java/org/opendaylight/netconf/mdsal/yang/library/SchemaServiceToMdsalWriterTest.java index ce303751bd..296cd3b231 100644 --- a/netconf/mdsal-netconf-yang-library/src/test/java/org/opendaylight/netconf/mdsal/yang/library/SchemaServiceToMdsalWriterTest.java +++ b/netconf/mdsal-netconf-yang-library/src/test/java/org/opendaylight/netconf/mdsal/yang/library/SchemaServiceToMdsalWriterTest.java @@ -5,17 +5,16 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.netconf.mdsal.yang.library; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import com.google.common.collect.ImmutableList; -import com.google.common.util.concurrent.Futures; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; @@ -24,6 +23,7 @@ import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.sal.core.api.model.SchemaService; +import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesState; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesStateBuilder; @@ -36,6 +36,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.librar import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.module.SubmoduleBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.YangIdentifier; import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.util.concurrent.FluentFutures; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; @@ -52,6 +53,8 @@ public class SchemaServiceToMdsalWriterTest { private DataBroker dataBroker; @Mock private WriteTransaction writeTransaction; + @Mock + private CommitInfo info; private SchemaServiceToMdsalWriter schemaServiceToMdsalWriter; @@ -61,7 +64,7 @@ public class SchemaServiceToMdsalWriterTest { when(dataBroker.newWriteOnlyTransaction()).thenReturn(writeTransaction); doNothing().when(writeTransaction).put(eq(LogicalDatastoreType.OPERATIONAL), any(), any()); - when(writeTransaction.submit()).thenReturn(Futures.immediateCheckedFuture(null)); + doReturn(FluentFutures.immediateFluentFuture(info)).when(writeTransaction).commit(); when(schemaService.registerSchemaContextListener(any())).thenReturn( new ListenerRegistration() { @Override diff --git a/netconf/netconf-console/src/main/java/org/opendaylight/netconf/console/impl/NetconfCommandsImpl.java b/netconf/netconf-console/src/main/java/org/opendaylight/netconf/console/impl/NetconfCommandsImpl.java index 21d1697659..6c330dc40d 100644 --- a/netconf/netconf-console/src/main/java/org/opendaylight/netconf/console/impl/NetconfCommandsImpl.java +++ b/netconf/netconf-console/src/main/java/org/opendaylight/netconf/console/impl/NetconfCommandsImpl.java @@ -11,7 +11,6 @@ package org.opendaylight.netconf.console.impl; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.MoreExecutors; import java.util.ArrayList; import java.util.Collections; @@ -20,11 +19,12 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.UUID; +import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; import org.opendaylight.controller.md.sal.binding.api.DataBroker; 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.mdsal.common.api.CommitInfo; import org.opendaylight.netconf.console.api.NetconfCommands; import org.opendaylight.netconf.console.utils.NetconfConsoleConstants; import org.opendaylight.netconf.console.utils.NetconfConsoleUtils; @@ -162,36 +162,33 @@ public class NetconfCommandsImpl implements NetconfCommands { final WriteTransaction transaction = dataBroker.newWriteOnlyTransaction(); transaction.put(LogicalDatastoreType.CONFIGURATION, NetconfIidFactory.netconfNodeIid(nodeId.getValue()), node); - Futures.addCallback(transaction.submit(), new FutureCallback() { - + transaction.commit().addCallback(new FutureCallback() { @Override - public void onSuccess(final Void result) { + public void onSuccess(final CommitInfo result) { LOG.debug("NetconfNode={} created successfully", netconfNode); } @Override public void onFailure(final Throwable throwable) { - LOG.error("Failed to created NetconfNode={}", netconfNode); - throw new RuntimeException(throwable); + LOG.error("Failed to created NetconfNode={}", netconfNode, throwable); } }, MoreExecutors.directExecutor()); } @Override public boolean disconnectDevice(final String netconfNodeId) { - boolean result = false; final WriteTransaction transaction = dataBroker.newWriteOnlyTransaction(); - InstanceIdentifier iid = NetconfIidFactory.netconfNodeIid(netconfNodeId); + final InstanceIdentifier iid = NetconfIidFactory.netconfNodeIid(netconfNodeId); transaction.delete(LogicalDatastoreType.CONFIGURATION, iid); try { LOG.debug("Deleting netconf node: {}", netconfNodeId); - transaction.submit().checkedGet(); - result = true; - } catch (final TransactionCommitFailedException e) { + transaction.commit().get(); + return true; + } catch (final InterruptedException | ExecutionException e) { LOG.error("Unable to remove node with Iid {}", iid, e); + return false; } - return result; } @Override @@ -244,17 +241,15 @@ public class NetconfCommandsImpl implements NetconfCommands { transaction.put(LogicalDatastoreType.CONFIGURATION, NetconfIidFactory.netconfNodeIid(updatedNode.getNodeId().getValue()), updatedNode); - Futures.addCallback(transaction.submit(), new FutureCallback() { - + transaction.commit().addCallback(new FutureCallback() { @Override - public void onSuccess(final Void result) { + public void onSuccess(final CommitInfo result) { LOG.debug("NetconfNode={} updated successfully", netconfNode); } @Override public void onFailure(final Throwable throwable) { - LOG.error("Failed to updated NetconfNode={}", netconfNode); - throw new RuntimeException(throwable); + LOG.error("Failed to updated NetconfNode={}", netconfNode, throwable); } }, MoreExecutors.directExecutor()); diff --git a/netconf/netconf-console/src/test/java/org/opendaylight/netconf/console/impl/NetconfCommandsImplTest.java b/netconf/netconf-console/src/test/java/org/opendaylight/netconf/console/impl/NetconfCommandsImplTest.java index 0b5e6083fe..8b1381e22c 100644 --- a/netconf/netconf-console/src/test/java/org/opendaylight/netconf/console/impl/NetconfCommandsImplTest.java +++ b/netconf/netconf-console/src/test/java/org/opendaylight/netconf/console/impl/NetconfCommandsImplTest.java @@ -22,6 +22,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import javassist.ClassPool; @@ -32,7 +33,6 @@ import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.binding.impl.BindingDOMDataBrokerAdapter; import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.md.sal.dom.broker.impl.SerializedDOMDataBroker; import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStoreFactory; @@ -121,7 +121,7 @@ public class NetconfCommandsImplTest { } @Test - public void testListDevice() throws TimeoutException, TransactionCommitFailedException { + public void testListDevice() throws TimeoutException, InterruptedException, ExecutionException { createTopology(LogicalDatastoreType.OPERATIONAL); final Map map = netconfCommands.listDevices(); @@ -133,7 +133,7 @@ public class NetconfCommandsImplTest { } @Test - public void testShowDevice() throws TimeoutException, TransactionCommitFailedException { + public void testShowDevice() throws TimeoutException, InterruptedException, ExecutionException { createTopology(LogicalDatastoreType.OPERATIONAL); final Map mapCorrect = netconfCommands.showDevice(IP, String.valueOf(PORT)); @@ -150,12 +150,11 @@ public class NetconfCommandsImplTest { final Map mapId = netconfCommands.showDevice(NODE_ID); assertTrue(mapId.containsKey(NODE_ID)); - assertBaseNodeAttributesImmutableList((Map) mapId.get(NODE_ID)); + assertBaseNodeAttributesImmutableList((Map) mapId.get(NODE_ID)); } @Test - public void testConnectDisconnectDevice() - throws InterruptedException, TimeoutException, TransactionCommitFailedException { + public void testConnectDisconnectDevice() throws InterruptedException, TimeoutException, ExecutionException { final NetconfNode netconfNode = new NetconfNodeBuilder() .setPort(new PortNumber(7777)).setHost(HostBuilder.getDefaultInstance("10.10.1.1")).build(); @@ -191,7 +190,7 @@ public class NetconfCommandsImplTest { } @Test - public void testUpdateDevice() throws TimeoutException, TransactionCommitFailedException { + public void testUpdateDevice() throws TimeoutException, InterruptedException, ExecutionException { //We need both, read data from OPERATIONAL DS and update data in CONFIGURATIONAL DS createTopology(LogicalDatastoreType.OPERATIONAL); createTopology(LogicalDatastoreType.CONFIGURATION); @@ -218,7 +217,7 @@ public class NetconfCommandsImplTest { } @Test - public void testNetconfNodeFromIp() throws TimeoutException, TransactionCommitFailedException { + public void testNetconfNodeFromIp() throws TimeoutException, InterruptedException, ExecutionException { final List nodesNotExist = NetconfConsoleUtils.getNetconfNodeFromIp(IP, dataBroker); assertNull(nodesNotExist); createTopology(LogicalDatastoreType.OPERATIONAL); @@ -228,7 +227,7 @@ public class NetconfCommandsImplTest { } private void createTopology(final LogicalDatastoreType dataStoreType) - throws TransactionCommitFailedException, TimeoutException { + throws TimeoutException, InterruptedException, ExecutionException { final List nodes = new ArrayList<>(); final Node node = getNetconfNode(NODE_ID, IP, PORT, CONN_STATUS, CAP_PREFIX); nodes.add(node); @@ -239,7 +238,7 @@ public class NetconfCommandsImplTest { final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction(); writeTransaction.put(dataStoreType, NetconfIidFactory.NETCONF_TOPOLOGY_IID, topology); - writeTransaction.submit().checkedGet(2, TimeUnit.SECONDS); + writeTransaction.commit().get(2, TimeUnit.SECONDS); } private static Node getNetconfNode(final String nodeIdent, final String ip, final int portNumber, diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyManager.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyManager.java index 6fe65a21f4..a87f77c2e9 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyManager.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyManager.java @@ -13,7 +13,6 @@ import akka.util.Timeout; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.MoreExecutors; import io.netty.util.concurrent.EventExecutor; import java.util.Collection; @@ -34,6 +33,7 @@ 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.dom.api.DOMMountPointService; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; +import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration; import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier; @@ -245,9 +245,9 @@ public class NetconfTopologyManager final WriteTransaction wtx = dataBroker.newWriteOnlyTransaction(); initTopology(wtx, LogicalDatastoreType.CONFIGURATION); initTopology(wtx, LogicalDatastoreType.OPERATIONAL); - Futures.addCallback(wtx.submit(), new FutureCallback() { + wtx.commit().addCallback(new FutureCallback() { @Override - public void onSuccess(final Void result) { + public void onSuccess(final CommitInfo result) { LOG.debug("topology initialization successful"); } diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/WriteAdapter.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/WriteAdapter.java index 250b893099..c798673eef 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/WriteAdapter.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/WriteAdapter.java @@ -5,20 +5,18 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.netconf.topology.singleton.impl.actors; import akka.actor.ActorContext; import akka.actor.ActorRef; import akka.actor.Status.Failure; import akka.actor.Status.Success; -import com.google.common.util.concurrent.CheckedFuture; +import com.google.common.util.concurrent.FluentFuture; import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.MoreExecutors; import javax.annotation.Nonnull; -import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; +import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.netconf.topology.singleton.messages.NormalizedNodeMessage; import org.opendaylight.netconf.topology.singleton.messages.transactions.CancelRequest; import org.opendaylight.netconf.topology.singleton.messages.transactions.DeleteRequest; @@ -45,11 +43,11 @@ class WriteAdapter { } private void submit(final ActorRef requester, final ActorRef self, final ActorContext context) { - final CheckedFuture submitFuture = tx.submit(); + final FluentFuture submitFuture = tx.commit(); context.stop(self); - Futures.addCallback(submitFuture, new FutureCallback() { + submitFuture.addCallback(new FutureCallback() { @Override - public void onSuccess(final Void result) { + public void onSuccess(final CommitInfo result) { requester.tell(new Success(null), self); } diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImplTest.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImplTest.java index 5249788b4d..382fa98ef9 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImplTest.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImplTest.java @@ -23,7 +23,6 @@ import static org.mockito.MockitoAnnotations.initMocks; import akka.actor.ActorSystem; import akka.util.Timeout; import com.google.common.net.InetAddresses; -import com.google.common.util.concurrent.Futures; import io.netty.util.concurrent.EventExecutor; import java.net.InetSocketAddress; import java.util.concurrent.ExecutorService; @@ -39,6 +38,7 @@ import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener; import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; +import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider; import org.opendaylight.netconf.client.NetconfClientDispatcher; import org.opendaylight.netconf.client.NetconfClientSessionListener; @@ -63,6 +63,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev15 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; +import org.opendaylight.yangtools.util.concurrent.FluentFutures; import scala.concurrent.duration.Duration; public class RemoteDeviceConnectorImplTest { @@ -71,6 +72,9 @@ public class RemoteDeviceConnectorImplTest { private static final String TOPOLOGY_ID = "testing-topology"; private static final Timeout TIMEOUT = new Timeout(Duration.create(5, "seconds")); + @Mock + private CommitInfo info; + @Mock private DataBroker dataBroker; @@ -118,7 +122,7 @@ public class RemoteDeviceConnectorImplTest { doReturn(writeTx).when(txChain).newWriteOnlyTransaction(); doNothing().when(writeTx).merge(eq(LogicalDatastoreType.OPERATIONAL), any(), any()); doReturn("Some object").when(writeTx).getIdentifier(); - doReturn(Futures.immediateCheckedFuture(null)).when(writeTx).submit(); + doReturn(FluentFutures.immediateFluentFuture(info)).when(writeTx).commit(); builder = new NetconfTopologySetup.NetconfTopologySetupBuilder(); builder.setDataBroker(dataBroker); builder.setRpcProviderRegistry(rpcProviderRegistry); diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/actors/WriteTransactionActorTestAdapter.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/actors/WriteTransactionActorTestAdapter.java index 14fc1d7b42..363ae63e4a 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/actors/WriteTransactionActorTestAdapter.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/actors/WriteTransactionActorTestAdapter.java @@ -8,6 +8,8 @@ package org.opendaylight.netconf.topology.singleton.impl.actors; import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.timeout; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -21,16 +23,17 @@ import akka.actor.ActorSystem; import akka.actor.Status.Failure; import akka.actor.Status.Success; import akka.testkit.TestProbe; -import com.google.common.util.concurrent.Futures; import org.junit.Test; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; +import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.netconf.topology.singleton.messages.NormalizedNodeMessage; import org.opendaylight.netconf.topology.singleton.messages.transactions.CancelRequest; import org.opendaylight.netconf.topology.singleton.messages.transactions.DeleteRequest; import org.opendaylight.netconf.topology.singleton.messages.transactions.MergeRequest; import org.opendaylight.netconf.topology.singleton.messages.transactions.PutRequest; import org.opendaylight.netconf.topology.singleton.messages.transactions.SubmitRequest; +import org.opendaylight.yangtools.util.concurrent.FluentFutures; import org.opendaylight.yangtools.yang.common.RpcError; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; @@ -73,7 +76,7 @@ public abstract class WriteTransactionActorTestAdapter { } @Test - public void testCancel() throws Exception { + public void testCancel() { when(mockWriteTx.cancel()).thenReturn(true); actorRef.tell(new CancelRequest(), probe.ref()); @@ -82,29 +85,29 @@ public abstract class WriteTransactionActorTestAdapter { } @Test - public void testSubmit() throws Exception { - when(mockWriteTx.submit()).thenReturn(Futures.immediateCheckedFuture(null)); + public void testSubmit() { + doReturn(FluentFutures.immediateFluentFuture(mock(CommitInfo.class))).when(mockWriteTx).commit(); actorRef.tell(new SubmitRequest(), probe.ref()); - verify(mockWriteTx).submit(); + verify(mockWriteTx).commit(); probe.expectMsgClass(Success.class); } @Test - public void testSubmitFail() throws Exception { + public void testSubmitFail() { final RpcError rpcError = RpcResultBuilder.newError(RpcError.ErrorType.APPLICATION, "fail", "fail"); final TransactionCommitFailedException cause = new TransactionCommitFailedException("fail", rpcError); - when(mockWriteTx.submit()).thenReturn(Futures.immediateFailedCheckedFuture(cause)); + when(mockWriteTx.commit()).thenReturn(FluentFutures.immediateFailedFluentFuture(cause)); actorRef.tell(new SubmitRequest(), probe.ref()); - verify(mockWriteTx).submit(); + verify(mockWriteTx).commit(); final Failure response = probe.expectMsgClass(Failure.class); assertEquals(cause, response.cause()); } @Test - public void testIdleTimeout() throws Exception { + public void testIdleTimeout() { final TestProbe testProbe = new TestProbe(system); testProbe.watch(actorRef); verify(mockWriteTx, timeout(3000)).cancel(); diff --git a/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/impl/NetconfConnectorFactoryImpl.java b/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/impl/NetconfConnectorFactoryImpl.java index f27f09eb7e..781eb2aff1 100644 --- a/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/impl/NetconfConnectorFactoryImpl.java +++ b/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/impl/NetconfConnectorFactoryImpl.java @@ -8,12 +8,12 @@ package org.opendaylight.netconf.topology.impl; import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.MoreExecutors; import javax.annotation.Nullable; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.netconf.topology.api.NetconfConnectorFactory; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Host; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.HostBuilder; @@ -82,9 +82,9 @@ public class NetconfConnectorFactoryImpl implements NetconfConnectorFactory { final InstanceIdentifier nodePath = TOPOLOGY_PATH.child(Node.class, nodeKey); final WriteTransaction transaction = dataBroker.newWriteOnlyTransaction(); transaction.put(LogicalDatastoreType.CONFIGURATION, nodePath, node); - Futures.addCallback(transaction.submit(), new FutureCallback() { + transaction.commit().addCallback(new FutureCallback() { @Override - public void onSuccess(@Nullable final Void result) { + public void onSuccess(@Nullable final CommitInfo result) { LOG.debug("Node {} was successfully added to the topology", instanceName); } diff --git a/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImpl.java b/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImpl.java index a17369f144..86f08cd532 100644 --- a/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImpl.java +++ b/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImpl.java @@ -9,7 +9,6 @@ package org.opendaylight.netconf.topology.impl; import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.MoreExecutors; import io.netty.util.concurrent.EventExecutor; import java.util.Collection; @@ -25,6 +24,7 @@ import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; 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.dom.api.DOMMountPointService; +import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.netconf.client.NetconfClientDispatcher; import org.opendaylight.netconf.sal.connect.api.RemoteDeviceHandler; import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences; @@ -87,9 +87,9 @@ public class NetconfTopologyImpl extends AbstractNetconfTopology final WriteTransaction wtx = dataBroker.newWriteOnlyTransaction(); initTopology(wtx, LogicalDatastoreType.CONFIGURATION); initTopology(wtx, LogicalDatastoreType.OPERATIONAL); - Futures.addCallback(wtx.submit(), new FutureCallback() { + wtx.commit().addCallback(new FutureCallback() { @Override - public void onSuccess(final Void result) { + public void onSuccess(final CommitInfo result) { LOG.debug("topology initialization successful"); } diff --git a/netconf/netconf-topology/src/test/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImplTest.java b/netconf/netconf-topology/src/test/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImplTest.java index e083b5446b..149d727f83 100644 --- a/netconf/netconf-topology/src/test/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImplTest.java +++ b/netconf/netconf-topology/src/test/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImplTest.java @@ -5,11 +5,11 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.netconf.topology.impl; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; @@ -38,8 +38,8 @@ import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; 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.controller.md.sal.dom.api.DOMMountPointService; +import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.netconf.client.NetconfClientDispatcher; import org.opendaylight.netconf.client.NetconfClientSessionListener; import org.opendaylight.netconf.client.conf.NetconfClientConfiguration; @@ -65,6 +65,7 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology. import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey; +import org.opendaylight.yangtools.util.concurrent.FluentFutures; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.parser.repo.SharedSchemaRepository; @@ -125,7 +126,7 @@ public class NetconfTopologyImplTest { when(dataBroker.newWriteOnlyTransaction()).thenReturn(wtx); doNothing().when(wtx) .merge(any(LogicalDatastoreType.class), any(InstanceIdentifier.class), any(DataObject.class)); - when(wtx.submit()).thenReturn(Futures.immediateCheckedFuture(null)); + doReturn(FluentFutures.immediateFluentFuture(mock(CommitInfo.class))).when(wtx).commit(); topology.init(); //verify initialization of topology diff --git a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/MdsalOperationProvider.java b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/MdsalOperationProvider.java index 268e705e7c..86941020ee 100644 --- a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/MdsalOperationProvider.java +++ b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/MdsalOperationProvider.java @@ -15,9 +15,9 @@ import java.util.Collections; import java.util.EnumMap; import java.util.Map; import java.util.Set; +import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; import org.opendaylight.controller.md.sal.dom.broker.impl.SerializedDOMDataBroker; @@ -136,9 +136,9 @@ class MdsalOperationProvider implements NetconfOperationServiceFactory { tx.put(LogicalDatastoreType.OPERATIONAL, yangInstanceIdentifier, netconf); try { - tx.submit().checkedGet(); + tx.commit().get(); LOG.debug("Netconf state updated successfully"); - } catch (TransactionCommitFailedException e) { + } catch (InterruptedException | ExecutionException e) { LOG.warn("Unable to update netconf state", e); }