From 1a95d3635ddb76830f45bafa7e04fb8279bc19ce Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 28 Mar 2019 20:41:39 +0100 Subject: [PATCH] Bump mdsal to 4.0.0 This bumps mdsal to 4.0.0, adjusting to changed APIs: - 'type empty' mapped to yang.common.Empty - RPC method invocation using ListenableFuture instead of FluentFuture - DOMDataTreeReadWriteTransaction no longer having close() method Change-Id: I7e4f3bba8cab75af750784d77c2a62ca2460e542 Signed-off-by: Robert Varga --- .../odl-netconf-connector/pom.xml | 2 +- features/netconf/odl-netconf-api/pom.xml | 2 +- .../odl-netconf-notifications-impl/pom.xml | 2 +- features/restconf/odl-restconf-common/pom.xml | 2 +- .../odl-restconf-nb-bierman02/pom.xml | 2 +- .../CapabilityChangeNotificationProducer.java | 3 +- ...abilityChangeNotificationProducerTest.java | 3 +- .../netconf/NetconfEventSourceMount.java | 6 +- .../StreamNotificationTopicRegistration.java | 7 +- .../NetconfCapabilityMonitoringService.java | 3 +- netconf/netconf-parent/pom.xml | 2 +- .../singleton/impl/ProxyDOMDataBroker.java | 4 +- .../singleton/impl/actors/ReadAdapter.java | 6 +- .../impl/tx/ActorProxyTransactionFacade.java | 5 - .../impl/tx/FailedProxyTransactionFacade.java | 5 - .../impl/tx/ProxyReadTransaction.java | 8 +- .../impl/tx/ProxyReadWriteTransaction.java | 5 - .../impl/MountPointEndToEndTest.java | 4 +- .../ReadTransactionActorTestAdapter.java | 6 +- .../netconf/DeviceActionFactoryImpl.java | 12 +-- .../sal/connect/netconf/NetconfDevice.java | 3 +- .../netconf/sal/KeepaliveSalFacade.java | 25 ++--- .../netconf/sal/NetconfDeviceDataBroker.java | 4 +- .../connect/netconf/sal/NetconfDeviceRpc.java | 13 +-- .../sal/SchemalessNetconfDeviceRpc.java | 18 ++-- .../connect/netconf/sal/tx/ReadWriteTx.java | 5 - .../connect/netconf/util/NetconfBaseOps.java | 99 ++++++++++--------- .../netconf/sal/NetconfDeviceRpcTest.java | 4 +- .../restconf/impl/BatchedExistenceCheck.java | 4 +- .../sal/restconf/impl/BrokerFacade.java | 8 +- .../restconf/impl/test/BrokerFacadeTest.java | 3 +- .../rfc8040/rests/utils/FutureCallbackTx.java | 4 +- .../rests/utils/PatchDataTransactionUtil.java | 6 +- .../utils/RestconfInvokeOperationsUtil.java | 8 +- .../rests/utils/SubscribeToStreamUtil.java | 4 +- restconf/restconf-parent/pom.xml | 2 +- 36 files changed, 147 insertions(+), 152 deletions(-) diff --git a/features/netconf-connector/odl-netconf-connector/pom.xml b/features/netconf-connector/odl-netconf-connector/pom.xml index 5d62bb1ff1..e441e36477 100644 --- a/features/netconf-connector/odl-netconf-connector/pom.xml +++ b/features/netconf-connector/odl-netconf-connector/pom.xml @@ -28,7 +28,7 @@ org.opendaylight.mdsal mdsal-artifacts - 3.0.6 + 4.0.0 pom import diff --git a/features/netconf/odl-netconf-api/pom.xml b/features/netconf/odl-netconf-api/pom.xml index fed8f9fd7f..7da5eb94ad 100644 --- a/features/netconf/odl-netconf-api/pom.xml +++ b/features/netconf/odl-netconf-api/pom.xml @@ -35,7 +35,7 @@ org.opendaylight.mdsal mdsal-artifacts - 3.0.6 + 4.0.0 pom import diff --git a/features/netconf/odl-netconf-notifications-impl/pom.xml b/features/netconf/odl-netconf-notifications-impl/pom.xml index 39d0bb6b31..53d78d022c 100644 --- a/features/netconf/odl-netconf-notifications-impl/pom.xml +++ b/features/netconf/odl-netconf-notifications-impl/pom.xml @@ -28,7 +28,7 @@ org.opendaylight.mdsal mdsal-artifacts - 3.0.6 + 4.0.0 pom import diff --git a/features/restconf/odl-restconf-common/pom.xml b/features/restconf/odl-restconf-common/pom.xml index 4aff4f5f85..c5d989245a 100644 --- a/features/restconf/odl-restconf-common/pom.xml +++ b/features/restconf/odl-restconf-common/pom.xml @@ -35,7 +35,7 @@ org.opendaylight.mdsal mdsal-artifacts - 3.0.6 + 4.0.0 pom import diff --git a/features/restconf/odl-restconf-nb-bierman02/pom.xml b/features/restconf/odl-restconf-nb-bierman02/pom.xml index 61aa1b37a5..31272e661f 100644 --- a/features/restconf/odl-restconf-nb-bierman02/pom.xml +++ b/features/restconf/odl-restconf-nb-bierman02/pom.xml @@ -28,7 +28,7 @@ org.opendaylight.mdsal mdsal-artifacts - 3.0.6 + 4.0.0 pom import diff --git a/netconf/mdsal-netconf-notification/src/main/java/org/opendaylight/netconf/mdsal/notification/impl/CapabilityChangeNotificationProducer.java b/netconf/mdsal-netconf-notification/src/main/java/org/opendaylight/netconf/mdsal/notification/impl/CapabilityChangeNotificationProducer.java index 7f68fe1bb6..87cfa2a081 100644 --- a/netconf/mdsal-netconf-notification/src/main/java/org/opendaylight/netconf/mdsal/notification/impl/CapabilityChangeNotificationProducer.java +++ b/netconf/mdsal-netconf-notification/src/main/java/org/opendaylight/netconf/mdsal/notification/impl/CapabilityChangeNotificationProducer.java @@ -26,6 +26,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.not import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.changed.by.parms.changed.by.server.or.user.ServerBuilder; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.Empty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -86,7 +87,7 @@ public final class CapabilityChangeNotificationProducer extends OperationalDatas private void publishNotification(final Set added, final Set removed) { final NetconfCapabilityChangeBuilder netconfCapabilityChangeBuilder = new NetconfCapabilityChangeBuilder(); netconfCapabilityChangeBuilder.setChangedBy(new ChangedByBuilder().setServerOrUser(new ServerBuilder() - .setServer(true).build()).build()); + .setServer(Empty.getInstance()).build()).build()); netconfCapabilityChangeBuilder.setAddedCapability(ImmutableList.copyOf(added)); netconfCapabilityChangeBuilder.setDeletedCapability(ImmutableList.copyOf(removed)); // TODO modified should be computed ... but why ? diff --git a/netconf/mdsal-netconf-notification/src/test/java/org/opendaylight/netconf/mdsal/notification/impl/CapabilityChangeNotificationProducerTest.java b/netconf/mdsal-netconf-notification/src/test/java/org/opendaylight/netconf/mdsal/notification/impl/CapabilityChangeNotificationProducerTest.java index 7dceaf771c..aeb97e4f06 100644 --- a/netconf/mdsal-netconf-notification/src/test/java/org/opendaylight/netconf/mdsal/notification/impl/CapabilityChangeNotificationProducerTest.java +++ b/netconf/mdsal-netconf-notification/src/test/java/org/opendaylight/netconf/mdsal/notification/impl/CapabilityChangeNotificationProducerTest.java @@ -40,6 +40,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.not import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.Empty; public class CapabilityChangeNotificationProducerTest { @@ -125,7 +126,7 @@ public class CapabilityChangeNotificationProducerTest { private static NetconfCapabilityChange changedCapabilitesFrom(final List added, final List deleted) { NetconfCapabilityChangeBuilder netconfCapabilityChangeBuilder = new NetconfCapabilityChangeBuilder(); netconfCapabilityChangeBuilder.setChangedBy(new ChangedByBuilder().setServerOrUser( - new ServerBuilder().setServer(true).build()).build()); + new ServerBuilder().setServer(Empty.getInstance()).build()).build()); netconfCapabilityChangeBuilder.setModifiedCapability(Collections.emptyList()); netconfCapabilityChangeBuilder.setAddedCapability(added); diff --git a/netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/NetconfEventSourceMount.java b/netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/NetconfEventSourceMount.java index cad403e5ad..b5f9801722 100644 --- a/netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/NetconfEventSourceMount.java +++ b/netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/NetconfEventSourceMount.java @@ -9,6 +9,7 @@ package org.opendaylight.netconf.messagebus.eventsources.netconf; import com.google.common.base.Preconditions; import com.google.common.util.concurrent.FluentFuture; +import com.google.common.util.concurrent.ListenableFuture; import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; @@ -109,7 +110,8 @@ class NetconfEventSourceMount { * @param lastEventTime last event time * @return rpc result */ - FluentFuture invokeCreateSubscription(final Stream stream, final Optional lastEventTime) { + ListenableFuture invokeCreateSubscription(final Stream stream, + final Optional lastEventTime) { final CreateSubscriptionInputBuilder inputBuilder = new CreateSubscriptionInputBuilder() .setStream(stream.getName()); if (lastEventTime.isPresent() && stream.isReplaySupport()) { @@ -128,7 +130,7 @@ class NetconfEventSourceMount { * @param stream stream * @return rpc result */ - FluentFuture invokeCreateSubscription(final Stream stream) { + ListenableFuture invokeCreateSubscription(final Stream stream) { return invokeCreateSubscription(stream, Optional.empty()); } diff --git a/netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/StreamNotificationTopicRegistration.java b/netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/StreamNotificationTopicRegistration.java index 2d70d5f6c2..50b2b3eab9 100644 --- a/netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/StreamNotificationTopicRegistration.java +++ b/netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/StreamNotificationTopicRegistration.java @@ -7,7 +7,7 @@ */ package org.opendaylight.netconf.messagebus.eventsources.netconf; -import com.google.common.util.concurrent.FluentFuture; +import com.google.common.util.concurrent.ListenableFuture; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -62,7 +62,7 @@ class StreamNotificationTopicRegistration extends NotificationTopicRegistration void activateNotificationSource() { if (!isActive()) { LOG.info("Stream {} is not active on node {}. Will subscribe.", this.getStreamName(), this.nodeId); - final FluentFuture result = mountPoint.invokeCreateSubscription(stream); + final ListenableFuture result = mountPoint.invokeCreateSubscription(stream); try { result.get(); setActive(true); @@ -84,7 +84,8 @@ class StreamNotificationTopicRegistration extends NotificationTopicRegistration void reActivateNotificationSource() { if (isActive()) { LOG.info("Stream {} is reactivating on node {}.", this.getStreamName(), this.nodeId); - final FluentFuture result = mountPoint.invokeCreateSubscription(stream, getLastEventTime()); + final ListenableFuture result = mountPoint.invokeCreateSubscription(stream, + getLastEventTime()); try { result.get(); setActive(true); diff --git a/netconf/netconf-impl/src/main/java/org/opendaylight/netconf/impl/osgi/NetconfCapabilityMonitoringService.java b/netconf/netconf-impl/src/main/java/org/opendaylight/netconf/impl/osgi/NetconfCapabilityMonitoringService.java index f9c931a1dc..b3f20bf9ee 100644 --- a/netconf/netconf-impl/src/main/java/org/opendaylight/netconf/impl/osgi/NetconfCapabilityMonitoringService.java +++ b/netconf/netconf-impl/src/main/java/org/opendaylight/netconf/impl/osgi/NetconfCapabilityMonitoringService.java @@ -45,6 +45,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.not import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfCapabilityChangeBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.changed.by.parms.ChangedByBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.changed.by.parms.changed.by.server.or.user.ServerBuilder; +import org.opendaylight.yangtools.yang.common.Empty; class NetconfCapabilityMonitoringService implements CapabilityListener, AutoCloseable { @@ -238,7 +239,7 @@ class NetconfCapabilityMonitoringService implements CapabilityListener, AutoClos final NetconfCapabilityChangeBuilder netconfCapabilityChangeBuilder = new NetconfCapabilityChangeBuilder(); netconfCapabilityChangeBuilder .setChangedBy(new ChangedByBuilder().setServerOrUser( - new ServerBuilder().setServer(Boolean.TRUE).build()).build()); + new ServerBuilder().setServer(Empty.getInstance()).build()).build()); netconfCapabilityChangeBuilder.setDeletedCapability(Lists.newArrayList(Collections2 .transform(removed, CAPABILITY_TO_URI))); netconfCapabilityChangeBuilder.setAddedCapability(Lists.newArrayList(Collections2 diff --git a/netconf/netconf-parent/pom.xml b/netconf/netconf-parent/pom.xml index d2173bd158..9c051a43f8 100644 --- a/netconf/netconf-parent/pom.xml +++ b/netconf/netconf-parent/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.mdsal binding-parent - 3.0.6 + 4.0.0 diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/ProxyDOMDataBroker.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/ProxyDOMDataBroker.java index 3158b4925b..4a89c7c25d 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/ProxyDOMDataBroker.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/ProxyDOMDataBroker.java @@ -12,13 +12,13 @@ import akka.pattern.Patterns; import akka.util.Timeout; import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.ImmutableClassToInstanceMap; -import org.opendaylight.mdsal.dom.api.DOMDataBroker; import org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension; import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction; import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction; import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; import org.opendaylight.mdsal.dom.api.DOMTransactionChain; import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener; +import org.opendaylight.mdsal.dom.spi.PingPongMergingDOMDataBroker; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; import org.opendaylight.netconf.topology.singleton.impl.tx.ProxyReadTransaction; import org.opendaylight.netconf.topology.singleton.impl.tx.ProxyReadWriteTransaction; @@ -28,7 +28,7 @@ import org.opendaylight.netconf.topology.singleton.messages.transactions.NewWrit import scala.concurrent.ExecutionContext; import scala.concurrent.Future; -public class ProxyDOMDataBroker implements DOMDataBroker { +public class ProxyDOMDataBroker implements PingPongMergingDOMDataBroker { private final Timeout askTimeout; private final RemoteDeviceId id; diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/ReadAdapter.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/ReadAdapter.java index 1fc684a4ff..b34f846d9e 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/ReadAdapter.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/ReadAdapter.java @@ -13,7 +13,7 @@ import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.MoreExecutors; import java.util.Optional; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction; +import org.opendaylight.mdsal.dom.api.DOMDataTreeReadOperations; import org.opendaylight.netconf.topology.singleton.messages.NormalizedNodeMessage; import org.opendaylight.netconf.topology.singleton.messages.transactions.EmptyReadResponse; import org.opendaylight.netconf.topology.singleton.messages.transactions.ExistsRequest; @@ -23,9 +23,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; class ReadAdapter { - private final DOMDataTreeReadTransaction tx; + private final DOMDataTreeReadOperations tx; - ReadAdapter(final DOMDataTreeReadTransaction tx) { + ReadAdapter(final DOMDataTreeReadOperations tx) { this.tx = tx; } diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ActorProxyTransactionFacade.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ActorProxyTransactionFacade.java index d39e960aeb..6b62e04785 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ActorProxyTransactionFacade.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ActorProxyTransactionFacade.java @@ -85,11 +85,6 @@ class ActorProxyTransactionFacade implements ProxyTransactionFacade { return true; } - @Override - public void close() { - cancel(); - } - @Override public FluentFuture>> read(final LogicalDatastoreType store, final YangInstanceIdentifier path) { diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/FailedProxyTransactionFacade.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/FailedProxyTransactionFacade.java index d1bce43e5d..8cf76f675d 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/FailedProxyTransactionFacade.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/FailedProxyTransactionFacade.java @@ -48,11 +48,6 @@ class FailedProxyTransactionFacade implements ProxyTransactionFacade { return true; } - @Override - public void close() { - // No-op - } - @Override public FluentFuture>> read(final LogicalDatastoreType store, final YangInstanceIdentifier path) { diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadTransaction.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadTransaction.java index fbe946f3ba..3ad77763f4 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadTransaction.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadTransaction.java @@ -9,6 +9,7 @@ package org.opendaylight.netconf.topology.singleton.impl.tx; import akka.actor.ActorRef; import akka.util.Timeout; +import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; import scala.concurrent.ExecutionContext; import scala.concurrent.Future; @@ -17,10 +18,15 @@ import scala.concurrent.Future; * ProxyReadTransaction uses provided {@link ActorRef} to delegate method calls to master * {@link org.opendaylight.netconf.topology.singleton.impl.actors.ReadTransactionActor}. */ -public class ProxyReadTransaction extends ProxyReadWriteTransaction { +public class ProxyReadTransaction extends ProxyReadWriteTransaction implements DOMDataTreeReadTransaction { public ProxyReadTransaction(final RemoteDeviceId id, final Future masterTxActorFuture, final ExecutionContext executionContext, final Timeout askTimeout) { super(id, masterTxActorFuture, executionContext, askTimeout); } + + @Override + public void close() { + cancel(); + } } diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadWriteTransaction.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadWriteTransaction.java index 1b94724e0a..1e62fba01d 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadWriteTransaction.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/tx/ProxyReadWriteTransaction.java @@ -80,11 +80,6 @@ public class ProxyReadWriteTransaction implements DOMDataTreeReadWriteTransactio return true; } - @Override - public void close() { - cancel(); - } - @Override public FluentFuture>> read(final LogicalDatastoreType store, final YangInstanceIdentifier path) { diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/MountPointEndToEndTest.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/MountPointEndToEndTest.java index 94e8f4b2f7..2713850ddf 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/MountPointEndToEndTest.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/MountPointEndToEndTest.java @@ -72,7 +72,7 @@ import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext; import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataBroker; -import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction; +import org.opendaylight.mdsal.dom.api.DOMDataTreeReadOperations; import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction; import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; import org.opendaylight.mdsal.dom.api.DOMMountPoint; @@ -599,7 +599,7 @@ public class MountPointEndToEndTest { writeTx.commit().get(5, TimeUnit.SECONDS); } - private static void verifyDataInStore(final DOMDataTreeReadTransaction readTx, final YangInstanceIdentifier path, + private static void verifyDataInStore(final DOMDataTreeReadOperations readTx, final YangInstanceIdentifier path, final NormalizedNode expNode) throws InterruptedException, ExecutionException, TimeoutException { final Optional> read = readTx.read(LogicalDatastoreType.CONFIGURATION, path) .get(5, TimeUnit.SECONDS); diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/actors/ReadTransactionActorTestAdapter.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/actors/ReadTransactionActorTestAdapter.java index 738fd6bd57..9080ed47d8 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/actors/ReadTransactionActorTestAdapter.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/actors/ReadTransactionActorTestAdapter.java @@ -24,7 +24,7 @@ import java.util.concurrent.TimeUnit; import org.junit.Test; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.common.api.ReadFailedException; -import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction; +import org.opendaylight.mdsal.dom.api.DOMDataTreeReadOperations; import org.opendaylight.netconf.topology.singleton.messages.NormalizedNodeMessage; import org.opendaylight.netconf.topology.singleton.messages.transactions.EmptyReadResponse; import org.opendaylight.netconf.topology.singleton.messages.transactions.ExistsRequest; @@ -46,11 +46,11 @@ public abstract class ReadTransactionActorTestAdapter { static final NormalizedNode NODE = Builders.containerBuilder() .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(QName.create("", "cont"))).build(); - private DOMDataTreeReadTransaction mockReadTx; + private DOMDataTreeReadOperations mockReadTx; private TestProbe probe; private ActorRef actorRef; - public void init(final DOMDataTreeReadTransaction inMockReadTx, final ActorSystem system, + public void init(final DOMDataTreeReadOperations inMockReadTx, final ActorSystem system, final ActorRef inActorRef) { this.mockReadTx = inMockReadTx; this.probe = TestProbe.apply(system); diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceActionFactoryImpl.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceActionFactoryImpl.java index a15b00a6ec..e217eec8f1 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceActionFactoryImpl.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceActionFactoryImpl.java @@ -11,9 +11,9 @@ package org.opendaylight.netconf.sal.connect.netconf; import com.google.common.base.Preconditions; import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.ImmutableClassToInstanceMap; -import com.google.common.util.concurrent.FluentFuture; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; -import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.dom.api.DOMActionResult; import org.opendaylight.mdsal.dom.api.DOMActionService; import org.opendaylight.mdsal.dom.api.DOMActionServiceExtension; @@ -45,16 +45,16 @@ public class DeviceActionFactoryImpl implements DeviceActionFactory { return new DOMActionService() { @Override - public FluentFuture invokeAction(final SchemaPath schemaPath, + public ListenableFuture invokeAction(final SchemaPath schemaPath, final DOMDataTreeIdentifier dataTreeIdentifier, final ContainerNode input) { Preconditions.checkNotNull(schemaPath); Preconditions.checkNotNull(dataTreeIdentifier); Preconditions.checkNotNull(input); - final FluentFuture> actionResultFuture = listener.sendRequest( + final ListenableFuture> actionResultFuture = listener.sendRequest( messageTransformer.toActionRequest(schemaPath, dataTreeIdentifier, input), input.getNodeType()); - return actionResultFuture.transform(netconfMessageRpcResult -> { + return Futures.transform(actionResultFuture, netconfMessageRpcResult -> { if (netconfMessageRpcResult != null) { return messageTransformer.toActionResult(schemaPath, netconfMessageRpcResult.getResult()); } else { @@ -66,7 +66,7 @@ public class DeviceActionFactoryImpl implements DeviceActionFactory { } @Override - public @NonNull ClassToInstanceMap getExtensions() { + public ClassToInstanceMap getExtensions() { return ImmutableClassToInstanceMap.of(); } }; diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java index 1146fa81aa..ede7dddc28 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java @@ -14,7 +14,6 @@ import com.google.common.base.Predicates; import com.google.common.collect.Collections2; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -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.ListenableFuture; @@ -185,7 +184,7 @@ public class NetconfDevice // TODO check whether the model describing create subscription is present in schema // Perhaps add a default schema context to support create-subscription if the model was not provided // (same as what we do for base netconf operations in transformer) - final FluentFuture rpcResultListenableFuture = deviceRpc.invokeRpc( + final ListenableFuture rpcResultListenableFuture = deviceRpc.invokeRpc( NetconfMessageTransformUtil.toPath(NetconfMessageTransformUtil.CREATE_SUBSCRIPTION_RPC_QNAME), NetconfMessageTransformUtil.CREATE_SUBSCRIPTION_RPC_CONTENT); diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/KeepaliveSalFacade.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/KeepaliveSalFacade.java index 825cd38099..f8abed3c39 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/KeepaliveSalFacade.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/KeepaliveSalFacade.java @@ -13,8 +13,9 @@ import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTr import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_GET_CONFIG_PATH; import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_RUNNING_QNAME; -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.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.concurrent.ScheduledExecutorService; @@ -197,8 +198,8 @@ public final class KeepaliveSalFacade implements RemoteDeviceHandler rpcResultFuture; + private final ListenableFuture rpcResultFuture; private final ResponseWaitingScheduler responseWaitingScheduler; ResponseWaiting(final ResponseWaitingScheduler responseWaitingScheduler, - final FluentFuture rpcResultFuture) { + final ListenableFuture rpcResultFuture) { this.responseWaitingScheduler = responseWaitingScheduler; this.rpcResultFuture = rpcResultFuture; } @@ -323,11 +324,11 @@ public final class KeepaliveSalFacade implements RemoteDeviceHandler rpcResultFuture; + private final ListenableFuture rpcResultFuture; private final ResponseWaiting responseWaiting; - RequestTimeoutTask(final FluentFuture rpcResultFuture, final ResponseWaiting responseWaiting) { + RequestTimeoutTask(final ListenableFuture rpcResultFuture, + final ResponseWaiting responseWaiting) { this.rpcResultFuture = rpcResultFuture; this.responseWaiting = responseWaiting; } @@ -370,11 +371,11 @@ public final class KeepaliveSalFacade implements RemoteDeviceHandler invokeRpc(final SchemaPath type, final NormalizedNode input) { - final FluentFuture rpcResultFuture = deviceRpc.invokeRpc(type, input); + public ListenableFuture invokeRpc(final SchemaPath type, final NormalizedNode input) { + final ListenableFuture rpcResultFuture = deviceRpc.invokeRpc(type, input); final ResponseWaiting responseWaiting = new ResponseWaiting(responseWaitingScheduler, rpcResultFuture); responseWaiting.start(); - rpcResultFuture.addCallback(resetKeepaliveTask, MoreExecutors.directExecutor()); + Futures.addCallback(rpcResultFuture, resetKeepaliveTask, MoreExecutors.directExecutor()); final RequestTimeoutTask timeoutTask = new RequestTimeoutTask(rpcResultFuture, responseWaiting); executor.schedule(timeoutTask, defaultRequestTimeoutMillis, TimeUnit.MILLISECONDS); diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceDataBroker.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceDataBroker.java index afb76dcfe4..694e120ae2 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceDataBroker.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceDataBroker.java @@ -10,7 +10,6 @@ package org.opendaylight.netconf.sal.connect.netconf.sal; import com.google.common.base.Preconditions; import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.ImmutableClassToInstanceMap; -import org.opendaylight.mdsal.dom.api.DOMDataBroker; import org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension; import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction; import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction; @@ -18,6 +17,7 @@ import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; import org.opendaylight.mdsal.dom.api.DOMRpcService; import org.opendaylight.mdsal.dom.api.DOMTransactionChain; import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener; +import org.opendaylight.mdsal.dom.spi.PingPongMergingDOMDataBroker; import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences; import org.opendaylight.netconf.sal.connect.netconf.sal.tx.ReadOnlyTx; import org.opendaylight.netconf.sal.connect.netconf.sal.tx.ReadWriteTx; @@ -29,7 +29,7 @@ import org.opendaylight.netconf.sal.connect.netconf.util.NetconfBaseOps; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -public final class NetconfDeviceDataBroker implements DOMDataBroker { +public final class NetconfDeviceDataBroker implements PingPongMergingDOMDataBroker { private final RemoteDeviceId id; private final NetconfBaseOps netconfOps; diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpc.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpc.java index 2bf04875d3..19de2565df 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpc.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpc.java @@ -10,8 +10,9 @@ package org.opendaylight.netconf.sal.connect.netconf.sal; import static java.util.Objects.requireNonNull; import com.google.common.collect.Collections2; -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.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.SettableFuture; import org.opendaylight.mdsal.dom.api.DOMRpcAvailabilityListener; @@ -48,20 +49,20 @@ public final class NetconfDeviceRpc implements DOMRpcService { } @Override - public FluentFuture invokeRpc(final SchemaPath type, final NormalizedNode input) { - final FluentFuture> delegateFuture = communicator.sendRequest( + public ListenableFuture invokeRpc(final SchemaPath type, final NormalizedNode input) { + final ListenableFuture> delegateFuture = communicator.sendRequest( transformer.toRpcRequest(type, input), type.getLastComponent()); final SettableFuture ret = SettableFuture.create(); - delegateFuture.addCallback(new FutureCallback>() { + Futures.addCallback(delegateFuture, new FutureCallback>() { @Override - public void onSuccess(RpcResult result) { + public void onSuccess(final RpcResult result) { ret.set(result.isSuccessful() ? transformer.toRpcResult(result.getResult(), type) : new DefaultDOMRpcResult(result.getErrors())); } @Override - public void onFailure(Throwable cause) { + public void onFailure(final Throwable cause) { ret.setException(new DOMRpcImplementationNotAvailableException(cause, "Unable to invoke rpc %s", type)); } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/SchemalessNetconfDeviceRpc.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/SchemalessNetconfDeviceRpc.java index 1d991e717b..b9f89815c6 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/SchemalessNetconfDeviceRpc.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/SchemalessNetconfDeviceRpc.java @@ -7,8 +7,9 @@ */ package org.opendaylight.netconf.sal.connect.netconf.sal; -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.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.SettableFuture; import org.eclipse.jdt.annotation.NonNull; @@ -25,7 +26,6 @@ import org.opendaylight.netconf.sal.connect.netconf.schema.mapping.SchemalessMes import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.util.concurrent.FluentFutures; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -52,35 +52,35 @@ public final class SchemalessNetconfDeviceRpc implements DOMRpcService { } @Override - public FluentFuture invokeRpc(final SchemaPath type, final NormalizedNode input) { + public ListenableFuture invokeRpc(final SchemaPath type, final NormalizedNode input) { final MessageTransformer transformer; if (input instanceof AnyXmlNode) { transformer = schemalessTransformer; } else if (isBaseRpc(type)) { transformer = baseRpcTransformer; } else { - return FluentFutures.immediateFailedFluentFuture(new DOMRpcImplementationNotAvailableException( + return Futures.immediateFailedFuture(new DOMRpcImplementationNotAvailableException( "Unable to invoke rpc %s", type)); } return handleRpc(type, input, transformer); } - private FluentFuture handleRpc( + private ListenableFuture handleRpc( final @NonNull SchemaPath type, final @NonNull NormalizedNode input, final MessageTransformer transformer) { - final FluentFuture> delegateFuture = listener.sendRequest( + final ListenableFuture> delegateFuture = listener.sendRequest( transformer.toRpcRequest(type, input), type.getLastComponent()); final SettableFuture ret = SettableFuture.create(); - delegateFuture.addCallback(new FutureCallback>() { + Futures.addCallback(delegateFuture, new FutureCallback>() { @Override - public void onSuccess(RpcResult result) { + public void onSuccess(final RpcResult result) { ret.set(result.isSuccessful() ? transformer.toRpcResult(result.getResult(), type) : new DefaultDOMRpcResult(result.getErrors())); } @Override - public void onFailure(Throwable cause) { + public void onFailure(final Throwable cause) { ret.setException(new DOMRpcImplementationNotAvailableException(cause, "Unable to invoke rpc %s on device %s", type, deviceId)); } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/ReadWriteTx.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/ReadWriteTx.java index bf98c56e47..b4f44b714a 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/ReadWriteTx.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/tx/ReadWriteTx.java @@ -35,11 +35,6 @@ public class ReadWriteTx implements DOMDataTreeReadWriteTransaction { return delegateWriteTx.cancel(); } - @Override - public void close() { - cancel(); - } - @Override public void put(final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode data) { diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfBaseOps.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfBaseOps.java index f2dd3c5ca8..ecbe6fa6a9 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfBaseOps.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfBaseOps.java @@ -34,6 +34,8 @@ import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTr 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.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; import java.util.Locale; import java.util.Optional; @@ -80,110 +82,109 @@ public final class NetconfBaseOps { } } - public FluentFuture lock(final FutureCallback callback, final QName datastore) { + public ListenableFuture lock(final FutureCallback callback, final QName datastore) { Preconditions.checkNotNull(callback); Preconditions.checkNotNull(datastore); - final FluentFuture future = rpc.invokeRpc(NETCONF_LOCK_PATH, getLockContent(datastore)); - future.addCallback(callback, MoreExecutors.directExecutor()); + final ListenableFuture future = rpc.invokeRpc(NETCONF_LOCK_PATH, getLockContent(datastore)); + Futures.addCallback(future, callback, MoreExecutors.directExecutor()); return future; } - public FluentFuture lockCandidate(final FutureCallback callback) { - final FluentFuture future = rpc.invokeRpc(NETCONF_LOCK_PATH, + public ListenableFuture lockCandidate(final FutureCallback callback) { + final ListenableFuture future = rpc.invokeRpc(NETCONF_LOCK_PATH, getLockContent(NETCONF_CANDIDATE_QNAME)); - future.addCallback(callback, MoreExecutors.directExecutor()); + Futures.addCallback(future, callback, MoreExecutors.directExecutor()); return future; } - - public FluentFuture lockRunning(final FutureCallback callback) { - final FluentFuture future = rpc.invokeRpc(NETCONF_LOCK_PATH, + public ListenableFuture lockRunning(final FutureCallback callback) { + final ListenableFuture future = rpc.invokeRpc(NETCONF_LOCK_PATH, getLockContent(NETCONF_RUNNING_QNAME)); - future.addCallback(callback, MoreExecutors.directExecutor()); + Futures.addCallback(future, callback, MoreExecutors.directExecutor()); return future; } - public FluentFuture unlock(final FutureCallback callback, final QName datastore) { + public ListenableFuture unlock(final FutureCallback callback, final QName datastore) { Preconditions.checkNotNull(callback); Preconditions.checkNotNull(datastore); - final FluentFuture future = rpc.invokeRpc(NETCONF_UNLOCK_PATH, getUnLockContent(datastore)); - future.addCallback(callback, MoreExecutors.directExecutor()); + final ListenableFuture future = rpc.invokeRpc(NETCONF_UNLOCK_PATH, getUnLockContent(datastore)); + Futures.addCallback(future, callback, MoreExecutors.directExecutor()); return future; } - public FluentFuture unlockRunning(final FutureCallback callback) { - final FluentFuture future = rpc.invokeRpc(NETCONF_UNLOCK_PATH, + public ListenableFuture unlockRunning(final FutureCallback callback) { + final ListenableFuture future = rpc.invokeRpc(NETCONF_UNLOCK_PATH, getUnLockContent(NETCONF_RUNNING_QNAME)); - future.addCallback(callback, MoreExecutors.directExecutor()); + Futures.addCallback(future, callback, MoreExecutors.directExecutor()); return future; } - public FluentFuture unlockCandidate(final FutureCallback callback) { - final FluentFuture future = rpc.invokeRpc(NETCONF_UNLOCK_PATH, + public ListenableFuture unlockCandidate(final FutureCallback callback) { + final ListenableFuture future = rpc.invokeRpc(NETCONF_UNLOCK_PATH, getUnLockContent(NETCONF_CANDIDATE_QNAME)); - future.addCallback(callback, MoreExecutors.directExecutor()); + Futures.addCallback(future, callback, MoreExecutors.directExecutor()); return future; } - public FluentFuture discardChanges(final FutureCallback callback) { + public ListenableFuture discardChanges(final FutureCallback callback) { Preconditions.checkNotNull(callback); - final FluentFuture future = rpc.invokeRpc(NETCONF_DISCARD_CHANGES_PATH, null); - future.addCallback(callback, MoreExecutors.directExecutor()); + final ListenableFuture future = rpc.invokeRpc(NETCONF_DISCARD_CHANGES_PATH, null); + Futures.addCallback(future, callback, MoreExecutors.directExecutor()); return future; } - public FluentFuture commit(final FutureCallback callback) { + public ListenableFuture commit(final FutureCallback callback) { Preconditions.checkNotNull(callback); - final FluentFuture future = rpc.invokeRpc(NetconfMessageTransformUtil.NETCONF_COMMIT_PATH, + final ListenableFuture future = rpc.invokeRpc(NetconfMessageTransformUtil.NETCONF_COMMIT_PATH, NetconfMessageTransformUtil.COMMIT_RPC_CONTENT); - future.addCallback(callback, MoreExecutors.directExecutor()); + Futures.addCallback(future, callback, MoreExecutors.directExecutor()); return future; } - public FluentFuture validate(final FutureCallback callback, final QName datastore) { + public ListenableFuture validate(final FutureCallback callback, final QName datastore) { Preconditions.checkNotNull(callback); Preconditions.checkNotNull(datastore); - final FluentFuture future = rpc.invokeRpc(NetconfMessageTransformUtil.NETCONF_VALIDATE_PATH, + final ListenableFuture future = rpc.invokeRpc(NetconfMessageTransformUtil.NETCONF_VALIDATE_PATH, getValidateContent(datastore)); - future.addCallback(callback, MoreExecutors.directExecutor()); + Futures.addCallback(future, callback, MoreExecutors.directExecutor()); return future; } - public FluentFuture validateCandidate(final FutureCallback callback) { + public ListenableFuture validateCandidate(final FutureCallback callback) { return validate(callback, NETCONF_CANDIDATE_QNAME); } - public FluentFuture validateRunning(final FutureCallback callback) { + public ListenableFuture validateRunning(final FutureCallback callback) { return validate(callback, NETCONF_RUNNING_QNAME); } - public FluentFuture copyConfig(final FutureCallback callback, + public ListenableFuture copyConfig(final FutureCallback callback, final QName source, final QName target) { Preconditions.checkNotNull(callback); Preconditions.checkNotNull(source); Preconditions.checkNotNull(target); - final FluentFuture future = rpc.invokeRpc(NETCONF_COPY_CONFIG_PATH, + final ListenableFuture future = rpc.invokeRpc(NETCONF_COPY_CONFIG_PATH, getCopyConfigContent(source, target)); - future.addCallback(callback, MoreExecutors.directExecutor()); + Futures.addCallback(future, callback, MoreExecutors.directExecutor()); return future; } - public FluentFuture copyRunningToCandidate(final FutureCallback callback) { + public ListenableFuture copyRunningToCandidate(final FutureCallback callback) { return copyConfig(callback, NETCONF_RUNNING_QNAME, NETCONF_CANDIDATE_QNAME); } - public FluentFuture getConfig(final FutureCallback callback, final QName datastore, + public ListenableFuture getConfig(final FutureCallback callback, final QName datastore, final Optional filterPath) { Preconditions.checkNotNull(callback); Preconditions.checkNotNull(datastore); - final FluentFuture future; + final ListenableFuture future; if (isFilterPresent(filterPath)) { final DataContainerChild node = transformer.toFilterStructure(filterPath.get()); future = rpc.invokeRpc(NETCONF_GET_CONFIG_PATH, @@ -193,25 +194,25 @@ public final class NetconfBaseOps { NetconfMessageTransformUtil.wrap(NETCONF_GET_CONFIG_NODEID, getSourceNode(datastore))); } - future.addCallback(callback, MoreExecutors.directExecutor()); + Futures.addCallback(future, callback, MoreExecutors.directExecutor()); return future; } - public FluentFuture>> getConfigRunningData( + public ListenableFuture>> getConfigRunningData( final FutureCallback callback, final Optional filterPath) { - final FluentFuture configRunning = getConfigRunning(callback, filterPath); + final ListenableFuture configRunning = getConfigRunning(callback, filterPath); return extractData(filterPath, configRunning); } - public FluentFuture>> getData(final FutureCallback callback, + public ListenableFuture>> getData(final FutureCallback callback, final Optional filterPath) { - final FluentFuture configRunning = get(callback, filterPath); + final ListenableFuture configRunning = get(callback, filterPath); return extractData(filterPath, configRunning); } - private FluentFuture>> extractData( - final Optional path, final FluentFuture configRunning) { - return configRunning.transform(result -> { + private ListenableFuture>> extractData( + final Optional path, final ListenableFuture configRunning) { + return Futures.transform(configRunning, result -> { Preconditions.checkArgument(result.getErrors().isEmpty(), "Unable to read data: %s, errors: %s", path, result.getErrors()); final DataContainerChild dataNode = @@ -221,24 +222,24 @@ public final class NetconfBaseOps { }, MoreExecutors.directExecutor()); } - public FluentFuture getConfigRunning(final FutureCallback callback, + public ListenableFuture getConfigRunning(final FutureCallback callback, final Optional filterPath) { return getConfig(callback, NETCONF_RUNNING_QNAME, filterPath); } - public FluentFuture getConfigCandidate(final FutureCallback callback, + public ListenableFuture getConfigCandidate(final FutureCallback callback, final Optional filterPath) { return getConfig(callback, NETCONF_CANDIDATE_QNAME, filterPath); } - public FluentFuture get(final FutureCallback callback, + public ListenableFuture get(final FutureCallback callback, final Optional filterPath) { Preconditions.checkNotNull(callback); - final FluentFuture future = rpc.invokeRpc(NETCONF_GET_PATH, isFilterPresent(filterPath) + final ListenableFuture future = rpc.invokeRpc(NETCONF_GET_PATH, isFilterPresent(filterPath) ? NetconfMessageTransformUtil.wrap(NETCONF_GET_NODEID, toFilterStructure(filterPath.get(), schemaContext)) : NetconfMessageTransformUtil.GET_RPC_CONTENT); - future.addCallback(callback, MoreExecutors.directExecutor()); + Futures.addCallback(future, callback, MoreExecutors.directExecutor()); return future; } diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpcTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpcTest.java index 8dc629e8fc..730ae8090d 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpcTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpcTest.java @@ -11,7 +11,6 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.verify; -import com.google.common.util.concurrent.FluentFuture; import com.google.common.util.concurrent.Futures; import java.util.Collection; import java.util.Collections; @@ -78,8 +77,7 @@ public class NetconfDeviceRpcTest { @Test public void testInvokeRpc() throws Exception { NormalizedNode input = createNode("urn:ietf:params:xml:ns:netconf:base:1.0", "2011-06-01", "filter"); - final FluentFuture future = rpc.invokeRpc(path, input); - final DOMRpcResult result = future.get(); + final DOMRpcResult result = rpc.invokeRpc(path, input).get(); Assert.assertEquals(expectedReply, result); } diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BatchedExistenceCheck.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BatchedExistenceCheck.java index d8c15248e8..c536dc5fdb 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BatchedExistenceCheck.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BatchedExistenceCheck.java @@ -18,7 +18,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.common.api.ReadFailedException; -import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction; +import org.opendaylight.mdsal.dom.api.DOMDataTreeReadOperations; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -35,7 +35,7 @@ final class BatchedExistenceCheck { this.outstanding = total; } - static BatchedExistenceCheck start(final DOMDataTreeReadTransaction readTx, + static BatchedExistenceCheck start(final DOMDataTreeReadOperations readTx, final LogicalDatastoreType datastore, final YangInstanceIdentifier parentPath, final Collection> children) { final BatchedExistenceCheck ret = new BatchedExistenceCheck(children.size()); diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BrokerFacade.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BrokerFacade.java index 2d5c7b9ae4..b30b00d107 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BrokerFacade.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/BrokerFacade.java @@ -15,6 +15,7 @@ import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.FluentFuture; import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; import java.io.Closeable; import java.util.ArrayList; @@ -37,6 +38,7 @@ import org.opendaylight.mdsal.common.api.ReadFailedException; import org.opendaylight.mdsal.dom.api.DOMDataBroker; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService; import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; +import org.opendaylight.mdsal.dom.api.DOMDataTreeReadOperations; import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction; import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction; import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; @@ -488,7 +490,7 @@ public class BrokerFacade implements Closeable { } // RPC - public FluentFuture invokeRpc(final SchemaPath type, final NormalizedNode input) { + public ListenableFuture invokeRpc(final SchemaPath type, final NormalizedNode input) { if (this.rpcService == null) { throw new RestconfDocumentedException(Status.SERVICE_UNAVAILABLE); } @@ -515,12 +517,12 @@ public class BrokerFacade implements Closeable { listener.setRegistration(registration); } - private NormalizedNode readDataViaTransaction(final DOMDataTreeReadTransaction transaction, + private NormalizedNode readDataViaTransaction(final DOMDataTreeReadOperations transaction, final LogicalDatastoreType datastore, final YangInstanceIdentifier path) { return readDataViaTransaction(transaction, datastore, path, null); } - private NormalizedNode readDataViaTransaction(final DOMDataTreeReadTransaction transaction, + private NormalizedNode readDataViaTransaction(final DOMDataTreeReadOperations transaction, final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final String withDefa) { LOG.trace("Read {} via Restconf: {}", datastore.name(), path); diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/BrokerFacadeTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/BrokerFacadeTest.java index aa49c0bdc1..e5be1fa141 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/BrokerFacadeTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/BrokerFacadeTest.java @@ -30,6 +30,7 @@ import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediate import com.google.common.collect.ImmutableClassToInstanceMap; import com.google.common.collect.Lists; import com.google.common.util.concurrent.FluentFuture; +import com.google.common.util.concurrent.ListenableFuture; import java.util.ArrayList; import java.util.Optional; import org.junit.Before; @@ -186,7 +187,7 @@ public class BrokerFacadeTest { final DOMRpcResult expResult = mock(DOMRpcResult.class); doReturn(immediateFluentFuture(expResult)).when(this.mockRpcService).invokeRpc(this.type, this.dummyNode); - final FluentFuture actualFuture = this.brokerFacade.invokeRpc(this.type, this.dummyNode); + final ListenableFuture actualFuture = this.brokerFacade.invokeRpc(this.type, this.dummyNode); assertNotNull("Future is null", actualFuture); final DOMRpcResult actualResult = actualFuture.get(); assertSame("invokeRpc", expResult, actualResult); diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/FutureCallbackTx.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/FutureCallbackTx.java index 2471f4a156..e925612e63 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/FutureCallbackTx.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/FutureCallbackTx.java @@ -9,7 +9,7 @@ package org.opendaylight.restconf.nb.rfc8040.rests.utils; import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; -import com.google.common.util.concurrent.FluentFuture; +import com.google.common.util.concurrent.ListenableFuture; import java.util.List; import java.util.concurrent.ExecutionException; import org.opendaylight.mdsal.common.api.TransactionCommitFailedException; @@ -47,7 +47,7 @@ final class FutureCallbackTx { * if the Future throws an exception */ @SuppressWarnings("checkstyle:IllegalCatch") - static void addCallback(final FluentFuture listenableFuture, final String txType, + static void addCallback(final ListenableFuture listenableFuture, final String txType, final FutureDataFactory dataFactory) throws RestconfDocumentedException { try { diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtil.java index 0444d0ad5c..6a47e7051b 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtil.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtil.java @@ -15,7 +15,7 @@ import java.util.List; import javax.ws.rs.core.Response.Status; import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction; +import org.opendaylight.mdsal.dom.api.DOMDataTreeReadOperations; import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction; import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; @@ -273,7 +273,7 @@ public final class PatchDataTransactionUtil { * @param store Datastore * @param path Path to be checked */ - public static void checkItemExistsWithinTransaction(final DOMDataTreeReadTransaction rwTransaction, + public static void checkItemExistsWithinTransaction(final DOMDataTreeReadOperations rwTransaction, final LogicalDatastoreType store, final YangInstanceIdentifier path) { final FluentFuture future = rwTransaction.exists(store, path); final FutureDataFactory response = new FutureDataFactory<>(); @@ -294,7 +294,7 @@ public final class PatchDataTransactionUtil { * @param store Datastore * @param path Path to be checked */ - public static void checkItemDoesNotExistsWithinTransaction(final DOMDataTreeReadTransaction rwTransaction, + public static void checkItemDoesNotExistsWithinTransaction(final DOMDataTreeReadOperations rwTransaction, final LogicalDatastoreType store, final YangInstanceIdentifier path) { final FluentFuture future = rwTransaction.exists(store, path); final FutureDataFactory response = new FutureDataFactory<>(); diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfInvokeOperationsUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfInvokeOperationsUtil.java index 918a415d61..fcc7d3c39c 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfInvokeOperationsUtil.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfInvokeOperationsUtil.java @@ -7,7 +7,7 @@ */ package org.opendaylight.restconf.nb.rfc8040.rests.utils; -import com.google.common.util.concurrent.FluentFuture; +import com.google.common.util.concurrent.ListenableFuture; import java.util.Optional; import java.util.concurrent.CancellationException; import javax.ws.rs.core.Response.Status; @@ -50,7 +50,7 @@ public final class RestconfInvokeOperationsUtil { final SchemaPath schemaPath) { final Optional mountPointService = mountPoint.getService(DOMRpcService.class); if (mountPointService.isPresent()) { - final FluentFuture rpc = mountPointService.get().invokeRpc(schemaPath, data); + final ListenableFuture rpc = mountPointService.get().invokeRpc(schemaPath, data); return prepareResult(rpc); } final String errmsg = "RPC service is missing."; @@ -76,7 +76,7 @@ public final class RestconfInvokeOperationsUtil { throw new RestconfDocumentedException(Status.SERVICE_UNAVAILABLE); } - final FluentFuture rpc = rpcService.invokeRpc(schemaPath, data); + final ListenableFuture rpc = rpcService.invokeRpc(schemaPath, data); return prepareResult(rpc); } @@ -104,7 +104,7 @@ public final class RestconfInvokeOperationsUtil { } } - private static DOMRpcResult prepareResult(final FluentFuture rpc) { + private static DOMRpcResult prepareResult(final ListenableFuture rpc) { final RpcResultFactory dataFactory = new RpcResultFactory(); FutureCallbackTx.addCallback(rpc, RestconfDataServiceConstant.PostData.POST_TX_TYPE, dataFactory); return dataFactory.build(); diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/SubscribeToStreamUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/SubscribeToStreamUtil.java index 527e27deef..28fe9458fa 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/SubscribeToStreamUtil.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/SubscribeToStreamUtil.java @@ -28,7 +28,7 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataBroker; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService; import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; -import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction; +import org.opendaylight.mdsal.dom.api.DOMDataTreeReadOperations; import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction; import org.opendaylight.mdsal.dom.api.DOMNotificationListener; import org.opendaylight.restconf.common.context.InstanceIdentifierContext; @@ -358,7 +358,7 @@ public final class SubscribeToStreamUtil { } static boolean checkExist(final SchemaContext schemaContext, - final DOMDataTreeReadTransaction readWriteTransaction) { + final DOMDataTreeReadOperations readWriteTransaction) { boolean exist; try { exist = readWriteTransaction.exists(LogicalDatastoreType.OPERATIONAL, diff --git a/restconf/restconf-parent/pom.xml b/restconf/restconf-parent/pom.xml index 26ac2eaa00..71d9ed32e5 100644 --- a/restconf/restconf-parent/pom.xml +++ b/restconf/restconf-parent/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.mdsal binding-parent - 3.0.6 + 4.0.0 -- 2.36.6