diff --git a/locator/abstract_replication_strategy.hh b/locator/abstract_replication_strategy.hh index cf520016fb..634bc77165 100644 --- a/locator/abstract_replication_strategy.hh +++ b/locator/abstract_replication_strategy.hh @@ -74,6 +74,7 @@ public: 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); virtual std::vector get_natural_endpoints(const token& search_token); + virtual std::experimental::optional> recognized_options() const = 0; 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 8280917029..d4316225e5 100644 --- a/locator/local_strategy.cc +++ b/locator/local_strategy.cc @@ -21,6 +21,11 @@ std::vector local_strategy::calculate_natural_endpoints(const toke return std::vector({utils::fb_utilities::get_broadcast_address()}); } +std::experimental::optional> local_strategy::recognized_options() const { + // LocalStrategy doesn't expect any options. + return {}; +} + size_t local_strategy::get_replication_factor() const { return 1; } diff --git a/locator/local_strategy.hh b/locator/local_strategy.hh index 2907cb6026..4ad3c07f85 100644 --- a/locator/local_strategy.hh +++ b/locator/local_strategy.hh @@ -6,6 +6,9 @@ #include "abstract_replication_strategy.hh" +#include +#include + // forward declaration since database.hh includes this file class keyspace; @@ -27,6 +30,8 @@ public: * LocalStrategy may be used before tokens are set up. */ std::vector get_natural_endpoints(const token& search_token) override; + + virtual std::experimental::optional> recognized_options() const override; }; } diff --git a/locator/network_topology_strategy.cc b/locator/network_topology_strategy.cc index 1674111291..89ac7aaf38 100644 --- a/locator/network_topology_strategy.cc +++ b/locator/network_topology_strategy.cc @@ -181,6 +181,11 @@ network_topology_strategy::calculate_natural_endpoints( return std::move(replicas.get_vector()); } +std::experimental::optional> network_topology_strategy::recognized_options() const { + // We explicitely allow all options + return std::experimental::nullopt; +} + inline bool network_topology_strategy::has_sufficient_replicas( const sstring& dc, std::unordered_map +#include + namespace locator { class network_topology_strategy : public abstract_replication_strategy { public: @@ -54,6 +57,8 @@ protected: virtual std::vector calculate_natural_endpoints( const token& search_token) const override; + virtual std::experimental::optional> recognized_options() const override; + private: bool has_sufficient_replicas( const sstring& dc, @@ -80,15 +85,6 @@ private: } } - // ???? - #if 0 - public Collection recognized_options() - { - // We explicitely allow all options - return null; - } - #endif - private: // map: data centers -> replication factor std::unordered_map _dc_rep_factor; diff --git a/locator/simple_strategy.cc b/locator/simple_strategy.cc index 1fb029c4a5..30ad8b9eaf 100644 --- a/locator/simple_strategy.cc +++ b/locator/simple_strategy.cc @@ -52,6 +52,10 @@ size_t simple_strategy::get_replication_factor() const { return _replication_factor; } +std::experimental::optional>simple_strategy::recognized_options() const { + return {{ "replication_factor" }}; +} + using registry = class_registrator&>; static registry registrator("org.apache.cassandra.locator.SimpleStrategy"); static registry registrator_short_name("SimpleStrategy"); diff --git a/locator/simple_strategy.hh b/locator/simple_strategy.hh index 5514ef9020..43534a112c 100644 --- a/locator/simple_strategy.hh +++ b/locator/simple_strategy.hh @@ -6,6 +6,9 @@ #include "abstract_replication_strategy.hh" +#include +#include + namespace locator { class simple_strategy : public abstract_replication_strategy { @@ -15,7 +18,7 @@ public: simple_strategy(const sstring& keyspace_name, token_metadata& token_metadata, snitch_ptr& snitch, const std::map& config_options); virtual ~simple_strategy() {}; virtual size_t get_replication_factor() const override; - + virtual std::experimental::optional> recognized_options() const override; private: size_t _replication_factor = 1; };