locator: add a replication strategy type field to abstract_replication_strategy
This is meant to exclude the exceptions throwing when we want to branch on a specific instance type (Java's instanceof call). Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>
This commit is contained in:
@@ -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<sstring, sstring>& 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<sstring, sstring>& 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> abstract_replication_strategy::create_replication_strategy(const sstring& ks_name, const sstring& strategy_name, token_metadata& tk_metadata, const std::map<sstring, sstring>& config_options) {
|
||||
assert(locator::i_endpoint_snitch::get_local_snitch_ptr());
|
||||
|
||||
@@ -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<sstring, sstring> _config_options;
|
||||
token_metadata& _token_metadata;
|
||||
snitch_ptr& _snitch;
|
||||
replication_strategy_type _my_type;
|
||||
|
||||
template <typename... Args>
|
||||
void err(const char* fmt, Args&&... args) const {
|
||||
@@ -62,12 +69,18 @@ protected:
|
||||
virtual std::vector<inet_address> 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<sstring, sstring>& config_options);
|
||||
abstract_replication_strategy(
|
||||
const sstring& keyspace_name,
|
||||
token_metadata& token_metadata,
|
||||
snitch_ptr& snitch,
|
||||
const std::map<sstring, sstring>& config_options,
|
||||
replication_strategy_type my_type);
|
||||
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);
|
||||
std::vector<inet_address> 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; }
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
namespace locator {
|
||||
|
||||
local_strategy::local_strategy(const sstring& keyspace_name, token_metadata& token_metadata, snitch_ptr& snitch, const std::map<sstring, sstring>& 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<inet_address> local_strategy::calculate_natural_endpoints(const token& t) {
|
||||
std::vector<inet_address> endpoints;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
namespace locator {
|
||||
|
||||
simple_strategy::simple_strategy(const sstring& keyspace_name, token_metadata& token_metadata, snitch_ptr& snitch, const std::map<sstring, sstring>& 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;
|
||||
|
||||
Reference in New Issue
Block a user