diff --git a/locator/abstract_replication_strategy.cc b/locator/abstract_replication_strategy.cc index d19e666c83..78887f5c50 100644 --- a/locator/abstract_replication_strategy.cc +++ b/locator/abstract_replication_strategy.cc @@ -8,8 +8,17 @@ namespace locator { -abstract_replication_strategy::abstract_replication_strategy(const sstring& ks_name, token_metadata& token_metadata, snitch_ptr& snitch, const std::map& config_options) : - _ks_name(ks_name), _config_options(config_options), _token_metadata(token_metadata), _snitch(snitch) {} +abstract_replication_strategy::abstract_replication_strategy( + const sstring& ks_name, + token_metadata& token_metadata, + snitch_ptr& snitch, + const std::map& config_options, + replication_strategy_type my_type) + : _ks_name(ks_name) + , _config_options(config_options) + , _token_metadata(token_metadata) + , _snitch(snitch) + , _my_type(my_type) {} std::unique_ptr abstract_replication_strategy::create_replication_strategy(const sstring& ks_name, const sstring& strategy_name, token_metadata& tk_metadata, const std::map& config_options) { assert(locator::i_endpoint_snitch::get_local_snitch_ptr()); diff --git a/locator/abstract_replication_strategy.hh b/locator/abstract_replication_strategy.hh index a0480426a3..e01ea479c6 100644 --- a/locator/abstract_replication_strategy.hh +++ b/locator/abstract_replication_strategy.hh @@ -20,6 +20,12 @@ namespace locator { using inet_address = gms::inet_address; using token = dht::token; +enum class replication_strategy_type { + simple, + local, + network_topology, +}; + class abstract_replication_strategy { private: long _last_invalidated_ring_version = 0; @@ -41,6 +47,7 @@ protected: std::map _config_options; token_metadata& _token_metadata; snitch_ptr& _snitch; + replication_strategy_type _my_type; template void err(const char* fmt, Args&&... args) const { @@ -62,12 +69,18 @@ protected: virtual std::vector calculate_natural_endpoints(const token& search_token) = 0; public: - abstract_replication_strategy(const sstring& keyspace_name, token_metadata& token_metadata, snitch_ptr& snitch, const std::map& config_options); + abstract_replication_strategy( + const sstring& keyspace_name, + token_metadata& token_metadata, + snitch_ptr& snitch, + const std::map& config_options, + replication_strategy_type my_type); virtual ~abstract_replication_strategy() {} static std::unique_ptr create_replication_strategy(const sstring& ks_name, const sstring& strategy_name, token_metadata& token_metadata, const std::map& config_options); std::vector get_natural_endpoints(const token& search_token); virtual size_t get_replication_factor() const = 0; uint64_t get_cache_hits_count() const { return _cache_hits_count; } + replication_strategy_type get_type() const { return _my_type; } }; } diff --git a/locator/local_strategy.cc b/locator/local_strategy.cc index 935374ebf6..5dfb5bc12e 100644 --- a/locator/local_strategy.cc +++ b/locator/local_strategy.cc @@ -11,7 +11,7 @@ namespace locator { local_strategy::local_strategy(const sstring& keyspace_name, token_metadata& token_metadata, snitch_ptr& snitch, const std::map& config_options) : - abstract_replication_strategy(keyspace_name, token_metadata, snitch, config_options) {} + abstract_replication_strategy(keyspace_name, token_metadata, snitch, config_options, replication_strategy_type::local) {} std::vector local_strategy::calculate_natural_endpoints(const token& t) { std::vector endpoints; diff --git a/locator/network_topology_strategy.cc b/locator/network_topology_strategy.cc index 130efa781e..da33bd2e2e 100644 --- a/locator/network_topology_strategy.cc +++ b/locator/network_topology_strategy.cc @@ -34,7 +34,8 @@ network_topology_strategy::network_topology_strategy( abstract_replication_strategy(keyspace_name, token_metadata, snitch, - config_options) { + config_options, + replication_strategy_type::network_topology) { for (auto& config_pair : config_options) { auto& key = config_pair.first; auto& val = config_pair.second; diff --git a/locator/simple_strategy.cc b/locator/simple_strategy.cc index cb3d3b12f1..5e26841e73 100644 --- a/locator/simple_strategy.cc +++ b/locator/simple_strategy.cc @@ -11,7 +11,7 @@ namespace locator { simple_strategy::simple_strategy(const sstring& keyspace_name, token_metadata& token_metadata, snitch_ptr& snitch, const std::map& config_options) : - abstract_replication_strategy(keyspace_name, token_metadata, snitch, config_options) { + abstract_replication_strategy(keyspace_name, token_metadata, snitch, config_options, replication_strategy_type::simple) { for (auto& config_pair : config_options) { auto& key = config_pair.first; auto& val = config_pair.second;