Merge lp:~tangent-org/libmemcached/1.0-build Build: jenkins-Libmemcached-1.0-109
authorContinuous Integration <ci@tangent.org>
Mon, 12 Nov 2012 20:47:50 +0000 (15:47 -0500)
committerContinuous Integration <ci@tangent.org>
Mon, 12 Nov 2012 20:47:50 +0000 (15:47 -0500)
ChangeLog
libmemcached-1.0/return.h
libmemcached/error.cc
libmemcached/response.cc
libmemcached/server_list.cc
tests/libmemcached-1.0/all_tests.h
tests/libmemcached-1.0/mem_functions.cc
tests/libmemcached-1.0/mem_functions.h

index 6679d8c91352c41e02c07b15dcfb635e7f290881..09ac7af85eeea3451084755795a54c7b872b6d50 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,6 @@
 1.0.14 
-*
+* CLIENT_ERROR fixed to not be treated as a fatal error.
+* Compiler fixes for older Ubuntu releases.
 
 1.0.13 Fri Oct 19 00:09:28 EDT 2012
 * Fix bug that caused version string to not be exported correctly.
index 65dc63af5eb02cb7783200287f9cb5316dc06a86..781603b86e84ec8c8ac97983bba1d7e1e14ba762 100644 (file)
@@ -63,6 +63,7 @@ static inline bool memcached_fatal(memcached_return_t rc)
 {
   return (
           rc != MEMCACHED_BUFFERED &&
+          rc != MEMCACHED_CLIENT_ERROR &&
           rc != MEMCACHED_DATA_EXISTS &&
           rc != MEMCACHED_DELETED &&
           rc != MEMCACHED_E2BIG && 
index f963e12446d42e2570733eea36aaae4187f1adbb..67edcce82aaab93f33b52aab15077386a8ee7c14 100644 (file)
@@ -276,7 +276,7 @@ memcached_return_t memcached_set_error(org::libmemcached::Instance& self, memcac
 {
   assert_msg(rc != MEMCACHED_ERRNO, "Programmer error, MEMCACHED_ERRNO was set to be returned to client");
   assert_msg(rc != MEMCACHED_SOME_ERRORS, "Programmer error, MEMCACHED_SOME_ERRORS was about to be set on a org::libmemcached::Instance");
-  if (memcached_fatal(rc) == false)
+  if (memcached_fatal(rc) == false and rc != MEMCACHED_CLIENT_ERROR)
   {
     return rc;
   }
@@ -295,7 +295,7 @@ memcached_return_t memcached_set_error(org::libmemcached::Instance& self, memcac
 
   memcached_string_t error_host= { hostname_port_message, size_t(size) };
 
-  assert(self.root);
+  assert_msg(self.root, "Programmer error, root was not set on instance");
   if (self.root == NULL)
   {
     return rc;
@@ -305,6 +305,7 @@ memcached_return_t memcached_set_error(org::libmemcached::Instance& self, memcac
   _set(self, (*self.root));
   assert(self.root->error_messages);
   assert(self.error_messages);
+  assert(self.error_messages->rc == self.root->error_messages->rc);
 
   return rc;
 }
@@ -411,6 +412,15 @@ memcached_return_t memcached_set_errno(org::libmemcached::Instance& self, int lo
   _set(*self.root, &error_host, rc, at, local_errno);
   _set(self, (*self.root));
 
+#if 0
+  if (self.root->error_messages->rc != self.error_messages->rc)
+  {
+    fprintf(stderr, "%s:%d %s != %s\n", __FILE__, __LINE__,
+            memcached_strerror(NULL, self.root->error_messages->rc),
+            memcached_strerror(NULL, self.error_messages->rc));
+  }
+#endif
+
   return rc;
 }
 
index 67b0999f7f2afff67e462ec9c2c5a4894577aea8..cb0e682bd163eaebe51a95e31062b60e720bde04 100644 (file)
@@ -416,7 +416,17 @@ static memcached_return_t textual_read_one_response(org::libmemcached::Instance*
           and buffer[6] == '_'
           and buffer[7] == 'E' and buffer[8] == 'R' and buffer[9] == 'R' and buffer[10] == 'O' and buffer[11] == 'R')
       {
-        return MEMCACHED_CLIENT_ERROR;
+        // Move past the basic error message and whitespace
+        char *startptr= buffer + memcached_literal_param_size("CLIENT_ERROR");
+        if (startptr[0] == ' ')
+        {
+          startptr++;
+        }
+
+        char *endptr= startptr;
+        while (*endptr != '\r' && *endptr != '\n') endptr++;
+
+        return memcached_set_error(*instance, MEMCACHED_CLIENT_ERROR, MEMCACHED_AT, startptr, size_t(endptr - startptr));
       }
     }
     break;
index 537e9edd8dfb04e7817a22e369793b6072d8fc3d..5ead6fe929d9eb0481a845c3fcdf0c62fd5a51ba 100644 (file)
@@ -45,11 +45,11 @@ memcached_server_list_append_with_weight(memcached_server_list_st ptr,
                                          uint32_t weight,
                                          memcached_return_t *error)
 {
-  uint32_t count;
-
   memcached_return_t unused;
   if (error == NULL)
+  {
     error= &unused;
+  }
 
   if (hostname == NULL)
   {
@@ -60,14 +60,14 @@ memcached_server_list_append_with_weight(memcached_server_list_st ptr,
   {
     port = 0;
   }
-  else if (not port)
+  else if (port == 0)
   {
     port= MEMCACHED_DEFAULT_PORT;
   }
 
 
   /* Increment count for hosts */
-  count= 1;
+  uint32_t count= 1;
   if (ptr != NULL)
   {
     count+= memcached_server_list_count(ptr);
index 25fda094923cca50e01211cb4518b5d44b17b8e3..74e619d234bfc45c3df2321c0c727e5bf6d4895e 100644 (file)
@@ -278,6 +278,8 @@ test_st regression_tests[]= {
   {"lp:994772", true, (test_callback_fn*)regression_994772_TEST },
   {"lp:1009493", true, (test_callback_fn*)regression_1009493_TEST },
   {"lp:1021819", true, (test_callback_fn*)regression_1021819_TEST },
+  {"lp:1048945", true, (test_callback_fn*)regression_1048945_TEST },
+  {"lp:1067242", true, (test_callback_fn*)regression_1067242_TEST },
   {0, false, (test_callback_fn*)0}
 };
 
index 3884ac52e5fb0b10372f67f769a2951aab73c8e8..a0570884a7c8a690133bcaf16a06b979c1e5bf26 100644 (file)
@@ -823,6 +823,34 @@ test_return_t memcached_add_SUCCESS_TEST(memcached_st *memc)
   return TEST_SUCCESS;
 }
 
+test_return_t regression_1067242_TEST(memcached_st *memc)
+{
+  test_compare(MEMCACHED_SUCCESS, memcached_set(memc,
+                                                test_literal_param(__func__), 
+                                                test_literal_param("-2"),
+                                                0, 0));
+
+  memcached_return_t rc;
+  char* value;
+  test_true((value= memcached_get(memc, test_literal_param(__func__), NULL, NULL, &rc)));
+  test_compare(MEMCACHED_SUCCESS, rc);
+  free(value);
+
+  for (size_t x= 0; x < 10; x++)
+  {
+    uint64_t new_number;
+    test_compare(MEMCACHED_CLIENT_ERROR,
+                 memcached_increment(memc, 
+                                     test_literal_param(__func__), 1, &new_number));
+    test_compare(MEMCACHED_CLIENT_ERROR, memcached_last_error(memc));
+    test_true((value= memcached_get(memc, test_literal_param(__func__), NULL, NULL, &rc)));
+    test_compare(MEMCACHED_SUCCESS, rc);
+    free(value);
+  }
+
+  return TEST_SUCCESS;
+}
+
 /*
   Set the value, then quit to make sure it is flushed.
   Come back in and test that add fails.
@@ -1845,6 +1873,34 @@ test_return_t add_host_test(memcached_st *memc)
   return TEST_SUCCESS;
 }
 
+test_return_t regression_1048945_TEST(memcached_st*)
+{
+  memcached_return status;
+
+  memcached_server_st* list= memcached_server_list_append_with_weight(NULL, "a", 11211, 0, &status);
+  test_compare(status, MEMCACHED_SUCCESS);
+
+  list= memcached_server_list_append_with_weight(list, "b", 11211, 0, &status);
+  test_compare(status, MEMCACHED_SUCCESS);
+
+  list= memcached_server_list_append_with_weight(list, "c", 11211, 0, &status);
+  test_compare(status, MEMCACHED_SUCCESS);
+
+  memcached_st* memc= memcached_create(NULL);
+
+  status= memcached_server_push(memc, list);
+  memcached_server_list_free(list);
+  test_compare(status, MEMCACHED_SUCCESS);
+
+  memcached_server_instance_st server= memcached_server_by_key(memc, test_literal_param(__func__), &status);
+  test_true(server);
+  test_compare(status, MEMCACHED_SUCCESS);
+
+  memcached_free(memc);
+
+  return TEST_SUCCESS;
+}
+
 test_return_t memcached_fetch_result_NOT_FOUND(memcached_st *memc)
 {
   memcached_return_t rc;
index 5d433aa5b06197d9b1453f5a31bf23be505f6fc4..104d44eefbd5cdd4282b2edadca6f15f21723848 100644 (file)
@@ -179,3 +179,5 @@ test_return_t kill_HUP_TEST(memcached_st *memc);
 test_return_t regression_996813_TEST(memcached_st*);
 test_return_t regression_994772_TEST(memcached_st*);
 test_return_t regression_1009493_TEST(memcached_st*);
+test_return_t regression_1048945_TEST(memcached_st*);
+test_return_t regression_1067242_TEST(memcached_st*);