diff --git a/locator/token_metadata.cc b/locator/token_metadata.cc index af8739e468..d0b37ed29b 100644 --- a/locator/token_metadata.cc +++ b/locator/token_metadata.cc @@ -1278,6 +1278,19 @@ generic_token_metadata::get_all_endpoints() const { return _impl->get_all_endpoints(); } +template +template +requires std::is_same_v +std::unordered_set generic_token_metadata::get_all_ips() const { + const auto& host_ids = _impl->get_all_endpoints(); + std::unordered_set result; + result.reserve(host_ids.size()); + for (const auto& id: host_ids) { + result.insert(_impl->get_endpoint_for_host_id(id)); + } + return result; +} + template size_t generic_token_metadata::count_normal_token_owners() const { @@ -1455,5 +1468,6 @@ template const token_metadata2* generic_token_metadata::get_n template lw_shared_ptr generic_token_metadata::get_new_strong<>() const; template generic_token_metadata::generic_token_metadata(std::unique_ptr>, token_metadata2); template generic_token_metadata::generic_token_metadata(token_metadata2_ptr); +template std::unordered_set generic_token_metadata::get_all_ips<>() const; } // namespace locator diff --git a/locator/token_metadata.hh b/locator/token_metadata.hh index 64e13e6866..da90112b35 100644 --- a/locator/token_metadata.hh +++ b/locator/token_metadata.hh @@ -309,6 +309,10 @@ public: const std::unordered_set& get_all_endpoints() const; + template + requires std::is_same_v + std::unordered_set get_all_ips() const; + /* Returns the number of different endpoints that own tokens in the ring. * Bootstrapping tokens are not taken into account. */ size_t count_normal_token_owners() const;