diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2016-12-04 19:26:34 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2016-12-12 02:55:45 +0100 |
commit | f94a9a21d6d546868ef2cf63ea3532469450ffd7 (patch) | |
tree | 7174466dc53a7009eb425d4c2fc7b5202e112542 /vdslib | |
parent | d1fc3e5707851697bfe9a07b40f1b8e3672be8aa (diff) |
Split out so documentprotocol.h does not pull in everything.
Diffstat (limited to 'vdslib')
-rw-r--r-- | vdslib/src/tests/distribution/distributiontest.cpp | 5 | ||||
-rw-r--r-- | vdslib/src/vespa/vdslib/distribution/distribution.cpp | 45 | ||||
-rw-r--r-- | vdslib/src/vespa/vdslib/distribution/distribution.h | 16 |
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 |