summaryrefslogtreecommitdiffstats
path: root/vdslib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2016-12-04 19:26:34 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2016-12-12 02:55:45 +0100
commitf94a9a21d6d546868ef2cf63ea3532469450ffd7 (patch)
tree7174466dc53a7009eb425d4c2fc7b5202e112542 /vdslib
parentd1fc3e5707851697bfe9a07b40f1b8e3672be8aa (diff)
Split out so documentprotocol.h does not pull in everything.
Diffstat (limited to 'vdslib')
-rw-r--r--vdslib/src/tests/distribution/distributiontest.cpp5
-rw-r--r--vdslib/src/vespa/vdslib/distribution/distribution.cpp45
-rw-r--r--vdslib/src/vespa/vdslib/distribution/distribution.h16
3 files changed, 44 insertions, 22 deletions
diff --git a/vdslib/src/tests/distribution/distributiontest.cpp b/vdslib/src/tests/distribution/distributiontest.cpp
index d037c3f14b1..fbd9e86f9ac 100644
--- a/vdslib/src/tests/distribution/distributiontest.cpp
+++ b/vdslib/src/tests/distribution/distributiontest.cpp
@@ -313,7 +313,6 @@ namespace {
struct Test {
const NodeType* _nodeType;
std::string _state;
- Distribution::DistributionConfig _distributionConfig;
std::unique_ptr<Distribution> _distribution;
uint32_t _bucketsToTest;
const char* _upStates;
@@ -322,9 +321,7 @@ namespace {
Test()
: _nodeType(&NodeType::STORAGE),
_state("distributor:10 storage:10"),
- _distributionConfig(
- Distribution::getDefaultDistributionConfig(3, 10)),
- _distribution(new Distribution(_distributionConfig)),
+ _distribution(new Distribution(Distribution::getDefaultDistributionConfig(3, 10))),
_bucketsToTest(100),
_upStates("uir"),
_redundancy(2)
diff --git a/vdslib/src/vespa/vdslib/distribution/distribution.cpp b/vdslib/src/vespa/vdslib/distribution/distribution.cpp
index 211fe239710..597fae6c0c4 100644
--- a/vdslib/src/vespa/vdslib/distribution/distribution.cpp
+++ b/vdslib/src/vespa/vdslib/distribution/distribution.cpp
@@ -43,13 +43,12 @@ Distribution::Distribution()
_ensurePrimaryPersisted(true),
_diskDistribution()
{
- vespa::config::content::StorDistributionConfig& config(
- getDefaultDistributionConfig(0, 0));
+ auto config(getDefaultDistributionConfig(0, 0));
vespalib::asciistream ost;
config::AsciiConfigWriter writer(ost);
- writer.write(config);
+ writer.write(config.get());
_serialized = ost.str();
- configure(config);
+ configure(config.get());
}
Distribution::Distribution(const Distribution& d)
@@ -66,7 +65,16 @@ Distribution::Distribution(const Distribution& d)
configure(*reader.read());
}
-Distribution::Distribution(const vespa::config::content::StorDistributionConfig& config)
+Distribution::ConfigWrapper::ConfigWrapper(std::unique_ptr<DistributionConfig> cfg) :
+ _cfg(std::move(cfg))
+{ }
+Distribution::ConfigWrapper::~ConfigWrapper() { }
+
+Distribution::Distribution(const ConfigWrapper & config) :
+ Distribution(config.get())
+{ }
+
+Distribution::Distribution(const vespa::config::content::StorDistributionConfig & config)
: _distributionBitMasks(getDistributionBitMasks()),
_nodeGraph(),
_redundancy(),
@@ -280,6 +288,11 @@ vespalib::string Distribution::getDiskDistributionName(DiskDistribution dist) {
return DistributionConfig::getDiskDistributionName(toConfig(dist));
}
+Distribution::DiskDistribution
+Distribution::getDiskDistribution(vespalib::stringref name) {
+ return fromConfig(DistributionConfig::getDiskDistribution(name));
+}
+
void
Distribution::print(std::ostream& out, bool, const std::string&) const {
out << serialize();
@@ -630,21 +643,21 @@ Distribution::getIdealNodes(const NodeType& nodeType,
}
}
-Distribution::DistributionConfig
+Distribution::ConfigWrapper
Distribution::getDefaultDistributionConfig(uint16_t redundancy, uint16_t nodeCount, DiskDistribution distr)
{
- vespa::config::content::StorDistributionConfigBuilder config;
- config.redundancy = redundancy;
- config.group.resize(1);
- config.group[0].index = "invalid";
- config.group[0].name = "invalid";
- config.group[0].partitions = "*";
- config.group[0].nodes.resize(nodeCount);
+ std::unique_ptr<vespa::config::content::StorDistributionConfigBuilder> config(new vespa::config::content::StorDistributionConfigBuilder());
+ config->redundancy = redundancy;
+ config->group.resize(1);
+ config->group[0].index = "invalid";
+ config->group[0].name = "invalid";
+ config->group[0].partitions = "*";
+ config->group[0].nodes.resize(nodeCount);
for (uint16_t i=0; i<nodeCount; ++i) {
- config.group[0].nodes[i].index = i;
+ config->group[0].nodes[i].index = i;
}
- config.diskDistribution = toConfig(distr);
- return config;
+ config->diskDistribution = toConfig(distr);
+ return ConfigWrapper(std::move(config));
}
std::vector<uint16_t>
diff --git a/vdslib/src/vespa/vdslib/distribution/distribution.h b/vdslib/src/vespa/vdslib/distribution/distribution.h
index 3ec75b18d65..6d784a05658 100644
--- a/vdslib/src/vespa/vdslib/distribution/distribution.h
+++ b/vdslib/src/vespa/vdslib/distribution/distribution.h
@@ -113,9 +113,20 @@ private:
void configure(const DistributionConfig & config);
public:
+ class ConfigWrapper {
+ public:
+ ConfigWrapper(ConfigWrapper && rhs) = default;
+ ConfigWrapper & operator = (ConfigWrapper && rhs) = default;
+ ConfigWrapper(std::unique_ptr<DistributionConfig> cfg);
+ ~ConfigWrapper();
+ const DistributionConfig & get() const { return *_cfg; }
+ private:
+ std::unique_ptr<DistributionConfig> _cfg;
+ };
Distribution();
Distribution(const Distribution&);
- Distribution(const DistributionConfig&);
+ Distribution(const ConfigWrapper & cfg);
+ Distribution(const DistributionConfig & cfg);
Distribution(const vespalib::string& serialized);
~Distribution();
@@ -178,10 +189,11 @@ public:
* with a really simple setup with no hierarchical grouping. This function
* should not be used by any production code.
*/
- static DistributionConfig getDefaultDistributionConfig(
+ static ConfigWrapper getDefaultDistributionConfig(
uint16_t redundancy = 2, uint16_t nodeCount = 10,
DiskDistribution distr = MODULO_BID);
static vespalib::string getDiskDistributionName(DiskDistribution dist);
+ static DiskDistribution getDiskDistribution(vespalib::stringref name);
/**
* Utility function used by distributor to split copies into groups to