X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fget.c;h=aa4e6f53de49eb2fba940dc08046f50c9ef6909e;hb=a468641b355470d81f358daf274b5853093cf99d;hp=a6cb549fce434185ebbcb6269cf40a7af558b7e6;hpb=d2346aec8760237e77a5c2ff982159bae9ee4579;p=m6w6%2Flibmemcached diff --git a/libmemcached/get.c b/libmemcached/get.c index a6cb549f..aa4e6f53 100644 --- a/libmemcached/get.c +++ b/libmemcached/get.c @@ -144,7 +144,7 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, size_t number_of_keys, bool mget_mode) { - memcached_return_t rc= MEMCACHED_NOTFOUND; + bool failures_occured_in_sending= false; const char *get_command= "get "; uint8_t get_command_length= 4; unsigned int master_server_key= (unsigned int)-1; /* 0 is a valid server id! */ @@ -211,6 +211,8 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, If a server fails we warn about errors and start all over with sending keys to the server. */ + memcached_return_t rc= MEMCACHED_SUCCESS; + size_t hosts_connected= 0; for (uint32_t x= 0; x < number_of_keys; x++) { memcached_server_write_instance_st instance; @@ -241,12 +243,14 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, rc= memcached_connect(instance); if (rc != MEMCACHED_SUCCESS) + { continue; + } + hosts_connected++; if ((memcached_io_writev(instance, vector, 4, false)) == -1) { - fprintf(stderr, "%s:%d (%s)\n", __FILE__, __LINE__,__func__);fflush(stdout); - rc= MEMCACHED_SOME_ERRORS; + failures_occured_in_sending= true; continue; } WATCHPOINT_ASSERT(instance->cursor_active == 0); @@ -258,16 +262,27 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, if ((memcached_io_writev(instance, (vector + 1), 3, false)) == -1) { memcached_server_response_reset(instance); - fprintf(stderr, "%s:%d (%s)\n", __FILE__, __LINE__,__func__);fflush(stdout); - rc= MEMCACHED_SOME_ERRORS; + failures_occured_in_sending= true; continue; } } } + if (hosts_connected == 0) + { + LIBMEMCACHED_MEMCACHED_MGET_END(); + + if (rc != MEMCACHED_SUCCESS) + return rc; + + return MEMCACHED_NO_SERVERS; + } + + /* Should we muddle on if some servers are dead? */ + bool success_happened= false; for (uint32_t x= 0; x < memcached_server_count(ptr); x++) { memcached_server_write_instance_st instance= @@ -278,14 +293,24 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, /* We need to do something about non-connnected hosts in the future */ if ((memcached_io_write(instance, "\r\n", 2, true)) == -1) { - fprintf(stderr, "%s:%d (%s)\n", __FILE__, __LINE__,__func__);fflush(stdout); - rc= MEMCACHED_SOME_ERRORS; + failures_occured_in_sending= true; + } + else + { + success_happened= true; } } } LIBMEMCACHED_MEMCACHED_MGET_END(); - return rc; + + if (failures_occured_in_sending && success_happened) + return MEMCACHED_SOME_ERRORS; + + if (success_happened) + return MEMCACHED_SUCCESS; + + return MEMCACHED_FAILURE; } memcached_return_t memcached_mget_by_key(memcached_st *ptr, @@ -412,7 +437,6 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr, if (memcached_io_writev(instance, vector, 3, flush) == -1) { memcached_server_response_reset(instance); - fprintf(stderr, "%s:%d (%s)\n", __FILE__, __LINE__,__func__);fflush(stdout); rc= MEMCACHED_SOME_ERRORS; continue; } @@ -422,7 +446,6 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr, memcached_server_response_increment(instance); if ((x > 0 && x == ptr->io_key_prefetch) && memcached_flush_buffers(ptr) != MEMCACHED_SUCCESS) { - fprintf(stderr, "%s:%d (%s)\n", __FILE__, __LINE__,__func__);fflush(stdout); rc= MEMCACHED_SOME_ERRORS; } } @@ -448,7 +471,6 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr, { memcached_server_response_reset(instance); memcached_io_reset(instance); - fprintf(stderr, "%s:%d (%s)\n", __FILE__, __LINE__,__func__);fflush(stdout); rc= MEMCACHED_SOME_ERRORS; } @@ -457,7 +479,6 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr, { memcached_server_response_reset(instance); memcached_io_reset(instance); - fprintf(stderr, "%s:%d (%s)\n", __FILE__, __LINE__,__func__);fflush(stdout); rc= MEMCACHED_SOME_ERRORS; } }