From 8cca2dfdc9d55e956c175b0e07c19443526abf59 Mon Sep 17 00:00:00 2001 From: Madhu Venugopal Date: Wed, 25 Sep 2013 18:01:01 -0700 Subject: [PATCH] Porting Tristate logic to SAL Connection Service and make use of it in Inventory Service Shim ConnectionManager's locality status was moved from a binary state to tristate to address timing issues. With this push, it is ported to the SAL Connection Service so that the protocol-plugins can make use of it as well. Change-Id: I07a495a8c1d2606f6ae11ccdb73ec3445a438769 Signed-off-by: Madhu Venugopal --- .../controller/connectionmanager/IConnectionManager.java | 1 + .../connectionmanager/internal/ConnectionManager.java | 2 +- .../connectionmanager/scheme/AbstractScheme.java | 2 +- opendaylight/forwardingrulesmanager/implementation/pom.xml | 6 ++++++ .../internal/ForwardingRulesManager.java | 2 +- .../openflow/internal/InventoryServiceShim.java | 7 ++++++- .../controller/sal/connection}/ConnectionLocality.java | 2 +- .../sal/connection/IPluginOutConnectionService.java | 2 ++ .../implementation/internal/ConnectionService.java | 7 +++++++ 9 files changed, 26 insertions(+), 5 deletions(-) rename opendaylight/{connectionmanager/api/src/main/java/org/opendaylight/controller/connectionmanager => sal/connection/api/src/main/java/org/opendaylight/controller/sal/connection}/ConnectionLocality.java (93%) diff --git a/opendaylight/connectionmanager/api/src/main/java/org/opendaylight/controller/connectionmanager/IConnectionManager.java b/opendaylight/connectionmanager/api/src/main/java/org/opendaylight/controller/connectionmanager/IConnectionManager.java index 788af16248..106d14dc39 100644 --- a/opendaylight/connectionmanager/api/src/main/java/org/opendaylight/controller/connectionmanager/IConnectionManager.java +++ b/opendaylight/connectionmanager/api/src/main/java/org/opendaylight/controller/connectionmanager/IConnectionManager.java @@ -14,6 +14,7 @@ import java.util.Map; import java.util.Set; import org.opendaylight.controller.sal.connection.ConnectionConstants; +import org.opendaylight.controller.sal.connection.ConnectionLocality; import org.opendaylight.controller.sal.core.Node; import org.opendaylight.controller.sal.utils.Status; diff --git a/opendaylight/connectionmanager/implementation/src/main/java/org/opendaylight/controller/connectionmanager/internal/ConnectionManager.java b/opendaylight/connectionmanager/implementation/src/main/java/org/opendaylight/controller/connectionmanager/internal/ConnectionManager.java index 2d5f80fb79..1beb7fe0bb 100644 --- a/opendaylight/connectionmanager/implementation/src/main/java/org/opendaylight/controller/connectionmanager/internal/ConnectionManager.java +++ b/opendaylight/connectionmanager/implementation/src/main/java/org/opendaylight/controller/connectionmanager/internal/ConnectionManager.java @@ -35,12 +35,12 @@ import org.eclipse.osgi.framework.console.CommandProvider; import org.opendaylight.controller.clustering.services.ICacheUpdateAware; import org.opendaylight.controller.clustering.services.IClusterGlobalServices; import org.opendaylight.controller.clustering.services.ICoordinatorChangeAware; -import org.opendaylight.controller.connectionmanager.ConnectionLocality; import org.opendaylight.controller.connectionmanager.ConnectionMgmtScheme; import org.opendaylight.controller.connectionmanager.IConnectionManager; import org.opendaylight.controller.connectionmanager.scheme.AbstractScheme; import org.opendaylight.controller.connectionmanager.scheme.SchemeFactory; import org.opendaylight.controller.sal.connection.ConnectionConstants; +import org.opendaylight.controller.sal.connection.ConnectionLocality; import org.opendaylight.controller.sal.connection.IConnectionListener; import org.opendaylight.controller.sal.connection.IConnectionService; import org.opendaylight.controller.sal.core.Node; diff --git a/opendaylight/connectionmanager/implementation/src/main/java/org/opendaylight/controller/connectionmanager/scheme/AbstractScheme.java b/opendaylight/connectionmanager/implementation/src/main/java/org/opendaylight/controller/connectionmanager/scheme/AbstractScheme.java index 062fd1ee77..d7b1968429 100644 --- a/opendaylight/connectionmanager/implementation/src/main/java/org/opendaylight/controller/connectionmanager/scheme/AbstractScheme.java +++ b/opendaylight/connectionmanager/implementation/src/main/java/org/opendaylight/controller/connectionmanager/scheme/AbstractScheme.java @@ -14,8 +14,8 @@ import org.opendaylight.controller.clustering.services.CacheConfigException; import org.opendaylight.controller.clustering.services.CacheExistException; import org.opendaylight.controller.clustering.services.IClusterGlobalServices; import org.opendaylight.controller.clustering.services.IClusterServices; -import org.opendaylight.controller.connectionmanager.ConnectionLocality; import org.opendaylight.controller.connectionmanager.ConnectionMgmtScheme; +import org.opendaylight.controller.sal.connection.ConnectionLocality; import org.opendaylight.controller.sal.core.Node; import org.opendaylight.controller.sal.utils.Status; import org.opendaylight.controller.sal.utils.StatusCode; diff --git a/opendaylight/forwardingrulesmanager/implementation/pom.xml b/opendaylight/forwardingrulesmanager/implementation/pom.xml index 651d077fd8..e7faf73584 100644 --- a/opendaylight/forwardingrulesmanager/implementation/pom.xml +++ b/opendaylight/forwardingrulesmanager/implementation/pom.xml @@ -62,6 +62,7 @@ org.opendaylight.controller.sal.match, org.opendaylight.controller.sal.utils, org.opendaylight.controller.sal.packet, + org.opendaylight.controller.sal.connection, org.opendaylight.controller.forwardingrulesmanager, org.opendaylight.controller.connectionmanager, javax.xml.bind.annotation, @@ -135,6 +136,11 @@ sal 0.5.0-SNAPSHOT + + org.opendaylight.controller + sal.connection + 0.1.0-SNAPSHOT + org.opendaylight.controller forwardingrulesmanager 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 9c2afe42be..3c936de769 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 @@ -39,7 +39,7 @@ import org.opendaylight.controller.clustering.services.ICacheUpdateAware; import org.opendaylight.controller.clustering.services.IClusterContainerServices; import org.opendaylight.controller.clustering.services.IClusterServices; import org.opendaylight.controller.configuration.IConfigurationContainerAware; -import org.opendaylight.controller.connectionmanager.ConnectionLocality; +import org.opendaylight.controller.sal.connection.ConnectionLocality; import org.opendaylight.controller.connectionmanager.IConnectionManager; import org.opendaylight.controller.forwardingrulesmanager.FlowConfig; import org.opendaylight.controller.forwardingrulesmanager.FlowEntry; diff --git a/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/InventoryServiceShim.java b/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/InventoryServiceShim.java index 6401ec52f8..a920adf71d 100644 --- a/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/InventoryServiceShim.java +++ b/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/InventoryServiceShim.java @@ -26,6 +26,7 @@ import org.opendaylight.controller.protocol_plugin.openflow.core.IController; import org.opendaylight.controller.protocol_plugin.openflow.core.IMessageListener; import org.opendaylight.controller.protocol_plugin.openflow.core.ISwitch; import org.opendaylight.controller.protocol_plugin.openflow.core.ISwitchStateListener; +import org.opendaylight.controller.sal.connection.ConnectionLocality; import org.opendaylight.controller.sal.connection.IPluginOutConnectionService; import org.opendaylight.controller.sal.core.Actions; import org.opendaylight.controller.sal.core.Buffers; @@ -259,7 +260,11 @@ public class InventoryServiceShim implements IContainerListener, } // Add this node - addNode(sw); + if (connectionOutService.getLocalityStatus(node) != ConnectionLocality.NOT_CONNECTED) { + addNode(sw); + } else { + logger.debug("Skipping node addition due to Connectivity Status : {}", connectionOutService.getLocalityStatus(node).name()); + } } @Override diff --git a/opendaylight/connectionmanager/api/src/main/java/org/opendaylight/controller/connectionmanager/ConnectionLocality.java b/opendaylight/sal/connection/api/src/main/java/org/opendaylight/controller/sal/connection/ConnectionLocality.java similarity index 93% rename from opendaylight/connectionmanager/api/src/main/java/org/opendaylight/controller/connectionmanager/ConnectionLocality.java rename to opendaylight/sal/connection/api/src/main/java/org/opendaylight/controller/sal/connection/ConnectionLocality.java index 347ca07ec1..515acb5734 100644 --- a/opendaylight/connectionmanager/api/src/main/java/org/opendaylight/controller/connectionmanager/ConnectionLocality.java +++ b/opendaylight/sal/connection/api/src/main/java/org/opendaylight/controller/sal/connection/ConnectionLocality.java @@ -1,4 +1,4 @@ -package org.opendaylight.controller.connectionmanager; +package org.opendaylight.controller.sal.connection; public enum ConnectionLocality { /** diff --git a/opendaylight/sal/connection/api/src/main/java/org/opendaylight/controller/sal/connection/IPluginOutConnectionService.java b/opendaylight/sal/connection/api/src/main/java/org/opendaylight/controller/sal/connection/IPluginOutConnectionService.java index 456acf0166..16e215444e 100644 --- a/opendaylight/sal/connection/api/src/main/java/org/opendaylight/controller/sal/connection/IPluginOutConnectionService.java +++ b/opendaylight/sal/connection/api/src/main/java/org/opendaylight/controller/sal/connection/IPluginOutConnectionService.java @@ -22,4 +22,6 @@ public interface IPluginOutConnectionService { * @return true if node is local to this controller. false otherwise. */ public boolean isLocal(Node node); + + public ConnectionLocality getLocalityStatus(Node node); } \ No newline at end of file diff --git a/opendaylight/sal/connection/implementation/src/main/java/org/opendaylight/controller/sal/connection/implementation/internal/ConnectionService.java b/opendaylight/sal/connection/implementation/src/main/java/org/opendaylight/controller/sal/connection/implementation/internal/ConnectionService.java index e2132fb8a0..1c7e2c05e6 100644 --- a/opendaylight/sal/connection/implementation/src/main/java/org/opendaylight/controller/sal/connection/implementation/internal/ConnectionService.java +++ b/opendaylight/sal/connection/implementation/src/main/java/org/opendaylight/controller/sal/connection/implementation/internal/ConnectionService.java @@ -16,6 +16,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import org.opendaylight.controller.sal.connection.ConnectionConstants; +import org.opendaylight.controller.sal.connection.ConnectionLocality; import org.opendaylight.controller.sal.connection.IConnectionListener; import org.opendaylight.controller.sal.connection.IConnectionService; import org.opendaylight.controller.sal.connection.IPluginInConnectionService; @@ -104,6 +105,12 @@ public class ConnectionService implements IPluginOutConnectionService, IConnecti return connectionListener.isLocal(node); } + @Override + public ConnectionLocality getLocalityStatus(Node node) { + if (this.connectionListener == null) return ConnectionLocality.NOT_CONNECTED; + return connectionListener.getLocalityStatus(node); + } + @Override public Node connect (String type, String connectionIdentifier, Map params) { IPluginInConnectionService s = pluginService.get(type); -- 2.36.6