From ea76388ba6c96a011c49dd3e6d464b574a1e7bb5 Mon Sep 17 00:00:00 2001 From: mike tsai Date: Mon, 19 Oct 2009 16:37:48 -0700 Subject: [PATCH] Ketama hashing is now compatable with spymemcached. The server key was not in the right format. Now changed to hostname/ip:port-index. --- libmemcached/memcached_hosts.c | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/libmemcached/memcached_hosts.c b/libmemcached/memcached_hosts.c index d664ab2b..f0af383a 100644 --- a/libmemcached/memcached_hosts.c +++ b/libmemcached/memcached_hosts.c @@ -198,28 +198,24 @@ memcached_return update_continuum(memcached_st *ptr) pointer_per_server); #endif } - for (pointer_index= 1; - pointer_index <= pointer_per_server / pointer_per_hash; - ++pointer_index) + for (pointer_index= 0; + pointer_index < pointer_per_server / pointer_per_hash; + pointer_index++) { char sort_host[MEMCACHED_MAX_HOST_SORT_LENGTH]= ""; size_t sort_host_length; - if (list[host_index].port == MEMCACHED_DEFAULT_PORT) - { - sort_host_length= (size_t) snprintf(sort_host, MEMCACHED_MAX_HOST_SORT_LENGTH, - "%s-%d", - list[host_index].hostname, - pointer_index - 1); + // Spymemcached ketema key format is: hostname/ip:port-index + // If hostname is not available then: /ip:port-index + sort_host_length= (size_t) snprintf(sort_host, MEMCACHED_MAX_HOST_SORT_LENGTH, + "/%s:%d-%d", + list[host_index].hostname, + list[host_index].port, + pointer_index); +#ifdef DEBUG + printf("update_continuum: key is %s\n", sort_host); +#endif - } - else - { - sort_host_length= (size_t) snprintf(sort_host, MEMCACHED_MAX_HOST_SORT_LENGTH, - "%s:%d-%d", - list[host_index].hostname, - list[host_index].port, pointer_index - 1); - } WATCHPOINT_ASSERT(sort_host_length); if (is_ketama_weighted) -- 2.30.2