Fix some flaw and bugs in server failure rehash
authorYin Chen <subdragon@gmail.com>
Thu, 7 Aug 2008 08:43:15 +0000 (16:43 +0800)
committerYin Chen <subdragon@gmail.com>
Thu, 7 Aug 2008 08:43:15 +0000 (16:43 +0800)
configure.ac
libmemcached/common.h
libmemcached/memcached.h
libmemcached/memcached_behavior.c
libmemcached/memcached_connect.c
libmemcached/memcached_hosts.c

index f6dd9b63b4df6742ad53d3fc52bea93a268b40f8..3118870aba953738c85d800a2c76483505d462d8 100644 (file)
@@ -1,6 +1,11 @@
 AC_INIT(clients/memcat.c)
 AC_CONFIG_AUX_DIR(config)
-AM_CONFIG_HEADER(libmemcached/libmemcached_config.h) AC_CANONICAL_SYSTEM MEMCACHED_LIBRARY_NAME=libmemcached #release versioning
+AM_CONFIG_HEADER(libmemcached/libmemcached_config.h)
+AC_CANONICAL_SYSTEM
+
+MEMCACHED_LIBRARY_NAME=libmemcached 
+
+#release versioning
 MEMCACHED_MAJOR_VERSION=0
 MEMCACHED_MINOR_VERSION=22
 MEMCACHED_MICRO_VERSION=0
index 9b8a104098d30b06ca162f1a7555335932c38797..5993e57c58b37a6ad0945641d562f51b372800f3 100644 (file)
@@ -118,7 +118,7 @@ memcached_return run_distribution(memcached_st *ptr);
 uint32_t generate_hash_value(const char *key, size_t key_length, memcached_hash hash_algorithm);
 
 uint32_t generate_hash(memcached_st *ptr, const char *key, size_t key_length);
-memcached_return server_remove(memcached_server_st *st_ptr);
+memcached_return memcached_server_remove(memcached_server_st *st_ptr);
 
 extern uint64_t ntohll(uint64_t);
 extern uint64_t htonll(uint64_t);
index 8ce333caebcc2deee87464e3660e2cb9f3f8ff53..aab451cc8cdc0b3665289906196a9304a5b4ee69 100644 (file)
@@ -97,7 +97,7 @@ struct memcached_st {
   uint32_t continuum_points_counter;
   int32_t snd_timeout;
   int32_t rcv_timeout;
-  int32_t server_failure_limit;
+  uint32_t server_failure_limit;
 };
 
 
index a4b77d66fb60022632244036003fc092b2f96de0..97ad378157a921a3f4ed2d5df0a462e5b9282062 100644 (file)
@@ -30,7 +30,7 @@ memcached_return memcached_behavior_set(memcached_st *ptr,
     ptr->rcv_timeout= (int32_t)data;
     break;     
   case MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT:
-    ptr->server_failure_limit= (int32_t)data;
+    ptr->server_failure_limit= (uint32_t)data;
     break;     
   case MEMCACHED_BEHAVIOR_BINARY_PROTOCOL:
     set_behavior_flag(ptr, MEM_BINARY_PROTOCOL, data);
index f2549dc75157877fb23a8e79244a7e2b465298e4..8c7ef3326332d10c442de800c24430a0e40e4a70 100644 (file)
@@ -174,7 +174,7 @@ static memcached_return network_connect(memcached_server_st *ptr)
 
     if(ptr->root->server_failure_limit != 0) {
       if(ptr->server_failure_counter >= ptr->root->server_failure_limit) {
-          server_remove(ptr);
+          memcached_server_remove(ptr);
       }
     }
     /* Old connection junk still is in the structure */
index 693750386f65c63b4767aebf0538b494707f99fc..5f51d54629edf808ea8e5ada8cc0da0f542ad562 100644 (file)
@@ -282,21 +282,25 @@ static memcached_return server_add(memcached_st *ptr, char *hostname,
   return run_distribution(ptr);
 }
 
-memcached_return server_remove(memcached_server_st *st_ptr)
+memcached_return memcached_server_remove(memcached_server_st *st_ptr)
 {
-  int i,index;
+  int x,index;
   memcached_st *ptr= st_ptr->root;
   memcached_server_st *list=ptr->hosts;
   index= 0;
-  for(i= 0; i< ptr->number_of_hosts; ++i) {
-    if(strncmp(list[i].hostname, st_ptr->hostname, MEMCACHED_MAX_HOST_LENGTH)!=0 || list[i].port != st_ptr->port) {
-      memcpy(list+index, list+i, sizeof(memcached_server_st));
+  for (x= 0; x< ptr->number_of_hosts; ++x) 
+  {
+    if (strncmp(list[x].hostname, st_ptr->hostname, MEMCACHED_MAX_HOST_LENGTH)!=0 || list[x].port != st_ptr->port) 
+    {
+      memcpy(list+index, list+x, sizeof(memcached_server_st));
       index++;
-    } else {
+    } else 
+    {
       ptr->number_of_hosts-=1;
     }
   }
-  if(st_ptr->address_info) {
+  if(st_ptr->address_info) 
+  {
       freeaddrinfo(st_ptr->address_info);
   }
   run_distribution(ptr);