X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fget.cc;h=86d8cf2e13522b625cf35f4acd8a1de23636e733;hb=07882dbe92163f93cd995c5c55517e4b1d05aa11;hp=387565c554e02699f57a0d4496b506a15de62fac;hpb=5adf96bdb66a81becd1623bb453f8169bda67ced;p=m6w6%2Flibmemcached diff --git a/libmemcached/get.cc b/libmemcached/get.cc index 387565c5..86d8cf2e 100644 --- a/libmemcached/get.cc +++ b/libmemcached/get.cc @@ -50,13 +50,13 @@ char *memcached_get(memcached_st *ptr, const char *key, flags, error); } -static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, - const char *group_key, - size_t group_key_length, - const char * const *keys, - const size_t *key_length, - size_t number_of_keys, - bool mget_mode); +static memcached_return_t __mget_by_key_real(memcached_st *ptr, + const char *group_key, + size_t group_key_length, + const char * const *keys, + const size_t *key_length, + size_t number_of_keys, + const bool mget_mode); char *memcached_get_by_key(memcached_st *shell, const char *group_key, size_t group_key_length, @@ -79,9 +79,9 @@ char *memcached_get_by_key(memcached_st *shell, } /* Request the key */ - *error= memcached_mget_by_key_real(ptr, group_key, group_key_length, - (const char * const *)&key, &key_length, - 1, false); + *error= __mget_by_key_real(ptr, group_key, group_key_length, + (const char * const *)&key, &key_length, + 1, false); if (ptr) { assert_msg(ptr->query_id == query_id +1, "Programmer error, the query_id was not incremented."); @@ -114,7 +114,6 @@ char *memcached_get_by_key(memcached_st *shell, { *error= MEMCACHED_NOTFOUND; } - if (value == NULL) { if (ptr->get_key_failure and *error == MEMCACHED_NOTFOUND) @@ -186,20 +185,20 @@ memcached_return_t memcached_mget(memcached_st *ptr, } static memcached_return_t binary_mget_by_key(memcached_st *ptr, - uint32_t master_server_key, - bool is_group_key_set, + const uint32_t master_server_key, + const bool is_group_key_set, + const char * const *keys, + const size_t *key_length, + const size_t number_of_keys, + const bool mget_mode); + +static memcached_return_t __mget_by_key_real(memcached_st *ptr, + const char *group_key, + const size_t group_key_length, const char * const *keys, const size_t *key_length, size_t number_of_keys, - bool mget_mode); - -static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, - const char *group_key, - size_t group_key_length, - const char * const *keys, - const size_t *key_length, - size_t number_of_keys, - bool mget_mode) + const bool mget_mode) { bool failures_occured_in_sending= false; const char *get_command= "get"; @@ -221,12 +220,14 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, if (number_of_keys == 0) { - return memcached_set_error(*ptr, MEMCACHED_NOTFOUND, MEMCACHED_AT, memcached_literal_param("number_of_keys was zero")); + return memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT, memcached_literal_param("Numbers of keys provided was zero")); } - if (memcached_failed(memcached_key_test(*ptr, keys, key_length, number_of_keys))) + if (memcached_failed((rc= memcached_key_test(*ptr, keys, key_length, number_of_keys)))) { - return memcached_last_error(ptr); + assert(memcached_last_error(ptr) == rc); + + return rc; } bool is_group_key_set= false; @@ -244,7 +245,7 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, */ for (uint32_t x= 0; x < memcached_server_count(ptr); x++) { - org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, x); + memcached_instance_st* instance= memcached_instance_fetch(ptr, x); if (instance->response_count()) { @@ -293,7 +294,7 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, server_key= memcached_generate_hash_with_redistribution(ptr, keys[x], key_length[x]); } - org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, server_key); + memcached_instance_st* instance= memcached_instance_fetch(ptr, server_key); libmemcached_io_vector_st vector[]= { @@ -354,7 +355,7 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, bool success_happened= false; for (uint32_t x= 0; x < memcached_server_count(ptr); x++) { - org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, x); + memcached_instance_st* instance= memcached_instance_fetch(ptr, x); if (instance->response_count()) { @@ -393,8 +394,7 @@ memcached_return_t memcached_mget_by_key(memcached_st *shell, size_t number_of_keys) { Memcached* ptr= memcached2Memcached(shell); - return memcached_mget_by_key_real(ptr, group_key, group_key_length, keys, - key_length, number_of_keys, true); + return __mget_by_key_real(ptr, group_key, group_key_length, keys, key_length, number_of_keys, true); } memcached_return_t memcached_mget_execute(memcached_st *ptr, @@ -449,20 +449,26 @@ memcached_return_t memcached_mget_execute_by_key(memcached_st *shell, rc= memcached_mget_by_key(ptr, group_key, group_key_length, keys, key_length, number_of_keys); ptr->callbacks= original_callbacks; + return rc; } static memcached_return_t simple_binary_mget(memcached_st *ptr, - uint32_t master_server_key, + const uint32_t master_server_key, bool is_group_key_set, const char * const *keys, const size_t *key_length, - size_t number_of_keys, bool mget_mode) + const size_t number_of_keys, const bool mget_mode) { memcached_return_t rc= MEMCACHED_NOTFOUND; bool flush= (number_of_keys == 1); + if (memcached_failed(rc= memcached_key_test(*ptr, keys, key_length, number_of_keys))) + { + return rc; + } + /* If a server fails we warn about errors and start all over with sending keys to the server. @@ -480,7 +486,7 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr, server_key= memcached_generate_hash_with_redistribution(ptr, keys[x], key_length[x]); } - org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, server_key); + memcached_instance_st* instance= memcached_instance_fetch(ptr, server_key); if (instance->response_count() == 0) { @@ -502,10 +508,13 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr, request.message.header.request.opcode= PROTOCOL_BINARY_CMD_GETK; } +#if 0 { memcached_return_t vk= memcached_validate_key_length(key_length[x], ptr->flags.binary_protocol); - if (vk != MEMCACHED_SUCCESS) + if (memcached_failed(rc= memcached_key_test(*memc, (const char **)&key, &key_length, 1))) { + memcached_set_error(ptr, vk, MEMCACHED_AT, memcached_literal_param("Key was too long.")); + if (x > 0) { memcached_io_reset(instance); @@ -514,6 +523,7 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr, return vk; } } +#endif request.message.header.request.keylen= htons((uint16_t)(key_length[x] + memcached_array_size(ptr->_namespace))); request.message.header.request.datatype= PROTOCOL_BINARY_RAW_BYTES; @@ -553,11 +563,11 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr, for (uint32_t x= 0; x < memcached_server_count(ptr); ++x) { - org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, x); - initialize_binary_request(instance, request.message.header); + memcached_instance_st* instance= memcached_instance_fetch(ptr, x); if (instance->response_count()) { + initialize_binary_request(instance, request.message.header); if ((memcached_io_write(instance) == false) or (memcached_io_write(instance, request.bytes, sizeof(request.bytes), true) == -1)) { @@ -569,7 +579,6 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr, } } - return rc; } @@ -578,7 +587,7 @@ static memcached_return_t replication_binary_mget(memcached_st *ptr, bool* dead_servers, const char *const *keys, const size_t *key_length, - size_t number_of_keys) + const size_t number_of_keys) { memcached_return_t rc= MEMCACHED_NOTFOUND; uint32_t start= 0; @@ -619,7 +628,7 @@ static memcached_return_t replication_binary_mget(memcached_st *ptr, continue; } - org::libmemcached::Instance* instance= memcached_instance_fetch(ptr, server); + memcached_instance_st* instance= memcached_instance_fetch(ptr, server); if (instance->response_count() == 0) { @@ -680,12 +689,12 @@ static memcached_return_t replication_binary_mget(memcached_st *ptr, } static memcached_return_t binary_mget_by_key(memcached_st *ptr, - uint32_t master_server_key, + const uint32_t master_server_key, bool is_group_key_set, const char * const *keys, const size_t *key_length, - size_t number_of_keys, - bool mget_mode) + const size_t number_of_keys, + const bool mget_mode) { if (ptr->number_of_replicas == 0) {