From 0bbb1613ee4c4c3f0a4fbbf8b9dc7ebcfbafde34 Mon Sep 17 00:00:00 2001 From: Madhu Venugopal Date: Sun, 22 Sep 2013 01:38:11 -0700 Subject: [PATCH] Removing the Container Aware dependency from Clustering Services. Clustering Services implementation is ContainerAware to handle the case of Container deletion. More appropriate way to handle it is to have an explicit API in global cluster manager to expose a functionality to clean all the caches assocaited with a Container. This API can be used by the Container Manager to clean up the caches. Change-Id: I9758a01da13ffa7d951307a116df34a7fe9c19f6 Signed-off-by: Madhu Venugopal --- .../services/IClusterGlobalServices.java | 1 + .../internal/Activator.java | 3 +-- .../internal/ClusterGlobalManager.java | 9 ++++++++ .../internal/ClusterManager.java | 21 ++----------------- .../internal/ClusterManagerCommon.java | 2 +- .../stub/internal/ClusterGlobalManager.java | 2 ++ .../internal/ContainerManager.java | 1 + .../internal/TopologyManagerImpl.java | 2 +- 8 files changed, 18 insertions(+), 23 deletions(-) diff --git a/opendaylight/clustering/services/src/main/java/org/opendaylight/controller/clustering/services/IClusterGlobalServices.java b/opendaylight/clustering/services/src/main/java/org/opendaylight/controller/clustering/services/IClusterGlobalServices.java index 58d8c0051b..e25a9537c0 100644 --- a/opendaylight/clustering/services/src/main/java/org/opendaylight/controller/clustering/services/IClusterGlobalServices.java +++ b/opendaylight/clustering/services/src/main/java/org/opendaylight/controller/clustering/services/IClusterGlobalServices.java @@ -26,4 +26,5 @@ package org.opendaylight.controller.clustering.services; * */ public interface IClusterGlobalServices extends IClusterServicesCommon { + public void removeContainerCaches(String containerName); } diff --git a/opendaylight/clustering/services_implementation/src/main/java/org/opendaylight/controller/clustering/services_implementation/internal/Activator.java b/opendaylight/clustering/services_implementation/src/main/java/org/opendaylight/controller/clustering/services_implementation/internal/Activator.java index 17df387d3e..f42d966372 100644 --- a/opendaylight/clustering/services_implementation/src/main/java/org/opendaylight/controller/clustering/services_implementation/internal/Activator.java +++ b/opendaylight/clustering/services_implementation/src/main/java/org/opendaylight/controller/clustering/services_implementation/internal/Activator.java @@ -10,7 +10,6 @@ package org.opendaylight.controller.clustering.services_implementation.internal; import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase; -import org.opendaylight.controller.sal.core.IContainerAware; import org.opendaylight.controller.clustering.services.ICacheUpdateAware; import org.opendaylight.controller.clustering.services.IClusterContainerServices; @@ -128,7 +127,7 @@ public class Activator extends ComponentActivatorAbstractBase { public void configureGlobalInstance(Component c, Object imp) { if (imp.equals(ClusterManager.class)) { // export the service for Apps and Plugins - c.setInterface(new String[] { IClusterServices.class.getName(), IContainerAware.class.getName() }, null); + c.setInterface(new String[] { IClusterServices.class.getName() }, null); } if (imp.equals(ClusterGlobalManager.class)) { diff --git a/opendaylight/clustering/services_implementation/src/main/java/org/opendaylight/controller/clustering/services_implementation/internal/ClusterGlobalManager.java b/opendaylight/clustering/services_implementation/src/main/java/org/opendaylight/controller/clustering/services_implementation/internal/ClusterGlobalManager.java index ce33ac8639..34ddb7a207 100644 --- a/opendaylight/clustering/services_implementation/src/main/java/org/opendaylight/controller/clustering/services_implementation/internal/ClusterGlobalManager.java +++ b/opendaylight/clustering/services_implementation/src/main/java/org/opendaylight/controller/clustering/services_implementation/internal/ClusterGlobalManager.java @@ -41,4 +41,13 @@ public class ClusterGlobalManager } super.unsetCacheUpdateAware(props, s); } + + @Override + public void removeContainerCaches(String containerName) { + logger.debug("Removing caches for container {}", containerName); + for (String cacheName : clusterService.getCacheList(containerName)) { + clusterService.destroyCache(containerName, cacheName); + } + } + } diff --git a/opendaylight/clustering/services_implementation/src/main/java/org/opendaylight/controller/clustering/services_implementation/internal/ClusterManager.java b/opendaylight/clustering/services_implementation/src/main/java/org/opendaylight/controller/clustering/services_implementation/internal/ClusterManager.java index ca13fbc2d2..4a67e76ab2 100644 --- a/opendaylight/clustering/services_implementation/src/main/java/org/opendaylight/controller/clustering/services_implementation/internal/ClusterManager.java +++ b/opendaylight/clustering/services_implementation/src/main/java/org/opendaylight/controller/clustering/services_implementation/internal/ClusterManager.java @@ -55,11 +55,10 @@ import org.opendaylight.controller.clustering.services.IClusterServices; import org.opendaylight.controller.clustering.services.IGetUpdates; import org.opendaylight.controller.clustering.services.IListenRoleChange; import org.opendaylight.controller.clustering.services.ListenRoleChangeAddException; -import org.opendaylight.controller.sal.core.IContainerAware; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class ClusterManager implements IClusterServices, IContainerAware { +public class ClusterManager implements IClusterServices { protected static final Logger logger = LoggerFactory .getLogger(ClusterManager.class); private DefaultCacheManager cm; @@ -371,6 +370,7 @@ public class ClusterManager implements IClusterServices, IContainerAware { return null; } for (String cacheName : manager.getCacheNames()) { + if (!manager.isRunning(cacheName)) continue; if (cacheName.startsWith("{" + containerName + "}_")) { String[] res = cacheName.split("[{}]"); if (res.length >= 4 && res[1].equals(containerName) @@ -676,21 +676,4 @@ public class ClusterManager implements IClusterServices, IContainerAware { } } } - - private void removeContainerCaches(String containerName) { - logger.info("Destroying caches for container {}", containerName); - for (String cacheName : this.getCacheList(containerName)) { - this.destroyCache(containerName, cacheName); - } - } - - @Override - public void containerCreate(String arg0) { - // no op - } - - @Override - public void containerDestroy(String container) { - removeContainerCaches(container); - } } diff --git a/opendaylight/clustering/services_implementation/src/main/java/org/opendaylight/controller/clustering/services_implementation/internal/ClusterManagerCommon.java b/opendaylight/clustering/services_implementation/src/main/java/org/opendaylight/controller/clustering/services_implementation/internal/ClusterManagerCommon.java index 90299e5ac9..61681bc90a 100644 --- a/opendaylight/clustering/services_implementation/src/main/java/org/opendaylight/controller/clustering/services_implementation/internal/ClusterManagerCommon.java +++ b/opendaylight/clustering/services_implementation/src/main/java/org/opendaylight/controller/clustering/services_implementation/internal/ClusterManagerCommon.java @@ -41,7 +41,7 @@ import org.slf4j.LoggerFactory; public abstract class ClusterManagerCommon implements IClusterServicesCommon { protected String containerName = null; - private IClusterServices clusterService = null; + protected IClusterServices clusterService = null; protected static final Logger logger = LoggerFactory .getLogger(ClusterManagerCommon.class); private ConcurrentMap cacheUpdateAware = diff --git a/opendaylight/clustering/stub/src/main/java/org/opendaylight/controller/clustering/stub/internal/ClusterGlobalManager.java b/opendaylight/clustering/stub/src/main/java/org/opendaylight/controller/clustering/stub/internal/ClusterGlobalManager.java index f9f9be8db2..6dcc0a10a3 100644 --- a/opendaylight/clustering/stub/src/main/java/org/opendaylight/controller/clustering/stub/internal/ClusterGlobalManager.java +++ b/opendaylight/clustering/stub/src/main/java/org/opendaylight/controller/clustering/stub/internal/ClusterGlobalManager.java @@ -18,4 +18,6 @@ public class ClusterGlobalManager extends ClusterManagerCommon implements public ClusterGlobalManager() throws UnknownHostException { super(); } + public void removeContainerCaches(String containerName) { + } } diff --git a/opendaylight/containermanager/implementation/src/main/java/org/opendaylight/controller/containermanager/internal/ContainerManager.java b/opendaylight/containermanager/implementation/src/main/java/org/opendaylight/controller/containermanager/internal/ContainerManager.java index 5058e2a0ac..c897e9a954 100644 --- a/opendaylight/containermanager/implementation/src/main/java/org/opendaylight/controller/containermanager/internal/ContainerManager.java +++ b/opendaylight/containermanager/implementation/src/main/java/org/opendaylight/controller/containermanager/internal/ContainerManager.java @@ -1182,6 +1182,7 @@ public class ContainerManager extends Authorization implements IContaine } } + if (delete) clusterServices.removeContainerCaches(containerName); return status; } diff --git a/opendaylight/topologymanager/implementation/src/main/java/org/opendaylight/controller/topologymanager/internal/TopologyManagerImpl.java b/opendaylight/topologymanager/implementation/src/main/java/org/opendaylight/controller/topologymanager/internal/TopologyManagerImpl.java index 004d1b98db..8f905a999a 100644 --- a/opendaylight/topologymanager/implementation/src/main/java/org/opendaylight/controller/topologymanager/internal/TopologyManagerImpl.java +++ b/opendaylight/topologymanager/implementation/src/main/java/org/opendaylight/controller/topologymanager/internal/TopologyManagerImpl.java @@ -918,10 +918,10 @@ public class TopologyManagerImpl implements // Lets sleep for sometime to allow aggregation of event Thread.sleep(100); } catch (InterruptedException e1) { - log.warn("TopologyNotify interrupted {}", e1.getMessage()); if (shuttingDown) { return; } + log.warn("TopologyNotify interrupted {}", e1.getMessage()); } catch (Exception e2) { log.error("", e2); } -- 2.36.6