From da09b89e760719b3b5bb9f437fe3cf17726e547b Mon Sep 17 00:00:00 2001 From: Madhu Venugopal Date: Wed, 8 Jan 2014 07:02:16 -0800 Subject: [PATCH] Addressing a flow programming issues on controler fail-over scenario in a Clustered setup. FRM : Handling the uninstallAllFlowEntries() only on containerDelete cases Simple Forwarding : Not to fail for false-reasons when Routing fails to get route when src and dst-node are the same Change-Id: I512ca2f11d8ae31daa373c41ba1fcfe13578a157 Signed-off-by: Madhu Venugopal --- .../internal/ForwardingRulesManager.java | 8 +++++++- .../sal/core/ComponentActivatorAbstractBase.java | 9 +++++++-- .../simpleforwarding/internal/SimpleForwardingImpl.java | 3 +-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/opendaylight/forwardingrulesmanager/implementation/src/main/java/org/opendaylight/controller/forwardingrulesmanager/internal/ForwardingRulesManager.java b/opendaylight/forwardingrulesmanager/implementation/src/main/java/org/opendaylight/controller/forwardingrulesmanager/internal/ForwardingRulesManager.java index 3d6a0292ef..2b3347f312 100644 --- a/opendaylight/forwardingrulesmanager/implementation/src/main/java/org/opendaylight/controller/forwardingrulesmanager/internal/ForwardingRulesManager.java +++ b/opendaylight/forwardingrulesmanager/implementation/src/main/java/org/opendaylight/controller/forwardingrulesmanager/internal/ForwardingRulesManager.java @@ -2639,6 +2639,13 @@ public class ForwardingRulesManager implements } } + /** + * Function called by the dependency manager before Container is Stopped and Destroyed. + */ + public void containerStop() { + uninstallAllFlowEntries(false); + } + /** * Function called by the dependency manager before the services exported by * the component are unregistered, this will be followed by a "destroy ()" @@ -2646,7 +2653,6 @@ public class ForwardingRulesManager implements */ void stop() { stopping = true; - uninstallAllFlowEntries(false); // Shutdown executor this.executor.shutdownNow(); // Now walk all the workMonitor and wake up the one sleeping because diff --git a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/ComponentActivatorAbstractBase.java b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/ComponentActivatorAbstractBase.java index 969aa630a1..0cd1612808 100644 --- a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/ComponentActivatorAbstractBase.java +++ b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/ComponentActivatorAbstractBase.java @@ -45,8 +45,8 @@ abstract public class ComponentActivatorAbstractBase implements Logger logger = LoggerFactory .getLogger(ComponentActivatorAbstractBase.class); private DependencyManager dm; - private ConcurrentMap, Component> dbInstances = (ConcurrentMap, Component>) new ConcurrentHashMap, Component>(); - private ConcurrentMap dbGlobalInstances = (ConcurrentMap) new ConcurrentHashMap(); + private ConcurrentMap, Component> dbInstances = new ConcurrentHashMap, Component>(); + private ConcurrentMap dbGlobalInstances = new ConcurrentHashMap(); /** * Method that should be overriden by the derived class for customization @@ -253,6 +253,11 @@ abstract public class ComponentActivatorAbstractBase implements containerName, imps[i]); Component c = this.dbInstances.get(key); if (c != null) { + if (c.getService() != null) { + c.invokeCallbackMethod(new Object[] { c.getService() }, "containerStop", + new Class[][] {{ Component.class}, {} }, + new Object[][] { {c}, {} }); + } // Now remove the component from dependency manager, // which will implicitely stop it first this.dm.remove(c); diff --git a/opendaylight/samples/simpleforwarding/src/main/java/org/opendaylight/controller/samples/simpleforwarding/internal/SimpleForwardingImpl.java b/opendaylight/samples/simpleforwarding/src/main/java/org/opendaylight/controller/samples/simpleforwarding/internal/SimpleForwardingImpl.java index a34cbb5db8..7a3625a229 100644 --- a/opendaylight/samples/simpleforwarding/src/main/java/org/opendaylight/controller/samples/simpleforwarding/internal/SimpleForwardingImpl.java +++ b/opendaylight/samples/simpleforwarding/src/main/java/org/opendaylight/controller/samples/simpleforwarding/internal/SimpleForwardingImpl.java @@ -800,8 +800,7 @@ public class SimpleForwardingImpl implements IfNewHostNotify, log.debug("Host Facing Port in a container came up, install the rules for all hosts from this port !"); Set allHosts = this.hostTracker.getAllHosts(); for (HostNodeConnector host : allHosts) { - if (node.equals(host.getnodeconnectorNode()) - && swPort.equals(host.getnodeConnector())) { + if (node.equals(host.getnodeconnectorNode())) { /* * This host resides behind the same switch and port for which a port up * message is received. Ideally this should not happen, but if it does, -- 2.36.6