X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fmemcached_delete.c;h=93b1eb7a1a6f7e95415e20976881b7f598046a29;hb=921abbe1906e77cc18cbe8859bc5afe9494d780e;hp=f2fab3221a53cca25203b936d100d86460c5a259;hpb=70d4781acf107377fa194a04d05e8cf31fd211c8;p=m6w6%2Flibmemcached diff --git a/libmemcached/memcached_delete.c b/libmemcached/memcached_delete.c index f2fab322..93b1eb7a 100644 --- a/libmemcached/memcached_delete.c +++ b/libmemcached/memcached_delete.c @@ -1,4 +1,5 @@ #include "common.h" +#include "memcached/protocol_binary.h" memcached_return memcached_delete(memcached_st *ptr, const char *key, size_t key_length, time_t expiration) @@ -117,14 +118,34 @@ static inline memcached_return binary_delete(memcached_st *ptr, memcached_io_write(&ptr->hosts[server_key], NULL, 0, 1); } + memcached_return rc= MEMCACHED_SUCCESS; + if ((memcached_do(&ptr->hosts[server_key], request.bytes, sizeof(request.bytes), 0) != MEMCACHED_SUCCESS) || (memcached_io_write(&ptr->hosts[server_key], key, key_length, flush) == -1)) { memcached_io_reset(&ptr->hosts[server_key]); - return MEMCACHED_WRITE_FAILURE; + rc= MEMCACHED_WRITE_FAILURE; + } + + unlikely (ptr->number_of_replicas > 0) + { + request.message.header.request.opcode= PROTOCOL_BINARY_CMD_DELETEQ; + + for (int x= 0; x < ptr->number_of_replicas; ++x) + { + ++server_key; + if (server_key == ptr->number_of_hosts) + server_key= 0; + + memcached_server_st* server= &ptr->hosts[server_key]; + if ((memcached_do(server, (const char*)request.bytes, + sizeof(request.bytes), 0) != MEMCACHED_SUCCESS) || + (memcached_io_write(server, key, key_length, flush) == -1)) + memcached_io_reset(server); + } } - return MEMCACHED_SUCCESS; + return rc; }