X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fget.c;h=035f6ea2d9eb9a381fac49dbd0056191f485e15c;hb=648b04703e752c8146f42c913b7f25ce7eca2196;hp=990f9bbf40bbd23a13fe8dfe5c6aea9554b0dbb2;hpb=857ca43d65fe6a52474641130312d26d125bef15;p=awesomized%2Flibmemcached diff --git a/libmemcached/get.c b/libmemcached/get.c index 990f9bbf..035f6ea2 100644 --- a/libmemcached/get.c +++ b/libmemcached/get.c @@ -169,7 +169,7 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, { if (ptr->flags.verify_key && (memcached_key_test((const char * const *)&master_key, &master_key_length, 1) == MEMCACHED_BAD_KEY_PROVIDED)) return MEMCACHED_BAD_KEY_PROVIDED; - master_server_key= memcached_generate_hash(ptr, master_key, master_key_length); + master_server_key= memcached_generate_hash_with_redistribution(ptr, master_key, master_key_length); is_master_key_set= true; } @@ -181,7 +181,7 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, */ for (x= 0; x < memcached_server_count(ptr); x++) { - memcached_server_instance_st *instance= + memcached_server_write_instance_st instance= memcached_server_instance_fetch(ptr, x); if (memcached_server_response_count(instance)) @@ -212,7 +212,7 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, */ for (x= 0; x < number_of_keys; x++) { - memcached_server_instance_st *instance; + memcached_server_write_instance_st instance; uint32_t server_key; if (is_master_key_set) @@ -221,7 +221,7 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, } else { - server_key= memcached_generate_hash(ptr, keys[x], key_length[x]); + server_key= memcached_generate_hash_with_redistribution(ptr, keys[x], key_length[x]); } instance= memcached_server_instance_fetch(ptr, server_key); @@ -274,7 +274,7 @@ static memcached_return_t memcached_mget_by_key_real(memcached_st *ptr, */ for (x= 0; x < memcached_server_count(ptr); x++) { - memcached_server_instance_st *instance= + memcached_server_write_instance_st instance= memcached_server_instance_fetch(ptr, x); if (memcached_server_response_count(instance)) @@ -362,7 +362,7 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr, for (x= 0; x < number_of_keys; x++) { uint32_t server_key; - memcached_server_instance_st *instance; + memcached_server_write_instance_st instance; if (is_master_key_set) { @@ -370,7 +370,7 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr, } else { - server_key= memcached_generate_hash(ptr, keys[x], key_length[x]); + server_key= memcached_generate_hash_with_redistribution(ptr, keys[x], key_length[x]); } instance= memcached_server_instance_fetch(ptr, server_key); @@ -402,14 +402,13 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr, return vk; } - request.message.header.request.keylen= htons((uint16_t)key_length[x]); + request.message.header.request.keylen= htons((uint16_t)(key_length[x] + ptr->prefix_key_length)); request.message.header.request.datatype= PROTOCOL_BINARY_RAW_BYTES; - request.message.header.request.bodylen= htonl((uint32_t) key_length[x]); + request.message.header.request.bodylen= htonl((uint32_t)( key_length[x] + ptr->prefix_key_length)); - if ((memcached_io_write(instance, request.bytes, - sizeof(request.bytes), false) == -1) || - (memcached_io_write(instance, keys[x], - key_length[x], flush) == -1)) + if ((memcached_io_write(instance, request.bytes, sizeof(request.bytes), false) == -1) || + (memcached_io_write(instance, ptr->prefix_key, ptr->prefix_key_length, false) == -1) || + (memcached_io_write(instance, keys[x], key_length[x], flush) == -1)) { memcached_server_response_reset(instance); rc= MEMCACHED_SOME_ERRORS; @@ -419,9 +418,10 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr, /* We just want one pending response per server */ memcached_server_response_reset(instance); memcached_server_response_increment(instance); - if ((x > 0 && x == ptr->io_key_prefetch) && - memcached_flush_buffers(ptr) != MEMCACHED_SUCCESS) + if ((x > 0 && x == ptr->io_key_prefetch) && memcached_flush_buffers(ptr) != MEMCACHED_SUCCESS) + { rc= MEMCACHED_SOME_ERRORS; + } } if (mget_mode) @@ -436,7 +436,7 @@ static memcached_return_t simple_binary_mget(memcached_st *ptr, for (x= 0; x < memcached_server_count(ptr); x++) { - memcached_server_instance_st *instance= + memcached_server_write_instance_st instance= memcached_server_instance_fetch(ptr, x); if (memcached_server_response_count(instance)) @@ -484,7 +484,7 @@ static memcached_return_t replication_binary_mget(memcached_st *ptr, for (x= 0; x < number_of_keys; ++x) { - memcached_server_instance_st *instance; + memcached_server_write_instance_st instance; if (hash[x] == memcached_server_count(ptr)) continue; /* Already successfully sent */ @@ -519,9 +519,9 @@ static memcached_return_t replication_binary_mget(memcached_st *ptr, .message.header.request= { .magic= PROTOCOL_BINARY_REQ, .opcode= PROTOCOL_BINARY_CMD_GETK, - .keylen= htons((uint16_t)key_length[x]), + .keylen= htons((uint16_t)(key_length[x] + ptr->prefix_key_length)), .datatype= PROTOCOL_BINARY_RAW_BYTES, - .bodylen= htonl((uint32_t)key_length[x]) + .bodylen= htonl((uint32_t)(key_length[x] + ptr->prefix_key_length)) } }; @@ -535,10 +535,9 @@ static memcached_return_t replication_binary_mget(memcached_st *ptr, * that we might have processed some of the responses etc. For now, * just make sure we work _correctly_ */ - if ((memcached_io_write(instance, request.bytes, - sizeof(request.bytes), false) == -1) || - (memcached_io_write(instance, keys[x], - key_length[x], true) == -1)) + if ((memcached_io_write(instance, request.bytes, sizeof(request.bytes), false) == -1) || + (memcached_io_write(instance, ptr->prefix_key, ptr->prefix_key_length, false) == -1) || + (memcached_io_write(instance, keys[x], key_length[x], true) == -1)) { memcached_io_reset(instance); dead_servers[server]= true; @@ -588,11 +587,19 @@ static memcached_return_t binary_mget_by_key(memcached_st *ptr, } if (is_master_key_set) + { for (size_t x= 0; x < number_of_keys; x++) + { hash[x]= master_server_key; + } + } else + { for (size_t x= 0; x < number_of_keys; x++) - hash[x]= memcached_generate_hash(ptr, keys[x], key_length[x]); + { + hash[x]= memcached_generate_hash_with_redistribution(ptr, keys[x], key_length[x]); + } + } rc= replication_binary_mget(ptr, hash, dead_servers, keys, key_length, number_of_keys);