X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fconfig%2FConfigurationImpl.java;h=d0e8d875f65d4ba1f765a969c85107c156c3f5bc;hp=1af8ed63e03936c7b4962c4b190cb432e633379a;hb=HEAD;hpb=4e3f49788c05730b29468deebc2aaa4ed0d94eef diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/config/ConfigurationImpl.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/config/ConfigurationImpl.java index 1af8ed63e0..d0e8d875f6 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/config/ConfigurationImpl.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/config/ConfigurationImpl.java @@ -5,24 +5,26 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.controller.cluster.datastore.config; -import com.google.common.base.Preconditions; +import static java.util.Objects.requireNonNull; + import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import org.opendaylight.controller.cluster.access.concepts.MemberName; import org.opendaylight.controller.cluster.datastore.shardstrategy.ShardStrategy; import org.opendaylight.controller.cluster.datastore.shardstrategy.ShardStrategyFactory; +// FIXME: Non-final for testing public class ConfigurationImpl implements Configuration { private volatile Map moduleConfigMap; @@ -35,32 +37,33 @@ public class ConfigurationImpl implements Configuration { this(new FileModuleShardConfigProvider(moduleShardsConfigPath, modulesConfigPath)); } + @SuppressFBWarnings(value = "MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR", justification = "Subclassed for testing") public ConfigurationImpl(final ModuleShardConfigProvider provider) { ImmutableMap.Builder mapBuilder = ImmutableMap.builder(); - for(Map.Entry e: provider.retrieveModuleConfigs(this).entrySet()) { + for (Entry e: provider.retrieveModuleConfigs(this).entrySet()) { mapBuilder.put(e.getKey(), e.getValue().build()); } - this.moduleConfigMap = mapBuilder.build(); + moduleConfigMap = mapBuilder.build(); - this.allShardNames = createAllShardNames(moduleConfigMap.values()); - this.namespaceToModuleName = createNamespaceToModuleName(moduleConfigMap.values()); + allShardNames = createAllShardNames(moduleConfigMap.values()); + namespaceToModuleName = createNamespaceToModuleName(moduleConfigMap.values()); } - private static Set createAllShardNames(Iterable moduleConfigs) { + private static Set createAllShardNames(final Iterable moduleConfigs) { final ImmutableSet.Builder builder = ImmutableSet.builder(); - for(ModuleConfig moduleConfig : moduleConfigs) { + for (ModuleConfig moduleConfig : moduleConfigs) { builder.addAll(moduleConfig.getShardNames()); } return builder.build(); } - private static Map createNamespaceToModuleName(Iterable moduleConfigs) { + private static Map createNamespaceToModuleName(final Iterable moduleConfigs) { final ImmutableMap.Builder builder = ImmutableMap.builder(); - for(ModuleConfig moduleConfig : moduleConfigs) { - if(moduleConfig.getNameSpace() != null) { - builder.put(moduleConfig.getNameSpace(), moduleConfig.getName()); + for (ModuleConfig moduleConfig : moduleConfigs) { + if (moduleConfig.getNamespace() != null) { + builder.put(moduleConfig.getNamespace(), moduleConfig.getName()); } } @@ -68,13 +71,13 @@ public class ConfigurationImpl implements Configuration { } @Override - public Collection getMemberShardNames(final MemberName memberName){ - Preconditions.checkNotNull(memberName, "memberName should not be null"); + public Collection getMemberShardNames(final MemberName memberName) { + requireNonNull(memberName, "memberName should not be null"); List shards = new ArrayList<>(); for (ModuleConfig moduleConfig: moduleConfigMap.values()) { for (ShardConfig shardConfig: moduleConfig.getShardConfigs()) { - if(shardConfig.getReplicas().contains(memberName)) { + if (shardConfig.getReplicas().contains(memberName)) { shards.add(shardConfig.getName()); } } @@ -85,41 +88,47 @@ public class ConfigurationImpl implements Configuration { @Override public String getModuleNameFromNameSpace(final String nameSpace) { - Preconditions.checkNotNull(nameSpace, "nameSpace should not be null"); - - return namespaceToModuleName.get(nameSpace); + return namespaceToModuleName.get(requireNonNull(nameSpace, "nameSpace should not be null")); } @Override - public ShardStrategy getStrategyForModule(String moduleName) { - Preconditions.checkNotNull(moduleName, "moduleName should not be null"); - - ModuleConfig moduleConfig = moduleConfigMap.get(moduleName); - return moduleConfig != null ? moduleConfig.getShardStrategy(): null; + public ShardStrategy getStrategyForModule(final String moduleName) { + ModuleConfig moduleConfig = getModuleConfig(moduleName); + return moduleConfig != null ? moduleConfig.getShardStrategy() : null; } @Override public String getShardNameForModule(final String moduleName) { - Preconditions.checkNotNull(moduleName, "moduleName should not be null"); + ModuleConfig moduleConfig = getModuleConfig(moduleName); + if (moduleConfig != null) { + Collection shardConfigs = moduleConfig.getShardConfigs(); + if (!shardConfigs.isEmpty()) { + return shardConfigs.iterator().next().getName(); + } + } + return null; + } - ModuleConfig moduleConfig = moduleConfigMap.get(moduleName); - Collection shardConfigs = moduleConfig != null ? moduleConfig.getShardConfigs() : - Collections.emptySet(); - return !shardConfigs.isEmpty() ? shardConfigs.iterator().next().getName(): null; + private ModuleConfig getModuleConfig(final String moduleName) { + return moduleConfigMap.get(requireNonNull(moduleName, "moduleName should not be null")); } @Override public Collection getMembersFromShardName(final String shardName) { - Preconditions.checkNotNull(shardName, "shardName should not be null"); + checkNotNullShardName(shardName); - for(ModuleConfig moduleConfig: moduleConfigMap.values()) { + for (ModuleConfig moduleConfig: moduleConfigMap.values()) { ShardConfig shardConfig = moduleConfig.getShardConfig(shardName); - if(shardConfig != null) { + if (shardConfig != null) { return shardConfig.getReplicas(); } } - return Collections.emptyList(); + return List.of(); + } + + private static void checkNotNullShardName(final String shardName) { + requireNonNull(shardName, "shardName should not be null"); } @Override @@ -130,7 +139,7 @@ public class ConfigurationImpl implements Configuration { @Override public Collection getUniqueMemberNamesForAllShards() { Set allNames = new HashSet<>(); - for(String shardName: getAllShardNames()) { + for (String shardName: getAllShardNames()) { allNames.addAll(getMembersFromShardName(shardName)); } @@ -138,39 +147,39 @@ public class ConfigurationImpl implements Configuration { } @Override - public synchronized void addModuleShardConfiguration(ModuleShardConfiguration config) { - Preconditions.checkNotNull(config, "ModuleShardConfiguration should not be null"); + public synchronized void addModuleShardConfiguration(final ModuleShardConfiguration config) { + requireNonNull(config, "ModuleShardConfiguration should not be null"); - ModuleConfig moduleConfig = ModuleConfig.builder(config.getModuleName()). - nameSpace(config.getNamespace().toASCIIString()). - shardStrategy(createShardStrategy(config.getModuleName(), config.getShardStrategyName())). - shardConfig(config.getShardName(), config.getShardMemberNames()).build(); + ModuleConfig moduleConfig = ModuleConfig.builder(config.getModuleName()) + .nameSpace(config.getNamespace().toString()) + .shardStrategy(createShardStrategy(config.getModuleName(), config.getShardStrategyName())) + .shardConfig(config.getShardName(), config.getShardMemberNames()).build(); updateModuleConfigMap(moduleConfig); - namespaceToModuleName = ImmutableMap.builder().putAll(namespaceToModuleName). - put(moduleConfig.getNameSpace(), moduleConfig.getName()).build(); + namespaceToModuleName = ImmutableMap.builder().putAll(namespaceToModuleName) + .put(moduleConfig.getNamespace(), moduleConfig.getName()).build(); allShardNames = ImmutableSet.builder().addAll(allShardNames).add(config.getShardName()).build(); } - private ShardStrategy createShardStrategy(String moduleName, String shardStrategyName) { + private ShardStrategy createShardStrategy(final String moduleName, final String shardStrategyName) { return ShardStrategyFactory.newShardStrategyInstance(moduleName, shardStrategyName, this); } @Override - public boolean isShardConfigured(String shardName) { - Preconditions.checkNotNull(shardName, "shardName should not be null"); + public boolean isShardConfigured(final String shardName) { + checkNotNullShardName(shardName); return allShardNames.contains(shardName); } @Override - public void addMemberReplicaForShard (String shardName, MemberName newMemberName) { - Preconditions.checkNotNull(shardName, "shardName should not be null"); - Preconditions.checkNotNull(newMemberName, "MemberName should not be null"); + public void addMemberReplicaForShard(final String shardName, final MemberName newMemberName) { + checkNotNullShardName(shardName); + requireNonNull(newMemberName, "MemberName should not be null"); - for(ModuleConfig moduleConfig: moduleConfigMap.values()) { + for (ModuleConfig moduleConfig: moduleConfigMap.values()) { ShardConfig shardConfig = moduleConfig.getShardConfig(shardName); - if(shardConfig != null) { + if (shardConfig != null) { Set replicas = new HashSet<>(shardConfig.getReplicas()); replicas.add(newMemberName); updateModuleConfigMap(ModuleConfig.builder(moduleConfig).shardConfig(shardName, replicas).build()); @@ -180,13 +189,13 @@ public class ConfigurationImpl implements Configuration { } @Override - public void removeMemberReplicaForShard (String shardName, MemberName newMemberName) { - Preconditions.checkNotNull(shardName, "shardName should not be null"); - Preconditions.checkNotNull(newMemberName, "MemberName should not be null"); + public void removeMemberReplicaForShard(final String shardName, final MemberName newMemberName) { + checkNotNullShardName(shardName); + requireNonNull(newMemberName, "MemberName should not be null"); - for(ModuleConfig moduleConfig: moduleConfigMap.values()) { + for (ModuleConfig moduleConfig: moduleConfigMap.values()) { ShardConfig shardConfig = moduleConfig.getShardConfig(shardName); - if(shardConfig != null) { + if (shardConfig != null) { Set replicas = new HashSet<>(shardConfig.getReplicas()); replicas.remove(newMemberName); updateModuleConfigMap(ModuleConfig.builder(moduleConfig).shardConfig(shardName, replicas).build()); @@ -195,8 +204,8 @@ public class ConfigurationImpl implements Configuration { } } - private void updateModuleConfigMap(ModuleConfig moduleConfig) { - Map newModuleConfigMap = new HashMap<>(moduleConfigMap); + private void updateModuleConfigMap(final ModuleConfig moduleConfig) { + final Map newModuleConfigMap = new HashMap<>(moduleConfigMap); newModuleConfigMap.put(moduleConfig.getName(), moduleConfig); moduleConfigMap = ImmutableMap.copyOf(newModuleConfigMap); }