Set weight correctly.
authorBrian Aker <brian@tangent.org>
Sun, 3 Apr 2011 04:02:40 +0000 (21:02 -0700)
committerBrian Aker <brian@tangent.org>
Sun, 3 Apr 2011 04:02:40 +0000 (21:02 -0700)
libmemcached/hosts.c
libmemcached/parse.c
libmemcached/server.c

index 67ba6d19829ba466be2a6ac9c0545e8e66d1ef9d..d95dbcfff2fb0f55333afa58f368e01ecd33854d 100644 (file)
@@ -109,7 +109,6 @@ static memcached_return_t update_continuum(memcached_st *ptr)
   uint32_t pointer_counter= 0;
   uint32_t pointer_per_server= MEMCACHED_POINTS_PER_SERVER;
   uint32_t pointer_per_hash= 1;
-  uint64_t total_weight= 0;
   uint32_t live_servers= 0;
   struct timeval now;
 
@@ -163,16 +162,15 @@ static memcached_return_t update_continuum(memcached_st *ptr)
     ptr->ketama.continuum_count= live_servers + MEMCACHED_CONTINUUM_ADDITION;
   }
 
+  uint64_t total_weight= 0;
   if (is_ketama_weighted)
   {
     for (uint32_t host_index = 0; host_index < memcached_server_count(ptr); ++host_index)
     {
-      if (list[host_index].weight == 0)
-      {
-        list[host_index].weight = 1;
-      }
       if (! is_auto_ejecting || list[host_index].next_retry <= now.tv_sec)
+      {
         total_weight += list[host_index].weight;
+      }
     }
   }
 
index 917c5e3097b9874bfc0658c7bd199a4ed3ed3444..85860ef3301e50a093730252a36c54aabd787a68 100644 (file)
@@ -10,8 +10,6 @@
 memcached_server_list_st memcached_servers_parse(const char *server_strings)
 {
   char *string;
-  in_port_t port;
-  uint32_t weight;
   const char *begin_ptr;
   const char *end_ptr;
   memcached_server_st *servers= NULL;
@@ -27,8 +25,7 @@ memcached_server_list_st memcached_servers_parse(const char *server_strings)
   {
     char buffer[HUGE_STRING_LEN];
     char *ptr, *ptr2;
-    port= 0;
-    weight= 0;
+    uint32_t weight= 0;
 
     if (string)
     {
@@ -46,6 +43,7 @@ memcached_server_list_st memcached_servers_parse(const char *server_strings)
 
     ptr= index(buffer, ':');
 
+    in_port_t port= 0;
     if (ptr)
     {
       ptr[0]= 0;
@@ -57,6 +55,7 @@ memcached_server_list_st memcached_servers_parse(const char *server_strings)
       ptr2= index(ptr, ' ');
       if (! ptr2)
         ptr2= index(ptr, ':');
+
       if (ptr2)
       {
         ptr2++;
index 7b9b2eefbbad5b9c287c1b9a08de47cf257647ac..fa750c257424b9ce98c4f24d6028f7f559caf615 100644 (file)
@@ -26,7 +26,7 @@ static inline void _server_init(memcached_server_st *self, const memcached_st *r
   self->fd= -1;
   self->io_bytes_sent= 0;
   self->server_failure_counter= 0;
-  self->weight= weight;
+  self->weight= weight ? weight : 1; // 1 is the default weight value
   self->state.is_corked= false;
   self->state.is_dead= false;
   WATCHPOINT_SET(self->io_wait_count.read= 0);