From: Giovanni Meo Date: Fri, 13 Sep 2013 15:24:27 +0000 (+0000) Subject: Merge "Fix for cache cleanup in protocol plugin on container deletion" X-Git-Tag: releasepom-0.1.0~95 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=1415e57c132459f962afcc976da3b72c28a5702b;hp=-c Merge "Fix for cache cleanup in protocol plugin on container deletion" --- 1415e57c132459f962afcc976da3b72c28a5702b diff --combined opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/DiscoveryService.java index 869d36d9cb,592e336b0b..012807eee9 --- a/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/DiscoveryService.java +++ b/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/DiscoveryService.java @@@ -560,11 -560,10 +560,11 @@@ public class DiscoveryService implement private void addDiscovery(Node node) { Map switches = controller.getSwitches(); ISwitch sw = switches.get(node.getID()); - List ports = sw.getEnabledPorts(); - if (ports == null) { + if (sw == null) { + //switch could be removed by now, stop propagation return; } + List ports = sw.getEnabledPorts(); for (OFPhysicalPort port : ports) { NodeConnector nodeConnector = NodeConnectorCreator.createOFNodeConnector(port.getPortNumber(), node); if (!readyListHi.contains(nodeConnector)) { @@@ -1693,4 -1692,5 +1693,5 @@@ } return ports; } + } diff --combined opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/internal/InventoryServiceShim.java index 92eec43b4c,adc121816b..8db83f0fc7 --- 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 @@@ -32,6 -32,7 +32,7 @@@ import org.opendaylight.controller.sal. import org.opendaylight.controller.sal.core.Capabilities; import org.opendaylight.controller.sal.core.ContainerFlow; import org.opendaylight.controller.sal.core.Description; + import org.opendaylight.controller.sal.core.IContainerAware; import org.opendaylight.controller.sal.core.IContainerListener; import org.opendaylight.controller.sal.core.MacAddress; import org.opendaylight.controller.sal.core.Node; @@@ -59,7 -60,7 +60,7 @@@ import org.slf4j.LoggerFactory * */ public class InventoryServiceShim implements IContainerListener, - IMessageListener, ISwitchStateListener, IOFStatisticsListener { + IMessageListener, ISwitchStateListener, IOFStatisticsListener, IContainerAware { protected static final Logger logger = LoggerFactory .getLogger(InventoryServiceShim.class); private IController controller = null; @@@ -139,7 -140,7 +140,7 @@@ } void setInventoryShimExternalListener(IInventoryShimExternalListener s) { - logger.trace("Set inventoryShimExternalListener"); + logger.trace("Set inventoryShimExternalListener {}", s); if ((this.inventoryShimExternalListeners != null) && !this.inventoryShimExternalListeners.contains(s)) { this.inventoryShimExternalListeners.add(s); @@@ -147,6 -148,7 +148,7 @@@ } void unsetInventoryShimExternalListener(IInventoryShimExternalListener s) { + logger.trace("Unset inventoryShimExternalListener {}", s); if ((this.inventoryShimExternalListeners != null) && this.inventoryShimExternalListeners.contains(s)) { this.inventoryShimExternalListeners.remove(s); @@@ -482,7 -484,8 +484,7 @@@ Set props = new HashSet(); Long sid = (Long) node.getID(); - Date connectedSince = controller.getSwitches().get(sid) - .getConnectedDate(); + Date connectedSince = sw.getConnectedDate(); Long connectedSinceTime = (connectedSince == null) ? 0 : connectedSince .getTime(); props.add(new TimeStamp(connectedSinceTime, "connectedSince")); @@@ -583,4 -586,43 +585,43 @@@ public void tableStatisticsRefreshed(Long switchId, List tables) { // Nothing to do } + + @Override + public void containerCreate(String containerName) { + // Nothing to do + } + + @Override + public void containerDestroy(String containerName) { + Set removeNodeConnectorSet = new HashSet(); + Set removeNodeSet = new HashSet(); + for (Map.Entry> entry : nodeConnectorContainerMap.entrySet()) { + Set ncContainers = entry.getValue(); + if (ncContainers.contains(containerName)) { + NodeConnector nodeConnector = entry.getKey(); + removeNodeConnectorSet.add(nodeConnector); + } + } + for (Map.Entry> entry : nodeContainerMap.entrySet()) { + Set nodeContainers = entry.getValue(); + if (nodeContainers.contains(containerName)) { + Node node = entry.getKey(); + removeNodeSet.add(node); + } + } + for (NodeConnector nodeConnector : removeNodeConnectorSet) { + Set ncContainers = nodeConnectorContainerMap.get(nodeConnector); + ncContainers.remove(containerName); + if (ncContainers.isEmpty()) { + nodeConnectorContainerMap.remove(nodeConnector); + } + } + for (Node node : removeNodeSet) { + Set nodeContainers = nodeContainerMap.get(node); + nodeContainers.remove(containerName); + if (nodeContainers.isEmpty()) { + nodeContainerMap.remove(node); + } + } + } }