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>
package org.opendaylight.controller.config.manager.impl.dependencyresolver;
import static com.google.common.base.Preconditions.checkState;
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;
import com.google.common.base.Preconditions;
import com.google.common.reflect.AbstractInvocationHandler;
import com.google.common.reflect.Reflection;
@Override
public void close() {
@Override
public void close() {
deadlockMonitor.close();
}
deadlockMonitor.close();
}
/**
* Represents modules to be committed.
*/
/**
* Represents modules to be committed.
*/
+class ModulesHolder implements AutoCloseable {
private final TransactionIdentifier transactionIdentifier;
@GuardedBy("this")
private final Map<ModuleIdentifier, ModuleInternalTransactionalInfo> commitMap = new HashMap<>();
private final TransactionIdentifier transactionIdentifier;
@GuardedBy("this")
private final Map<ModuleIdentifier, ModuleInternalTransactionalInfo> commitMap = new HashMap<>();
@GuardedBy("this")
private final Set<ModuleInternalTransactionalInfo> unorderedDestroyedFromPreviousTransactions = new HashSet<>();
@GuardedBy("this")
private final Set<ModuleInternalTransactionalInfo> unorderedDestroyedFromPreviousTransactions = new HashSet<>();
- ModulesHolder(TransactionIdentifier transactionIdentifier) {
+ ModulesHolder(final TransactionIdentifier transactionIdentifier) {
this.transactionIdentifier = transactionIdentifier;
}
this.transactionIdentifier = transactionIdentifier;
}
}
private ModuleInternalTransactionalInfo findModuleInternalTransactionalInfo(
}
private ModuleInternalTransactionalInfo findModuleInternalTransactionalInfo(
- ModuleIdentifier moduleIdentifier,
- JmxAttribute jmxAttributeForReporting) {
+ final ModuleIdentifier moduleIdentifier,
+ final JmxAttribute jmxAttributeForReporting) {
ModuleInternalTransactionalInfo moduleInternalTransactionalInfo = commitMap
.get(moduleIdentifier);
JmxAttributeValidationException.checkNotNull(
ModuleInternalTransactionalInfo moduleInternalTransactionalInfo = commitMap
.get(moduleIdentifier);
JmxAttributeValidationException.checkNotNull(
return moduleInternalTransactionalInfo;
}
return moduleInternalTransactionalInfo;
}
- public Module findModule(ModuleIdentifier moduleIdentifier,
- JmxAttribute jmxAttributeForReporting) {
+ public Module findModule(final ModuleIdentifier moduleIdentifier,
+ final JmxAttribute jmxAttributeForReporting) {
return findModuleInternalTransactionalInfo(moduleIdentifier,
jmxAttributeForReporting).getProxiedModule();
}
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();
}
return findModuleInternalTransactionalInfo(moduleIdentifier,
jmxAttributeForReporting).getModuleFactory();
}
- ModuleInternalTransactionalInfo moduleInternalTransactionalInfo) {
+ final ModuleInternalTransactionalInfo moduleInternalTransactionalInfo) {
commitMap.put(moduleInternalTransactionalInfo.getIdentifier(),
moduleInternalTransactionalInfo);
}
public ModuleInternalTransactionalInfo destroyModule(
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);
ModuleInternalTransactionalInfo found = commitMap.remove(moduleIdentifier);
if (found == null) {
throw new IllegalStateException("Not found:" + moduleIdentifier);
- public void assertNotExists(ModuleIdentifier moduleIdentifier)
+ public void assertNotExists(final ModuleIdentifier moduleIdentifier)
throws InstanceAlreadyExistsException {
if (commitMap.containsKey(moduleIdentifier)) {
throw new InstanceAlreadyExistsException(
throws InstanceAlreadyExistsException {
if (commitMap.containsKey(moduleIdentifier)) {
throw new InstanceAlreadyExistsException(
return commitMap.values();
}
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;
}
ModuleInternalTransactionalInfo found = commitMap.get(moduleIdentifier);
if (found == null) {
throw new IllegalStateException("Not found:" + moduleIdentifier);
}
return found;
}
+
+ @Override
+ public void close() {
+ unorderedDestroyedFromPreviousTransactions.clear();
+ }