From 248f46ddb283452df60d0e084d5a03af82ed5ef5 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 14 Dec 2015 21:03:11 +0100 Subject: [PATCH] BUG-4514: clear destroyed modules 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 --- .../DependencyResolverManager.java | 2 +- .../dependencyresolver/ModulesHolder.java | 29 +++++++++++-------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/DependencyResolverManager.java b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/DependencyResolverManager.java index 3ef6e5d842..231022f34a 100644 --- a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/DependencyResolverManager.java +++ b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/DependencyResolverManager.java @@ -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(); } diff --git a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/ModulesHolder.java b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/ModulesHolder.java index 1c5cd47c50..cfe7ea14b9 100644 --- a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/ModulesHolder.java +++ b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/ModulesHolder.java @@ -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 commitMap = new HashMap<>(); @@ -36,7 +36,7 @@ class ModulesHolder { @GuardedBy("this") private final Set 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(); + } } -- 2.36.6