summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2021-09-23 14:58:14 +0200
committerTor Egge <Tor.Egge@online.no>2021-09-23 14:58:14 +0200
commitede35f912e2d2505cef07d8a580f2b1d9abd5abf (patch)
treef9ec7fa50fa18e1a6af570a40e66de961fbbfdc1 /searchcore
parent25e5bf351de0c227c35a8451d5da7e475f2e6f70 (diff)
Use static helper methods to instantiate CalculateMovedDocsRatio.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/apps/vespa-redistribute-bm/vespa_redistribute_bm.cpp5
-rw-r--r--searchcore/src/tests/bmcluster/estimate_moved_docs_ratio/estimate_moved_docs_ratio_test.cpp24
-rw-r--r--searchcore/src/vespa/searchcore/bmcluster/calculate_moved_docs_ratio.cpp43
-rw-r--r--searchcore/src/vespa/searchcore/bmcluster/calculate_moved_docs_ratio.h4
4 files changed, 53 insertions, 23 deletions
diff --git a/searchcore/src/apps/vespa-redistribute-bm/vespa_redistribute_bm.cpp b/searchcore/src/apps/vespa-redistribute-bm/vespa_redistribute_bm.cpp
index d22754736ce..0227d9539d2 100644
--- a/searchcore/src/apps/vespa-redistribute-bm/vespa_redistribute_bm.cpp
+++ b/searchcore/src/apps/vespa-redistribute-bm/vespa_redistribute_bm.cpp
@@ -347,10 +347,7 @@ Benchmark::estimate_moved_docs()
case Mode::REPLACE:
if (_params.get_num_nodes() < 10) {
// Calculate better estimate for moved docs ratio with brute force
- uint32_t old_placement_mask = (1u << _params.get_num_nodes()) - (1u << _params.get_flip_nodes());
- uint32_t new_placement_mask = (1u << _params.get_num_nodes()) - (((1u << _params.get_flip_nodes()) - 1) << _params.get_flip_nodes()) - 1;
- uint32_t new_up_mask = (1u << _params.get_num_nodes()) - 1u;
- CalculateMovedDocsRatio scanner(_params.get_num_nodes(), _params.get_redundancy(), old_placement_mask, new_placement_mask, new_up_mask);
+ auto scanner = CalculateMovedDocsRatio::make_replace_calculator(_params.get_redundancy(), _params.get_flip_nodes(), _params.get_flip_nodes(), _params.get_num_nodes());
scanner.scan();
return _params.get_documents() * scanner.get_moved_docs_ratio();
} else {
diff --git a/searchcore/src/tests/bmcluster/estimate_moved_docs_ratio/estimate_moved_docs_ratio_test.cpp b/searchcore/src/tests/bmcluster/estimate_moved_docs_ratio/estimate_moved_docs_ratio_test.cpp
index 94cc04ab09a..79af31e3247 100644
--- a/searchcore/src/tests/bmcluster/estimate_moved_docs_ratio/estimate_moved_docs_ratio_test.cpp
+++ b/searchcore/src/tests/bmcluster/estimate_moved_docs_ratio/estimate_moved_docs_ratio_test.cpp
@@ -20,9 +20,7 @@ TEST(EstimateMovedDocsRatioTest, estimate_lost_docs_ratio)
for (uint32_t nodes = 1; nodes < 2; ++nodes) {
for (uint32_t redundancy = 1; redundancy <= nodes; ++redundancy) {
for (uint32_t lost_nodes = 0; lost_nodes <= nodes; ++lost_nodes) {
- uint32_t old_placement_mask = (1u << nodes) - 1u;
- uint32_t new_placement_mask = (1u << nodes) - (1u << lost_nodes);
- CalculateMovedDocsRatio scanner(nodes, redundancy, old_placement_mask, new_placement_mask, new_placement_mask);
+ auto scanner = CalculateMovedDocsRatio::make_crash_calculator(redundancy, lost_nodes, nodes);
scanner.scan();
double lost_docs_base_ratio = scanner.get_lost_docs_base_ratio();
double estimated_lost_docs_base_ratio = EstimateMovedDocsRatio().estimate_lost_docs_base_ratio(redundancy, lost_nodes, nodes);
@@ -37,9 +35,7 @@ TEST(EstimateMovedDocsRatioTest, estimate_moved_docs_ratio_grow)
for (uint32_t nodes = 1; nodes < 10; ++nodes) {
for (uint32_t redundancy = 1; redundancy <= nodes; ++redundancy) {
for (uint32_t added_nodes = 0; added_nodes <= nodes; ++added_nodes) {
- uint32_t old_placement_mask = (1u << nodes) - (1u << added_nodes);
- uint32_t new_placement_mask = (1u << nodes) - 1;
- CalculateMovedDocsRatio scanner(nodes, redundancy, old_placement_mask, new_placement_mask, new_placement_mask);
+ auto scanner = CalculateMovedDocsRatio::make_grow_calculator(redundancy, added_nodes, nodes);
scanner.scan();
double moved_docs_ratio = scanner.get_moved_docs_ratio();
double estimated_moved_docs_ratio = EstimateMovedDocsRatio().estimate_moved_docs_ratio_grow(redundancy, added_nodes, nodes);
@@ -54,9 +50,7 @@ TEST(EstimateMovedDocsRatioTest, estimate_moved_docs_ratio_shrink)
for (uint32_t nodes = 1; nodes < 10; ++nodes) {
for (uint32_t redundancy = 1; redundancy <= nodes; ++redundancy) {
for (uint32_t retired_nodes = 0; retired_nodes <= nodes; ++retired_nodes) {
- uint32_t old_placement_mask = (1u << nodes) - 1;
- uint32_t new_placement_mask = (1u << nodes) - (1u << retired_nodes);
- CalculateMovedDocsRatio scanner(nodes, redundancy, old_placement_mask, new_placement_mask, old_placement_mask);
+ auto scanner = CalculateMovedDocsRatio::make_shrink_calculator(redundancy, retired_nodes, nodes);
scanner.scan();
double moved_docs_ratio = scanner.get_moved_docs_ratio();
double estimated_moved_docs_ratio = EstimateMovedDocsRatio().estimate_moved_docs_ratio_shrink(redundancy, retired_nodes, nodes);
@@ -72,9 +66,7 @@ TEST(EstimateMovedDocsRatioTest, estimate_moved_docs_ratio_crash)
for (uint32_t nodes = 1; nodes < 10; ++nodes) {
for (uint32_t redundancy = 1; redundancy <= nodes; ++redundancy) {
for (uint32_t crashed_nodes = 0; crashed_nodes <= nodes; ++crashed_nodes) {
- uint32_t old_placement_mask = (1u << nodes) - 1;
- uint32_t new_placement_mask = (1u << nodes) - (1u << crashed_nodes);
- CalculateMovedDocsRatio scanner(nodes, redundancy, old_placement_mask, new_placement_mask, new_placement_mask);
+ auto scanner = CalculateMovedDocsRatio::make_crash_calculator(redundancy, crashed_nodes, nodes);
scanner.scan();
double moved_docs_ratio = scanner.get_moved_docs_ratio();
double estimated_moved_docs_ratio = EstimateMovedDocsRatio().estimate_moved_docs_ratio_crash(redundancy, crashed_nodes, nodes);
@@ -96,13 +88,7 @@ TEST(EstimateMovedDocsRatioTest, estimate_moved_docs_ratio_replace)
for (uint32_t retired_nodes = 0; retired_nodes <= nodes; ++retired_nodes) {
for (uint32_t added_nodes = 0; added_nodes <= nodes - retired_nodes; ++added_nodes) {
// std::cout << "Estimate moved docs ratio replace " << retired_nodes << " of " << nodes << " retired, added " << added_nodes << " nodes ,redundancy " << redundancy << std::endl;
- uint32_t old_placement_mask = (1u << nodes) - (1u << added_nodes);
- uint32_t new_placement_mask = (1u << nodes) - (((1u << retired_nodes) - 1) << added_nodes) - 1;
- uint32_t new_up_mask = (1u << nodes) - 1u;
- if (verbose) {
- std::cout << "0x" << std::hex << old_placement_mask << ", 0x" << std::hex << new_placement_mask << ", 0x" << new_up_mask << std::dec << std::endl;
- }
- CalculateMovedDocsRatio scanner(nodes, redundancy, old_placement_mask, new_placement_mask, new_up_mask);
+ auto scanner = CalculateMovedDocsRatio::make_replace_calculator(redundancy, added_nodes, retired_nodes, nodes);
scanner.scan();
double moved_docs_ratio = scanner.get_moved_docs_ratio();
double estimated_moved_docs_ratio = EstimateMovedDocsRatio(verbose).estimate_moved_docs_ratio_replace(redundancy, added_nodes, retired_nodes, nodes);
diff --git a/searchcore/src/vespa/searchcore/bmcluster/calculate_moved_docs_ratio.cpp b/searchcore/src/vespa/searchcore/bmcluster/calculate_moved_docs_ratio.cpp
index 6f6e6143814..63f23476a95 100644
--- a/searchcore/src/vespa/searchcore/bmcluster/calculate_moved_docs_ratio.cpp
+++ b/searchcore/src/vespa/searchcore/bmcluster/calculate_moved_docs_ratio.cpp
@@ -5,6 +5,15 @@
namespace search::bmcluster {
+namespace {
+
+uint32_t make_bit_range(uint32_t low, uint32_t high)
+{
+ return (1u << high) - (1u << low);
+}
+
+}
+
struct CalculateMovedDocsRatio::Placements
{
uint32_t _mask;
@@ -57,6 +66,40 @@ CalculateMovedDocsRatio::CalculateMovedDocsRatio(uint32_t nodes, uint32_t redund
CalculateMovedDocsRatio::~CalculateMovedDocsRatio() = default;
+CalculateMovedDocsRatio
+CalculateMovedDocsRatio::make_grow_calculator(uint32_t redundancy, uint32_t added_nodes, uint32_t nodes)
+{
+ uint32_t old_placement_mask = make_bit_range(added_nodes, nodes);
+ uint32_t new_placement_mask = make_bit_range(0, nodes);
+ return CalculateMovedDocsRatio(nodes, redundancy, old_placement_mask, new_placement_mask, new_placement_mask);
+}
+
+CalculateMovedDocsRatio
+CalculateMovedDocsRatio::make_shrink_calculator(uint32_t redundancy, uint32_t retired_nodes, uint32_t nodes)
+{
+ uint32_t old_placement_mask = make_bit_range(0, nodes);
+ uint32_t new_placement_mask = make_bit_range(retired_nodes, nodes);
+ return CalculateMovedDocsRatio(nodes, redundancy, old_placement_mask, new_placement_mask, old_placement_mask);
+}
+
+CalculateMovedDocsRatio
+CalculateMovedDocsRatio::make_crash_calculator(uint32_t redundancy, uint32_t crashed_nodes, uint32_t nodes)
+{
+ uint32_t old_placement_mask = make_bit_range(0, nodes);
+ uint32_t new_placement_mask = make_bit_range(crashed_nodes, nodes);
+ return CalculateMovedDocsRatio(nodes, redundancy, old_placement_mask, new_placement_mask, new_placement_mask);
+
+}
+
+CalculateMovedDocsRatio
+CalculateMovedDocsRatio::make_replace_calculator(uint32_t redundancy, uint32_t added_nodes, uint32_t retired_nodes, uint32_t nodes)
+{
+ uint32_t old_placement_mask = make_bit_range(added_nodes, nodes);
+ uint32_t new_placement_mask = make_bit_range(added_nodes + retired_nodes, nodes) | make_bit_range(0, added_nodes);
+ uint32_t new_up_mask = make_bit_range(0, nodes);
+ return CalculateMovedDocsRatio(nodes, redundancy, old_placement_mask, new_placement_mask, new_up_mask);
+}
+
void
CalculateMovedDocsRatio::scan(Placements selected, Placements old_placement, Placements new_placement)
{
diff --git a/searchcore/src/vespa/searchcore/bmcluster/calculate_moved_docs_ratio.h b/searchcore/src/vespa/searchcore/bmcluster/calculate_moved_docs_ratio.h
index 65907e6eae3..cd161177246 100644
--- a/searchcore/src/vespa/searchcore/bmcluster/calculate_moved_docs_ratio.h
+++ b/searchcore/src/vespa/searchcore/bmcluster/calculate_moved_docs_ratio.h
@@ -31,6 +31,10 @@ class CalculateMovedDocsRatio
public:
CalculateMovedDocsRatio(uint32_t nodes, uint32_t redundancy, uint32_t old_placement_mask, uint32_t new_placement_mask, uint32_t new_up_mask);
~CalculateMovedDocsRatio();
+ static CalculateMovedDocsRatio make_grow_calculator(uint32_t redundancy, uint32_t added_nodes, uint32_t nodes);
+ static CalculateMovedDocsRatio make_shrink_calculator(uint32_t redundancy, uint32_t retired_nodes, uint32_t nodes);
+ static CalculateMovedDocsRatio make_crash_calculator(uint32_t redundancy, uint32_t crashed_nodes, uint32_t nodes);
+ static CalculateMovedDocsRatio make_replace_calculator(uint32_t redundancy, uint32_t added_nodes, uint32_t retired_nodes, uint32_t nodes);
void scan();
uint32_t get_lost_docs_base() const noexcept { return _lost_docs_base; }
uint32_t get_checked_states() const noexcept { return _checked_states; }