locator/abstract_replication_strategy: Add recognized_options() helper
Add a helper function for obtaining a vector of supported replication strategy options. This is needed for validation. Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
This commit is contained in:
@@ -74,6 +74,7 @@ public:
|
||||
virtual ~abstract_replication_strategy() {}
|
||||
static std::unique_ptr<abstract_replication_strategy> create_replication_strategy(const sstring& ks_name, const sstring& strategy_name, token_metadata& token_metadata, const std::map<sstring, sstring>& config_options);
|
||||
virtual std::vector<inet_address> get_natural_endpoints(const token& search_token);
|
||||
virtual std::experimental::optional<std::set<sstring>> 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; }
|
||||
|
||||
@@ -21,6 +21,11 @@ std::vector<inet_address> local_strategy::calculate_natural_endpoints(const toke
|
||||
return std::vector<inet_address>({utils::fb_utilities::get_broadcast_address()});
|
||||
}
|
||||
|
||||
std::experimental::optional<std::set<sstring>> local_strategy::recognized_options() const {
|
||||
// LocalStrategy doesn't expect any options.
|
||||
return {};
|
||||
}
|
||||
|
||||
size_t local_strategy::get_replication_factor() const {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,9 @@
|
||||
|
||||
#include "abstract_replication_strategy.hh"
|
||||
|
||||
#include <experimental/optional>
|
||||
#include <set>
|
||||
|
||||
// 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<inet_address> get_natural_endpoints(const token& search_token) override;
|
||||
|
||||
virtual std::experimental::optional<std::set<sstring>> recognized_options() const override;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -181,6 +181,11 @@ network_topology_strategy::calculate_natural_endpoints(
|
||||
return std::move(replicas.get_vector());
|
||||
}
|
||||
|
||||
std::experimental::optional<std::set<sstring>> 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<sstring,
|
||||
|
||||
@@ -24,6 +24,9 @@
|
||||
#include "locator/abstract_replication_strategy.hh"
|
||||
#include "exceptions/exceptions.hh"
|
||||
|
||||
#include <experimental/optional>
|
||||
#include <set>
|
||||
|
||||
namespace locator {
|
||||
class network_topology_strategy : public abstract_replication_strategy {
|
||||
public:
|
||||
@@ -54,6 +57,8 @@ protected:
|
||||
virtual std::vector<inet_address> calculate_natural_endpoints(
|
||||
const token& search_token) const override;
|
||||
|
||||
virtual std::experimental::optional<std::set<sstring>> recognized_options() const override;
|
||||
|
||||
private:
|
||||
bool has_sufficient_replicas(
|
||||
const sstring& dc,
|
||||
@@ -80,15 +85,6 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
// ????
|
||||
#if 0
|
||||
public Collection<String> recognized_options()
|
||||
{
|
||||
// We explicitely allow all options
|
||||
return null;
|
||||
}
|
||||
#endif
|
||||
|
||||
private:
|
||||
// map: data centers -> replication factor
|
||||
std::unordered_map<sstring, size_t> _dc_rep_factor;
|
||||
|
||||
@@ -52,6 +52,10 @@ size_t simple_strategy::get_replication_factor() const {
|
||||
return _replication_factor;
|
||||
}
|
||||
|
||||
std::experimental::optional<std::set<sstring>>simple_strategy::recognized_options() const {
|
||||
return {{ "replication_factor" }};
|
||||
}
|
||||
|
||||
using registry = class_registrator<abstract_replication_strategy, simple_strategy, const sstring&, token_metadata&, snitch_ptr&, const std::map<sstring, sstring>&>;
|
||||
static registry registrator("org.apache.cassandra.locator.SimpleStrategy");
|
||||
static registry registrator_short_name("SimpleStrategy");
|
||||
|
||||
@@ -6,6 +6,9 @@
|
||||
|
||||
#include "abstract_replication_strategy.hh"
|
||||
|
||||
#include <experimental/optional>
|
||||
#include <set>
|
||||
|
||||
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<sstring, sstring>& config_options);
|
||||
virtual ~simple_strategy() {};
|
||||
virtual size_t get_replication_factor() const override;
|
||||
|
||||
virtual std::experimental::optional<std::set<sstring>> recognized_options() const override;
|
||||
private:
|
||||
size_t _replication_factor = 1;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user