Fix Broken refresh in network-topology-singleton
[netconf.git] / apps / netconf-topology-singleton / src / main / java / org / opendaylight / netconf / topology / singleton / impl / NetconfTopologyContext.java
index c086eaea205ec33ade1d9b0a0bdffcf008385e8a..91f4ecf4056f5b2d528c1f4b358bcb30cf8ea2d6 100644 (file)
@@ -40,9 +40,11 @@ class NetconfTopologyContext implements ClusterSingletonService, AutoCloseable {
 
     private final @NonNull ServiceGroupIdentifier serviceGroupIdent;
     private final NetconfTopologySingletonImpl topologySingleton;
-    private final RemoteDeviceId remoteDeviceId;
 
     private volatile boolean closed;
+    private volatile boolean isMaster;
+
+    private RemoteDeviceId remoteDeviceId;
 
     NetconfTopologyContext(final String topologyId, final NetconfClientDispatcher clientDispatcher,
             final EventExecutor eventExecutor, final ScheduledThreadPool keepaliveExecutor,
@@ -64,6 +66,7 @@ class NetconfTopologyContext implements ClusterSingletonService, AutoCloseable {
 
     @VisibleForTesting
     protected NetconfTopologySingletonImpl getTopologySingleton() {
+        // FIXME we have to access topology singleton via this method because of mocking in MountPointEndToEndTest
         return topologySingleton;
     }
 
@@ -74,6 +77,7 @@ class NetconfTopologyContext implements ClusterSingletonService, AutoCloseable {
             LOG.warn("Instance is already closed.");
             return;
         }
+        isMaster = true;
         getTopologySingleton().becomeTopologyLeader();
     }
 
@@ -90,6 +94,18 @@ class NetconfTopologyContext implements ClusterSingletonService, AutoCloseable {
         return FluentFutures.immediateNullFluentFuture();
     }
 
+    void refresh(final @NonNull NetconfTopologySetup setup) {
+        final var node = requireNonNull(setup).getNode();
+        remoteDeviceId = NetconfNodeUtils.toRemoteDeviceId(node.getNodeId(), node.augmentation(NetconfNode.class));
+
+        if (isMaster) {
+            getTopologySingleton().disconnectNode(setup.getNode().getNodeId());
+            getTopologySingleton().refreshSetupConnection(setup, remoteDeviceId);
+        } else {
+            getTopologySingleton().refreshDevice(setup, remoteDeviceId);
+        }
+    }
+
     @Override
     public ServiceGroupIdentifier getIdentifier() {
         return serviceGroupIdent;