From dd0058fe845c7fae620289fc87f7a1149ee2da85 Mon Sep 17 00:00:00 2001 From: Jakub Toth Date: Thu, 24 Aug 2017 10:29:39 +0200 Subject: [PATCH] Bug 8994 - FileModuleShardConfigProvider should not use hard-coded paths * move setting paths to blueprint * fix tests Change-Id: If1e79b3d33d969167327819a1d13da00ee4bc882 Signed-off-by: Jakub Toth --- .../DistributedDataStoreFactory.java | 21 +++++++-- .../config/FileModuleShardConfigProvider.java | 46 +++++++++---------- .../blueprint/clustered-datastore.xml | 9 ++++ 3 files changed, 50 insertions(+), 26 deletions(-) diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreFactory.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreFactory.java index 4fd09914cd..11bbe1b168 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreFactory.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreFactory.java @@ -21,6 +21,8 @@ import org.slf4j.LoggerFactory; public class DistributedDataStoreFactory { private static final Logger LOG = LoggerFactory.getLogger(DistributedDataStoreFactory.class); + private static final String DEFAULT_MODULE_SHARDS_PATH = "./configuration/initial/module-shards.conf"; + private static final String DEFAULT_MODULES_PATH = "./configuration/initial/modules.conf"; /** * Create a data store instance. @@ -33,13 +35,21 @@ public class DistributedDataStoreFactory { final DatastoreContext initialDatastoreContext, final DatastoreSnapshotRestore datastoreSnapshotRestore, final ActorSystemProvider actorSystemProvider, final BundleContext bundleContext) { - return createInstance((DOMSchemaService) schemaService, initialDatastoreContext, datastoreSnapshotRestore, - actorSystemProvider, bundleContext); + return createInstance(schemaService, initialDatastoreContext, datastoreSnapshotRestore, + actorSystemProvider, bundleContext, null); } public static AbstractDataStore createInstance(final DOMSchemaService schemaService, final DatastoreContext initialDatastoreContext, final DatastoreSnapshotRestore datastoreSnapshotRestore, final ActorSystemProvider actorSystemProvider, final BundleContext bundleContext) { + return createInstance(schemaService, initialDatastoreContext, datastoreSnapshotRestore, actorSystemProvider, + bundleContext, null); + } + + public static AbstractDataStore createInstance(final DOMSchemaService schemaService, + final DatastoreContext initialDatastoreContext, final DatastoreSnapshotRestore datastoreSnapshotRestore, + final ActorSystemProvider actorSystemProvider, final BundleContext bundleContext, + final Configuration orgConfig) { final String datastoreName = initialDatastoreContext.getDataStoreName(); LOG.info("Create data store instance of type : {}", datastoreName); @@ -50,7 +60,12 @@ public class DistributedDataStoreFactory { final DatastoreContextConfigAdminOverlay overlay = new DatastoreContextConfigAdminOverlay( introspector, bundleContext); - final Configuration config = new ConfigurationImpl("module-shards.conf", "modules.conf"); + Configuration config; + if (orgConfig == null) { + config = new ConfigurationImpl(DEFAULT_MODULE_SHARDS_PATH, DEFAULT_MODULES_PATH); + } else { + config = orgConfig; + } final ClusterWrapper clusterWrapper = new ClusterWrapperImpl(actorSystem); final DatastoreContextFactory contextFactory = introspector.newContextFactory(); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/config/FileModuleShardConfigProvider.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/config/FileModuleShardConfigProvider.java index a37dcc6ef9..a2df91b1ba 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/config/FileModuleShardConfigProvider.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/config/FileModuleShardConfigProvider.java @@ -31,15 +31,15 @@ public class FileModuleShardConfigProvider implements ModuleShardConfigProvider private final String moduleShardsConfigPath; private final String modulesConfigPath; - public FileModuleShardConfigProvider(String moduleShardsConfigPath, String modulesConfigPath) { + public FileModuleShardConfigProvider(final String moduleShardsConfigPath, final String modulesConfigPath) { this.moduleShardsConfigPath = moduleShardsConfigPath; this.modulesConfigPath = modulesConfigPath; } @Override - public Map retrieveModuleConfigs(Configuration configuration) { - File moduleShardsFile = new File("./configuration/initial/" + moduleShardsConfigPath); - File modulesFile = new File("./configuration/initial/" + modulesConfigPath); + public Map retrieveModuleConfigs(final Configuration configuration) { + final File moduleShardsFile = new File(moduleShardsConfigPath); + final File modulesFile = new File(modulesConfigPath); Config moduleShardsConfig = null; if (moduleShardsFile.exists()) { @@ -47,7 +47,7 @@ public class FileModuleShardConfigProvider implements ModuleShardConfigProvider moduleShardsConfig = ConfigFactory.parseFile(moduleShardsFile); } else { LOG.warn("module shards configuration read from resource"); - moduleShardsConfig = ConfigFactory.load(moduleShardsConfigPath); + moduleShardsConfig = ConfigFactory.load(moduleShardsFile.getName()); } Config modulesConfig = null; @@ -56,24 +56,24 @@ public class FileModuleShardConfigProvider implements ModuleShardConfigProvider modulesConfig = ConfigFactory.parseFile(modulesFile); } else { LOG.warn("modules configuration read from resource"); - modulesConfig = ConfigFactory.load(modulesConfigPath); + modulesConfig = ConfigFactory.load(modulesFile.getName()); } - Map moduleConfigMap = readModuleShardsConfig(moduleShardsConfig); + final Map moduleConfigMap = readModuleShardsConfig(moduleShardsConfig); readModulesConfig(modulesConfig, moduleConfigMap, configuration); return moduleConfigMap; } - private static void readModulesConfig(final Config modulesConfig, Map moduleConfigMap, - Configuration configuration) { - List modulesConfigObjectList = modulesConfig.getObjectList("modules"); + private static void readModulesConfig(final Config modulesConfig, + final Map moduleConfigMap, final Configuration configuration) { + final List modulesConfigObjectList = modulesConfig.getObjectList("modules"); - for (ConfigObject o : modulesConfigObjectList) { - ConfigObjectWrapper wrapper = new ConfigObjectWrapper(o); + for (final ConfigObject o : modulesConfigObjectList) { + final ConfigObjectWrapper wrapper = new ConfigObjectWrapper(o); - String moduleName = wrapper.stringValue("name"); - ModuleConfig.Builder builder = moduleConfigMap.computeIfAbsent(moduleName, ModuleConfig::builder); + final String moduleName = wrapper.stringValue("name"); + final ModuleConfig.Builder builder = moduleConfigMap.computeIfAbsent(moduleName, ModuleConfig::builder); builder.nameSpace(wrapper.stringValue("namespace")); builder.shardStrategy(ShardStrategyFactory.newShardStrategyInstance(moduleName, @@ -82,20 +82,20 @@ public class FileModuleShardConfigProvider implements ModuleShardConfigProvider } private static Map readModuleShardsConfig(final Config moduleShardsConfig) { - List moduleShardsConfigObjectList = + final List moduleShardsConfigObjectList = moduleShardsConfig.getObjectList("module-shards"); - Map moduleConfigMap = new HashMap<>(); - for (ConfigObject moduleShardConfigObject : moduleShardsConfigObjectList) { - String moduleName = moduleShardConfigObject.get("name").unwrapped().toString(); - ModuleConfig.Builder builder = ModuleConfig.builder(moduleName); + final Map moduleConfigMap = new HashMap<>(); + for (final ConfigObject moduleShardConfigObject : moduleShardsConfigObjectList) { + final String moduleName = moduleShardConfigObject.get("name").unwrapped().toString(); + final ModuleConfig.Builder builder = ModuleConfig.builder(moduleName); - List shardsConfigObjectList = + final List shardsConfigObjectList = moduleShardConfigObject.toConfig().getObjectList("shards"); - for (ConfigObject shard : shardsConfigObjectList) { - String shardName = shard.get("name").unwrapped().toString(); - List replicas = shard.toConfig().getStringList("replicas").stream() + for (final ConfigObject shard : shardsConfigObjectList) { + final String shardName = shard.get("name").unwrapped().toString(); + final List replicas = shard.toConfig().getStringList("replicas").stream() .map(MemberName::forName).collect(Collectors.toList()); builder.shardConfig(shardName, replicas); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/resources/org/opendaylight/blueprint/clustered-datastore.xml b/opendaylight/md-sal/sal-distributed-datastore/src/main/resources/org/opendaylight/blueprint/clustered-datastore.xml index a1d9d88258..28411e50fb 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/resources/org/opendaylight/blueprint/clustered-datastore.xml +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/resources/org/opendaylight/blueprint/clustered-datastore.xml @@ -47,6 +47,14 @@ + + + + + + + + @@ -58,6 +66,7 @@ + -- 2.36.6