|
|
|
|
@@ -46,12 +46,13 @@ SEASTAR_THREAD_TEST_CASE(test_pending_endpoints_for_bootstrap_first_node) {
|
|
|
|
|
{"replication_factor", "1"}
|
|
|
|
|
});
|
|
|
|
|
token_metadata->add_bootstrap_token(t1, e1);
|
|
|
|
|
token_metadata->update_pending_ranges(*replication_strategy, ks_name, get_dc_rack_fn).get();
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(0), ks_name),
|
|
|
|
|
token_metadata->update_topology_change_info(get_dc_rack_fn).get();
|
|
|
|
|
auto erm = calculate_effective_replication_map(replication_strategy, token_metadata).get0();
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(0)),
|
|
|
|
|
inet_address_vector_topology_change{e1});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(1), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(1)),
|
|
|
|
|
inet_address_vector_topology_change{e1});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(2), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(2)),
|
|
|
|
|
inet_address_vector_topology_change{e1});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -70,16 +71,17 @@ SEASTAR_THREAD_TEST_CASE(test_pending_endpoints_for_bootstrap_second_node) {
|
|
|
|
|
});
|
|
|
|
|
token_metadata->update_normal_tokens({t1}, e1).get();
|
|
|
|
|
token_metadata->add_bootstrap_token(t2, e2);
|
|
|
|
|
token_metadata->update_pending_ranges(*replication_strategy, ks_name, get_dc_rack_fn).get();
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(0), ks_name),
|
|
|
|
|
token_metadata->update_topology_change_info(get_dc_rack_fn).get();
|
|
|
|
|
auto erm = calculate_effective_replication_map(replication_strategy, token_metadata).get0();
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(0)),
|
|
|
|
|
inet_address_vector_topology_change{});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(1), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(1)),
|
|
|
|
|
inet_address_vector_topology_change{});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(2), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(2)),
|
|
|
|
|
inet_address_vector_topology_change{e2});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(100), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(100)),
|
|
|
|
|
inet_address_vector_topology_change{e2});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(101), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(101)),
|
|
|
|
|
inet_address_vector_topology_change{});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -103,16 +105,17 @@ SEASTAR_THREAD_TEST_CASE(test_pending_endpoints_for_bootstrap_with_replicas) {
|
|
|
|
|
token_metadata->update_normal_tokens({t1, t1000}, e2).get();
|
|
|
|
|
token_metadata->update_normal_tokens({t10}, e3).get();
|
|
|
|
|
token_metadata->add_bootstrap_token(t100, e1);
|
|
|
|
|
token_metadata->update_pending_ranges(*replication_strategy, ks_name, get_dc_rack_fn).get();
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(1), ks_name),
|
|
|
|
|
token_metadata->update_topology_change_info(get_dc_rack_fn).get();
|
|
|
|
|
auto erm = calculate_effective_replication_map(replication_strategy, token_metadata).get0();
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(1)),
|
|
|
|
|
inet_address_vector_topology_change{});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(2), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(2)),
|
|
|
|
|
inet_address_vector_topology_change{e1});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(11), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(11)),
|
|
|
|
|
inet_address_vector_topology_change{e1});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(100), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(100)),
|
|
|
|
|
inet_address_vector_topology_change{e1});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(101), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(101)),
|
|
|
|
|
inet_address_vector_topology_change{});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -137,16 +140,17 @@ SEASTAR_THREAD_TEST_CASE(test_pending_endpoints_for_leave_with_replicas) {
|
|
|
|
|
token_metadata->update_normal_tokens({t10}, e3).get();
|
|
|
|
|
token_metadata->update_normal_tokens({t100}, e1).get();
|
|
|
|
|
token_metadata->add_leaving_endpoint(e1);
|
|
|
|
|
token_metadata->update_pending_ranges(*replication_strategy, ks_name, get_dc_rack_fn).get();
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(1), ks_name),
|
|
|
|
|
token_metadata->update_topology_change_info(get_dc_rack_fn).get();
|
|
|
|
|
auto erm = calculate_effective_replication_map(replication_strategy, token_metadata).get0();
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(1)),
|
|
|
|
|
inet_address_vector_topology_change{});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(2), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(2)),
|
|
|
|
|
inet_address_vector_topology_change{e2});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(11), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(11)),
|
|
|
|
|
inet_address_vector_topology_change{e3});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(100), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(100)),
|
|
|
|
|
inet_address_vector_topology_change{e3});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(101), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(101)),
|
|
|
|
|
inet_address_vector_topology_change{});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -173,20 +177,21 @@ SEASTAR_THREAD_TEST_CASE(test_pending_endpoints_for_replace_with_replicas) {
|
|
|
|
|
token_metadata->update_normal_tokens({t1, t100}, e2).get();
|
|
|
|
|
token_metadata->update_normal_tokens({t10}, e3).get();
|
|
|
|
|
token_metadata->add_replacing_endpoint(e3, e4);
|
|
|
|
|
token_metadata->update_pending_ranges(*replication_strategy, ks_name, get_dc_rack_fn).get();
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(100), ks_name),
|
|
|
|
|
token_metadata->update_topology_change_info(get_dc_rack_fn).get();
|
|
|
|
|
auto erm = calculate_effective_replication_map(replication_strategy, token_metadata).get0();
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(100)),
|
|
|
|
|
inet_address_vector_topology_change{});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(1000), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(1000)),
|
|
|
|
|
inet_address_vector_topology_change{});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(1001), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(1001)),
|
|
|
|
|
inet_address_vector_topology_change{e4});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(1), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(1)),
|
|
|
|
|
inet_address_vector_topology_change{e4});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(2), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(2)),
|
|
|
|
|
inet_address_vector_topology_change{e4});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(10), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(10)),
|
|
|
|
|
inet_address_vector_topology_change{e4});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(11), ks_name),
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(11)),
|
|
|
|
|
inet_address_vector_topology_change{});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -211,39 +216,46 @@ SEASTAR_THREAD_TEST_CASE(test_endpoints_for_reading_when_bootstrap_with_replicas
|
|
|
|
|
token_metadata->update_normal_tokens({t10}, e3).get();
|
|
|
|
|
token_metadata->add_bootstrap_token(t100, e1);
|
|
|
|
|
|
|
|
|
|
auto check_endpoints = [&](int64_t t, inet_address_vector_replica_set expected_replicas,
|
|
|
|
|
auto check_endpoints = [](mutable_vnode_erm_ptr erm, int64_t t,
|
|
|
|
|
inet_address_vector_replica_set expected_replicas,
|
|
|
|
|
seastar::compat::source_location sl = seastar::compat::source_location::current())
|
|
|
|
|
{
|
|
|
|
|
BOOST_TEST_INFO("line: " << sl.line());
|
|
|
|
|
const auto expected_set = std::unordered_set<inet_address>(expected_replicas.begin(),
|
|
|
|
|
expected_replicas.end());
|
|
|
|
|
const auto actual_replicas = token_metadata->endpoints_for_reading(dht::token::from_int64(t), ks_name);
|
|
|
|
|
const auto actual_replicas = erm->get_endpoints_for_reading(dht::token::from_int64(t));
|
|
|
|
|
BOOST_REQUIRE(actual_replicas.has_value());
|
|
|
|
|
const auto actual_set = std::unordered_set<inet_address>(actual_replicas->begin(),
|
|
|
|
|
actual_replicas->end());
|
|
|
|
|
BOOST_REQUIRE_EQUAL(expected_set, actual_set);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
auto check_no_endpoints = [&](int64_t t,
|
|
|
|
|
auto check_no_endpoints = [](mutable_vnode_erm_ptr erm, int64_t t,
|
|
|
|
|
seastar::compat::source_location sl = seastar::compat::source_location::current())
|
|
|
|
|
{
|
|
|
|
|
BOOST_TEST_INFO("line: " << sl.line());
|
|
|
|
|
BOOST_REQUIRE(!token_metadata->endpoints_for_reading(dht::token::from_int64(t), ks_name).has_value());
|
|
|
|
|
BOOST_REQUIRE(!erm->get_endpoints_for_reading(dht::token::from_int64(t)).has_value());
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
token_metadata->update_pending_ranges(*replication_strategy, ks_name, get_dc_rack_fn).get();
|
|
|
|
|
check_no_endpoints(2);
|
|
|
|
|
{
|
|
|
|
|
token_metadata->update_topology_change_info(get_dc_rack_fn).get();
|
|
|
|
|
auto erm = calculate_effective_replication_map(replication_strategy, token_metadata).get0();
|
|
|
|
|
check_no_endpoints(erm, 2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
token_metadata->set_read_new(locator::token_metadata::read_new_t::yes);
|
|
|
|
|
token_metadata->update_pending_ranges(*replication_strategy, ks_name, get_dc_rack_fn).get();
|
|
|
|
|
{
|
|
|
|
|
token_metadata->set_read_new(locator::token_metadata::read_new_t::yes);
|
|
|
|
|
token_metadata->update_topology_change_info(get_dc_rack_fn).get();
|
|
|
|
|
auto erm = calculate_effective_replication_map(replication_strategy, token_metadata).get0();
|
|
|
|
|
|
|
|
|
|
check_endpoints(2, {e3, e1});
|
|
|
|
|
check_endpoints(10, {e3, e1});
|
|
|
|
|
check_endpoints(11, {e1, e2});
|
|
|
|
|
check_endpoints(100, {e1, e2});
|
|
|
|
|
check_no_endpoints(101);
|
|
|
|
|
check_no_endpoints(1001);
|
|
|
|
|
check_no_endpoints(1);
|
|
|
|
|
check_endpoints(erm, 2, {e3, e1});
|
|
|
|
|
check_endpoints(erm, 10, {e3, e1});
|
|
|
|
|
check_endpoints(erm, 11, {e1, e2});
|
|
|
|
|
check_endpoints(erm, 100, {e1, e2});
|
|
|
|
|
check_no_endpoints(erm, 101);
|
|
|
|
|
check_no_endpoints(erm, 1001);
|
|
|
|
|
check_no_endpoints(erm, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SEASTAR_THREAD_TEST_CASE(test_replace_node_with_same_endpoint) {
|
|
|
|
|
@@ -258,8 +270,9 @@ SEASTAR_THREAD_TEST_CASE(test_replace_node_with_same_endpoint) {
|
|
|
|
|
});
|
|
|
|
|
token_metadata->update_normal_tokens({t1}, e1).get();
|
|
|
|
|
token_metadata->add_replacing_endpoint(e1, e1);
|
|
|
|
|
token_metadata->update_pending_ranges(*replication_strategy, ks_name, get_dc_rack_fn).get();
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->pending_endpoints_for(dht::token::from_int64(1), ks_name),
|
|
|
|
|
token_metadata->update_topology_change_info(get_dc_rack_fn).get();
|
|
|
|
|
auto erm = calculate_effective_replication_map(replication_strategy, token_metadata).get0();
|
|
|
|
|
BOOST_REQUIRE_EQUAL(erm->get_pending_endpoints(dht::token::from_int64(1)),
|
|
|
|
|
inet_address_vector_topology_change{e1});
|
|
|
|
|
BOOST_REQUIRE_EQUAL(token_metadata->get_endpoint(t1), e1);
|
|
|
|
|
}
|
|
|
|
|
|