X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fget.cc;h=cc6af2d83357cf4c56e48f7dc879a7b87a4df311;hb=81e8f0486563e3bcf9e5bdb634af45c6767009cc;hp=86f136707e0d3a9ebb92d8c63e33b167e9336a8d;hpb=868795ee745fd29e511647fad2176b0f44daba83;p=m6w6%2Flibmemcached diff --git a/libmemcached/get.cc b/libmemcached/get.cc index 86f13670..cc6af2d8 100644 --- a/libmemcached/get.cc +++ b/libmemcached/get.cc @@ -119,8 +119,9 @@ char *memcached_get_by_key(memcached_st *ptr, { if (ptr->get_key_failure and *error == MEMCACHED_NOTFOUND) { - memcached_result_reset(&ptr->result); - memcached_return_t rc= ptr->get_key_failure(ptr, key, key_length, &ptr->result); + memcached_result_st key_failure_result; + memcached_result_st* result_ptr= memcached_result_create(ptr, &key_failure_result); + memcached_return_t rc= ptr->get_key_failure(ptr, key, key_length, result_ptr); /* On all failure drop to returning NULL */ if (rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED) @@ -135,10 +136,10 @@ char *memcached_get_by_key(memcached_st *ptr, } rc= memcached_set(ptr, key, key_length, - (memcached_result_value(&ptr->result)), - (memcached_result_length(&ptr->result)), + (memcached_result_value(result_ptr)), + (memcached_result_length(result_ptr)), 0, - (memcached_result_flags(&ptr->result))); + (memcached_result_flags(result_ptr))); if (rc == MEMCACHED_BUFFERED and latch == 0) { @@ -148,20 +149,25 @@ char *memcached_get_by_key(memcached_st *ptr, else { rc= memcached_set(ptr, key, key_length, - (memcached_result_value(&ptr->result)), - (memcached_result_length(&ptr->result)), + (memcached_result_value(result_ptr)), + (memcached_result_length(result_ptr)), 0, - (memcached_result_flags(&ptr->result))); + (memcached_result_flags(result_ptr))); } if (rc == MEMCACHED_SUCCESS or rc == MEMCACHED_BUFFERED) { *error= rc; - *value_length= memcached_result_length(&ptr->result); - *flags= memcached_result_flags(&ptr->result); - return memcached_string_take_value(&ptr->result.value); + *value_length= memcached_result_length(result_ptr); + *flags= memcached_result_flags(result_ptr); + char *result_value= memcached_string_take_value(&result_ptr->value); + memcached_result_free(result_ptr); + + return result_value; } } + + memcached_result_free(result_ptr); } assert_msg(ptr->query_id == query_id +1, "Programmer error, the query_id was not incremented."); @@ -196,8 +202,8 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, bool mget_mode) { bool failures_occured_in_sending= false; - const char *get_command= "get "; - uint8_t get_command_length= 4; + const char *get_command= "get"; + uint8_t get_command_length= 3; unsigned int master_server_key= (unsigned int)-1; /* 0 is a valid server id! */ memcached_return_t rc; @@ -240,7 +246,7 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, { memcached_server_write_instance_st instance= memcached_server_instance_fetch(ptr, x); - if (memcached_server_response_count(instance)) + if (memcached_instance_response_count(instance)) { char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE]; @@ -249,7 +255,7 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, memcached_io_write(instance); } - while(memcached_server_response_count(instance)) + while(memcached_instance_response_count(instance)) { (void)memcached_response(instance, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, &ptr->result); } @@ -264,8 +270,8 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, if (ptr->flags.support_cas) { - get_command= "gets "; - get_command_length= 5; + get_command= "gets"; + get_command_length= 4; } /* @@ -293,13 +299,13 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, libmemcached_io_vector_st vector[]= { { get_command, get_command_length }, + { memcached_literal_param(" ") }, { memcached_array_string(ptr->_namespace), memcached_array_size(ptr->_namespace) }, - { keys[x], key_length[x] }, - { memcached_literal_param(" ") } + { keys[x], key_length[x] } }; - if (memcached_server_response_count(instance) == 0) + if (memcached_instance_response_count(instance) == 0) { rc= memcached_connect(instance); @@ -316,14 +322,14 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, continue; } WATCHPOINT_ASSERT(instance->cursor_active == 0); - memcached_server_response_increment(instance); + memcached_instance_response_increment(instance); WATCHPOINT_ASSERT(instance->cursor_active == 1); } else { if ((memcached_io_writev(instance, (vector + 1), 3, false)) == false) { - memcached_server_response_reset(instance); + memcached_instance_response_reset(instance); failures_occured_in_sending= true; continue; } @@ -352,7 +358,7 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, memcached_server_write_instance_st instance= memcached_server_instance_fetch(ptr, x); - if (memcached_server_response_count(instance)) + if (memcached_instance_response_count(instance)) { /* We need to do something about non-connnected hosts in the future */ if ((memcached_io_write(instance, "\r\n", 2, true)) == -1) @@ -476,7 +482,7 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr, memcached_server_write_instance_st instance= memcached_server_instance_fetch(ptr, server_key); - if (memcached_server_response_count(instance) == 0) + if (memcached_instance_response_count(instance) == 0) { rc= memcached_connect(instance); if (memcached_failed(rc)) @@ -486,7 +492,7 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr, } protocol_binary_request_getk request= { }; //= {.bytes= {0}}; - request.message.header.request.magic= PROTOCOL_BINARY_REQ; + initialize_binary_request(instance, request.message.header); if (mget_mode) { request.message.header.request.opcode= PROTOCOL_BINARY_CMD_GETKQ; @@ -542,19 +548,19 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr, Send a noop command to flush the buffers */ protocol_binary_request_noop request= {}; //= {.bytes= {0}}; - request.message.header.request.magic= PROTOCOL_BINARY_REQ; request.message.header.request.opcode= PROTOCOL_BINARY_CMD_NOOP; request.message.header.request.datatype= PROTOCOL_BINARY_RAW_BYTES; for (uint32_t x= 0; x < memcached_server_count(ptr); ++x) { memcached_server_write_instance_st instance= memcached_server_instance_fetch(ptr, x); + initialize_binary_request(instance, request.message.header); - if (memcached_server_response_count(instance)) + if (memcached_instance_response_count(instance)) { if (memcached_io_write(instance) == false) { - memcached_server_response_reset(instance); + memcached_instance_response_reset(instance); memcached_io_reset(instance); rc= MEMCACHED_SOME_ERRORS; } @@ -562,7 +568,7 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr, if (memcached_io_write(instance, request.bytes, sizeof(request.bytes), true) == -1) { - memcached_server_response_reset(instance); + memcached_instance_response_reset(instance); memcached_io_reset(instance); rc= MEMCACHED_SOME_ERRORS; } @@ -620,7 +626,7 @@ static memcached_return_t replication_binary_mget(memcached_st *ptr, memcached_server_write_instance_st instance= memcached_server_instance_fetch(ptr, server); - if (memcached_server_response_count(instance) == 0) + if (memcached_instance_response_count(instance) == 0) { rc= memcached_connect(instance); @@ -634,7 +640,7 @@ static memcached_return_t replication_binary_mget(memcached_st *ptr, } protocol_binary_request_getk request= {}; - request.message.header.request.magic= PROTOCOL_BINARY_REQ; + initialize_binary_request(instance, request.message.header); request.message.header.request.opcode= PROTOCOL_BINARY_CMD_GETK; 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;