From eb752c3f6970ac0cb0595c869cc27ff3a6ca6bd3 Mon Sep 17 00:00:00 2001 From: Benny Halevy Date: Tue, 21 Sep 2021 13:28:34 +0300 Subject: [PATCH] test: network_topology_strategy_test: use effective_replication_map to get_natural_endpoints Signed-off-by: Benny Halevy --- test/boost/network_topology_strategy_test.cc | 45 +++++++++----------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/test/boost/network_topology_strategy_test.cc b/test/boost/network_topology_strategy_test.cc index 36849e9df8..f4cc93e3ac 100644 --- a/test/boost/network_topology_strategy_test.cc +++ b/test/boost/network_topology_strategy_test.cc @@ -72,7 +72,7 @@ static void verify_sorted(const dht::token_range_vector& trv) { } #endif -static void check_ranges_are_sorted(abstract_replication_strategy* ars, gms::inet_address ep) { +static void check_ranges_are_sorted(abstract_replication_strategy::ptr_type ars, gms::inet_address ep) { // Too slow in debug mode #ifndef SEASTAR_DEBUG verify_sorted(ars->get_ranges(ep)); @@ -82,11 +82,11 @@ static void check_ranges_are_sorted(abstract_replication_strategy* ars, gms::ine } void strategy_sanity_check( - abstract_replication_strategy* ars_ptr, + abstract_replication_strategy::ptr_type ars_ptr, const std::map& options) { network_topology_strategy* nts_ptr = - dynamic_cast(ars_ptr); + dynamic_cast(ars_ptr.get()); // // Check that both total and per-DC RFs in options match the corresponding @@ -104,7 +104,7 @@ void strategy_sanity_check( } void endpoints_check( - abstract_replication_strategy* ars_ptr, + abstract_replication_strategy::ptr_type ars_ptr, inet_address_vector_replica_set& endpoints) { // Check the total RF @@ -129,7 +129,7 @@ void endpoints_check( } network_topology_strategy* nts_ptr = - dynamic_cast(ars_ptr); + dynamic_cast(ars_ptr.get()); for (auto& rf : dc_rf) { BOOST_CHECK(rf.second == nts_ptr->get_replication_factor(rf.first)); } @@ -148,21 +148,23 @@ auto d2t = [](double d) -> int64_t { * @param ring_points ring description * @param options strategy options * @param ars_ptr strategy object + * + * Run in a seastar thread. */ void full_ring_check(const std::vector& ring_points, const std::map& options, - abstract_replication_strategy* ars_ptr) { + abstract_replication_strategy::ptr_type ars_ptr, + locator::token_metadata_ptr tmptr) { strategy_sanity_check(ars_ptr, options); + auto erm = calculate_effective_replication_map(ars_ptr, tmptr).get0(); + for (auto& rp : ring_points) { double cur_point1 = rp.point - 0.5; token t1(dht::token::kind::key, d2t(cur_point1 / ring_points.size())); - uint64_t cache_hit_count = ars_ptr->get_cache_hits_count(); - auto endpoints1 = ars_ptr->get_natural_endpoints(t1); + auto endpoints1 = erm->get_natural_endpoints(t1); endpoints_check(ars_ptr, endpoints1); - // validate that the result hasn't been taken from the cache - BOOST_CHECK(cache_hit_count == ars_ptr->get_cache_hits_count()); print_natural_endpoints(cur_point1, endpoints1); @@ -171,14 +173,12 @@ void full_ring_check(const std::vector& ring_points, // the endpoints has been taken from the cache and that the output is // identical to the one not taken from the cache. // - cache_hit_count = ars_ptr->get_cache_hits_count(); double cur_point2 = rp.point - 0.2; token t2(dht::token::kind::key, d2t(cur_point2 / ring_points.size())); - auto endpoints2 = ars_ptr->get_natural_endpoints(t2); + auto endpoints2 = erm->get_natural_endpoints(t2); endpoints_check(ars_ptr, endpoints2); check_ranges_are_sorted(ars_ptr, rp.host); - BOOST_CHECK(cache_hit_count + 1 == ars_ptr->get_cache_hits_count()); BOOST_CHECK(endpoints1 == endpoints2); } } @@ -226,12 +226,11 @@ void simple_test() { {"102", "3"} }; - auto ars_uptr = abstract_replication_strategy::create_replication_strategy( + auto ars_ptr = abstract_replication_strategy::create_replication_strategy( "NetworkTopologyStrategy", stm, options323); - auto ars_ptr = ars_uptr.get(); - full_ring_check(ring_points, options323, ars_ptr); + full_ring_check(ring_points, options323, ars_ptr, stm.get()); /////////////// // Create the replication strategy @@ -241,12 +240,10 @@ void simple_test() { {"102", "0"} }; - ars_uptr = abstract_replication_strategy::create_replication_strategy( + ars_ptr = abstract_replication_strategy::create_replication_strategy( "NetworkTopologyStrategy", stm, options320); - ars_ptr = ars_uptr.get(); - - full_ring_check(ring_points, options320, ars_ptr); + full_ring_check(ring_points, options320, ars_ptr, stm.get()); // // Check cache invalidation: invalidate the cache and run a full ring @@ -258,7 +255,7 @@ void simple_test() { tm.invalidate_cached_rings(); return make_ready_future<>(); }).get(); - full_ring_check(ring_points, options320, ars_ptr); + full_ring_check(ring_points, options320, ars_ptr, stm.get()); } // Run in a seastar thread. @@ -322,12 +319,10 @@ void heavy_origin_test() { return tm.update_normal_tokens(tokens); }).get(); - auto ars_uptr = abstract_replication_strategy::create_replication_strategy( + auto ars_ptr = abstract_replication_strategy::create_replication_strategy( "NetworkTopologyStrategy", stm, config_options); - auto ars_ptr = ars_uptr.get(); - - full_ring_check(ring_points, config_options, ars_ptr); + full_ring_check(ring_points, config_options, ars_ptr, stm.get()); }