X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fprotocol_plugins%2Fopenflow%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fprotocol_plugin%2Fopenflow%2Finternal%2FReadServiceFilter.java;h=b21a105f157809a94d7e4ff3530318c1921e9f4d;hb=f853f4cb2c1bd86ec2f227d34fad097073e5c1ee;hp=1ab89b34cb7c875b65e1dee5be409ebbbc5e1378;hpb=850d5b748e96c2667bb95ce423bdb00083838619;p=controller.git diff --git a/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/ReadServiceFilter.java b/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/ReadServiceFilter.java index 1ab89b34cb..b21a105f15 100644 --- a/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/ReadServiceFilter.java +++ b/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/ReadServiceFilter.java @@ -26,8 +26,8 @@ import org.opendaylight.controller.protocol_plugin.openflow.core.IController; import org.opendaylight.controller.sal.action.Action; import org.opendaylight.controller.sal.action.ActionType; import org.opendaylight.controller.sal.action.Output; -import org.opendaylight.controller.sal.connection.IPluginOutConnectionService; import org.opendaylight.controller.sal.core.ContainerFlow; +import org.opendaylight.controller.sal.core.IContainerAware; import org.opendaylight.controller.sal.core.IContainerListener; import org.opendaylight.controller.sal.core.Node; import org.opendaylight.controller.sal.core.NodeConnector; @@ -56,7 +56,7 @@ import org.slf4j.LoggerFactory; * Read Service shim layer which is in charge of filtering the flow statistics * based on container. It is a Global instance. */ -public class ReadServiceFilter implements IReadServiceFilter, IContainerListener, IOFStatisticsListener { +public class ReadServiceFilter implements IReadServiceFilter, IContainerListener, IOFStatisticsListener, IContainerAware { private static final Logger logger = LoggerFactory .getLogger(ReadServiceFilter.class); private IController controller = null; @@ -65,7 +65,8 @@ public class ReadServiceFilter implements IReadServiceFilter, IContainerListener private ConcurrentMap> containerToNode; private ConcurrentMap> containerToNt; private ConcurrentMap> containerFlows; - private ConcurrentMap readFilterInternalListeners; + private ConcurrentMap readFilterInternalListeners = + new ConcurrentHashMap(); public void setController(IController core) { this.controller = core; @@ -120,7 +121,6 @@ public class ReadServiceFilter implements IReadServiceFilter, IContainerListener containerToNt = new ConcurrentHashMap>(); containerToNode = new ConcurrentHashMap>(); containerFlows = new ConcurrentHashMap>(); - readFilterInternalListeners = new ConcurrentHashMap(); } /** @@ -130,6 +130,7 @@ public class ReadServiceFilter implements IReadServiceFilter, IContainerListener * */ void destroy() { + readFilterInternalListeners.clear(); } /** @@ -158,17 +159,6 @@ public class ReadServiceFilter implements IReadServiceFilter, IContainerListener this.statsMgr = null; } - IPluginOutConnectionService connectionPluginOutService; - void setIPluginOutConnectionService(IPluginOutConnectionService s) { - connectionPluginOutService = s; - } - - void unsetIPluginOutConnectionService(IPluginOutConnectionService s) { - if (connectionPluginOutService == s) { - connectionPluginOutService = null; - } - } - @Override public FlowOnNode readFlow(String container, Node node, Flow flow, boolean cached) { @@ -199,7 +189,7 @@ public class ReadServiceFilter implements IReadServiceFilter, IContainerListener List flowOnNodeList = new FlowStatisticsConverter(ofList).getFlowOnNodeList(node); List filteredList = filterFlowListPerContainer(container, node, flowOnNodeList); - return (filteredList == null || filteredList.isEmpty()) ? null : filteredList.get(0); + return (filteredList.isEmpty()) ? null : filteredList.get(0); } @Override @@ -213,10 +203,8 @@ public class ReadServiceFilter implements IReadServiceFilter, IContainerListener // Convert and filter the statistics per container List flowOnNodeList = new FlowStatisticsConverter(ofList).getFlowOnNodeList(node); - List filteredList = filterFlowListPerContainer(container, node, flowOnNodeList); - - return (filteredList == null) ? null : filteredList; + return filterFlowListPerContainer(container, node, flowOnNodeList); } @Override @@ -243,10 +231,10 @@ public class ReadServiceFilter implements IReadServiceFilter, IContainerListener * @param list * @return */ - public List filterFlowListPerContainer(String container, + private List filterFlowListPerContainer(String container, Node nodeId, List list) { if (list == null) { - return null; + return Collections.emptyList(); } // Create new filtered list of flows @@ -270,9 +258,9 @@ public class ReadServiceFilter implements IReadServiceFilter, IContainerListener * @param list * @return */ - public List filterPortListPerContainer(String container, long switchId, List list) { + private List filterPortListPerContainer(String container, long switchId, List list) { if (list == null) { - return null; + return Collections.emptyList(); } // Create new filtered list of flows @@ -291,10 +279,10 @@ public class ReadServiceFilter implements IReadServiceFilter, IContainerListener } - public List filterTableListPerContainer( + private List filterTableListPerContainer( String container, long switchId, List list) { if (list == null) { - return null; + return Collections.emptyList(); } // Create new filtered list of node tables @@ -643,4 +631,17 @@ public class ReadServiceFilter implements IReadServiceFilter, IContainerListener l.getValue().nodeTableStatisticsUpdated(node, tableStatsList); } } + + @Override + public void containerCreate(String containerName) { + // do nothing + } + + @Override + public void containerDestroy(String containerName) { + containerToNc.remove(containerName); + containerToNode.remove(containerName); + containerToNt.remove(containerName); + containerFlows.remove(containerName); + } }