Handle TopologyNodeState release properly 31/96031/1
authorOleksii Mozghovyi <oleksii.mozghovyi@pantheon.tech>
Mon, 26 Apr 2021 23:58:43 +0000 (02:58 +0300)
committerRobert Varga <nite@hq.sk>
Mon, 10 May 2021 10:30:21 +0000 (10:30 +0000)
- Close transaction chain when PCEP session goes down
- Remove NodeState from the corresponding map in SessionManager properly

JIRA: BGPCEP-920
Change-Id: Ica9dc0a6f43420b5b57694252cb13d2b5350b103
Signed-off-by: Deepthi V V <dvv@luminanetworks.com>
Signed-off-by: Oleksii Mozghovyi <oleksii.mozghovyi@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 3bf063839d01f6c4b80aa4c02ea85d80feae8bfd)

pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/AbstractTopologySessionListener.java
pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/ServerSessionManager.java
pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/TopologyNodeState.java

index 79b41532efde65340229f4723033d7798f1efcc1..47253001a99f37262bb778748c5d6af7b66bd767 100644 (file)
@@ -326,6 +326,7 @@ public abstract class AbstractTopologySessionListener<S, L> implements TopologyS
     private synchronized void clearNodeState() {
         if (this.nodeState != null) {
             this.serverSessionManager.unbind(this.nodeState.getNodeId());
+            LOG.debug("Clear Node state: {}", this.nodeState.getNodeId());
             this.nodeState = null;
         }
     }
index e1e9ded5807542f04bb63b370b03a1418e4be870..5b16882f20af5689a244c21eb4afc63fbb88a6d3 100644 (file)
@@ -124,7 +124,9 @@ final class ServerSessionManager implements PCEPSessionListenerFactory, Topology
             LOG.error("Session Manager has already been closed.");
             return;
         }
-        this.nodes.remove(createNodeId(session.getRemoteAddress()));
+        final NodeId nodeId = createNodeId(session.getRemoteAddress());
+        this.nodes.remove(nodeId);
+        this.state.remove(nodeId);
         if (nodeState != null) {
             LOG.debug("Node {} unbound", nodeState.getNodeId());
             nodeState.released(persistNode);
index 63abe010df709615013064193ed4e86f3b05483e..9e40babe17e8269ae279f494857bc12218e49b46 100644 (file)
@@ -101,6 +101,7 @@ final class TopologyNodeState implements AutoCloseable, TransactionChainListener
             }, MoreExecutors.directExecutor());
         }
 
+        close();
         this.lastReleased = System.nanoTime();
     }
 
@@ -150,6 +151,7 @@ final class TopologyNodeState implements AutoCloseable, TransactionChainListener
         // FIXME: flip internal state, so that the next attempt to update fails, triggering node reconnect
         LOG.error("Unexpected transaction failure in node {} transaction {}",
                 this.nodeId, transaction.getIdentifier(), cause);
+        close();
     }
 
     @Override
@@ -176,7 +178,7 @@ final class TopologyNodeState implements AutoCloseable, TransactionChainListener
 
             @Override
             public void onFailure(final Throwable throwable) {
-                LOG.trace("Put topology Node failed {}, value {}", TopologyNodeState.this.nodeId, node, throwable);
+                LOG.error("Put topology Node failed {}, value {}", TopologyNodeState.this.nodeId, node, throwable);
             }
         }, MoreExecutors.directExecutor());
     }
@@ -202,4 +204,4 @@ final class TopologyNodeState implements AutoCloseable, TransactionChainListener
             }
         }, MoreExecutors.directExecutor());
     }
-}
\ No newline at end of file
+}