diff --git a/gms/feature_service.hh b/gms/feature_service.hh index 2eea79d83c..fbd2aa20b0 100644 --- a/gms/feature_service.hh +++ b/gms/feature_service.hh @@ -20,11 +20,15 @@ #include "db/schema_features.hh" #include "gms/feature.hh" -namespace db { class config; } +namespace db { +class config; +class system_keyspace; +} namespace service { class storage_service; } namespace gms { +class gossiper; class feature_service; struct feature_config { @@ -122,6 +126,7 @@ public: // The key itself is maintained as an `unordered_set` and serialized via `to_string` // function to preserve readability. future<> persist_enabled_feature_info(std::set extra) const; + future<> enable_features_on_join(gossiper&, db::system_keyspace&); }; } // namespace gms diff --git a/gms/gossiper.cc b/gms/gossiper.cc index 14a434728f..e98fe8d74d 100644 --- a/gms/gossiper.cc +++ b/gms/gossiper.cc @@ -2551,9 +2551,9 @@ void gossiper::append_endpoint_state(std::stringstream& ss, const endpoint_state } } -future<> gossiper::enable_features() { - auto enabler = make_shared(*this, _feature_service, _sys_ks.local()); - register_(enabler); +future<> feature_service::enable_features_on_join(gossiper& g, db::system_keyspace& sys_ks) { + auto enabler = make_shared(g, *this, sys_ks); + g.register_(enabler); return enabler->enable_features(); } diff --git a/gms/gossiper.hh b/gms/gossiper.hh index 4149459eea..a0102b9493 100644 --- a/gms/gossiper.hh +++ b/gms/gossiper.hh @@ -605,7 +605,6 @@ public: void check_knows_remote_features(std::set& local_features, const std::unordered_map& loaded_peer_features) const; // Get features supported by all the nodes this node knows about std::set get_supported_features(const std::unordered_map& loaded_peer_features, ignore_features_of_local_node ignore_local_node) const; - future<> enable_features(); private: seastar::metrics::metric_groups _metrics; public: diff --git a/service/storage_service.cc b/service/storage_service.cc index c3e2cefe2f..fea7238c89 100644 --- a/service/storage_service.cc +++ b/service/storage_service.cc @@ -1435,7 +1435,7 @@ future<> storage_service::join_token_ring(cdc::generation_service& cdc_gen_servi }); _listeners.emplace_back(make_lw_shared(std::move(schema_change_announce))); co_await _gossiper.wait_for_gossip_to_settle(); - co_await _gossiper.enable_features(); + co_await _feature_service.enable_features_on_join(_gossiper, _sys_ks.local()); set_mode(mode::JOINING);