X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Ffetch.cc;h=d795109259108b5bde95c5682cf5ca04f523790b;hb=770d4f6b4cc99bff87d27f4cbe52b2c6a2f2fbd2;hp=ff729f9e59942df907003c90cc0ce5254d85211f;hpb=96fd17942838d7c2943334da9e7616e56c613595;p=awesomized%2Flibmemcached diff --git a/libmemcached/fetch.cc b/libmemcached/fetch.cc index ff729f9e..d7951092 100644 --- a/libmemcached/fetch.cc +++ b/libmemcached/fetch.cc @@ -37,11 +37,12 @@ #include -char *memcached_fetch(memcached_st *ptr, char *key, size_t *key_length, +char *memcached_fetch(memcached_st *shell, char *key, size_t *key_length, size_t *value_length, uint32_t *flags, memcached_return_t *error) { + Memcached* ptr= memcached2Memcached(shell); memcached_return_t unused; if (error == NULL) { @@ -191,8 +192,9 @@ memcached_result_st *memcached_fetch_result(memcached_st *ptr, } *error= MEMCACHED_MAXIMUM_RETURN; // We use this to see if we ever go into the loop - org::libmemcached::Instance *server; + memcached_instance_st *server; memcached_return_t read_ret= MEMCACHED_SUCCESS; + bool connection_failures= false; while ((server= memcached_io_get_readable_server(ptr, read_ret))) { char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE]; @@ -202,6 +204,11 @@ memcached_result_st *memcached_fetch_result(memcached_st *ptr, { continue; } + else if (*error == MEMCACHED_CONNECTION_FAILURE) + { + connection_failures= true; + continue; + } else if (*error == MEMCACHED_SUCCESS) { result->count++; @@ -229,6 +236,16 @@ memcached_result_st *memcached_fetch_result(memcached_st *ptr, { *error= MEMCACHED_NOTFOUND; } + else if (connection_failures) + { + /* + If we have a connection failure to some servers, the caller may + wish to treat that differently to getting a definitive NOT_FOUND + from all servers, so return MEMCACHED_CONNECTION_FAILURE to allow + that. + */ + *error= MEMCACHED_CONNECTION_FAILURE; + } else if (*error == MEMCACHED_SUCCESS) { *error= MEMCACHED_END; @@ -252,11 +269,12 @@ memcached_result_st *memcached_fetch_result(memcached_st *ptr, return NULL; } -memcached_return_t memcached_fetch_execute(memcached_st *ptr, +memcached_return_t memcached_fetch_execute(memcached_st *shell, memcached_execute_fn *callback, void *context, uint32_t number_of_callbacks) { + Memcached* ptr= memcached2Memcached(shell); memcached_result_st *result= &ptr->result; memcached_return_t rc; bool some_errors= false;