Optimize getModuleNameToShardStrategyMap() 86/14486/1
authorRobert Varga <rovarga@cisco.com>
Mon, 26 Jan 2015 12:53:04 +0000 (13:53 +0100)
committerRobert Varga <rovarga@cisco.com>
Mon, 26 Jan 2015 14:38:17 +0000 (15:38 +0100)
This map is based on constant data and can be easily pre-computed. Do
precisely that.

Change-Id: Ic3851034ca3ccd752c3f4afc0d1d3c77a9df9e65
Signed-off-by: Robert Varga <rovarga@cisco.com>
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ConfigurationImpl.java

index 961227547278c79fab2337fe944696f9b0d821c9..56b2d094c7682543f14415191e9e184744b3102f 100644 (file)
@@ -48,6 +48,7 @@ public class ConfigurationImpl implements Configuration {
     private final Map<String, List<String>> shardReplicaNames = new HashMap<>();
 
     private final Map<String, String> namespaceToModuleName;
+    private final Map<String, ShardStrategy> moduleNameToStrategy;
 
     public ConfigurationImpl(final String moduleShardsConfigPath,
 
@@ -81,7 +82,16 @@ public class ConfigurationImpl implements Configuration {
         this.moduleShards = readModuleShards(moduleShardsConfig);
         this.modules = readModules(modulesConfig);
 
-        namespaceToModuleName = createNamespaceToModuleName(modules);
+        this.moduleNameToStrategy = createModuleNameToStrategy(modules);
+        this.namespaceToModuleName = createNamespaceToModuleName(modules);
+    }
+
+    private static Map<String, ShardStrategy> createModuleNameToStrategy(Iterable<Module> modules) {
+        final com.google.common.collect.ImmutableMap.Builder<String, ShardStrategy> b = ImmutableMap.builder();
+        for (Module m : modules) {
+            b.put(m.getName(), m.getShardStrategy());
+        }
+        return b.build();
     }
 
     private static Map<String, String> createNamespaceToModuleName(Iterable<Module> modules) {
@@ -123,13 +133,9 @@ public class ConfigurationImpl implements Configuration {
         return Optional.fromNullable(namespaceToModuleName.get(nameSpace));
     }
 
-    @Override public Map<String, ShardStrategy> getModuleNameToShardStrategyMap() {
-        // FIXME: can be constant view of modules
-        Map<String, ShardStrategy> map = new HashMap<>();
-        for(Module m : modules){
-            map.put(m.getName(), m.getShardStrategy());
-        }
-        return map;
+    @Override
+    public Map<String, ShardStrategy> getModuleNameToShardStrategyMap() {
+        return moduleNameToStrategy;
     }
 
     @Override public List<String> getShardNamesFromModuleName(final String moduleName) {