From: Continuous Integration Date: Mon, 12 Nov 2012 20:47:50 +0000 (-0500) Subject: Merge lp:~tangent-org/libmemcached/1.0-build Build: jenkins-Libmemcached-1.0-109 X-Git-Tag: 1.0.15~23 X-Git-Url: https://git.m6w6.name/?a=commitdiff_plain;h=733af73aaabe3762938ab52d70085c0b231f44d2;hp=644a03f734dab41c04cc8b26ad490a3064228b1e;p=m6w6%2Flibmemcached Merge lp:~tangent-org/libmemcached/1.0-build Build: jenkins-Libmemcached-1.0-109 --- diff --git a/ChangeLog b/ChangeLog index 6679d8c9..09ac7af8 100644 --- 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. diff --git a/libmemcached-1.0/return.h b/libmemcached-1.0/return.h index 65dc63af..781603b8 100644 --- a/libmemcached-1.0/return.h +++ b/libmemcached-1.0/return.h @@ -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 && diff --git a/libmemcached/error.cc b/libmemcached/error.cc index f963e124..67edcce8 100644 --- a/libmemcached/error.cc +++ b/libmemcached/error.cc @@ -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; } diff --git a/libmemcached/response.cc b/libmemcached/response.cc index 67b0999f..cb0e682b 100644 --- a/libmemcached/response.cc +++ b/libmemcached/response.cc @@ -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; diff --git a/libmemcached/server_list.cc b/libmemcached/server_list.cc index 537e9edd..5ead6fe9 100644 --- a/libmemcached/server_list.cc +++ b/libmemcached/server_list.cc @@ -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); diff --git a/tests/libmemcached-1.0/all_tests.h b/tests/libmemcached-1.0/all_tests.h index 25fda094..74e619d2 100644 --- a/tests/libmemcached-1.0/all_tests.h +++ b/tests/libmemcached-1.0/all_tests.h @@ -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} }; diff --git a/tests/libmemcached-1.0/mem_functions.cc b/tests/libmemcached-1.0/mem_functions.cc index 3884ac52..a0570884 100644 --- a/tests/libmemcached-1.0/mem_functions.cc +++ b/tests/libmemcached-1.0/mem_functions.cc @@ -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; diff --git a/tests/libmemcached-1.0/mem_functions.h b/tests/libmemcached-1.0/mem_functions.h index 5d433aa5..104d44ee 100644 --- a/tests/libmemcached-1.0/mem_functions.h +++ b/tests/libmemcached-1.0/mem_functions.h @@ -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*);