X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FConfigurationImpl.java;h=34590025d59ab78d3e0095e81addaa8ed874935f;hb=17d82f582a6bc13c78be3b19954ff8c021180e93;hp=c8c82997dfc0c38bb551049d3a810f33c5cfb417;hpb=9340a64d067473032111bd8c3341ea6855cd9e4a;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ConfigurationImpl.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ConfigurationImpl.java index c8c82997df..34590025d5 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ConfigurationImpl.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ConfigurationImpl.java @@ -8,30 +8,64 @@ package org.opendaylight.controller.cluster.datastore; +import com.google.common.base.Optional; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; import com.typesafe.config.ConfigObject; +import org.opendaylight.controller.cluster.datastore.shardstrategy.DefaultShardStrategy; +import org.opendaylight.controller.cluster.datastore.shardstrategy.ModuleShardStrategy; +import org.opendaylight.controller.cluster.datastore.shardstrategy.ShardStrategy; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import java.io.File; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class ConfigurationImpl implements Configuration { + private final List moduleShards = new ArrayList<>(); + private final List modules = new ArrayList<>(); + private static final Logger + LOG = LoggerFactory.getLogger(DistributedDataStore.class); + public ConfigurationImpl(String moduleShardsConfigPath, + String modulesConfigPath){ - Config moduleShardsConfig = ConfigFactory.load(moduleShardsConfigPath); - Config modulesConfig = ConfigFactory.load(modulesConfigPath); + + File moduleShardsFile = new File("./configuration/initial/" + moduleShardsConfigPath); + File modulesFile = new File("./configuration/initial/" + modulesConfigPath); + + Config moduleShardsConfig = null; + if(moduleShardsFile.exists()) { + LOG.info("module shards config file exists - reading config from it"); + moduleShardsConfig = ConfigFactory.parseFile(moduleShardsFile); + } else { + LOG.warn("module shards configuration read from resource"); + moduleShardsConfig = ConfigFactory.load(moduleShardsConfigPath); + } + + Config modulesConfig = null; + if(modulesFile.exists()) { + LOG.info("modules config file exists - reading config from it"); + modulesConfig = ConfigFactory.parseFile(modulesFile); + } else { + LOG.warn("modules configuration read from resource"); + modulesConfig = ConfigFactory.load(modulesConfigPath); + } readModuleShards(moduleShardsConfig); readModules(modulesConfig); } - public List getMemberShardNames(String memberName){ - + @Override public List getMemberShardNames(String memberName){ List shards = new ArrayList(); for(ModuleShard ms : moduleShards){ for(Shard s : ms.getShards()){ @@ -46,6 +80,50 @@ public class ConfigurationImpl implements Configuration { } + @Override public Optional getModuleNameFromNameSpace(String nameSpace) { + for(Module m : modules){ + if(m.getNameSpace().equals(nameSpace)){ + return Optional.of(m.getName()); + } + } + return Optional.absent(); + } + + @Override public Map getModuleNameToShardStrategyMap() { + Map map = new HashMap<>(); + for(Module m : modules){ + map.put(m.getName(), m.getShardStrategy()); + } + return map; + } + + @Override public List getShardNamesFromModuleName(String moduleName) { + for(ModuleShard m : moduleShards){ + if(m.getModuleName().equals(moduleName)){ + List l = new ArrayList<>(); + for(Shard s : m.getShards()){ + l.add(s.getName()); + } + return l; + } + } + + return Collections.EMPTY_LIST; + } + + @Override public List getMembersFromShardName(String shardName) { + List shards = new ArrayList(); + for(ModuleShard ms : moduleShards){ + for(Shard s : ms.getShards()) { + if(s.getName().equals(shardName)){ + return s.getReplicas(); + } + } + } + return Collections.EMPTY_LIST; + } + + private void readModules(Config modulesConfig) { List modulesConfigObjectList = @@ -54,7 +132,7 @@ public class ConfigurationImpl implements Configuration { for(ConfigObject o : modulesConfigObjectList){ ConfigObjectWrapper w = new ConfigObjectWrapper(o); modules.add(new Module(w.stringValue("name"), w.stringValue( - "namespace"), w.stringValue("sharding-strategy"))); + "namespace"), w.stringValue("shard-strategy"))); } } @@ -82,7 +160,7 @@ public class ConfigurationImpl implements Configuration { } - public static class ModuleShard { + private class ModuleShard { private final String moduleName; private final List shards; @@ -100,7 +178,7 @@ public class ConfigurationImpl implements Configuration { } } - public static class Shard { + private class Shard { private final String name; private final List replicas; @@ -118,16 +196,20 @@ public class ConfigurationImpl implements Configuration { } } - public static class Module { + private class Module { private final String name; private final String nameSpace; - private final String shardingStrategy; + private final ShardStrategy shardStrategy; - Module(String name, String nameSpace, String shardingStrategy) { + Module(String name, String nameSpace, String shardStrategy) { this.name = name; this.nameSpace = nameSpace; - this.shardingStrategy = shardingStrategy; + if(ModuleShardStrategy.NAME.equals(shardStrategy)){ + this.shardStrategy = new ModuleShardStrategy(name, ConfigurationImpl.this); + } else { + this.shardStrategy = new DefaultShardStrategy(); + } } public String getName() { @@ -138,8 +220,8 @@ public class ConfigurationImpl implements Configuration { return nameSpace; } - public String getShardingStrategy() { - return shardingStrategy; + public ShardStrategy getShardStrategy() { + return shardStrategy; } }