X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fprotocol_plugins%2Fopenflow%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fprotocol_plugin%2Fopenflow%2Finternal%2FReadService.java;h=215216e25f00a8fb3f9538d59902d9daa5e86357;hb=060b3bebccc30b9b85705e060de9972089874bb3;hp=9ff3d21ff0a5ddbff953066b9e2b3553f3807617;hpb=29f7cfb54b580928c7feac63abce028a7014b0d5;p=controller.git diff --git a/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/ReadService.java b/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/ReadService.java index 9ff3d21ff0..215216e25f 100644 --- a/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/ReadService.java +++ b/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/ReadService.java @@ -11,32 +11,37 @@ package org.opendaylight.controller.protocol_plugin.openflow.internal; import java.util.Dictionary; import java.util.List; +import java.util.Set; +import java.util.concurrent.CopyOnWriteArraySet; import org.apache.felix.dm.Component; -import org.opendaylight.controller.protocol_plugin.openflow.IPluginReadServiceFilter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - +import org.opendaylight.controller.protocol_plugin.openflow.IReadFilterInternalListener; +import org.opendaylight.controller.protocol_plugin.openflow.IReadServiceFilter; +import org.opendaylight.controller.sal.connection.IPluginOutConnectionService; import org.opendaylight.controller.sal.core.Node; import org.opendaylight.controller.sal.core.Node.NodeIDType; import org.opendaylight.controller.sal.core.NodeConnector; +import org.opendaylight.controller.sal.core.NodeTable; import org.opendaylight.controller.sal.flowprogrammer.Flow; import org.opendaylight.controller.sal.reader.FlowOnNode; import org.opendaylight.controller.sal.reader.IPluginInReadService; +import org.opendaylight.controller.sal.reader.IPluginOutReadService; import org.opendaylight.controller.sal.reader.NodeConnectorStatistics; import org.opendaylight.controller.sal.reader.NodeDescription; +import org.opendaylight.controller.sal.reader.NodeTableStatistics; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Container Instance of IPluginInReadService implementation class - * - * - * */ -public class ReadService implements IPluginInReadService { +public class ReadService implements IPluginInReadService, IReadFilterInternalListener { private static final Logger logger = LoggerFactory .getLogger(ReadService.class); - private IPluginReadServiceFilter filter; + private IReadServiceFilter filter; + private Set pluginOutReadServices = new CopyOnWriteArraySet(); private String containerName; + private IPluginOutConnectionService connectionOutService; /** * Function called by the dependency manager when all the required @@ -46,8 +51,7 @@ public class ReadService implements IPluginInReadService { @SuppressWarnings("unchecked") void init(Component c) { Dictionary props = c.getServiceProperties(); - containerName = (props != null) ? (String) props.get("containerName") - : null; + containerName = (props != null) ? (String) props.get("containerName") : null; } /** @@ -57,6 +61,7 @@ public class ReadService implements IPluginInReadService { * */ void destroy() { + pluginOutReadServices.clear(); } /** @@ -77,14 +82,28 @@ public class ReadService implements IPluginInReadService { void stop() { } - public void setService(IPluginReadServiceFilter filter) { + public void setService(IReadServiceFilter filter) { this.filter = filter; } - public void unsetService(IPluginReadServiceFilter filter) { + public void unsetService(IReadServiceFilter filter) { this.filter = null; } + public void setPluginOutReadServices(IPluginOutReadService service) { + logger.trace("Got a service set request {}", service); + if (this.pluginOutReadServices != null) { + this.pluginOutReadServices.add(service); + } + } + + public void unsetPluginOutReadServices( + IPluginOutReadService service) { + logger.trace("Got a service UNset request"); + if (this.pluginOutReadServices != null) { + this.pluginOutReadServices.remove(service); + } + } @Override public FlowOnNode readFlow(Node node, Flow flow, boolean cached) { if (!node.getType().equals(NodeIDType.OPENFLOW)) { @@ -92,6 +111,10 @@ public class ReadService implements IPluginInReadService { return null; } + if (!connectionOutService.isLocal(node)) { + logger.debug("This Controller is not the master for the node : " + node); + return null; + } return filter.readFlow(containerName, node, flow, cached); } @@ -102,6 +125,11 @@ public class ReadService implements IPluginInReadService { return null; } + if (!connectionOutService.isLocal(node)) { + logger.debug("This Controller is not the master for the node : " + node); + return null; + } + return filter.readAllFlow(containerName, node, cached); } @@ -112,6 +140,11 @@ public class ReadService implements IPluginInReadService { return null; } + if (!connectionOutService.isLocal(node)) { + logger.debug("This Controller is not the master for the node : " + node); + return null; + } + return filter.readDescription(node, cached); } @@ -123,6 +156,12 @@ public class ReadService implements IPluginInReadService { logger.error("Invalid node type"); return null; } + + if (!connectionOutService.isLocal(connector.getNode())) { + logger.debug("This Controller is not the master for connector : "+connector); + return null; + } + return filter.readNodeConnector(containerName, connector, cached); } @@ -134,6 +173,11 @@ public class ReadService implements IPluginInReadService { return null; } + if (!connectionOutService.isLocal(node)) { + logger.debug("This Controller is not the master for node : " + node); + return null; + } + return filter.readAllNodeConnector(containerName, node, cached); } @@ -144,6 +188,97 @@ public class ReadService implements IPluginInReadService { logger.error("Invalid node type"); return 0; } + + if (!connectionOutService.isLocal(connector.getNode())) { + logger.debug("This Controller is not the master for connector : "+connector); + return 0; + } + return filter.getTransmitRate(containerName, connector); } + + @Override + public NodeTableStatistics readNodeTable(NodeTable table, boolean cached) { + if (!table.getNode().getType() + .equals(NodeIDType.OPENFLOW)) { + logger.error("Invalid node type"); + return null; + } + + if (!connectionOutService.isLocal(table.getNode())) { + logger.debug("This Controller is not the master for connector : "+table); + return null; + } + + return filter.readNodeTable(containerName, table, cached); + } + + @Override + public List readAllNodeTable(Node node, boolean cached) { + if (!node.getType().equals(NodeIDType.OPENFLOW)) { + logger.error("Invalid node type"); + return null; + } + + if (!connectionOutService.isLocal(node)) { + logger.debug("This Controller is not the master for node : " + node); + return null; + } + + return filter.readAllNodeTable(containerName, node, cached); + } + + @Override + public void nodeFlowStatisticsUpdated(Node node, List flowStatsList) { + if (!connectionOutService.isLocal(node)) { + logger.debug("This Controller is not the master for node : " + node); + return; + } + for (IPluginOutReadService service : pluginOutReadServices) { + service.nodeFlowStatisticsUpdated(node, flowStatsList); + } + } + + @Override + public void nodeConnectorStatisticsUpdated(Node node, List ncStatsList) { + if (!connectionOutService.isLocal(node)) { + logger.debug("This Controller is not the master for node : " + node); + return; + } + for (IPluginOutReadService service : pluginOutReadServices) { + service.nodeConnectorStatisticsUpdated(node, ncStatsList); + } + } + + @Override + public void nodeTableStatisticsUpdated(Node node, List tableStatsList) { + if (!connectionOutService.isLocal(node)) { + logger.debug("This Controller is not the master for node : " + node); + return; + } + for (IPluginOutReadService service : pluginOutReadServices) { + service.nodeTableStatisticsUpdated(node, tableStatsList); + } + } + + @Override + public void nodeDescriptionStatisticsUpdated(Node node, NodeDescription nodeDescription) { + if (!connectionOutService.isLocal(node)) { + logger.debug("This Controller is not the master for node : " + node); + return; + } + for (IPluginOutReadService service : pluginOutReadServices) { + service.descriptionStatisticsUpdated(node, nodeDescription); + } + } + + void setIPluginOutConnectionService(IPluginOutConnectionService s) { + connectionOutService = s; + } + + void unsetIPluginOutConnectionService(IPluginOutConnectionService s) { + if (connectionOutService == s) { + connectionOutService = null; + } + } }