Bug 8994 - FileModuleShardConfigProvider should not use hard-coded paths 53/62253/3
authorJakub Toth <jakub.toth@pantheon.tech>
Thu, 24 Aug 2017 08:29:39 +0000 (10:29 +0200)
committerTom Pantelis <tompantelis@gmail.com>
Fri, 25 Aug 2017 02:07:57 +0000 (02:07 +0000)
  * move setting paths to blueprint
  * fix tests

Change-Id: If1e79b3d33d969167327819a1d13da00ee4bc882
Signed-off-by: Jakub Toth <jakub.toth@pantheon.tech>
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreFactory.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/config/FileModuleShardConfigProvider.java
opendaylight/md-sal/sal-distributed-datastore/src/main/resources/org/opendaylight/blueprint/clustered-datastore.xml

index 4fd0991..11bbe1b 100644 (file)
@@ -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();
 
index a37dcc6..a2df91b 100644 (file)
@@ -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<String, ModuleConfig.Builder> retrieveModuleConfigs(Configuration configuration) {
-        File moduleShardsFile = new File("./configuration/initial/" + moduleShardsConfigPath);
-        File modulesFile = new File("./configuration/initial/" + modulesConfigPath);
+    public Map<String, ModuleConfig.Builder> 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<String, ModuleConfig.Builder> moduleConfigMap = readModuleShardsConfig(moduleShardsConfig);
+        final Map<String, ModuleConfig.Builder> moduleConfigMap = readModuleShardsConfig(moduleShardsConfig);
         readModulesConfig(modulesConfig, moduleConfigMap, configuration);
 
         return moduleConfigMap;
     }
 
-    private static void readModulesConfig(final Config modulesConfig, Map<String, ModuleConfig.Builder> moduleConfigMap,
-            Configuration configuration) {
-        List<? extends ConfigObject> modulesConfigObjectList = modulesConfig.getObjectList("modules");
+    private static void readModulesConfig(final Config modulesConfig,
+            final Map<String, ModuleConfig.Builder> moduleConfigMap, final Configuration configuration) {
+        final List<? extends ConfigObject> 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<String, ModuleConfig.Builder> readModuleShardsConfig(final Config moduleShardsConfig) {
-        List<? extends ConfigObject> moduleShardsConfigObjectList =
+        final List<? extends ConfigObject> moduleShardsConfigObjectList =
             moduleShardsConfig.getObjectList("module-shards");
 
-        Map<String, ModuleConfig.Builder> moduleConfigMap = new HashMap<>();
-        for (ConfigObject moduleShardConfigObject : moduleShardsConfigObjectList) {
-            String moduleName = moduleShardConfigObject.get("name").unwrapped().toString();
-            ModuleConfig.Builder builder = ModuleConfig.builder(moduleName);
+        final Map<String, ModuleConfig.Builder> moduleConfigMap = new HashMap<>();
+        for (final ConfigObject moduleShardConfigObject : moduleShardsConfigObjectList) {
+            final String moduleName = moduleShardConfigObject.get("name").unwrapped().toString();
+            final ModuleConfig.Builder builder = ModuleConfig.builder(moduleName);
 
-            List<? extends ConfigObject> shardsConfigObjectList =
+            final List<? extends ConfigObject> shardsConfigObjectList =
                 moduleShardConfigObject.toConfig().getObjectList("shards");
 
-            for (ConfigObject shard : shardsConfigObjectList) {
-                String shardName = shard.get("name").unwrapped().toString();
-                List<MemberName> replicas = shard.toConfig().getStringList("replicas").stream()
+            for (final ConfigObject shard : shardsConfigObjectList) {
+                final String shardName = shard.get("name").unwrapped().toString();
+                final List<MemberName> replicas = shard.toConfig().getStringList("replicas").stream()
                         .map(MemberName::forName).collect(Collectors.toList());
                 builder.shardConfig(shardName, replicas);
             }
index a1d9d88..28411e5 100644 (file)
   </service>
 
   <!-- Distributed Operational Datastore -->
+  <bean id="fileModuleShardConfigProvider" class="org.opendaylight.controller.cluster.datastore.config.FileModuleShardConfigProvider">
+    <argument value="./configuration/initial/module-shards.conf"/>
+    <argument value="./configuration/initial/modules.conf"/>
+  </bean>
+
+  <bean id="configurationImpl" class="org.opendaylight.controller.cluster.datastore.config.ConfigurationImpl">
+    <argument ref="fileModuleShardConfigProvider"/>
+  </bean>
 
   <bean id="operDatastoreContext" class="org.opendaylight.controller.config.yang.config.distributed_datastore_provider.DistributedOperationalDataStoreProviderModule"
           factory-method="newDatastoreContext" />
@@ -58,6 +66,7 @@
     <argument ref="datastoreSnapshotRestore"/>
     <argument ref="actorSystemProvider"/>
     <argument ref="blueprintBundleContext"/>
+    <argument ref="configurationImpl" />
   </bean>
 
   <service ref="operDatastore" odl:type="distributed-operational">

©2013 OpenDaylight, A Linux Foundation Collaborative Project. All Rights Reserved.
OpenDaylight is a registered trademark of The OpenDaylight Project, Inc.
Linux Foundation and OpenDaylight are registered trademarks of the Linux Foundation.
Linux is a registered trademark of Linus Torvalds.