If a server is down, repeated stores would increment the fail count even though the...
[m6w6/libmemcached] / libmemcached / storage.c
index 7a96b778368c98e3398c102cce69c4571064094d..ba66cf878799c3cd5eb7136ca6dbdb87df9a54ec 100644 (file)
@@ -70,7 +70,7 @@ static inline memcached_return_t memcached_send(memcached_st *ptr,
   memcached_return_t rc;
   char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
   uint32_t server_key;
-  memcached_server_instance_st *instance;
+  memcached_server_write_instance_st instance;
 
   WATCHPOINT_ASSERT(!(value == NULL && value_length > 0));
 
@@ -92,7 +92,7 @@ static inline memcached_return_t memcached_send(memcached_st *ptr,
                                  flags, cas, verb);
   }
 
-  server_key= memcached_generate_hash(ptr, master_key, master_key_length);
+  server_key= memcached_generate_hash_with_redistribution(ptr, master_key, master_key_length);
   instance= memcached_server_instance_fetch(ptr, server_key);
 
   if (cas)
@@ -189,7 +189,8 @@ static inline memcached_return_t memcached_send(memcached_st *ptr,
     return rc;
 
 error:
-  memcached_io_reset(instance);
+  if (rc == MEMCACHED_WRITE_FAILURE)
+    memcached_io_reset(instance);
 
   return rc;
 }
@@ -444,10 +445,10 @@ static memcached_return_t memcached_send_binary(memcached_st *ptr,
   bool flush;
   protocol_binary_request_set request= {.bytes= {0}};
   size_t send_length= sizeof(request.bytes);
-  uint32_t server_key= memcached_generate_hash(ptr, master_key,
-                                               master_key_length);
+  uint32_t server_key= memcached_generate_hash_with_redistribution(ptr, master_key,
+                                                                   master_key_length);
 
-  memcached_server_instance_st *server=
+  memcached_server_write_instance_st server=
     memcached_server_instance_fetch(ptr, server_key);
 
   bool noreply= server->root->flags.no_reply;
@@ -502,7 +503,7 @@ static memcached_return_t memcached_send_binary(memcached_st *ptr,
 
     for (uint32_t x= 0; x < ptr->number_of_replicas; x++)
     {
-      memcached_server_instance_st *instance;
+      memcached_server_write_instance_st instance;
 
       ++server_key;
       if (server_key == memcached_server_count(ptr))