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:
Pekka Enberg
2015-08-31 11:06:28 +03:00
parent f6ae567ab1
commit cff9eb520b
7 changed files with 29 additions and 10 deletions

View File

@@ -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; }

View File

@@ -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;
}

View File

@@ -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;
};
}

View File

@@ -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,

View File

@@ -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;

View File

@@ -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");

View File

@@ -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;
};