diff --git a/db/schema_features.hh b/db/schema_features.hh index eba2b1990e..9b17d1ba3b 100644 --- a/db/schema_features.hh +++ b/db/schema_features.hh @@ -33,6 +33,11 @@ enum class schema_feature { // Per-table tablet options TABLET_OPTIONS, + + // When enabled, `system_schema.keyspaces` will keep three replication values: + // the initial, the current, and the target replication factor, + // which reflect the phases of the multi RF change. + KEYSPACE_MULTI_RF_CHANGE, }; using schema_features = enum_set>; } diff --git a/gms/feature_service.cc b/gms/feature_service.cc index e65ddb493c..73dc6ee144 100644 --- a/gms/feature_service.cc +++ b/gms/feature_service.cc @@ -7,6 +7,7 @@ #include #include #include +#include "db/schema_features.hh" #include "utils/log.hh" #include "gms/feature.hh" #include "gms/feature_service.hh" @@ -179,6 +180,7 @@ db::schema_features feature_service::cluster_schema_features() const { f.set(); f.set_if(bool(in_memory_tables)); f.set_if(bool(tablet_options)); + f.set_if(bool(keyspace_multi_rf_change)); return f; } diff --git a/gms/feature_service.hh b/gms/feature_service.hh index 9ef7e9e01d..92c7709d6a 100644 --- a/gms/feature_service.hh +++ b/gms/feature_service.hh @@ -182,6 +182,7 @@ public: gms::feature writetime_ttl_individual_element { *this, "WRITETIME_TTL_INDIVIDUAL_ELEMENT"sv }; gms::feature arbitrary_tablet_boundaries { *this, "ARBITRARY_TABLET_BOUNDARIES"sv }; gms::feature large_data_virtual_tables { *this, "LARGE_DATA_VIRTUAL_TABLES"sv }; + gms::feature keyspace_multi_rf_change { *this, "KEYSPACE_MULTI_RF_CHANGE"sv }; public: const std::unordered_map>& registered_features() const;