Update (clarify weighted usage).
authorBrian Aker <brian@tangent.org>
Tue, 10 Jul 2012 07:28:46 +0000 (00:28 -0700)
committerBrian Aker <brian@tangent.org>
Tue, 10 Jul 2012 07:28:46 +0000 (00:28 -0700)
libmemcached-1.0/struct/memcached.h
libmemcached-1.0/types.h
libmemcached/behavior.cc
libmemcached/behavior.hpp
libmemcached/hosts.cc
libmemcached/include.am
libmemcached/is.h
libmemcached/memcached.cc
tests/libmemcached-1.0/mem_functions.cc

index 0b4f89763adb20298997bd31903b615552709ae7..63b07a00e80a8b3b6219524515e6ef756a51ac94 100644 (file)
@@ -100,11 +100,11 @@ struct memcached_st {
   memcached_result_st result;
 
   struct {
-    bool weighted;
+    bool weighted_;
     uint32_t continuum_count; // Ketama
     uint32_t continuum_points_counter; // Ketama
     time_t next_distribution_rebuild; // Ketama
-    memcached_continuum_item_st *continuum; // Ketama
+    struct memcached_continuum_item_st *continuum; // Ketama
   } ketama;
 
   struct memcached_virtual_bucket_t *virtual_bucket;
index bb7e1a6549abcde41d103908f18fc3f6783bdddc..dc61a819c5457a5f1350a7a7a5ab618349c15138 100644 (file)
@@ -81,6 +81,5 @@ typedef struct memcached_callback_st memcached_callback_st;
 // The following two structures are internal, and never exposed to users.
 typedef struct memcached_string_st memcached_string_st;
 typedef struct memcached_string_t memcached_string_t;
-typedef struct memcached_continuum_item_st memcached_continuum_item_st;
 
 #endif
index e8bcf857c0bbbfdb013fa925283196888daebec4..c381a513cfbceab5322de4507da5b29698e0403b 100644 (file)
@@ -42,9 +42,9 @@
 #include <ctime>
 #include <sys/types.h>
 
-static bool __is_ketama(memcached_st *ptr)
+bool memcached_is_consistent_distribution(const memcached_st* memc)
 {
-  switch (ptr->distribution)
+  switch (memc->distribution)
   {
   case MEMCACHED_DISTRIBUTION_CONSISTENT:
   case MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA:
@@ -355,9 +355,9 @@ uint64_t memcached_behavior_get(memcached_st *ptr,
     return ptr->flags.verify_key;
 
   case MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED:
-    if (__is_ketama(ptr))
+    if (memcached_is_consistent_distribution(ptr))
     {
-      return ptr->ketama.weighted;
+      return memcached_is_weighted_ketama(ptr);
     }
     return false;
 
@@ -365,7 +365,7 @@ uint64_t memcached_behavior_get(memcached_st *ptr,
     return ptr->distribution;
 
   case MEMCACHED_BEHAVIOR_KETAMA:
-    return __is_ketama(ptr);
+    return memcached_is_consistent_distribution(ptr);
 
   case MEMCACHED_BEHAVIOR_HASH:
     return hashkit_get_function(&ptr->hashkit);
@@ -522,7 +522,7 @@ memcached_return_t memcached_behavior_set_distribution(memcached_st *ptr, memcac
 
   case MEMCACHED_DISTRIBUTION_CONSISTENT:
   case MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA:
-    ptr->ketama.weighted= false;
+    memcached_set_weighted_ketama(ptr, false);
     break;
 
   case MEMCACHED_DISTRIBUTION_RANDOM:
@@ -532,7 +532,7 @@ memcached_return_t memcached_behavior_set_distribution(memcached_st *ptr, memcac
     break;
 
   case MEMCACHED_DISTRIBUTION_CONSISTENT_WEIGHTED:
-    ptr->ketama.weighted= true;
+    memcached_set_weighted_ketama(ptr, true);
     break;
 
   case MEMCACHED_DISTRIBUTION_VIRTUAL_BUCKET:
index ee38f97a0f29be315f2a085122884d32ea9672c8..0b06c0caf23a1131e38e4fe01ce94c5d6429d902 100644 (file)
@@ -36,4 +36,5 @@
 
 #pragma once
 
+bool memcached_is_consistent_distribution(const memcached_st*);
 bool _is_auto_eject_host(const memcached_st *ptr);
index 2a07a395c24fe05f24f1ea2d93d880d4387d3747..4875615f4ae3c3a2bd37d6d1dbb5443794697e34 100644 (file)
@@ -118,11 +118,17 @@ static int continuum_item_cmp(const void *t1, const void *t2)
   /* Why 153? Hmmm... */
   WATCHPOINT_ASSERT(ct1->value != 153);
   if (ct1->value == ct2->value)
+  {
     return 0;
+  }
   else if (ct1->value > ct2->value)
+  {
     return 1;
+  }
   else
+  {
     return -1;
+  }
 }
 
 static memcached_return_t update_continuum(memcached_st *ptr)
@@ -167,8 +173,7 @@ static memcached_return_t update_continuum(memcached_st *ptr)
     live_servers= memcached_server_count(ptr);
   }
 
-  uint64_t is_ketama_weighted= memcached_behavior_get(ptr, MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED);
-  uint32_t points_per_server= (uint32_t) (is_ketama_weighted ? MEMCACHED_POINTS_PER_SERVER_KETAMA : MEMCACHED_POINTS_PER_SERVER);
+  uint32_t points_per_server= (uint32_t) (memcached_is_weighted_ketama(ptr) ? MEMCACHED_POINTS_PER_SERVER_KETAMA : MEMCACHED_POINTS_PER_SERVER);
 
   if (live_servers == 0)
   {
@@ -191,7 +196,7 @@ static memcached_return_t update_continuum(memcached_st *ptr)
   }
 
   uint64_t total_weight= 0;
-  if (is_ketama_weighted)
+  if (memcached_is_weighted_ketama(ptr))
   {
     for (uint32_t host_index = 0; host_index < memcached_server_count(ptr); ++host_index)
     {
@@ -209,7 +214,7 @@ static memcached_return_t update_continuum(memcached_st *ptr)
       continue;
     }
 
-    if (is_ketama_weighted)
+    if (memcached_is_weighted_ketama(ptr))
     {
         float pct= (float)list[host_index].weight / (float)total_weight;
         pointer_per_server= (uint32_t) ((::floor((float) (pct * MEMCACHED_POINTS_PER_SERVER_KETAMA / 4 * (float)live_servers + 0.0000000001))) * 4);
@@ -253,7 +258,7 @@ static memcached_return_t update_continuum(memcached_st *ptr)
           fprintf(stdout, "update_continuum: key is %s\n", sort_host);
         }
 
-        if (is_ketama_weighted)
+        if (memcached_is_weighted_ketama(ptr))
         {
           for (uint32_t x= 0; x < pointer_per_hash; x++)
           {
@@ -301,7 +306,7 @@ static memcached_return_t update_continuum(memcached_st *ptr)
                                      memcached_literal_param("snprintf(sizeof(sort_host)))"));
         }
 
-        if (is_ketama_weighted)
+        if (memcached_is_weighted_ketama(ptr))
         {
           for (uint32_t x = 0; x < pointer_per_hash; x++)
           {
@@ -366,7 +371,10 @@ static memcached_return_t server_add(memcached_st *ptr,
 
   if (weight > 1)
   {
-    ptr->ketama.weighted= true;
+    if (memcached_is_consistent_distribution(ptr))
+    {
+      memcached_set_weighted_ketama(ptr, true);
+    }
   }
 
   ptr->number_of_hosts++;
@@ -411,7 +419,7 @@ memcached_return_t memcached_server_push(memcached_st *ptr, const memcached_serv
 
     if (list[x].weight > 1)
     {
-      ptr->ketama.weighted= true;
+      memcached_set_weighted_ketama(ptr, true);
     }
 
     ptr->number_of_hosts++;
@@ -455,7 +463,7 @@ memcached_return_t memcached_instance_push(memcached_st *ptr, const struct org::
 
     if (list[x].weight > 1)
     {
-      ptr->ketama.weighted= true;
+      memcached_set_weighted_ketama(ptr, true);
     }
 
     ptr->number_of_hosts++;
index f3525df2cf50fe69e8c1e5db34f7d502f7faf342..bfa2f140111f6c9ab0b9df4b4ee41695bc26963b 100644 (file)
@@ -16,6 +16,7 @@ nobase_include_HEADERS+= libmemcached/util.h
 noinst_HEADERS+= libmemcached/array.h 
 noinst_HEADERS+= libmemcached/assert.hpp 
 noinst_HEADERS+= libmemcached/backtrace.hpp 
+noinst_HEADERS+= libmemcached/behavior.hpp
 noinst_HEADERS+= libmemcached/byteorder.h 
 noinst_HEADERS+= libmemcached/common.h 
 noinst_HEADERS+= libmemcached/connect.hpp 
@@ -64,7 +65,6 @@ libmemcached_libmemcached_la_SOURCES+= libmemcached/array.c
 libmemcached_libmemcached_la_SOURCES+= libmemcached/auto.cc
 libmemcached_libmemcached_la_SOURCES+= libmemcached/backtrace.cc
 libmemcached_libmemcached_la_SOURCES+= libmemcached/behavior.cc
-libmemcached_libmemcached_la_SOURCES+= libmemcached/behavior.hpp
 libmemcached_libmemcached_la_SOURCES+= libmemcached/byteorder.cc
 libmemcached_libmemcached_la_SOURCES+= libmemcached/callback.cc
 libmemcached_libmemcached_la_SOURCES+= libmemcached/connect.cc
index 3815a0ad5be60de4e490c54749b2e40e2e73eddd..126bc9a71566f921f18ccf6df04b49a27e102343 100644 (file)
@@ -59,6 +59,8 @@
 #define memcached_is_auto_eject_hosts(__object) ((__object)->flags.auto_eject_hosts)
 #define memcached_is_use_sort_hosts(__object) ((__object)->flags.use_sort_hosts)
 
+#define memcached_is_weighted_ketama(__object) ((__object)->ketama.weighted_)
+
 #define memcached_set_aes(__object, __flag) ((__object).flags.is_aes= __flag)
 #define memcached_set_udp(__object, __flag) ((__object).flags.use_udp= __flag)
 #define memcached_set_verify_key(__object, __flag) ((__object).flags.verify_key= __flag)
@@ -83,3 +85,5 @@
 #define memcached_set_processing_input(__object, __value) ((__object)->state.is_processing_input= (__value))
 #define memcached_set_initialized(__object, __value) ((__object)->options.is_initialized(= (__value))
 #define memcached_set_allocated(__object, __value) ((__object)->options.is_allocated= (__value))
+
+#define memcached_set_weighted_ketama(__object, __value) ((__object)->ketama.weighted_= (__value))
index 3504b23a77b40db16232521b93bc90c34f6963d1..c52873ad3d4fcbccecb86ded6961a9844dc48dcf 100644 (file)
@@ -77,7 +77,7 @@ static inline bool _memcached_init(memcached_st *self)
   self->ketama.continuum_count= 0;
   self->ketama.continuum_points_counter= 0;
   self->ketama.next_distribution_rebuild= 0;
-  self->ketama.weighted= false;
+  self->ketama.weighted_= false;
 
   self->number_of_hosts= 0;
   self->servers= NULL;
index cba7c95732ba7d98c4ad58aa2d003f293c2dc743..04db47289775f73710dba5e08a0498ff323afb33 100644 (file)
@@ -390,7 +390,7 @@ test_return_t clone_test(memcached_st *memc)
       test_true(memc_clone->flags.buffer_requests == memc->flags.buffer_requests);
       test_true(memc_clone->flags.use_sort_hosts == memc->flags.use_sort_hosts);
       test_true(memc_clone->flags.verify_key == memc->flags.verify_key);
-      test_true(memc_clone->ketama.weighted == memc->ketama.weighted);
+      test_true(memc_clone->ketama.weighted_ == memc->ketama.weighted_);
       test_true(memc_clone->flags.binary_protocol == memc->flags.binary_protocol);
       test_true(memc_clone->flags.hash_with_namespace == memc->flags.hash_with_namespace);
       test_true(memc_clone->flags.reply == memc->flags.reply);