X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=clients%2Fexecute.cc;h=47319778e868b7b51efff6b40dffd9acdae552fa;hb=6139acf5af6c33a6ca858306e7abd97e0ee4104f;hp=7f89f77373da6a120d01b490c40e375695e17b41;hpb=ae6bc7501efd5aeaaee92dabe2da0ec2d1625c5b;p=awesomized%2Flibmemcached diff --git a/clients/execute.cc b/clients/execute.cc index 7f89f773..47319778 100644 --- a/clients/execute.cc +++ b/clients/execute.cc @@ -1,4 +1,5 @@ /* LibMemcached + * Copyright (C) 2011-2012 Data Differential, http://datadifferential.com/ * Copyright (C) 2006-2009 Brian Aker * All rights reserved. * @@ -14,28 +15,32 @@ Return the number of rows set. */ -#include "config.h" -#include "execute.h" +#include +#include "clients/execute.h" unsigned int execute_set(memcached_st *memc, pairs_st *pairs, unsigned int number_of) { - memcached_return_t rc; - unsigned int x; - unsigned int pairs_sent; - - for (x= 0, pairs_sent= 0; x < number_of; x++) + uint32_t count= 0; + for (; count < number_of; ++count) { - rc= memcached_set(memc, pairs[x].key, pairs[x].key_length, - pairs[x].value, pairs[x].value_length, - 0, 0); - if (rc != MEMCACHED_SUCCESS && rc != MEMCACHED_BUFFERED) - fprintf(stderr, "Failured on insert of %.*s\n", - (unsigned int)pairs[x].key_length, pairs[x].key); - else - pairs_sent++; + memcached_return_t rc= memcached_set(memc, pairs[count].key, pairs[count].key_length, + pairs[count].value, pairs[count].value_length, + 0, 0); + if (memcached_failed(rc)) + { + fprintf(stderr, "%s:%d Failure on %u insert (%s) of %.*s\n", + __FILE__, __LINE__, count, + memcached_last_error_message(memc), + (unsigned int)pairs[count].key_length, pairs[count].key); + + // We will try to reconnect and see if that fixes the issue + memcached_quit(memc); + + return count; + } } - return pairs_sent; + return count; } /* @@ -44,30 +49,34 @@ unsigned int execute_set(memcached_st *memc, pairs_st *pairs, unsigned int numbe */ unsigned int execute_get(memcached_st *memc, pairs_st *pairs, unsigned int number_of) { - memcached_return_t rc; unsigned int x; unsigned int retrieved; for (retrieved= 0,x= 0; x < number_of; x++) { - char *value; size_t value_length; uint32_t flags; - unsigned int fetch_key; - fetch_key= (unsigned int)((unsigned int)random() % number_of); + unsigned int fetch_key= (unsigned int)((unsigned int)random() % number_of); - value= memcached_get(memc, pairs[fetch_key].key, pairs[fetch_key].key_length, - &value_length, &flags, &rc); + memcached_return_t rc; + char *value= memcached_get(memc, pairs[fetch_key].key, pairs[fetch_key].key_length, + &value_length, &flags, &rc); - if (rc != MEMCACHED_SUCCESS) - fprintf(stderr, "Failured on read of %.*s\n", + if (memcached_failed(rc)) + { + fprintf(stderr, "%s:%d Failure on read(%s) of %.*s\n", + __FILE__, __LINE__, + memcached_last_error_message(memc), (unsigned int)pairs[fetch_key].key_length, pairs[fetch_key].key); + } else + { retrieved++; + } - free(value); + ::free(value); } return retrieved; @@ -113,7 +122,8 @@ unsigned int execute_mget(memcached_st *memc, rc= memcached_fetch_execute(memc, callbacks, (void *)&retrieved, 1); if (rc != MEMCACHED_SUCCESS && rc != MEMCACHED_NOTFOUND && rc != MEMCACHED_END) { - fprintf(stderr, "Failed to execute mget: %s\n", + fprintf(stderr, "%s:%d Failed to execute mget: %s\n", + __FILE__, __LINE__, memcached_strerror(memc, rc)); memcached_quit(memc); return 0; @@ -121,7 +131,8 @@ unsigned int execute_mget(memcached_st *memc, } else { - fprintf(stderr, "Failed to execute mget: %s\n", + fprintf(stderr, "%s:%d Failed to execute mget: %s\n", + __FILE__, __LINE__, memcached_strerror(memc, rc)); memcached_quit(memc); return 0;