From: Tomas Olvecky Date: Thu, 7 Nov 2013 16:24:20 +0000 (+0100) Subject: Change fix for default module's dependency resolver creation into two steps. X-Git-Tag: jenkins-controller-bulk-release-prepare-only-2-1~460^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=refs%2Fchanges%2F15%2F2515%2F1 Change fix for default module's dependency resolver creation into two steps. Call dependencyResolverManager.getOrCreate in scope of creating default modules. Add check to putConfigBeanToJMXAndInternalMaps so that identifier of module and dependency resolver must match. Remove deprecated method from DependencyResolverImpl. DependencyResolver interface now extends Identifiable Change-Id: I04207882b6501e71ac4e0fc321fb7932ebb747fb Signed-off-by: Tomas Olvecky --- diff --git a/opendaylight/config/config-api/src/main/java/org/opendaylight/controller/config/api/DependencyResolver.java b/opendaylight/config/config-api/src/main/java/org/opendaylight/controller/config/api/DependencyResolver.java index 7cac1060ba..39845454ef 100644 --- a/opendaylight/config/config-api/src/main/java/org/opendaylight/controller/config/api/DependencyResolver.java +++ b/opendaylight/config/config-api/src/main/java/org/opendaylight/controller/config/api/DependencyResolver.java @@ -10,6 +10,7 @@ package org.opendaylight.controller.config.api; import javax.management.ObjectName; import org.opendaylight.controller.config.api.annotations.AbstractServiceInterface; +import org.opendaylight.yangtools.concepts.Identifiable; /** * Each new {@link org.opendaylight.controller.config.spi.Module} can receive @@ -18,7 +19,7 @@ import org.opendaylight.controller.config.api.annotations.AbstractServiceInterfa * * @see org.opendaylight.controller.config.spi.Module */ -public interface DependencyResolver { +public interface DependencyResolver extends Identifiable { /** * To be used during validation phase to validate serice interface of diff --git a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/ConfigTransactionControllerImpl.java b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/ConfigTransactionControllerImpl.java index 343d45a236..3f569ae324 100644 --- a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/ConfigTransactionControllerImpl.java +++ b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/ConfigTransactionControllerImpl.java @@ -138,8 +138,10 @@ class ConfigTransactionControllerImpl implements for (ModuleFactory moduleFactory : toBeAdded) { Set defaultModules = moduleFactory.getDefaultModules(dependencyResolverManager, bundleContext); for (Module module : defaultModules) { + // ensure default module to be registered to jmx even if its module factory does not use dependencyResolverFactory + DependencyResolver dependencyResolver = dependencyResolverManager.getOrCreate(module.getIdentifier()); try { - putConfigBeanToJMXAndInternalMaps(module.getIdentifier(), module, moduleFactory, null); + putConfigBeanToJMXAndInternalMaps(module.getIdentifier(), module, moduleFactory, null, dependencyResolver); } catch (InstanceAlreadyExistsException e) { throw new IllegalStateException(e); } @@ -179,7 +181,7 @@ class ConfigTransactionControllerImpl implements "Error while copying old configuration from %s to %s", oldConfigBeanInfo, moduleFactory), e); } - putConfigBeanToJMXAndInternalMaps(moduleIdentifier, module, moduleFactory, oldConfigBeanInfo); + putConfigBeanToJMXAndInternalMaps(moduleIdentifier, module, moduleFactory, oldConfigBeanInfo, dependencyResolver); } @Override @@ -196,19 +198,24 @@ class ConfigTransactionControllerImpl implements DependencyResolver dependencyResolver = dependencyResolverManager.getOrCreate(moduleIdentifier); Module module = moduleFactory.createModule(instanceName, dependencyResolver, bundleContext); return putConfigBeanToJMXAndInternalMaps(moduleIdentifier, module, - moduleFactory, null); + moduleFactory, null, dependencyResolver); } private synchronized ObjectName putConfigBeanToJMXAndInternalMaps( ModuleIdentifier moduleIdentifier, Module module, ModuleFactory moduleFactory, - @Nullable ModuleInternalInfo maybeOldConfigBeanInfo) + @Nullable ModuleInternalInfo maybeOldConfigBeanInfo, DependencyResolver dependencyResolver) throws InstanceAlreadyExistsException { + logger.debug("Adding module {} to transaction {}", moduleIdentifier, this); if (moduleIdentifier.equals(module.getIdentifier())==false) { throw new IllegalStateException("Incorrect name reported by module. Expected " + moduleIdentifier + ", got " + module.getIdentifier()); } + if (dependencyResolver.getIdentifier().equals(moduleIdentifier) == false ) { + throw new IllegalStateException("Incorrect name reported by dependency resolver. Expected " + + moduleIdentifier + ", got " + dependencyResolver.getIdentifier()); + } DynamicMBean writableDynamicWrapper = new DynamicWritableWrapper( module, moduleIdentifier, transactionIdentifier, readOnlyAtomicBoolean, transactionsMBeanServer, @@ -224,8 +231,6 @@ class ConfigTransactionControllerImpl implements maybeOldConfigBeanInfo, transactionModuleJMXRegistration); dependencyResolverManager.put(moduleInternalTransactionalInfo); - // ensure default module to be registered to jmx even if its module factory does not use dependencyResolverFactory - dependencyResolverManager.getOrCreate(moduleIdentifier); return writableON; } diff --git a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/DependencyResolverImpl.java b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/DependencyResolverImpl.java index f817b41c5f..065a0f843f 100644 --- a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/DependencyResolverImpl.java +++ b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/DependencyResolverImpl.java @@ -7,15 +7,6 @@ */ package org.opendaylight.controller.config.manager.impl.dependencyresolver; -import static java.lang.String.format; - -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.Set; - -import javax.annotation.concurrent.GuardedBy; -import javax.management.ObjectName; - import org.opendaylight.controller.config.api.DependencyResolver; import org.opendaylight.controller.config.api.JmxAttribute; import org.opendaylight.controller.config.api.JmxAttributeValidationException; @@ -25,7 +16,14 @@ import org.opendaylight.controller.config.api.jmx.ObjectNameUtil; import org.opendaylight.controller.config.manager.impl.TransactionStatus; import org.opendaylight.controller.config.spi.Module; import org.opendaylight.controller.config.spi.ModuleFactory; -import org.opendaylight.yangtools.concepts.Identifiable; + +import javax.annotation.concurrent.GuardedBy; +import javax.management.ObjectName; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.Set; + +import static java.lang.String.format; /** * Protect {@link org.opendaylight.controller.config.spi.Module#getInstance()} @@ -33,7 +31,7 @@ import org.opendaylight.yangtools.concepts.Identifiable; * during validation. Tracks dependencies for ordering purposes. */ final class DependencyResolverImpl implements DependencyResolver, - Identifiable, Comparable { + Comparable { private final ModulesHolder modulesHolder; private final ModuleIdentifier name; private final TransactionStatus transactionStatus; @@ -47,11 +45,6 @@ final class DependencyResolverImpl implements DependencyResolver, this.modulesHolder = modulesHolder; } - @Deprecated - public ModuleIdentifier getName() { - return name; - } - /** * {@inheritDoc} */ @@ -177,7 +170,7 @@ final class DependencyResolverImpl implements DependencyResolver, int maxDepth = 0; LinkedHashSet chainForDetectingCycles2 = new LinkedHashSet<>( chainForDetectingCycles); - chainForDetectingCycles2.add(impl.getName()); + chainForDetectingCycles2.add(impl.getIdentifier()); for (ModuleIdentifier dependencyName : impl.dependencies) { DependencyResolverImpl dependentDRI = manager .getOrCreate(dependencyName); 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 28f2e37ec1..dea78c8b15 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 @@ -7,15 +7,6 @@ */ package org.opendaylight.controller.config.manager.impl.dependencyresolver; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.annotation.concurrent.GuardedBy; -import javax.management.InstanceAlreadyExistsException; - import org.opendaylight.controller.config.api.DependencyResolver; import org.opendaylight.controller.config.api.DependencyResolverFactory; import org.opendaylight.controller.config.api.JmxAttribute; @@ -26,6 +17,14 @@ import org.opendaylight.controller.config.manager.impl.TransactionStatus; import org.opendaylight.controller.config.spi.Module; import org.opendaylight.controller.config.spi.ModuleFactory; +import javax.annotation.concurrent.GuardedBy; +import javax.management.InstanceAlreadyExistsException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * Holds information about modules being created and destroyed within this * transaction. Observes usage of DependencyResolver within modules to figure @@ -80,7 +79,7 @@ public class DependencyResolverManager implements TransactionHolder, DependencyR List result = new ArrayList<>( moduleIdentifiersToDependencyResolverMap.size()); for (DependencyResolverImpl dri : getAllSorted()) { - ModuleIdentifier driName = dri.getName(); + ModuleIdentifier driName = dri.getIdentifier(); result.add(driName); } return result; 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 f70c4bf579..6bbd7875a9 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 @@ -7,18 +7,6 @@ */ package org.opendaylight.controller.config.manager.impl.dependencyresolver; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.annotation.concurrent.GuardedBy; -import javax.management.InstanceAlreadyExistsException; - import org.opendaylight.controller.config.api.JmxAttribute; import org.opendaylight.controller.config.api.JmxAttributeValidationException; import org.opendaylight.controller.config.api.ModuleIdentifier; @@ -28,6 +16,17 @@ import org.opendaylight.controller.config.manager.impl.ModuleInternalTransaction import org.opendaylight.controller.config.spi.Module; import org.opendaylight.controller.config.spi.ModuleFactory; +import javax.annotation.concurrent.GuardedBy; +import javax.management.InstanceAlreadyExistsException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + /** * Represents modules to be committed. */ @@ -117,8 +116,7 @@ class ModulesHolder implements TransactionHolder { throws InstanceAlreadyExistsException { if (commitMap.containsKey(moduleIdentifier)) { throw new InstanceAlreadyExistsException( - "There is an instance registered with name " - + moduleIdentifier); + "There is an instance registered with name " + moduleIdentifier); } } diff --git a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/TransactionHolder.java b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/TransactionHolder.java index f81e747f62..8f05ed75ae 100644 --- a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/TransactionHolder.java +++ b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/dependencyresolver/TransactionHolder.java @@ -7,10 +7,6 @@ */ package org.opendaylight.controller.config.manager.impl.dependencyresolver; -import java.util.Map; - -import javax.management.InstanceAlreadyExistsException; - import org.opendaylight.controller.config.api.JmxAttribute; import org.opendaylight.controller.config.api.ModuleIdentifier; import org.opendaylight.controller.config.manager.impl.CommitInfo; @@ -18,6 +14,9 @@ import org.opendaylight.controller.config.manager.impl.ModuleInternalTransaction import org.opendaylight.controller.config.spi.Module; import org.opendaylight.controller.config.spi.ModuleFactory; +import javax.management.InstanceAlreadyExistsException; +import java.util.Map; + interface TransactionHolder { CommitInfo toCommitInfo();