From: Toru Maesaka Date: Fri, 27 Mar 2009 02:50:56 +0000 (+0900) Subject: Unify the execution flow for fetch related functions and fix memcached_fetch_execute... X-Git-Tag: 0.27~2 X-Git-Url: https://git.m6w6.name/?a=commitdiff_plain;h=522a9124f1b0ec147d791abfbf8bdafe61681e91;p=m6w6%2Flibmemcached Unify the execution flow for fetch related functions and fix memcached_fetch_execute() to not always return success. --- diff --git a/libmemcached/Makefile.am b/libmemcached/Makefile.am index 74a5bbe2..9b1f00c8 100644 --- a/libmemcached/Makefile.am +++ b/libmemcached/Makefile.am @@ -39,7 +39,6 @@ libmemcached_la_SOURCES = crc.c \ memcached_delete.c \ memcached_do.c \ memcached_fetch.c \ - memcached_fetch_execute.c \ memcached_flush.c \ memcached_get.c \ memcached_hash.c \ diff --git a/libmemcached/memcached_fetch.c b/libmemcached/memcached_fetch.c index 7f8a6b52..07bfdda9 100644 --- a/libmemcached/memcached_fetch.c +++ b/libmemcached/memcached_fetch.c @@ -14,51 +14,28 @@ char *memcached_fetch(memcached_st *ptr, char *key, size_t *key_length, return NULL; } - while (ptr->cursor_server < ptr->number_of_hosts) - { - char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE]; - - if (memcached_server_response_count(&ptr->hosts[ptr->cursor_server]) == 0) - { - ptr->cursor_server++; - continue; - } - - *error= memcached_response(&ptr->hosts[ptr->cursor_server], buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, result_buffer); + result_buffer= memcached_fetch_result(ptr, result_buffer, error); - if (*error == MEMCACHED_END) /* END means that we move on to the next */ - { - memcached_server_response_reset(&ptr->hosts[ptr->cursor_server]); - ptr->cursor_server++; - continue; - } - else if (*error == MEMCACHED_SUCCESS) - { - *value_length= memcached_string_length(&result_buffer->value); - - if (key) - { - strncpy(key, result_buffer->key, result_buffer->key_length); - *key_length= result_buffer->key_length; - } + if (*error != MEMCACHED_SUCCESS || result_buffer == NULL) + { + *value_length= 0; + return NULL; + } - if (result_buffer->flags) - *flags= result_buffer->flags; - else - *flags= 0; + *value_length= memcached_string_length(&result_buffer->value); - return memcached_string_c_copy(&result_buffer->value); - } - else - { - *value_length= 0; - return NULL; - } + if (key) + { + strncpy(key, result_buffer->key, result_buffer->key_length); + *key_length= result_buffer->key_length; } - ptr->cursor_server= 0; - *value_length= 0; - return NULL; + if (result_buffer->flags) + *flags= result_buffer->flags; + else + *flags= 0; + + return memcached_string_c_copy(&result_buffer->value); } memcached_result_st *memcached_fetch_result(memcached_st *ptr, @@ -98,3 +75,25 @@ memcached_result_st *memcached_fetch_result(memcached_st *ptr, return NULL; } +memcached_return memcached_fetch_execute(memcached_st *ptr, + memcached_execute_function *callback, + void *context, + unsigned int number_of_callbacks) +{ + memcached_result_st *result= &ptr->result; + memcached_return rc= MEMCACHED_FAILURE; + unsigned int x; + + while ((result= memcached_fetch_result(ptr, result, &rc)) != NULL) { + if (rc == MEMCACHED_SUCCESS) + { + for (x= 0; x < number_of_callbacks; x++) + { + rc= (*callback[x])(ptr, result, context); + if (rc != MEMCACHED_SUCCESS) + break; + } + } + } + return rc; +} diff --git a/libmemcached/memcached_fetch_execute.c b/libmemcached/memcached_fetch_execute.c deleted file mode 100644 index 5058fdec..00000000 --- a/libmemcached/memcached_fetch_execute.c +++ /dev/null @@ -1,47 +0,0 @@ -#include "common.h" - -memcached_return memcached_fetch_execute(memcached_st *ptr, - memcached_execute_function *callback, - void *context, - unsigned int number_of_callbacks) -{ - memcached_result_st *result= &ptr->result; - - while (ptr->cursor_server < ptr->number_of_hosts) - { - memcached_return rc; - - char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE]; - - if (memcached_server_response_count(&ptr->hosts[ptr->cursor_server]) == 0) - { - ptr->cursor_server++; - continue; - } - - rc= memcached_response(&ptr->hosts[ptr->cursor_server], buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, result); - - if (rc == MEMCACHED_END) /* END means that we move on to the next */ - { - memcached_server_response_reset(&ptr->hosts[ptr->cursor_server]); - ptr->cursor_server++; - continue; - } - else if (rc == MEMCACHED_SUCCESS) - { - unsigned int x; - - for (x= 0; x < number_of_callbacks; x++) - { - memcached_return iferror; - - iferror= (*callback[x])(ptr, result, context); - - if (iferror != MEMCACHED_SUCCESS) - continue; - } - } - } - - return MEMCACHED_SUCCESS; -}