diff --git a/locator/token_metadata.cc b/locator/token_metadata.cc index 3b0bae3426..35ed1f3399 100644 --- a/locator/token_metadata.cc +++ b/locator/token_metadata.cc @@ -1424,6 +1424,13 @@ const endpoint_dc_rack& topology::get_location(const inet_address& ep) const { /////////////////// class topology end ///////////////////////////////////////// +void shared_token_metadata::set(mutable_token_metadata_ptr tmptr) noexcept { + if (_shared->get_ring_version() >= tmptr->get_ring_version()) { + on_internal_error(tlogger, format("shared_token_metadata: must not set non-increasing version: {} -> {}", _shared->get_ring_version(), tmptr->get_ring_version())); + } + _shared = std::move(tmptr); +} + future<> shared_token_metadata::mutate_token_metadata(seastar::noncopyable_function (token_metadata&)> func) { auto lk = co_await get_lock(); auto tm = co_await _shared->clone_async(); diff --git a/locator/token_metadata.hh b/locator/token_metadata.hh index 483c4355ce..0b68b34898 100644 --- a/locator/token_metadata.hh +++ b/locator/token_metadata.hh @@ -379,9 +379,7 @@ public: return _shared; } - void set(mutable_token_metadata_ptr tmptr) noexcept { - _shared = std::move(tmptr); - } + void set(mutable_token_metadata_ptr tmptr) noexcept; // Token metadata changes are serialized // using the schema_tables merge_lock.