Clean up NetconfTopology methods 18/103618/8
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 6 Dec 2022 22:32:55 +0000 (23:32 +0100)
committerRobert Varga <nite@hq.sk>
Wed, 7 Dec 2022 11:22:17 +0000 (11:22 +0000)
No caller cares about NetconfDeviceCapabilities and we should not be
using Void. Switch both futures to result in Empty, which is always
non-null.

This also removes one call site which assumes NetconfSessionPreferences
contain NetconfDeviceCapabilities -- which they will not.

JIRA: NETCONF-923
Change-Id: I934d8b1cd5915117500b1c0d6028838b727a2353
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
netconf/netconf-topology-impl/src/test/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImplTest.java
netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImpl.java
netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/api/NetconfTopology.java
netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/spi/AbstractNetconfTopology.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/listener/NetconfDeviceCommunicator.java

index 3e0e399a43a227d32ccf52509ae6fd93e0762176..847dac386c2f70fac35fcaa818adc796a4cc3c95 100644 (file)
@@ -48,7 +48,6 @@ import org.opendaylight.netconf.client.NetconfClientSessionListener;
 import org.opendaylight.netconf.client.conf.NetconfClientConfiguration;
 import org.opendaylight.netconf.client.conf.NetconfReconnectingClientConfiguration;
 import org.opendaylight.netconf.sal.connect.api.SchemaResourceManager;
-import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCapabilities;
 import org.opendaylight.netconf.sal.connect.netconf.schema.mapping.BaseNetconfSchemas;
 import org.opendaylight.netconf.sal.connect.netconf.schema.mapping.DefaultBaseNetconfSchemas;
 import org.opendaylight.netconf.topology.spi.AbstractNetconfTopology;
@@ -74,6 +73,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.IdentifiableItem;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.common.Decimal64;
+import org.opendaylight.yangtools.yang.common.Empty;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.parser.api.YangParserException;
@@ -258,13 +258,13 @@ public class NetconfTopologyImplTest {
         }
 
         @Override
-        public ListenableFuture<NetconfDeviceCapabilities> connectNode(final NodeId nodeId, final Node configNode) {
-            return Futures.immediateFuture(new NetconfDeviceCapabilities());
+        public ListenableFuture<Empty> connectNode(final NodeId nodeId, final Node configNode) {
+            return Futures.immediateFuture(Empty.value());
         }
 
         @Override
-        public ListenableFuture<Void> disconnectNode(final NodeId nodeId) {
-            return Futures.immediateFuture(null);
+        public ListenableFuture<Empty> disconnectNode(final NodeId nodeId) {
+            return Futures.immediateFuture(Empty.value());
         }
     }
 
index 1272d05435e7dd9197da3640836c8a72a6c012a0..1fcba210f0b985e5807b0187c2ac0f79ce6b43a9 100644 (file)
@@ -39,7 +39,6 @@ import org.opendaylight.netconf.sal.connect.netconf.NetconfDevice;
 import org.opendaylight.netconf.sal.connect.netconf.NetconfDeviceBuilder;
 import org.opendaylight.netconf.sal.connect.netconf.SchemalessNetconfDevice;
 import org.opendaylight.netconf.sal.connect.netconf.auth.DatastoreBackedPublicKeyAuth;
-import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCapabilities;
 import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator;
 import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences;
 import org.opendaylight.netconf.sal.connect.netconf.listener.UserPreferences;
@@ -67,6 +66,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev15
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.login.pw.unencrypted.LoginPasswordUnencrypted;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
 import org.opendaylight.yangtools.yang.common.Decimal64;
+import org.opendaylight.yangtools.yang.common.Empty;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
 import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
 import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource;
@@ -116,12 +116,12 @@ public class RemoteDeviceConnectorImpl implements RemoteDeviceConnector {
         final NetconfClientSessionListener netconfClientSessionListener = deviceCommunicatorDTO.getSessionListener();
         final NetconfReconnectingClientConfiguration clientConfig =
                 getClientConfig(netconfClientSessionListener, netconfNode);
-        final ListenableFuture<NetconfDeviceCapabilities> future = deviceCommunicator
+        final ListenableFuture<Empty> future = deviceCommunicator
                 .initializeRemoteConnection(netconfTopologyDeviceSetup.getNetconfClientDispatcher(), clientConfig);
 
-        Futures.addCallback(future, new FutureCallback<NetconfDeviceCapabilities>() {
+        Futures.addCallback(future, new FutureCallback<>() {
             @Override
-            public void onSuccess(final NetconfDeviceCapabilities result) {
+            public void onSuccess(final Empty result) {
                 LOG.debug("{}: Connector started successfully", remoteDeviceId);
             }
 
index d69e2e272b14ee85f1726030015fcb704598bdbb..32de9bfe0657df3ff44bdaa736e3e4aaf87863f1 100644 (file)
@@ -5,18 +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.topology.api;
 
 import com.google.common.util.concurrent.ListenableFuture;
-import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCapabilities;
 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.yangtools.yang.common.Empty;
 
 public interface NetconfTopology {
 
-    ListenableFuture<NetconfDeviceCapabilities> connectNode(NodeId nodeId, Node configNode);
-
-    ListenableFuture<Void> disconnectNode(NodeId nodeId);
+    ListenableFuture<Empty> connectNode(NodeId nodeId, Node configNode);
 
+    ListenableFuture<Empty> disconnectNode(NodeId nodeId);
 }
index 7c7a2d7baa9f6a01e8ae215c5a3e200a330e2be9..9c9d722196146154b3c39dc505c1d8fb048f914d 100644 (file)
@@ -47,7 +47,6 @@ import org.opendaylight.netconf.sal.connect.netconf.NetconfDevice.SchemaResource
 import org.opendaylight.netconf.sal.connect.netconf.NetconfDeviceBuilder;
 import org.opendaylight.netconf.sal.connect.netconf.SchemalessNetconfDevice;
 import org.opendaylight.netconf.sal.connect.netconf.auth.DatastoreBackedPublicKeyAuth;
-import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCapabilities;
 import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator;
 import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences;
 import org.opendaylight.netconf.sal.connect.netconf.listener.UserPreferences;
@@ -74,6 +73,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev15
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.schema.storage.YangLibrary;
 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.yangtools.yang.common.Empty;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
 import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
 import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource;
@@ -125,7 +125,7 @@ public abstract class AbstractNetconfTopology implements NetconfTopology {
     }
 
     @Override
-    public ListenableFuture<NetconfDeviceCapabilities> connectNode(final NodeId nodeId, final Node configNode) {
+    public ListenableFuture<Empty> connectNode(final NodeId nodeId, final Node configNode) {
         LOG.info("Connecting RemoteDevice{{}} , with config {}", nodeId, hideCredentials(configNode));
         return setupConnection(nodeId, configNode);
     }
@@ -145,7 +145,7 @@ public abstract class AbstractNetconfTopology implements NetconfTopology {
     }
 
     @Override
-    public ListenableFuture<Void> disconnectNode(final NodeId nodeId) {
+    public ListenableFuture<Empty> disconnectNode(final NodeId nodeId) {
         LOG.debug("Disconnecting RemoteDevice{{}}", nodeId.getValue());
 
         final NetconfConnectorDTO connectorDTO = activeConnectors.remove(nodeId);
@@ -155,11 +155,10 @@ public abstract class AbstractNetconfTopology implements NetconfTopology {
         }
 
         connectorDTO.close();
-        return Futures.immediateFuture(null);
+        return Futures.immediateFuture(Empty.value());
     }
 
-    protected ListenableFuture<NetconfDeviceCapabilities> setupConnection(final NodeId nodeId,
-                                                                          final Node configNode) {
+    protected ListenableFuture<Empty> setupConnection(final NodeId nodeId, final Node configNode) {
         final NetconfNode netconfNode = configNode.augmentation(NetconfNode.class);
         final NetconfNodeAugmentedOptional nodeOptional = configNode.augmentation(NetconfNodeAugmentedOptional.class);
 
@@ -171,14 +170,14 @@ public abstract class AbstractNetconfTopology implements NetconfTopology {
         final NetconfClientSessionListener netconfClientSessionListener = deviceCommunicatorDTO.getSessionListener();
         final NetconfReconnectingClientConfiguration clientConfig =
                 getClientConfig(netconfClientSessionListener, netconfNode, nodeId);
-        final ListenableFuture<NetconfDeviceCapabilities> future =
+        final ListenableFuture<Empty> future =
                 deviceCommunicator.initializeRemoteConnection(clientDispatcher, clientConfig);
 
         activeConnectors.put(nodeId, deviceCommunicatorDTO);
 
-        Futures.addCallback(future, new FutureCallback<NetconfDeviceCapabilities>() {
+        Futures.addCallback(future, new FutureCallback<>() {
             @Override
-            public void onSuccess(final NetconfDeviceCapabilities result) {
+            public void onSuccess(final Empty result) {
                 LOG.debug("Connector for {} started succesfully", nodeId.getValue());
             }
 
index c69c570575e4f6a78f18490bb2c4679c35648a21..9644a9d6d3375fdcdc5f74d2056562ca609b8114 100644 (file)
@@ -39,6 +39,7 @@ import org.opendaylight.netconf.sal.connect.api.RemoteDeviceCommunicator;
 import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil;
 import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
 import org.opendaylight.yangtools.util.concurrent.FluentFutures;
+import org.opendaylight.yangtools.yang.common.Empty;
 import org.opendaylight.yangtools.yang.common.ErrorTag;
 import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -61,7 +62,7 @@ public class NetconfDeviceCommunicator implements NetconfClientSessionListener,
     private final Queue<Request> requests = new ArrayDeque<>();
     private NetconfClientSession currentSession;
 
-    private final SettableFuture<NetconfDeviceCapabilities> firstConnectionFuture;
+    private final SettableFuture<Empty> firstConnectionFuture = SettableFuture.create();
     private Future<?> taskFuture;
 
     // isSessionClosing indicates a close operation on the session is issued and
@@ -95,7 +96,6 @@ public class NetconfDeviceCommunicator implements NetconfClientSessionListener,
         this.id = id;
         this.remoteDevice = remoteDevice;
         this.overrideNetconfCapabilities = overrideNetconfCapabilities;
-        firstConnectionFuture = SettableFuture.create();
         semaphore = rpcMessageLimit > 0 ? new Semaphore(rpcMessageLimit) : null;
     }
 
@@ -127,7 +127,8 @@ public class NetconfDeviceCommunicator implements NetconfClientSessionListener,
 
             remoteDevice.onRemoteSessionUp(netconfSessionPreferences, this);
             if (!firstConnectionFuture.isDone()) {
-                firstConnectionFuture.set(netconfSessionPreferences.getNetconfDeviceCapabilities());
+                // FIXME: right, except ... this does not include the device schema setup, so is it really useful?
+                firstConnectionFuture.set(Empty.value());
             }
         } finally {
             sessionLock.unlock();
@@ -142,8 +143,8 @@ public class NetconfDeviceCommunicator implements NetconfClientSessionListener,
      * @return a ListenableFuture that returns success on first successful connection and failure when the underlying
      *         reconnecting strategy runs out of reconnection attempts
      */
-    public ListenableFuture<NetconfDeviceCapabilities> initializeRemoteConnection(
-            final NetconfClientDispatcher dispatcher, final NetconfClientConfiguration config) {
+    public ListenableFuture<Empty> initializeRemoteConnection(final NetconfClientDispatcher dispatcher,
+            final NetconfClientConfiguration config) {
 
         final Future<?> connectFuture;
         if (config instanceof NetconfReconnectingClientConfiguration) {