Added MEMCACHED_BEHAVIOR_SORT_HOSTS behavior to enable and disable sorted host
author <brian@gir-2.local> <>
Wed, 13 Feb 2008 09:51:13 +0000 (15:21 +0530)
committer <brian@gir-2.local> <>
Wed, 13 Feb 2008 09:51:13 +0000 (15:21 +0530)
behavior.

ChangeLog
docs/memcached_behavior.pod
include/memcached.h
lib/common.h
lib/memcached_behavior.c
tests/function.c

index 59a6f932db05e141206afb78b604d6a4ceccf1b2..d57737ac7e61861533e185d691c92a1fbf2124f6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,7 +5,8 @@
   * Added Atom Smasher test (scale baby, scale!)
   * Servers are now sorted, meaning that servers are now ordered so that
     clients with the same lists, will have same distribution. (Idea from
-    Ross McFarland).
+    Ross McFarland). MEMCACHED_BEHAVIOR_SORT_HOSTS was added to enable
+    this support.
   * Added MEMCACHED_BAD_KEY_PROVIDED error for auto, set, and get operations 
     when the library is compiled with --enable-debug. This additional code
     will test for bad keys.
index 25986cdf9082fdba76406d70fd082be2828c0dcb..e71f1438ff1fa52df95e0bb984dbd8fda6082b14 100755 (executable)
@@ -88,6 +88,11 @@ action that gets data causes this buffer to be be sent to the remote
 connection. Quiting the connection or closing down the connection will also
 cause the buffered data to be pushed to the remote connection. 
 
+=item MEMCACHED_BEHAVIOR_SORT_HOSTS
+
+Enabling this will cause hosts that are added to be placed in the host list in 
+sorted order. This will defeat consisten hashing.
+
 =back
 
 =head1 RETURN
index fa2d305cd98e6d4497bf623f715c00d9d83e8675..0939a7ae4d5ba66203f6cb34c91cdbbc65b85c45 100644 (file)
@@ -100,6 +100,7 @@ typedef enum {
   MEMCACHED_BEHAVIOR_DISTRIBUTION,
   MEMCACHED_BEHAVIOR_BUFFER_REQUESTS,
   MEMCACHED_BEHAVIOR_USER_DATA,
+  MEMCACHED_BEHAVIOR_SORT_HOSTS,
 } memcached_behavior;
 
 typedef enum {
index 610d432043dfbd8eaf2e7a32f88b1054e8ad885a..ff54fe5738179c1a066ded2f826e4360698bee73 100644 (file)
@@ -65,6 +65,7 @@ typedef enum {
   MEM_USE_CACHE_LOOKUPS= (1 << 6),
   MEM_SUPPORT_CAS= (1 << 7),
   MEM_BUFFER_REQUESTS= (1 << 8),
+  MEM_USE_SORT_HOSTS= (1 << 9),
 } memcached_flags;
 
 /* Hashing algo */
index 62b767f7b037a85ca473d142fec64e044ba58204..1458c1a9a9372272c19850b17198a8f6ce2ce6a6 100644 (file)
@@ -49,6 +49,9 @@ memcached_return memcached_behavior_set(memcached_st *ptr,
   case MEMCACHED_BEHAVIOR_KETAMA:
     set_behavior_flag(ptr, MEM_USE_KETAMA, data);
     break;
+  case MEMCACHED_BEHAVIOR_SORT_HOSTS:
+    set_behavior_flag(ptr, MEM_USE_SORT_HOSTS, data);
+    break;
   case MEMCACHED_BEHAVIOR_USER_DATA:
     ptr->user_data= data;
     break;
@@ -107,6 +110,9 @@ unsigned long long memcached_behavior_get(memcached_st *ptr,
   case MEMCACHED_BEHAVIOR_KETAMA:
     temp_flag= MEM_USE_KETAMA;
     break;
+  case MEMCACHED_BEHAVIOR_SORT_HOSTS:
+    temp_flag= MEM_USE_SORT_HOSTS;
+    break;
   case MEMCACHED_BEHAVIOR_USER_DATA:
     return 0;
     //return (unsigned long long)ptr->user_data;
index 1534019cb16fbeb100d131c6db983c54bded2501..b971134e2c8c33afc2e70f896b758d85f10c3025 100644 (file)
@@ -63,9 +63,13 @@ uint8_t server_list_null_test(memcached_st *ptr)
 
 uint8_t server_sort_test(memcached_st *ptr)
 {
+  unsigned int setting;
   memcached_server_st *server_list;
   memcached_return rc;
 
+  setting= 1;
+  memcached_behavior_set(ptr, MEMCACHED_BEHAVIOR_SORT_HOSTS, &setting);
+
   server_list= memcached_server_list_append(NULL, "arg", 0, &rc);
   assert(server_list);