2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.controller.cluster.datastore;
11 import com.google.common.base.Optional;
12 import com.typesafe.config.Config;
13 import com.typesafe.config.ConfigFactory;
14 import com.typesafe.config.ConfigObject;
15 import org.opendaylight.controller.cluster.datastore.shardstrategy.DefaultShardStrategy;
16 import org.opendaylight.controller.cluster.datastore.shardstrategy.ModuleShardStrategy;
17 import org.opendaylight.controller.cluster.datastore.shardstrategy.ShardStrategy;
19 import java.util.ArrayList;
20 import java.util.Collections;
21 import java.util.HashMap;
22 import java.util.List;
25 public class ConfigurationImpl implements Configuration {
27 private final List<ModuleShard> moduleShards = new ArrayList<>();
29 private final List<Module> modules = new ArrayList<>();
32 public ConfigurationImpl(String moduleShardsConfigPath,
33 String modulesConfigPath){
34 Config moduleShardsConfig = ConfigFactory.load(moduleShardsConfigPath);
35 Config modulesConfig = ConfigFactory.load(modulesConfigPath);
37 readModuleShards(moduleShardsConfig);
39 readModules(modulesConfig);
42 @Override public List<String> getMemberShardNames(String memberName){
43 List<String> shards = new ArrayList();
44 for(ModuleShard ms : moduleShards){
45 for(Shard s : ms.getShards()){
46 for(String m : s.getReplicas()){
47 if(memberName.equals(m)){
48 shards.add(s.getName());
57 @Override public Optional<String> getModuleNameFromNameSpace(String nameSpace) {
58 for(Module m : modules){
59 if(m.getNameSpace().equals(nameSpace)){
60 return Optional.of(m.getName());
63 return Optional.absent();
66 @Override public Map<String, ShardStrategy> getModuleNameToShardStrategyMap() {
67 Map<String, ShardStrategy> map = new HashMap<>();
68 for(Module m : modules){
69 map.put(m.getName(), m.getShardStrategy());
74 @Override public List<String> getShardNamesFromModuleName(String moduleName) {
75 for(ModuleShard m : moduleShards){
76 if(m.getModuleName().equals(moduleName)){
77 List<String> l = new ArrayList<>();
78 for(Shard s : m.getShards()){
85 return Collections.EMPTY_LIST;
88 @Override public List<String> getMembersFromShardName(String shardName) {
89 List<String> shards = new ArrayList();
90 for(ModuleShard ms : moduleShards){
91 for(Shard s : ms.getShards()) {
92 if(s.getName().equals(shardName)){
93 return s.getReplicas();
97 return Collections.EMPTY_LIST;
102 private void readModules(Config modulesConfig) {
103 List<? extends ConfigObject> modulesConfigObjectList =
104 modulesConfig.getObjectList("modules");
106 for(ConfigObject o : modulesConfigObjectList){
107 ConfigObjectWrapper w = new ConfigObjectWrapper(o);
108 modules.add(new Module(w.stringValue("name"), w.stringValue(
109 "namespace"), w.stringValue("shard-strategy")));
113 private void readModuleShards(Config moduleShardsConfig) {
114 List<? extends ConfigObject> moduleShardsConfigObjectList =
115 moduleShardsConfig.getObjectList("module-shards");
117 for(ConfigObject moduleShardConfigObject : moduleShardsConfigObjectList){
119 String moduleName = moduleShardConfigObject.get("name").unwrapped().toString();
121 List<? extends ConfigObject> shardsConfigObjectList =
122 moduleShardConfigObject.toConfig().getObjectList("shards");
124 List<Shard> shards = new ArrayList<>();
126 for(ConfigObject shard : shardsConfigObjectList){
127 String shardName = shard.get("name").unwrapped().toString();
128 List<String> replicas = shard.toConfig().getStringList("replicas");
129 shards.add(new Shard(shardName, replicas));
132 this.moduleShards.add(new ModuleShard(moduleName, shards));
137 private class ModuleShard {
138 private final String moduleName;
139 private final List<Shard> shards;
141 public ModuleShard(String moduleName, List<Shard> shards) {
142 this.moduleName = moduleName;
143 this.shards = shards;
146 public String getModuleName() {
150 public List<Shard> getShards() {
155 private class Shard {
156 private final String name;
157 private final List<String> replicas;
159 Shard(String name, List<String> replicas) {
161 this.replicas = replicas;
164 public String getName() {
168 public List<String> getReplicas() {
173 private class Module {
175 private final String name;
176 private final String nameSpace;
177 private final ShardStrategy shardStrategy;
179 Module(String name, String nameSpace, String shardStrategy) {
181 this.nameSpace = nameSpace;
182 if(ModuleShardStrategy.NAME.equals(shardStrategy)){
183 this.shardStrategy = new ModuleShardStrategy(name, ConfigurationImpl.this);
185 this.shardStrategy = new DefaultShardStrategy();
189 public String getName() {
193 public String getNameSpace() {
197 public ShardStrategy getShardStrategy() {
198 return shardStrategy;
203 private static class ConfigObjectWrapper{
205 private final ConfigObject configObject;
207 ConfigObjectWrapper(ConfigObject configObject){
208 this.configObject = configObject;
211 public String stringValue(String name){
212 return configObject.get(name).unwrapped().toString();