9ceac9561e6afcad28d2e82b4d6b432dbc05dd0b
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / config / FileModuleShardConfigProvider.java
1 /*
2  * Copyright (c) 2015 Brocade Communications Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.controller.cluster.datastore.config;
9
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;
14 import java.io.File;
15 import java.util.HashMap;
16 import java.util.List;
17 import java.util.Map;
18 import org.opendaylight.controller.cluster.datastore.shardstrategy.ShardStrategyFactory;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
21
22 /**
23  * Implementation of ModuleShardConfigProvider that reads the module and shard configuration from files.
24  *
25  * @author Thomas Pantelis
26  */
27 public class FileModuleShardConfigProvider implements ModuleShardConfigProvider {
28     private static final Logger LOG = LoggerFactory.getLogger(FileModuleShardConfigProvider.class);
29
30     private final String moduleShardsConfigPath;
31     private final String modulesConfigPath;
32
33     public FileModuleShardConfigProvider(String moduleShardsConfigPath, String modulesConfigPath) {
34         this.moduleShardsConfigPath = moduleShardsConfigPath;
35         this.modulesConfigPath = modulesConfigPath;
36     }
37
38     @Override
39     public Map<String, ModuleConfig> retrieveModuleConfigs(Configuration configuration) {
40         File moduleShardsFile = new File("./configuration/initial/" + moduleShardsConfigPath);
41         File modulesFile = new File("./configuration/initial/" + modulesConfigPath);
42
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);
47         } else {
48             LOG.warn("module shards configuration read from resource");
49             moduleShardsConfig = ConfigFactory.load(moduleShardsConfigPath);
50         }
51
52         Config modulesConfig = null;
53         if(modulesFile.exists()) {
54             LOG.info("modules config file exists - reading config from it");
55             modulesConfig = ConfigFactory.parseFile(modulesFile);
56         } else {
57             LOG.warn("modules configuration read from resource");
58             modulesConfig = ConfigFactory.load(modulesConfigPath);
59         }
60
61         Map<String, ModuleConfig> moduleConfigMap = readModuleShardsConfig(moduleShardsConfig);
62         readModulesConfig(modulesConfig, moduleConfigMap, configuration);
63
64         return moduleConfigMap;
65     }
66
67     private void readModulesConfig(final Config modulesConfig, Map<String, ModuleConfig> moduleConfigMap,
68             Configuration configuration) {
69         List<? extends ConfigObject> modulesConfigObjectList = modulesConfig.getObjectList("modules");
70
71         for(ConfigObject o : modulesConfigObjectList){
72             ConfigObjectWrapper w = new ConfigObjectWrapper(o);
73
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);
79             }
80
81             moduleConfig.setNameSpace(w.stringValue("namespace"));
82             moduleConfig.setShardStrategy(ShardStrategyFactory.newShardStrategyInstance(moduleName,
83                     w.stringValue("shard-strategy"), configuration));
84         }
85     }
86
87     private static Map<String, ModuleConfig> readModuleShardsConfig(final Config moduleShardsConfig) {
88         List<? extends ConfigObject> moduleShardsConfigObjectList =
89             moduleShardsConfig.getObjectList("module-shards");
90
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);
95
96             List<? extends ConfigObject> shardsConfigObjectList =
97                 moduleShardConfigObject.toConfig().getObjectList("shards");
98
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));
103             }
104
105             moduleConfigMap.put(moduleName, moduleConfig);
106         }
107
108         return moduleConfigMap;
109     }
110
111     private static class ConfigObjectWrapper{
112
113         private final ConfigObject configObject;
114
115         ConfigObjectWrapper(final ConfigObject configObject){
116             this.configObject = configObject;
117         }
118
119         public String stringValue(final String name){
120             return configObject.get(name).unwrapped().toString();
121         }
122     }
123 }

©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.