attempt to fix #12, #49 and #65
authorMichael Wallner <mike@php.net>
Mon, 27 Jan 2020 13:07:16 +0000 (14:07 +0100)
committerMichael Wallner <mike@php.net>
Mon, 27 Jan 2020 13:07:16 +0000 (14:07 +0100)
use memcached_io_reset() at the right places (i.e. memcached_vdo())

libmemcached/delete.cc
libmemcached/do.cc
libmemcached/dump.cc
libmemcached/exist.cc
libmemcached/flush.cc
libmemcached/purge.cc
libmemcached/stats.cc
libmemcached/storage.cc
libmemcached/touch.cc
libmemcached/version.cc

index 55a8b4ca17e9932040c9edac9ad97ab52d15f677..9575a95722eeff922dc1b770aeb47215647fe2c0 100644 (file)
@@ -98,12 +98,7 @@ static inline memcached_return_t binary_delete(memcached_instance_st* instance,
     { key, key_length }
   };
 
-  memcached_return_t rc;
-  if (memcached_fatal(rc= memcached_vdo(instance, vector,  4, should_flush)))
-  {
-    assert(memcached_last_error(instance->root) != MEMCACHED_SUCCESS);
-    memcached_io_reset(instance);
-  }
+  memcached_return_t rc= memcached_vdo(instance, vector,  4, should_flush);
 
   if (memcached_has_replicas(instance))
   {
@@ -120,12 +115,7 @@ static inline memcached_return_t binary_delete(memcached_instance_st* instance,
 
       memcached_instance_st* replica= memcached_instance_fetch(instance->root, server_key);
 
-      if (memcached_fatal(memcached_vdo(replica, vector, 4, should_flush)))
-      {
-        assert(memcached_last_error(instance->root) != MEMCACHED_SUCCESS);
-        memcached_io_reset(replica);
-      }
-      else
+      if (memcached_success(memcached_vdo(replica, vector, 4, should_flush)))
       {
         memcached_server_response_decrement(replica);
       }
index daf1a1150eb2d242303b9826488f9475a6a67283..59f9d5a3ada657c68d74da26837e5d90212fde30 100644 (file)
@@ -85,26 +85,23 @@ memcached_return_t memcached_vdo(memcached_instance_st* instance,
   ** before they start writing, if there is any data in buffer, clear it out,
   ** otherwise we might get a partial write.
   **/
+  bool sent_success;
   if (memcached_is_udp(instance->root))
   {
-    return _vdo_udp(instance, vector, count);
+    sent_success= memcached_success(rc= _vdo_udp(instance, vector, count));
+  } else {
+    sent_success= memcached_io_writev(instance, vector, count, with_flush);
   }
-
-  bool sent_success= memcached_io_writev(instance, vector, count, with_flush);
   if (sent_success == false)
   {
-    //assert(memcached_last_error(instance->root) == MEMCACHED_SUCCESS);
-    if (memcached_last_error(instance->root) == MEMCACHED_SUCCESS)
-    {
-      //assert(memcached_last_error(instance->root) != MEMCACHED_SUCCESS);
-      return memcached_set_error(*instance, MEMCACHED_WRITE_FAILURE, MEMCACHED_AT);
-    }
-    else
+    rc= memcached_last_error(instance->root);
+    if (rc == MEMCACHED_SUCCESS)
     {
-      rc= memcached_last_error(instance->root);
+      memcached_set_error(*instance, MEMCACHED_WRITE_FAILURE, MEMCACHED_AT);
     }
+    memcached_io_reset(instance);
   }
-  else if (memcached_is_replying(instance->root))
+  else if (memcached_is_replying(instance->root) && !memcached_is_udp(instance->root))
   {
     memcached_server_response_increment(instance);
   }
index f74f3ed1f564ce22fb53bdb09478ac5bf210a168..4fcf7de2aa282ba7694dd61da33d14e53ff614d1 100644 (file)
@@ -71,11 +71,7 @@ static memcached_return_t ascii_dump(Memcached *memc, memcached_dump_fn *callbac
       memcached_instance_st* instance= memcached_instance_fetch(memc, server_key);
 
       memcached_return_t vdo_rc;
-      if (memcached_success((vdo_rc= memcached_vdo(instance, vector, 3, true))))
-      {
-        // We have sent the message to the server successfully
-      }
-      else
+      if (memcached_failed((vdo_rc= memcached_vdo(instance, vector, 3, true))))
       {
         return vdo_rc;
       }
index 3afb42d43ed0c306d0a0258c79378b8efe799219..5cb99e60661ee68210db150e39f09901649cfd38 100644 (file)
@@ -155,10 +155,5 @@ memcached_return_t memcached_exist_by_key(memcached_st *shell,
     rc= ascii_exist(memc, instance, key, key_length);
   }
 
-  if (memcached_fatal(rc))
-  {
-    memcached_io_reset(instance);
-  }
-
   return rc;
 }
index cbb66bfeb1a29501d55e7c86238ead7e39818eb3..9702771f68b64be9b699f680bca51e52c65987c7 100644 (file)
@@ -77,7 +77,6 @@ static memcached_return_t memcached_flush_binary(Memcached *ptr,
       {
         memcached_set_error(*instance, rrc, MEMCACHED_AT);
       }
-      memcached_io_reset(instance);
       rc= MEMCACHED_SOME_ERRORS;
     } 
   }
index 4646708eb1da540e8011367ce8db702316027c24..4dbe24d05cb090e733f6d1a07d2b197c92d28af3 100644 (file)
@@ -105,6 +105,7 @@ bool memcached_purge(memcached_instance_st* ptr)
   */
   if (memcached_io_write(ptr) == false)
   {
+    memcached_io_reset(ptr);
     memcached_set_error(*ptr, MEMCACHED_WRITE_FAILURE, MEMCACHED_AT);
     return false;
   }
@@ -138,7 +139,6 @@ bool memcached_purge(memcached_instance_st* ptr)
       if (rc== MEMCACHED_PROTOCOL_ERROR or rc == MEMCACHED_UNKNOWN_READ_FAILURE or rc == MEMCACHED_READ_FAILURE)
       {
         WATCHPOINT_ERROR(rc);
-        memcached_io_reset(ptr);
         is_successful= false;
       }
 
index 180b0d982204c3e34b089d78c7428eba3dc8b292..9e6083e9d841a9f0d6f7425d9ddff3e827e1f33e 100644 (file)
@@ -484,6 +484,7 @@ static memcached_return_t binary_stats_fetch(memcached_stat_st *memc_stat,
 {
   char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
   protocol_binary_request_stats request= {}; // = {.bytes= {0}};
+  memcached_return_t rc;
 
   initialize_binary_request(instance, request.message.header);
 
@@ -501,10 +502,9 @@ static memcached_return_t binary_stats_fetch(memcached_stat_st *memc_stat,
       { args, args_length }
     };
 
-    if (memcached_vdo(instance, vector, 2, true) != MEMCACHED_SUCCESS)
+    if (memcached_failed(rc = memcached_vdo(instance, vector, 2, true)))
     {
-      memcached_io_reset(instance);
-      return MEMCACHED_WRITE_FAILURE;
+      return rc;
     }
   }
   else
@@ -514,17 +514,16 @@ static memcached_return_t binary_stats_fetch(memcached_stat_st *memc_stat,
       { request.bytes, sizeof(request.bytes) }
     };
 
-    if (memcached_vdo(instance, vector, 1, true) != MEMCACHED_SUCCESS)
+    if (memcached_failed(rc = memcached_vdo(instance, vector, 1, true)))
     {
-      memcached_io_reset(instance);
-      return MEMCACHED_WRITE_FAILURE;
+      return rc;
     }
   }
 
   memcached_server_response_decrement(instance);
   while (1)
   {
-    memcached_return_t rc= memcached_response(instance, buffer, sizeof(buffer), NULL);
+    rc= memcached_response(instance, buffer, sizeof(buffer), NULL);
 
     if (rc == MEMCACHED_END)
     {
@@ -533,7 +532,6 @@ static memcached_return_t binary_stats_fetch(memcached_stat_st *memc_stat,
 
     if (rc != MEMCACHED_SUCCESS)
     {
-      memcached_io_reset(instance);
       return rc;
     }
 
index 46ae15a953042d71954f9fd423645e81a1b15922..079fba1d62ac4a785f85de6115a66be53592a8a6 100644 (file)
@@ -192,15 +192,6 @@ static memcached_return_t memcached_send_binary(Memcached *ptr,
   memcached_return_t rc;
   if ((rc= memcached_vdo(server, vector, 5, flush)) != MEMCACHED_SUCCESS)
   {
-    memcached_io_reset(server);
-
-#if 0
-    if (memcached_has_error(ptr))
-    {
-      memcached_set_error(*server, rc, MEMCACHED_AT);
-    }
-#endif
-
     assert(memcached_last_error(server->root) != MEMCACHED_SUCCESS);
     return memcached_last_error(server->root);
   }
@@ -220,11 +211,7 @@ static memcached_return_t memcached_send_binary(Memcached *ptr,
 
       memcached_instance_st* instance= memcached_instance_fetch(ptr, server_key);
 
-      if (memcached_vdo(instance, vector, 5, false) != MEMCACHED_SUCCESS)
-      {
-        memcached_io_reset(instance);
-      }
-      else
+      if (memcached_success(memcached_vdo(instance, vector, 5, false)))
       {
         memcached_server_response_decrement(instance);
       }
@@ -335,11 +322,6 @@ static memcached_return_t memcached_send_ascii(Memcached *ptr,
     }
   }
 
-  if (rc == MEMCACHED_WRITE_FAILURE)
-  {
-    memcached_io_reset(instance);
-  }
-
   assert(memcached_failed(rc));
 #if 0
   if (memcached_has_error(ptr) == false)
index 91d0825f09a8ab7f822cc6d0bfec9f4ba6880095..a638bf9f7e3265f9f01927cf315215143bb709a7 100644 (file)
@@ -63,7 +63,6 @@ static memcached_return_t ascii_touch(memcached_instance_st* instance,
   memcached_return_t rc;
   if (memcached_failed(rc= memcached_vdo(instance, vector, 6, true)))
   {
-    memcached_io_reset(instance);
     return memcached_set_error(*instance, MEMCACHED_WRITE_FAILURE, MEMCACHED_AT);
   }
 
@@ -96,7 +95,6 @@ static memcached_return_t binary_touch(memcached_instance_st* instance,
   memcached_return_t rc;
   if (memcached_failed(rc= memcached_vdo(instance, vector, 4, true)))
   {
-    memcached_io_reset(instance);
     return memcached_set_error(*instance, MEMCACHED_WRITE_FAILURE, MEMCACHED_AT);
   }
 
index 5f07491285cd27b120446f841a1a55036c12980d..e779a76971e15a8d2c0449f133e12e25a9883340 100644 (file)
@@ -80,7 +80,6 @@ static inline memcached_return_t memcached_version_textual(Memcached *memc)
       memcached_return_t rrc= memcached_response(instance, NULL);
       if (memcached_failed(rrc))
       {
-        memcached_io_reset(instance);
         errors_happened= true;
       }
     }
@@ -117,7 +116,6 @@ static inline memcached_return_t memcached_version_binary(Memcached *memc)
     memcached_return_t rrc= memcached_vdo(instance, vector, 1, true);
     if (memcached_failed(rrc))
     {
-      memcached_io_reset(instance);
       errors_happened= true;
       continue;
     }
@@ -136,7 +134,6 @@ static inline memcached_return_t memcached_version_binary(Memcached *memc)
       memcached_return_t rrc= memcached_response(instance, buffer, sizeof(buffer), NULL);
       if (memcached_failed(rrc))
       {
-        memcached_io_reset(instance);
         errors_happened= true;
       }
     }