summaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@oath.com>2018-01-10 14:07:58 +0000
committerTor Brede Vekterli <vekterli@oath.com>2018-01-11 12:11:16 +0000
commita87fa25dfa9e193c492698e11ff2162e2bbf20b6 (patch)
tree101d847c40eade53d149871ce2b631994cf9b54a /storage
parentd7aa21bf229babfd7931fa02e111a44fe50fa987 (diff)
Add utility function for transforming lib::Distribution instances to global
Diffstat (limited to 'storage')
-rw-r--r--storage/src/tests/common/global_bucket_space_distribution_converter_test.cpp47
-rw-r--r--storage/src/vespa/storage/common/global_bucket_space_distribution_converter.cpp26
-rw-r--r--storage/src/vespa/storage/common/global_bucket_space_distribution_converter.h7
3 files changed, 52 insertions, 28 deletions
diff --git a/storage/src/tests/common/global_bucket_space_distribution_converter_test.cpp b/storage/src/tests/common/global_bucket_space_distribution_converter_test.cpp
index d34bed304a0..60e54dbec39 100644
--- a/storage/src/tests/common/global_bucket_space_distribution_converter_test.cpp
+++ b/storage/src/tests/common/global_bucket_space_distribution_converter_test.cpp
@@ -3,8 +3,6 @@
#include <vespa/storage/common/global_bucket_space_distribution_converter.h>
#include <vespa/vdstestlib/cppunit/macros.h>
#include <vespa/config/config.h>
-#include <vespa/config/print/asciiconfigwriter.h>
-#include <vespa/config/print/asciiconfigreader.h>
#include <vespa/vdslib/state/clusterstate.h>
#include <random>
@@ -16,6 +14,7 @@ struct GlobalBucketSpaceDistributionConverterTest : public CppUnit::TestFixture
CPPUNIT_TEST(can_transform_single_level_multi_group_config);
CPPUNIT_TEST(can_transform_multi_level_multi_group_config);
CPPUNIT_TEST(can_transform_heterogenous_multi_group_config);
+ CPPUNIT_TEST(can_transform_concrete_distribution_instance);
CPPUNIT_TEST(config_retired_state_is_propagated);
CPPUNIT_TEST(group_capacities_are_propagated);
CPPUNIT_TEST(global_distribution_has_same_owner_distributors_as_default);
@@ -25,6 +24,7 @@ struct GlobalBucketSpaceDistributionConverterTest : public CppUnit::TestFixture
void can_transform_single_level_multi_group_config();
void can_transform_multi_level_multi_group_config();
void can_transform_heterogenous_multi_group_config();
+ void can_transform_concrete_distribution_instance();
void config_retired_state_is_propagated();
void group_capacities_are_propagated();
void global_distribution_has_same_owner_distributors_as_default();
@@ -36,29 +36,13 @@ using DistributionConfig = vespa::config::content::StorDistributionConfig;
namespace {
-std::unique_ptr<DistributionConfig> string_to_config(const vespalib::string& cfg) {
- vespalib::asciistream iss(cfg);
- config::AsciiConfigReader<vespa::config::content::StorDistributionConfig> reader(iss);
- return reader.read();
-}
-
-vespalib::string config_to_string(const DistributionConfig& cfg) {
- vespalib::asciistream ost;
- config::AsciiConfigWriter writer(ost);
- writer.write(cfg);
- return ost.str();
-}
-
vespalib::string default_to_global_config(const vespalib::string& default_config) {
- auto default_cfg = string_to_config(default_config);
+ auto default_cfg = GlobalBucketSpaceDistributionConverter::string_to_config(default_config);
auto as_global = GlobalBucketSpaceDistributionConverter::convert_to_global(*default_cfg);
- return config_to_string(*as_global);
+ return GlobalBucketSpaceDistributionConverter::config_to_string(*as_global);
}
-}
-
-void GlobalBucketSpaceDistributionConverterTest::can_transform_flat_cluster_config() {
- vespalib::string default_config(
+vespalib::string default_flat_config(
R"(redundancy 1
group[1]
group[0].name "invalid"
@@ -70,7 +54,7 @@ group[0].nodes[1].index 1
group[0].nodes[2].index 2
)");
- vespalib::string expected_global_config(
+vespalib::string expected_flat_global_config(
R"(redundancy 3
initial_redundancy 0
ensure_primary_persisted true
@@ -89,7 +73,11 @@ group[0].nodes[2].index 2
group[0].nodes[2].retired false
disk_distribution MODULO_BID
)");
- CPPUNIT_ASSERT_EQUAL(expected_global_config, default_to_global_config(default_config));
+
+}
+
+void GlobalBucketSpaceDistributionConverterTest::can_transform_flat_cluster_config() {
+ CPPUNIT_ASSERT_EQUAL(expected_flat_global_config, default_to_global_config(default_flat_config));
}
@@ -290,6 +278,13 @@ disk_distribution MODULO_BID
CPPUNIT_ASSERT_EQUAL(expected_global_config, default_to_global_config(default_config));
}
+void GlobalBucketSpaceDistributionConverterTest::can_transform_concrete_distribution_instance() {
+ auto default_cfg = GlobalBucketSpaceDistributionConverter::string_to_config(default_flat_config);
+ lib::Distribution flat_distr(*default_cfg);
+ auto global_distr = GlobalBucketSpaceDistributionConverter::convert_to_global(flat_distr);
+ CPPUNIT_ASSERT_EQUAL(expected_flat_global_config, global_distr->serialize());
+}
+
void GlobalBucketSpaceDistributionConverterTest::config_retired_state_is_propagated() {
vespalib::string default_config(
R"(redundancy 1
@@ -306,7 +301,7 @@ group[0].nodes[2].index 2
group[0].nodes[2].retired true
)");
- auto default_cfg = string_to_config(default_config);
+ auto default_cfg = GlobalBucketSpaceDistributionConverter::string_to_config(default_config);
auto as_global = GlobalBucketSpaceDistributionConverter::convert_to_global(*default_cfg);
CPPUNIT_ASSERT_EQUAL(size_t(1), as_global->group.size());
@@ -336,7 +331,7 @@ group[2].index 1
group[2].nodes[1]
group[2].nodes[0].index 1
)");
- auto default_cfg = string_to_config(default_config);
+ auto default_cfg = GlobalBucketSpaceDistributionConverter::string_to_config(default_config);
auto as_global = GlobalBucketSpaceDistributionConverter::convert_to_global(*default_cfg);
CPPUNIT_ASSERT_EQUAL(size_t(3), as_global->group.size());
@@ -365,7 +360,7 @@ group[2].nodes[0].index 1
group[2].nodes[1].index 2
)");
- auto default_cfg = string_to_config(default_config);
+ auto default_cfg = GlobalBucketSpaceDistributionConverter::string_to_config(default_config);
auto global_cfg = GlobalBucketSpaceDistributionConverter::convert_to_global(*default_cfg);
lib::Distribution default_distr(*default_cfg);
diff --git a/storage/src/vespa/storage/common/global_bucket_space_distribution_converter.cpp b/storage/src/vespa/storage/common/global_bucket_space_distribution_converter.cpp
index d8a3dd4780f..5734fb6bb51 100644
--- a/storage/src/vespa/storage/common/global_bucket_space_distribution_converter.cpp
+++ b/storage/src/vespa/storage/common/global_bucket_space_distribution_converter.cpp
@@ -1,6 +1,9 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "global_bucket_space_distribution_converter.h"
+#include <vespa/config/config.h>
+#include <vespa/config/print/asciiconfigwriter.h>
+#include <vespa/config/print/asciiconfigreader.h>
#include <vespa/vespalib/util/stringfmt.h>
#include <vespa/vdslib/distribution/distribution_config_util.h>
#include <vespa/vespalib/stllike/asciistream.h>
@@ -154,4 +157,25 @@ GlobalBucketSpaceDistributionConverter::convert_to_global(const DistributionConf
return std::make_shared<DistributionConfig>(builder);
}
-} \ No newline at end of file
+std::shared_ptr<lib::Distribution>
+GlobalBucketSpaceDistributionConverter::convert_to_global(const lib::Distribution& distr) {
+ const auto src_config = distr.serialize();
+ auto global_config = convert_to_global(*string_to_config(src_config));
+ return std::make_shared<lib::Distribution>(*global_config);
+}
+
+std::unique_ptr<DistributionConfig>
+GlobalBucketSpaceDistributionConverter::string_to_config(const vespalib::string& cfg) {
+ vespalib::asciistream iss(cfg);
+ config::AsciiConfigReader<vespa::config::content::StorDistributionConfig> reader(iss);
+ return reader.read();
+}
+
+vespalib::string GlobalBucketSpaceDistributionConverter::config_to_string(const DistributionConfig& cfg) {
+ vespalib::asciistream ost;
+ config::AsciiConfigWriter writer(ost);
+ writer.write(cfg);
+ return ost.str();
+}
+
+}
diff --git a/storage/src/vespa/storage/common/global_bucket_space_distribution_converter.h b/storage/src/vespa/storage/common/global_bucket_space_distribution_converter.h
index 32a43b3081e..d135f56a5c1 100644
--- a/storage/src/vespa/storage/common/global_bucket_space_distribution_converter.h
+++ b/storage/src/vespa/storage/common/global_bucket_space_distribution_converter.h
@@ -11,6 +11,11 @@ namespace storage {
struct GlobalBucketSpaceDistributionConverter {
using DistributionConfig = vespa::config::content::StorDistributionConfig;
static std::shared_ptr<DistributionConfig> convert_to_global(const DistributionConfig&);
+ static std::shared_ptr<lib::Distribution> convert_to_global(const lib::Distribution&);
+
+ // Helper functions which may be of use outside this class
+ static std::unique_ptr<DistributionConfig> string_to_config(const vespalib::string&);
+ static vespalib::string config_to_string(const DistributionConfig&);
};
-} \ No newline at end of file
+}