@@ -33,6 +33,8 @@ namespace policy {
3333// TODO: or 160?
3434DEFINE_int32 (chash_num_replicas, 100 ,
3535 " default number of replicas per server in chash" );
36+ DEFINE_bool (consistent_hashing_enable_server_tag, false ,
37+ " if consistent hashing enable server with tag" );
3638
3739// Defined in hasher.cpp.
3840const char * GetHashName (HashFunc hasher);
@@ -71,8 +73,14 @@ bool DefaultReplicaPolicy::Build(ServerId server,
7173 replicas->clear ();
7274 for (size_t i = 0 ; i < num_replicas; ++i) {
7375 char host[256 ];
74- int len = snprintf (host, sizeof (host), " %s-%lu" ,
76+ int len = 0 ;
77+ if (!FLAGS_consistent_hashing_enable_server_tag) {
78+ len = snprintf (host, sizeof (host), " %s-%lu" ,
7579 endpoint2str (ptr->remote_side ()).c_str (), i);
80+ } else {
81+ len = snprintf (host, sizeof (host), " %s-%lu-%s" ,
82+ endpoint2str (ptr->remote_side ()).c_str (), i, server.tag .c_str ());
83+ }
7684 ConsistentHashingLoadBalancer::Node node;
7785 node.hash = _hash_func (host, len);
7886 node.server_sock = server;
@@ -104,8 +112,14 @@ bool KetamaReplicaPolicy::Build(ServerId server,
104112 << " Ketam hash replicas number(" << num_replicas << " ) should be n*4" ;
105113 for (size_t i = 0 ; i < num_replicas / points_per_hash; ++i) {
106114 char host[256 ];
107- int len = snprintf (host, sizeof (host), " %s-%lu" ,
115+ int len = 0 ;
116+ if (!FLAGS_consistent_hashing_enable_server_tag) {
117+ len = snprintf (host, sizeof (host), " %s-%lu" ,
108118 endpoint2str (ptr->remote_side ()).c_str (), i);
119+ } else {
120+ len = snprintf (host, sizeof (host), " %s-%lu-%s" ,
121+ endpoint2str (ptr->remote_side ()).c_str (), i, server.tag .c_str ());
122+ }
109123 unsigned char digest[MD5_DIGEST_LENGTH];
110124 MD5HashSignature (host, len, digest);
111125 for (size_t j = 0 ; j < points_per_hash; ++j) {
0 commit comments