2 * Copyright (c) 2015 Brocade Communications 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
8 package org.opendaylight.controller.cluster.datastore.config;
10 import com.google.common.collect.ImmutableSet;
11 import com.typesafe.config.Config;
12 import com.typesafe.config.ConfigFactory;
13 import com.typesafe.config.ConfigObject;
15 import java.util.HashMap;
16 import java.util.List;
18 import org.opendaylight.controller.cluster.datastore.shardstrategy.ShardStrategyFactory;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
23 * Implementation of ModuleShardConfigProvider that reads the module and shard configuration from files.
25 * @author Thomas Pantelis
27 public class FileModuleShardConfigProvider implements ModuleShardConfigProvider {
28 private static final Logger LOG = LoggerFactory.getLogger(FileModuleShardConfigProvider.class);
30 private final String moduleShardsConfigPath;
31 private final String modulesConfigPath;
33 public FileModuleShardConfigProvider(String moduleShardsConfigPath, String modulesConfigPath) {
34 this.moduleShardsConfigPath = moduleShardsConfigPath;
35 this.modulesConfigPath = modulesConfigPath;
39 public Map<String, ModuleConfig> retrieveModuleConfigs(Configuration configuration) {
40 File moduleShardsFile = new File("./configuration/initial/" + moduleShardsConfigPath);
41 File modulesFile = new File("./configuration/initial/" + modulesConfigPath);
43 Config moduleShardsConfig = null;
44 if(moduleShardsFile.exists()) {
45 LOG.info("module shards config file exists - reading config from it");
46 moduleShardsConfig = ConfigFactory.parseFile(moduleShardsFile);
48 LOG.warn("module shards configuration read from resource");
49 moduleShardsConfig = ConfigFactory.load(moduleShardsConfigPath);
52 Config modulesConfig = null;
53 if(modulesFile.exists()) {
54 LOG.info("modules config file exists - reading config from it");
55 modulesConfig = ConfigFactory.parseFile(modulesFile);
57 LOG.warn("modules configuration read from resource");
58 modulesConfig = ConfigFactory.load(modulesConfigPath);
61 Map<String, ModuleConfig> moduleConfigMap = readModuleShardsConfig(moduleShardsConfig);
62 readModulesConfig(modulesConfig, moduleConfigMap, configuration);
64 return moduleConfigMap;
67 private void readModulesConfig(final Config modulesConfig, Map<String, ModuleConfig> moduleConfigMap,
68 Configuration configuration) {
69 List<? extends ConfigObject> modulesConfigObjectList = modulesConfig.getObjectList("modules");
71 for(ConfigObject o : modulesConfigObjectList){
72 ConfigObjectWrapper w = new ConfigObjectWrapper(o);
74 String moduleName = w.stringValue("name");
75 ModuleConfig moduleConfig = moduleConfigMap.get(moduleName);
76 if(moduleConfig == null) {
77 moduleConfig = new ModuleConfig(moduleName);
78 moduleConfigMap.put(moduleName, moduleConfig);
81 moduleConfig.setNameSpace(w.stringValue("namespace"));
82 moduleConfig.setShardStrategy(ShardStrategyFactory.newShardStrategyInstance(moduleName,
83 w.stringValue("shard-strategy"), configuration));
87 private static Map<String, ModuleConfig> readModuleShardsConfig(final Config moduleShardsConfig) {
88 List<? extends ConfigObject> moduleShardsConfigObjectList =
89 moduleShardsConfig.getObjectList("module-shards");
91 Map<String, ModuleConfig> moduleConfigMap = new HashMap<>();
92 for(ConfigObject moduleShardConfigObject : moduleShardsConfigObjectList){
93 String moduleName = moduleShardConfigObject.get("name").unwrapped().toString();
94 ModuleConfig moduleConfig = new ModuleConfig(moduleName);
96 List<? extends ConfigObject> shardsConfigObjectList =
97 moduleShardConfigObject.toConfig().getObjectList("shards");
99 for(ConfigObject shard : shardsConfigObjectList){
100 String shardName = shard.get("name").unwrapped().toString();
101 List<String> replicas = shard.toConfig().getStringList("replicas");
102 moduleConfig.addShardConfig(shardName, ImmutableSet.copyOf(replicas));
105 moduleConfigMap.put(moduleName, moduleConfig);
108 return moduleConfigMap;
111 private static class ConfigObjectWrapper{
113 private final ConfigObject configObject;
115 ConfigObjectWrapper(final ConfigObject configObject){
116 this.configObject = configObject;
119 public String stringValue(final String name){
120 return configObject.get(name).unwrapped().toString();