class ConfigurationImpl implements Configuration {

    @Override
    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();

        updateModuleConfigMap(moduleConfig);

        namespaceToModuleName = ImmutableMap.<String, String>builder().putAll(namespaceToModuleName)
                .put(moduleConfig.getNamespace(), moduleConfig.getName()).build();
        allShardNames = ImmutableSet.<String>builder().addAll(allShardNames).add(config.getShardName()).build();
    }

    public  ConfigurationImpl(final String moduleShardsConfigPath, final String modulesConfigPath);
    public  ConfigurationImpl(final ModuleShardConfigProvider provider);

}