diff --git a/service/storage_service.cc b/service/storage_service.cc index 68b5fde8cd..5178caaa48 100644 --- a/service/storage_service.cc +++ b/service/storage_service.cc @@ -3270,8 +3270,6 @@ future<> storage_service::keyspace_changed(const sstring& ks_name) { future<> storage_service::update_topology(inet_address endpoint) { return container().invoke_on(0, [endpoint] (auto& ss) { return ss.mutate_token_metadata([&ss, endpoint] (mutable_token_metadata_ptr tmptr) mutable { - // initiate the token metadata endpoints cache reset - tmptr->invalidate_cached_rings(); // re-read local rack and DC info tmptr->update_topology(endpoint); return make_ready_future<>(); diff --git a/service/storage_service.hh b/service/storage_service.hh index 88700c5697..a89f31a79e 100644 --- a/service/storage_service.hh +++ b/service/storage_service.hh @@ -241,6 +241,10 @@ private: future get_mutable_token_metadata_ptr() noexcept { return _shared_token_metadata.get()->clone_async().then([] (token_metadata tm) { + // bump the token_metadata ring_version + // to invalidate cached token/replication mappings + // when the modified token_metadata is committed. + tm.invalidate_cached_rings(); return make_ready_future(make_token_metadata_ptr(std::move(tm))); }); }