Refactor all code to go through memcached_do().
authorBrian Aker <brian@tangent.org>
Tue, 13 Nov 2007 21:31:32 +0000 (13:31 -0800)
committerBrian Aker <brian@tangent.org>
Tue, 13 Nov 2007 21:31:32 +0000 (13:31 -0800)
AKA this removed a bunch of copy and paste. It will also allow me to make
commands "safer" in case of mid-cursor exection.

lib/Makefile.am
lib/common.h
lib/memcached_auto.c
lib/memcached_delete.c
lib/memcached_do.c [new file with mode: 0644]
lib/memcached_flush.c
lib/memcached_get.c
lib/memcached_stats.c
lib/memcached_verbosity.c

index a84f43f5e74c4f4d6382d63e9b95271dde063d18..2908fbb45d7435f4ecb5ed2621cdf9b93cf2990e 100644 (file)
@@ -31,6 +31,7 @@ libmemcached_la_SOURCES = crc.c \
                          memcached_behavior.c \
                          memcached_connect.c \
                          memcached_delete.c \
+                         memcached_do.c \
                          memcached_flush.c \
                          memcached_get.c \
                          memcached_hash.c \
index 3a3a969525b80d389727db60fef2720ccda94aee..ae531e160c0489d8f97c49c852b791d26e416c02 100644 (file)
@@ -78,6 +78,8 @@ memcached_return memcached_string_append(memcached_string_st *string,
 size_t memcached_string_backspace(memcached_string_st *string, size_t remove);
 memcached_return memcached_string_reset(memcached_string_st *string);
 void memcached_string_free(memcached_string_st *string);
+memcached_return memcached_do(memcached_st *ptr, unsigned int server_key, char *commmand, 
+                              size_t command_length, char with_flush);
 
 
 #endif /* __COMMON_H__ */
index d7e30e568615dd206f0fcbf51a103791fd9df8f0..61ad91259377f3670614642789ae97f47e27a5c9 100644 (file)
@@ -6,7 +6,7 @@ static memcached_return memcached_auto(memcached_st *ptr,
                                        unsigned int offset,
                                        uint64_t *value)
 {
-  size_t send_length, sent_length;
+  size_t send_length;
   memcached_return rc;
   char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
   unsigned int server_key;
@@ -19,19 +19,16 @@ static memcached_return memcached_auto(memcached_st *ptr,
 
   server_key= memcached_generate_hash(ptr, key, key_length);
 
-  if ((rc= memcached_connect(ptr, server_key)) != MEMCACHED_SUCCESS)
-    return rc;
-
   send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, 
                         "%s %.*s %u\r\n", verb, 
                         (int)key_length, key,
                         offset);
   if (send_length >= MEMCACHED_DEFAULT_COMMAND_SIZE)
     return MEMCACHED_WRITE_FAILURE;
-  sent_length= memcached_io_write(ptr, server_key, buffer, send_length, 1);
 
-  if (sent_length == -1 || sent_length != send_length)
-    return MEMCACHED_WRITE_FAILURE;
+  rc= memcached_do(ptr, server_key, buffer, send_length, 1);
+  if (rc != MEMCACHED_SUCCESS)
+    return rc;
 
   memset(buffer, 0, MEMCACHED_DEFAULT_COMMAND_SIZE);
 
index cedfa442c86d2680b557f5b74a4d8a3393309864..0c36aaebb172b40fcb6c8ed643b109db02aed602 100644 (file)
@@ -4,7 +4,7 @@ memcached_return memcached_delete(memcached_st *ptr, char *key, size_t key_lengt
                                   time_t expiration)
 {
   char to_write;
-  size_t send_length, sent_length;
+  size_t send_length;
   memcached_return rc;
   char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
   unsigned int server_key;
@@ -19,10 +19,6 @@ memcached_return memcached_delete(memcached_st *ptr, char *key, size_t key_lengt
 
   server_key= memcached_generate_hash(ptr, key, key_length);
 
-  if ((rc= memcached_connect(ptr, server_key)) != MEMCACHED_SUCCESS)
-    return rc;
-
-
   if (expiration)
     send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, 
                           "delete %.*s %llu\r\n", (int)key_length, key, 
@@ -42,12 +38,9 @@ memcached_return memcached_delete(memcached_st *ptr, char *key, size_t key_lengt
   else
     to_write= 1;
 
-  if ((sent_length= memcached_io_write(ptr, server_key, buffer, send_length, to_write)) == -1)
-  {
-    memcached_quit_server(ptr, server_key);
-    rc= MEMCACHED_WRITE_FAILURE;
+  rc= memcached_do(ptr, server_key, buffer, send_length, to_write);
+  if (rc != MEMCACHED_SUCCESS)
     goto error;
-  }
 
   if ((ptr->flags & MEM_NO_BLOCK))
   {
@@ -61,8 +54,7 @@ memcached_return memcached_delete(memcached_st *ptr, char *key, size_t key_lengt
       rc= MEMCACHED_SUCCESS;
   }
 
-  LIBMEMCACHED_MEMCACHED_DELETE_END();
-
 error:
+  LIBMEMCACHED_MEMCACHED_DELETE_END();
   return rc;
 }
diff --git a/lib/memcached_do.c b/lib/memcached_do.c
new file mode 100644 (file)
index 0000000..5fcfe83
--- /dev/null
@@ -0,0 +1,22 @@
+#include "common.h"
+
+memcached_return memcached_do(memcached_st *ptr, unsigned int server_key, char *command, 
+                              size_t command_length, char with_flush)
+{
+  memcached_return rc;
+  ssize_t sent_length;
+
+  WATCHPOINT_ASSERT(command);
+  if ((rc= memcached_connect(ptr, server_key)) != MEMCACHED_SUCCESS)
+    return rc;
+
+  sent_length= memcached_io_write(ptr, server_key, command, command_length, with_flush);
+
+  if (sent_length == -1 || sent_length != command_length)
+  {
+    memcached_quit_server(ptr, server_key);
+    rc= MEMCACHED_WRITE_FAILURE;
+  }
+
+  return rc;
+}
index 58f5bff2d8919be99c7d7a09e738f984f109bf02..f40c1a6b78c473a5145f53bfb63e50b73210b4df 100644 (file)
@@ -3,7 +3,7 @@
 memcached_return memcached_flush(memcached_st *ptr, time_t expiration)
 {
   unsigned int x;
-  size_t send_length, sent_length;
+  size_t send_length;
   memcached_return rc;
   char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
   LIBMEMCACHED_MEMCACHED_FLUSH_START();
@@ -29,10 +29,9 @@ memcached_return memcached_flush(memcached_st *ptr, time_t expiration)
     if (send_length >= MEMCACHED_DEFAULT_COMMAND_SIZE)
       return MEMCACHED_WRITE_FAILURE;
 
-    sent_length= memcached_io_write(ptr, x, buffer, send_length, 1);
-
-    if (sent_length == -1 || sent_length != send_length)
-      return MEMCACHED_WRITE_FAILURE;
+    rc= memcached_do(ptr, x, buffer, send_length, 1);
+    if (rc != MEMCACHED_SUCCESS)
+      goto error;
 
     rc= memcached_response(ptr, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, x);
 
@@ -40,6 +39,7 @@ memcached_return memcached_flush(memcached_st *ptr, time_t expiration)
       rc= MEMCACHED_SOME_ERRORS;
   }
 
+error:
   LIBMEMCACHED_MEMCACHED_FLUSH_END();
   return rc;
 }
index 70d1b349e9bead5877f44dffd3f0455865565685..cbe94926ba0f169d2b27e00bed9facb64f01e10f 100644 (file)
@@ -144,7 +144,10 @@ char *memcached_get(memcached_st *ptr, char *key, size_t key_length,
   LIBMEMCACHED_MEMCACHED_GET_START();
 
   if (key_length == 0)
-    return MEMCACHED_NO_KEY_PROVIDED;
+  {
+    *error= MEMCACHED_NO_KEY_PROVIDED;
+    return NULL;
+  }
 
   if (ptr->hosts == NULL || ptr->number_of_hosts == 0)
   {
@@ -156,11 +159,6 @@ char *memcached_get(memcached_st *ptr, char *key, size_t key_length,
   result_buffer= &ptr->result_buffer;
 
   *value_length= 0;
-  *error= memcached_connect(ptr, server_key);
-
-  if (*error != MEMCACHED_SUCCESS)
-    goto error;
-
   memcpy(buf_ptr, "get ", 4);
   buf_ptr+= 4;
   memcpy(buf_ptr, key, key_length);
@@ -168,11 +166,9 @@ char *memcached_get(memcached_st *ptr, char *key, size_t key_length,
   memcpy(buf_ptr, "\r\n", 2);
   buf_ptr+= 2;
 
-  if ((memcached_io_write(ptr, server_key, buffer, (size_t)(buf_ptr - buffer), 1)) == -1)
-  {
-    *error= MEMCACHED_WRITE_FAILURE;
+  *error= memcached_do(ptr, server_key, buffer, (size_t)(buf_ptr - buffer), 1);
+  if (*error != MEMCACHED_SUCCESS)
     goto error;
-  }
 
   *error= memcached_value_fetch(ptr, key, &key_length, result_buffer, 
                                 flags, 0, server_key);
index e90f1c0f1a1921902a17f659395d97fd6573d636..cbfdef3503b4009cd608dd4e987a129e52f854d3 100644 (file)
@@ -223,7 +223,7 @@ static memcached_return memcached_stats_fetch(memcached_st *ptr,
 {
   memcached_return rc;
   char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
-  size_t send_length, sent_length;
+  size_t send_length;
 
   rc= memcached_connect(ptr, server_key);
 
@@ -240,10 +240,9 @@ static memcached_return memcached_stats_fetch(memcached_st *ptr,
   if (send_length >= MEMCACHED_DEFAULT_COMMAND_SIZE)
     return MEMCACHED_WRITE_FAILURE;
 
-  sent_length= memcached_io_write(ptr, server_key, buffer, send_length, 1);
-
-  if (sent_length == -1 || sent_length != send_length)
-    return MEMCACHED_WRITE_FAILURE;
+  rc= memcached_do(ptr, server_key, buffer, send_length, 1);
+  if (rc != MEMCACHED_SUCCESS)
+      goto error;
 
   while (1)
   {
@@ -271,6 +270,7 @@ static memcached_return memcached_stats_fetch(memcached_st *ptr,
       break;
   }
 
+error:
   if (rc == MEMCACHED_END)
     return MEMCACHED_SUCCESS;
   else
index 6d35664232cc80ac1cad96bb87fc119c684c78c9..1ee9d070160711a93444afd81c02dd5236d6e312 100644 (file)
@@ -7,29 +7,25 @@ memcached_return memcached_verbosity(memcached_st *ptr, unsigned int verbosity)
   memcached_return rc;
   char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
 
-  rc= memcached_connect(ptr, 0);
-
-  if (rc != MEMCACHED_SUCCESS)
-    rc= MEMCACHED_SOME_ERRORS;
-
   send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, 
                         "verbosity %u\r\n", verbosity);
   if (send_length >= MEMCACHED_DEFAULT_COMMAND_SIZE)
     return MEMCACHED_WRITE_FAILURE;
 
+  rc= MEMCACHED_SUCCESS;
   for (x= 0; x < ptr->number_of_hosts; x++)
   {
-    memcached_return rc;
+    memcached_return rrc;
 
-    if ((memcached_io_write(ptr, x, buffer, send_length, 1)) == -1)
+    rrc= memcached_do(ptr, x, buffer, send_length, 1);
+    if (rrc != MEMCACHED_SUCCESS)
     {
+      rc= MEMCACHED_SOME_ERRORS;
       continue;
-      return MEMCACHED_SOME_ERRORS;
     }
 
-    rc= memcached_response(ptr, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, x);
-
-    if (rc != MEMCACHED_SUCCESS)
+    rrc= memcached_response(ptr, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, x);
+    if (rrc != MEMCACHED_SUCCESS)
       rc= MEMCACHED_SOME_ERRORS;
   }