in_port_t port,
uint32_t weight,
memcached_connection_t type);
-memcached_return_t update_continuum(memcached_st *ptr);
+static memcached_return_t update_continuum(memcached_st *ptr);
static int compare_servers(const void *p1, const void *p2)
{
memcached_return_t run_distribution(memcached_st *ptr)
{
+ if (ptr->flags.use_sort_hosts)
+ sort_hosts(ptr);
+
switch (ptr->distribution)
{
case MEMCACHED_DISTRIBUTION_CONSISTENT:
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 */
}
return -1;
}
-memcached_return_t update_continuum(memcached_st *ptr)
+static memcached_return_t update_continuum(memcached_st *ptr)
{
uint32_t host_index;
uint32_t continuum_index= 0;
// 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);
}
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;
}
if (list[host_index].port == MEMCACHED_DEFAULT_PORT)
{
sort_host_length= (size_t) snprintf(sort_host, MEMCACHED_MAX_HOST_SORT_LENGTH,
- "%s-%d",
+ "%s-%u",
list[host_index].hostname,
pointer_index - 1);
}
else
{
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, pointer_index - 1);
+ (uint32_t)list[host_index].port,
+ pointer_index - 1);
}
WATCHPOINT_ASSERT(sort_host_length);
}
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;
}
new_host_list= ptr->call_realloc(ptr, ptr->hosts,
sizeof(memcached_server_st) * (count + ptr->number_of_hosts));
- if (!new_host_list)
+ if (! new_host_list)
return MEMCACHED_MEMORY_ALLOCATION_FAILURE;
ptr->hosts= new_host_list;