BUG-4514: clear destroyed modules 98/31298/2
authorRobert Varga <rovarga@cisco.com>
Mon, 14 Dec 2015 20:03:11 +0000 (21:03 +0100)
committerGerrit Code Review <gerrit@opendaylight.org>
Tue, 15 Dec 2015 08:07:59 +0000 (08:07 +0000)
When the transaction concludes we do not need to know the destroyed
modules anymore. Clear them out as part of the close sequence.

Change-Id: Ia2a43ed424d96a99cc27df7b685e6abf7393f8a3
Signed-off-by: Robert Varga <rovarga@cisco.com>
opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/DependencyResolverManager.java
opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/ModulesHolder.java

index 3ef6e5d8421ac39834394b34afbf56d58b7eeca8..231022f34a4b04b38be6a5a33ef6c8690c862c7e 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.controller.config.manager.impl.dependencyresolver;
 
 import static com.google.common.base.Preconditions.checkState;
-
 import com.google.common.base.Preconditions;
 import com.google.common.reflect.AbstractInvocationHandler;
 import com.google.common.reflect.Reflection;
@@ -225,6 +224,7 @@ public class DependencyResolverManager implements DependencyResolverFactory, Aut
 
     @Override
     public void close() {
+        modulesHolder.close();
         deadlockMonitor.close();
     }
 
index 1c5cd47c50455718f10042b9a66e670070c50d16..cfe7ea14b9ae84c171a064a64f99a45b09b051f8 100644 (file)
@@ -28,7 +28,7 @@ import org.opendaylight.controller.config.spi.ModuleFactory;
 /**
  * Represents modules to be committed.
  */
-class ModulesHolder {
+class ModulesHolder implements AutoCloseable {
     private final TransactionIdentifier transactionIdentifier;
     @GuardedBy("this")
     private final Map<ModuleIdentifier, ModuleInternalTransactionalInfo> commitMap = new HashMap<>();
@@ -36,7 +36,7 @@ class ModulesHolder {
     @GuardedBy("this")
     private final Set<ModuleInternalTransactionalInfo> unorderedDestroyedFromPreviousTransactions = new HashSet<>();
 
-    ModulesHolder(TransactionIdentifier transactionIdentifier) {
+    ModulesHolder(final TransactionIdentifier transactionIdentifier) {
         this.transactionIdentifier = transactionIdentifier;
     }
 
@@ -54,8 +54,8 @@ class ModulesHolder {
     }
 
     private ModuleInternalTransactionalInfo findModuleInternalTransactionalInfo(
-            ModuleIdentifier moduleIdentifier,
-            JmxAttribute jmxAttributeForReporting) {
+            final ModuleIdentifier moduleIdentifier,
+            final JmxAttribute jmxAttributeForReporting) {
         ModuleInternalTransactionalInfo moduleInternalTransactionalInfo = commitMap
                 .get(moduleIdentifier);
         JmxAttributeValidationException.checkNotNull(
@@ -65,14 +65,14 @@ class ModulesHolder {
         return moduleInternalTransactionalInfo;
     }
 
-    public Module findModule(ModuleIdentifier moduleIdentifier,
-            JmxAttribute jmxAttributeForReporting) {
+    public Module findModule(final ModuleIdentifier moduleIdentifier,
+            final JmxAttribute jmxAttributeForReporting) {
         return findModuleInternalTransactionalInfo(moduleIdentifier,
                 jmxAttributeForReporting).getProxiedModule();
     }
 
-    public ModuleFactory findModuleFactory(ModuleIdentifier moduleIdentifier,
-            JmxAttribute jmxAttributeForReporting) {
+    public ModuleFactory findModuleFactory(final ModuleIdentifier moduleIdentifier,
+            final JmxAttribute jmxAttributeForReporting) {
         return findModuleInternalTransactionalInfo(moduleIdentifier,
                 jmxAttributeForReporting).getModuleFactory();
     }
@@ -87,13 +87,13 @@ class ModulesHolder {
     }
 
     public void put(
-            ModuleInternalTransactionalInfo moduleInternalTransactionalInfo) {
+            final ModuleInternalTransactionalInfo moduleInternalTransactionalInfo) {
         commitMap.put(moduleInternalTransactionalInfo.getIdentifier(),
                 moduleInternalTransactionalInfo);
     }
 
     public ModuleInternalTransactionalInfo destroyModule(
-            ModuleIdentifier moduleIdentifier) {
+            final ModuleIdentifier moduleIdentifier) {
         ModuleInternalTransactionalInfo found = commitMap.remove(moduleIdentifier);
         if (found == null) {
             throw new IllegalStateException("Not found:" + moduleIdentifier);
@@ -104,7 +104,7 @@ class ModulesHolder {
         return found;
     }
 
-    public void assertNotExists(ModuleIdentifier moduleIdentifier)
+    public void assertNotExists(final ModuleIdentifier moduleIdentifier)
             throws InstanceAlreadyExistsException {
         if (commitMap.containsKey(moduleIdentifier)) {
             throw new InstanceAlreadyExistsException(
@@ -116,11 +116,16 @@ class ModulesHolder {
         return commitMap.values();
     }
 
-    public ModuleInternalTransactionalInfo findModuleInternalTransactionalInfo(ModuleIdentifier moduleIdentifier) {
+    public ModuleInternalTransactionalInfo findModuleInternalTransactionalInfo(final ModuleIdentifier moduleIdentifier) {
         ModuleInternalTransactionalInfo found = commitMap.get(moduleIdentifier);
         if (found == null) {
             throw new IllegalStateException("Not found:" + moduleIdentifier);
         }
         return found;
     }
+
+    @Override
+    public void close() {
+        unorderedDestroyedFromPreviousTransactions.clear();
+    }
 }