#include "common.h"
/* Defines */
-static uint64_t FNV_64_INIT= 0xcbf29ce484222325L;
-static uint64_t FNV_64_PRIME= 0x100000001b3L;
+static uint64_t FNV_64_INIT= 0xcbf29ce484222325LL;
+static uint64_t FNV_64_PRIME= 0x100000001b3LL;
-static uint32_t FNV_32_INIT= 2166136261L;
+static uint32_t FNV_32_INIT= 2166136261UL;
static uint32_t FNV_32_PRIME= 16777619;
/* Prototypes */
uint64_t hash= 1; /* Just here to remove compile warning */
unsigned int x;
+ WATCHPOINT_ASSERT(ptr->number_of_hosts);
+
switch (ptr->hash)
{
case MEMCACHED_HASH_DEFAULT:
break;
case MEMCACHED_HASH_CRC:
hash= ((hash_crc32(key, key_length) >> 16) & 0x7fff);
+ if (hash == 0)
+ hash= 1;
break;
/* FNV hash'es lifted from Dustin Sallings work */
case MEMCACHED_HASH_FNV1_64:
hash= internal_generate_ketama_md5(key, key_length);
break;
}
+ case MEMCACHED_HASH_HSIEH:
+ {
+ hash= hsieh_hash(key, key_length);
+ break;
+ }
}
WATCHPOINT_ASSERT(hash);
- if (ptr->flags & MEM_USE_KETAMA)
+
+ if (ptr->distribution == MEMCACHED_DISTRIBUTION_MODULA)
{
- WATCHPOINT_ASSERT(0);
- return 0;
+ return hash % ptr->number_of_hosts;
}
else
- return hash % ptr->number_of_hosts;
+ {
+ unsigned int server_key;
+
+ server_key= hash % MEMCACHED_WHEEL_SIZE;
+
+ return ptr->wheel[server_key];
+ }
}
static uint64_t internal_generate_hash(char *key, size_t key_length)