diff --git a/locator/abstract_replication_strategy.cc b/locator/abstract_replication_strategy.cc index 39621b48cb..fbdb579977 100644 --- a/locator/abstract_replication_strategy.cc +++ b/locator/abstract_replication_strategy.cc @@ -373,7 +373,7 @@ future calculate_effective_replicat const auto token = all_tokens[i]; auto current_endpoints = co_await rs->calculate_natural_endpoints(token, base_token_metadata); - auto target_endpoints = co_await rs->calculate_natural_endpoints(token, topology_changes->target_token_metadata); + auto target_endpoints = co_await rs->calculate_natural_endpoints(token, *topology_changes->target_token_metadata); auto add_mapping = [&](ring_mapping& target, std::unordered_set&& endpoints) { using interval = ring_mapping::interval_type; diff --git a/locator/token_metadata.cc b/locator/token_metadata.cc index a75a23524d..ef9ca6559f 100644 --- a/locator/token_metadata.cc +++ b/locator/token_metadata.cc @@ -796,8 +796,8 @@ future<> token_metadata_impl::update_topology_change_info(dc_rack_fn& get_dc_rac std::sort(begin(all_tokens), end(all_tokens)); auto prev_value = std::move(_topology_change_info); - _topology_change_info.emplace(token_metadata(std::move(target_token_metadata)), - base_token_metadata ? std::optional(token_metadata(std::move(base_token_metadata))): std::nullopt, + _topology_change_info.emplace(make_token_metadata_ptr(std::move(target_token_metadata)), + base_token_metadata ? make_token_metadata_ptr(std::move(base_token_metadata)): nullptr, std::move(all_tokens), _read_new); co_await utils::clear_gently(prev_value); @@ -844,10 +844,10 @@ std::map token_metadata_impl::get_normal_and_bootstrapping_ return ret; } -topology_change_info::topology_change_info(token_metadata target_token_metadata_, - std::optional base_token_metadata_, - std::vector all_tokens_, - token_metadata::read_new_t read_new_) +topology_change_info::topology_change_info(token_metadata_ptr target_token_metadata_, + token_metadata_ptr base_token_metadata_, + std::vector all_tokens_, + token_metadata::read_new_t read_new_) : target_token_metadata(std::move(target_token_metadata_)) , base_token_metadata(std::move(base_token_metadata_)) , all_tokens(std::move(all_tokens_)) diff --git a/locator/token_metadata.hh b/locator/token_metadata.hh index 14e5da5a43..aee774cf70 100644 --- a/locator/token_metadata.hh +++ b/locator/token_metadata.hh @@ -290,13 +290,13 @@ private: }; struct topology_change_info { - token_metadata target_token_metadata; - std::optional base_token_metadata; + token_metadata_ptr target_token_metadata; + token_metadata_ptr base_token_metadata; std::vector all_tokens; token_metadata::read_new_t read_new; - topology_change_info(token_metadata target_token_metadata_, - std::optional base_token_metadata_, + topology_change_info(token_metadata_ptr target_token_metadata_, + token_metadata_ptr base_token_metadata_, std::vector all_tokens_, token_metadata::read_new_t read_new_); future<> clear_gently();