X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fhosts.c;h=27a86a7b4197ded4afafc1b0a44f9b355a13ebd5;hb=8fd8f655540e3d6aa0b0a3eb0f4f7df1be2e6542;hp=8cc5f3e612bec72a9641e132bf0d9aa50ead2308;hpb=7c7750f02368b570353ea109f23a0ea26d226e02;p=m6w6%2Flibmemcached diff --git a/libmemcached/hosts.c b/libmemcached/hosts.c index 8cc5f3e6..27a86a7b 100644 --- a/libmemcached/hosts.c +++ b/libmemcached/hosts.c @@ -36,6 +36,9 @@ static void sort_hosts(memcached_st *ptr) memcached_return_t run_distribution(memcached_st *ptr) { + if (ptr->flags.use_sort_hosts) + sort_hosts(ptr); + switch (ptr->distribution) { case MEMCACHED_DISTRIBUTION_CONSISTENT: @@ -43,11 +46,11 @@ memcached_return_t run_distribution(memcached_st *ptr) case MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA_SPY: return update_continuum(ptr); case MEMCACHED_DISTRIBUTION_MODULA: - if (ptr->flags.use_sort_hosts) - sort_hosts(ptr); break; case MEMCACHED_DISTRIBUTION_RANDOM: + srandom((uint32_t) time(NULL)); break; + case MEMCACHED_DISTRIBUTION_CONSISTENT_MAX: default: WATCHPOINT_ASSERT(0); /* We have added a distribution without extending the logic */ } @@ -213,9 +216,9 @@ memcached_return_t update_continuum(memcached_st *ptr) // 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", + "/%s:%u-%u", list[host_index].hostname, - list[host_index].port, + (uint32_t)list[host_index].port, pointer_index); #ifdef DEBUG printf("update_continuum: key is %s\n", sort_host); @@ -235,7 +238,7 @@ memcached_return_t update_continuum(memcached_st *ptr) } else { - value= memcached_generate_hash_value(sort_host, sort_host_length, ptr->hash_continuum); + value= memcached_generate_hash_value(sort_host, sort_host_length, ptr->distribution_hash); ptr->continuum[continuum_index].index= host_index; ptr->continuum[continuum_index++].value= value; } @@ -279,7 +282,7 @@ memcached_return_t update_continuum(memcached_st *ptr) } else { - value= memcached_generate_hash_value(sort_host, sort_host_length, ptr->hash_continuum); + value= memcached_generate_hash_value(sort_host, sort_host_length, ptr->distribution_hash); ptr->continuum[continuum_index].index= host_index; ptr->continuum[continuum_index++].value= value; }