Commit 95d61d72 authored by cdjgit's avatar cdjgit

move GetReplicaPolicy out of class ReplicaPolicy

parent 37d2a3bd
...@@ -35,25 +35,14 @@ class ReplicaPolicy { ...@@ -35,25 +35,14 @@ class ReplicaPolicy {
public: public:
ReplicaPolicy() : _hash_func(nullptr) {} ReplicaPolicy() : _hash_func(nullptr) {}
ReplicaPolicy(HashFunc hash) : _hash_func(hash) {} ReplicaPolicy(HashFunc hash) : _hash_func(hash) {}
virtual ~ReplicaPolicy(); virtual ~ReplicaPolicy();
virtual bool Build(ServerId server, virtual bool Build(ServerId server,
size_t num_replicas, size_t num_replicas,
std::vector<ConsistentHashingLoadBalancer::Node>* replicas) const = 0; std::vector<ConsistentHashingLoadBalancer::Node>* replicas) const = 0;
static const ReplicaPolicy* GetReplicaPolicy(const std::string& name) {
auto iter = _policy_map.find(name);
if (iter != _policy_map.end()) {
return iter->second;
}
return nullptr;
}
protected: protected:
HashFunc _hash_func = nullptr; HashFunc _hash_func;
private:
static const std::map<std::string, const ReplicaPolicy*> _policy_map;
}; };
class DefaultReplicaPolicy : public ReplicaPolicy { class DefaultReplicaPolicy : public ReplicaPolicy {
...@@ -124,15 +113,27 @@ bool KetamaReplicaPolicy::Build(ServerId server, ...@@ -124,15 +113,27 @@ bool KetamaReplicaPolicy::Build(ServerId server,
return true; return true;
} }
const std::map<std::string, const ReplicaPolicy*> ReplicaPolicy::_policy_map = { namespace {
const std::map<std::string, const ReplicaPolicy*> g_replica_policy_map = {
{"murmurhash3", new DefaultReplicaPolicy(MurmurHash32)}, {"murmurhash3", new DefaultReplicaPolicy(MurmurHash32)},
{"md5", new DefaultReplicaPolicy(MD5Hash32)}, {"md5", new DefaultReplicaPolicy(MD5Hash32)},
{"ketama", new KetamaReplicaPolicy} {"ketama", new KetamaReplicaPolicy}
}; };
const ReplicaPolicy* GetReplicaPolicy(const std::string& name) {
auto iter = g_replica_policy_map.find(name);
if (iter != g_replica_policy_map.end()) {
return iter->second;
}
return nullptr;
}
} // namespace
ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer(const char* name) ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer(const char* name)
: _num_replicas(FLAGS_chash_num_replicas), _name(name) { : _num_replicas(FLAGS_chash_num_replicas), _name(name) {
_replicas_policy = ReplicaPolicy::GetReplicaPolicy(name); _replicas_policy = GetReplicaPolicy(name);
CHECK(_replicas_policy) CHECK(_replicas_policy)
<< "Fail to find replica policy for consistency lb: '" << name << '\''; << "Fail to find replica policy for consistency lb: '" << name << '\'';
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment