Update with current fixes.
[m6w6/libmemcached] / libmemcached / behavior.cc
index 84e3aa58cba2138c31988860da7aa4f8fc025d86..c91acc5d8099099699284034e80ad525f2855202 100644 (file)
@@ -162,13 +162,17 @@ memcached_return_t memcached_behavior_set(memcached_st *ptr,
 
   case MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED:
     {
+      if (bool(data) == false)
+      {
+        return memcached_behavior_set(ptr, MEMCACHED_BEHAVIOR_KETAMA, true);
+      }
+
       (void)memcached_behavior_set_key_hash(ptr, MEMCACHED_HASH_MD5);
       (void)memcached_behavior_set_distribution_hash(ptr, MEMCACHED_HASH_MD5);
-      ptr->ketama.weighted= bool(data);
       /**
         @note We try to keep the same distribution going. This should be deprecated and rewritten.
       */
-      return memcached_behavior_set_distribution(ptr, MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA);
+      return memcached_behavior_set_distribution(ptr, MEMCACHED_DISTRIBUTION_CONSISTENT_WEIGHTED);
     }
 
   case MEMCACHED_BEHAVIOR_HASH:
@@ -213,6 +217,10 @@ memcached_return_t memcached_behavior_set(memcached_st *ptr,
     ptr->retry_timeout= int32_t(data);
     break;
 
+  case MEMCACHED_BEHAVIOR_DEAD_TIMEOUT:
+    ptr->dead_timeout= int32_t(data);
+    break;
+
   case MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE:
     ptr->send_size= (int32_t)data;
     send_quit(ptr);
@@ -283,7 +291,7 @@ bool _is_auto_eject_host(const memcached_st *ptr)
 uint64_t memcached_behavior_get(memcached_st *ptr,
                                 const memcached_behavior_t flag)
 {
-  if (not ptr)
+  if (ptr == NULL)
   {
     return MEMCACHED_INVALID_ARGUMENTS;
   }
@@ -357,6 +365,9 @@ uint64_t memcached_behavior_get(memcached_st *ptr,
   case MEMCACHED_BEHAVIOR_RETRY_TIMEOUT:
     return (uint64_t)ptr->retry_timeout;
 
+  case MEMCACHED_BEHAVIOR_DEAD_TIMEOUT:
+    return uint64_t(ptr->dead_timeout);
+
   case MEMCACHED_BEHAVIOR_SND_TIMEOUT:
     return (uint64_t)ptr->snd_timeout;
 
@@ -480,23 +491,36 @@ uint64_t memcached_behavior_get(memcached_st *ptr,
 
 memcached_return_t memcached_behavior_set_distribution(memcached_st *ptr, memcached_server_distribution_t type)
 {
-  if (type < MEMCACHED_DISTRIBUTION_CONSISTENT_MAX)
+  switch (type)
   {
-    if (MEMCACHED_DISTRIBUTION_CONSISTENT_WEIGHTED)
-    {
-      ptr->ketama.weighted= true;
-    }
-    else
-    {
-      ptr->ketama.weighted= false;
-    }
+  case MEMCACHED_DISTRIBUTION_MODULA:
+    break;
 
-    ptr->distribution= type;
-    return run_distribution(ptr);
+  case MEMCACHED_DISTRIBUTION_CONSISTENT:
+  case MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA:
+    ptr->ketama.weighted= false;
+    break;
+
+  case MEMCACHED_DISTRIBUTION_RANDOM:
+    break;
+
+  case MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA_SPY:
+    break;
+
+  case MEMCACHED_DISTRIBUTION_CONSISTENT_WEIGHTED:
+    ptr->ketama.weighted= true;
+    break;
+
+  case MEMCACHED_DISTRIBUTION_VIRTUAL_BUCKET:
+    break;
+
+  default:
+  case MEMCACHED_DISTRIBUTION_CONSISTENT_MAX:
+    return memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT,
+                               memcached_literal_param("Invalid memcached_server_distribution_t"));
   }
 
-  return memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT,
-                             memcached_literal_param("Invalid memcached_server_distribution_t"));
+  return run_distribution(ptr);
 }
 
 
@@ -524,7 +548,9 @@ memcached_hash_t memcached_behavior_get_key_hash(memcached_st *ptr)
 memcached_return_t memcached_behavior_set_distribution_hash(memcached_st *ptr, memcached_hash_t type)
 {
   if (hashkit_success(hashkit_set_distribution_function(&ptr->hashkit, (hashkit_hash_algorithm_t)type)))
+  {
     return MEMCACHED_SUCCESS;
+  }
 
   return memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT,
                              memcached_literal_param("Invalid memcached_hash_t()"));
@@ -555,6 +581,7 @@ const char *libmemcached_string_behavior(const memcached_behavior_t flag)
   case MEMCACHED_BEHAVIOR_VERIFY_KEY: return "MEMCACHED_BEHAVIOR_VERIFY_KEY";
   case MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT: return "MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT";
   case MEMCACHED_BEHAVIOR_RETRY_TIMEOUT: return "MEMCACHED_BEHAVIOR_RETRY_TIMEOUT";
+  case MEMCACHED_BEHAVIOR_DEAD_TIMEOUT: return "MEMCACHED_BEHAVIOR_DEAD_TIMEOUT";
   case MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED: return "MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED";
   case MEMCACHED_BEHAVIOR_KETAMA_HASH: return "MEMCACHED_BEHAVIOR_KETAMA_HASH";
   case MEMCACHED_BEHAVIOR_BINARY_PROTOCOL: return "MEMCACHED_BEHAVIOR_BINARY_PROTOCOL";