Fix for issue where stats may not be initialized.
[m6w6/libmemcached] / libmemcached / hash.c
index 395020a39afb2de33616be39633bf4be03cf2c0e..6ead8d46e38793fb5bfea0606346ee03c95a0cfa 100644 (file)
@@ -92,15 +92,17 @@ uint32_t memcached_generate_hash_value(const char *key, size_t key_length, memca
     }
     case MEMCACHED_HASH_JENKINS:
     {
-      hash=jenkins_hash(key, key_length, 13);
+      hash= jenkins_hash(key, key_length, 13);
       break;
     }
+    case MEMCACHED_HASH_MAX:
     default:
     {
-      WATCHPOINT_ASSERT(hash_algorithm);
+      WATCHPOINT_ASSERT(0);
       break;
     }
   }
+
   return hash;
 }
 
@@ -109,9 +111,9 @@ uint32_t generate_hash(memcached_st *ptr, const char *key, size_t key_length)
   uint32_t hash= 1; /* Just here to remove compile warning */
 
 
-  WATCHPOINT_ASSERT(ptr->number_of_hosts);
+  WATCHPOINT_ASSERT(memcached_server_count(ptr));
 
-  if (ptr->number_of_hosts == 1)
+  if (memcached_server_count(ptr) == 1)
     return 0;
 
   hash= memcached_generate_hash_value(key, key_length, ptr->hash);
@@ -148,14 +150,14 @@ static uint32_t dispatch_host(memcached_st *ptr, uint32_t hash)
       return right->index;
     }
   case MEMCACHED_DISTRIBUTION_MODULA:
-    return hash % ptr->number_of_hosts;
+    return hash % memcached_server_count(ptr);
   case MEMCACHED_DISTRIBUTION_RANDOM:
-    return (uint32_t) random() % ptr->number_of_hosts;
+    return (uint32_t) random() % memcached_server_count(ptr);
+  case MEMCACHED_DISTRIBUTION_CONSISTENT_MAX:
   default:
     WATCHPOINT_ASSERT(0); /* We have added a distribution without extending the logic */
-    return hash % ptr->number_of_hosts;
+    return hash % memcached_server_count(ptr);
   }
-
   /* NOTREACHED */
 }
 
@@ -167,9 +169,9 @@ uint32_t memcached_generate_hash(memcached_st *ptr, const char *key, size_t key_
 {
   uint32_t hash= 1; /* Just here to remove compile warning */
 
-  WATCHPOINT_ASSERT(ptr->number_of_hosts);
+  WATCHPOINT_ASSERT(memcached_server_count(ptr));
 
-  if (ptr->number_of_hosts == 1)
+  if (memcached_server_count(ptr) == 1)
     return 0;
 
   if (ptr->flags.hash_with_prefix_key)
@@ -191,12 +193,15 @@ uint32_t memcached_generate_hash(memcached_st *ptr, const char *key, size_t key_
 
   WATCHPOINT_ASSERT(hash);
 
-  if (memcached_behavior_get(ptr, MEMCACHED_BEHAVIOR_AUTO_EJECT_HOSTS) && ptr->next_distribution_rebuild) {
+  if (memcached_behavior_get(ptr, MEMCACHED_BEHAVIOR_AUTO_EJECT_HOSTS) && ptr->next_distribution_rebuild)
+  {
     struct timeval now;
 
     if (gettimeofday(&now, NULL) == 0 &&
         now.tv_sec > ptr->next_distribution_rebuild)
+    {
       run_distribution(ptr);
+    }
   }
 
   return dispatch_host(ptr, hash);