X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Fbin%2Fmemslap.cc;h=a8ecf2d190f8011996e359717bc78cd7839e8c93;hb=0f27cca46a4a529459ca988268972f480a9730c6;hp=9bc4f2385683583960aa12348c11ecf1633a224f;hpb=5e760300d15ef4c5b7eed3fb9f37920ebca2f6ec;p=awesomized%2Flibmemcached diff --git a/src/bin/memslap.cc b/src/bin/memslap.cc index 9bc4f238..a8ecf2d1 100644 --- a/src/bin/memslap.cc +++ b/src/bin/memslap.cc @@ -1,42 +1,19 @@ -/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab: - * - * Libmemcached library - * - * Copyright (C) 2011-2012 Data Differential, http://datadifferential.com/ - * Copyright (C) 2006-2009 Brian Aker All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * - * * The names of its contributors may not be used to endorse or - * promote products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - - -#include +/* + +--------------------------------------------------------------------+ + | libmemcached - C/C++ Client Library for memcached | + +--------------------------------------------------------------------+ + | Redistribution and use in source and binary forms, with or without | + | modification, are permitted under the terms of the BSD license. | + | You should have received a copy of the license in a bundled file | + | named LICENSE; in case you did not receive a copy you can review | + | the terms online at: https://opensource.org/licenses/BSD-3-Clause | + +--------------------------------------------------------------------+ + | Copyright (c) 2006-2014 Brian Aker https://datadifferential.com/ | + | Copyright (c) 2020 Michael Wallner | + +--------------------------------------------------------------------+ +*/ + +#include "mem_config.h" #include #include @@ -55,20 +32,20 @@ #include -#include +#include "libmemcached-1.0/memcached.h" #include "client_options.h" #include "utilities.h" #include "generator.h" #include "execute.h" -#define DEFAULT_INITIAL_LOAD 10000 +#define DEFAULT_INITIAL_LOAD 10000 #define DEFAULT_EXECUTE_NUMBER 10000 -#define DEFAULT_CONCURRENCY 1 +#define DEFAULT_CONCURRENCY 1 #define VALUE_BYTES 4096 -#define PROGRAM_NAME "memslap" +#define PROGRAM_NAME "memslap" #define PROGRAM_DESCRIPTION "Generates a load against a memcached custer of servers." /* Global Thread counter */ @@ -77,11 +54,7 @@ pthread_mutex_t sleeper_mutex; pthread_cond_t sleep_threshhold; /* Types */ -enum test_t { - SET_TEST, - GET_TEST, - MGET_TEST -}; +enum test_t { SET_TEST, GET_TEST, MGET_TEST }; struct thread_context_st { unsigned int key_count; @@ -93,31 +66,26 @@ struct thread_context_st { size_t *key_lengths; test_t test; memcached_st *memc; - const memcached_st* root; - - thread_context_st(const memcached_st* memc_arg, test_t test_arg) : - key_count(0), - initial_pairs(NULL), - initial_number(0), - execute_pairs(NULL), - execute_number(0), - keys(0), - key_lengths(NULL), - test(test_arg), - memc(NULL), - root(memc_arg) - { - } - - void init() - { - memc= memcached_clone(NULL, root); + const memcached_st *root; + + thread_context_st(const memcached_st *memc_arg, test_t test_arg) + : key_count(0) + , initial_pairs(NULL) + , initial_number(0) + , execute_pairs(NULL) + , execute_number(0) + , keys(0) + , key_lengths(NULL) + , test(test_arg) + , memc(NULL) + , root(memc_arg) {} + + void init() { + memc = memcached_clone(NULL, root); } - ~thread_context_st() - { - if (execute_pairs) - { + ~thread_context_st() { + if (execute_pairs) { pairs_free(execute_pairs); } memcached_free(memc); @@ -130,53 +98,48 @@ struct conclusions_st { unsigned int rows_loaded; unsigned int rows_read; - conclusions_st() : - load_time(0), - read_time(0), - rows_loaded(0), - rows_read() - { } + conclusions_st() + : load_time(0) + , read_time(0) + , rows_loaded(0) + , rows_read() {} }; /* Prototypes */ void options_parse(int argc, char *argv[]); void conclusions_print(conclusions_st *conclusion); void scheduler(memcached_server_st *servers, conclusions_st *conclusion); -pairs_st *load_create_data(memcached_st *memc, unsigned int number_of, - unsigned int *actual_loaded); +pairs_st *load_create_data(memcached_st *memc, unsigned int number_of, unsigned int *actual_loaded); void flush_all(memcached_st *memc); -static bool opt_binary= 0; -static int opt_verbose= 0; -static int opt_flush= 0; -static int opt_non_blocking_io= 0; -static int opt_tcp_nodelay= 0; -static unsigned int opt_execute_number= 0; -static unsigned int opt_createial_load= 0; -static unsigned int opt_concurrency= 0; -static int opt_displayflag= 0; -static char *opt_servers= NULL; -static bool opt_udp_io= false; -test_t opt_test= SET_TEST; +static bool opt_binary = 0; +static int opt_verbose = 0; +static int opt_flush = 0; +static int opt_non_blocking_io = 0; +static int opt_tcp_nodelay = 0; +static unsigned int opt_execute_number = 0; +static unsigned int opt_createial_load = 0; +static unsigned int opt_concurrency = 0; +static int opt_displayflag = 0; +static char *opt_servers = NULL; +static bool opt_udp_io = false; +test_t opt_test = SET_TEST; extern "C" { -static __attribute__((noreturn)) void *run_task(void *p) -{ - thread_context_st *context= (thread_context_st *)p; +static __attribute__((noreturn)) void *run_task(void *p) { + thread_context_st *context = (thread_context_st *) p; context->init(); pthread_mutex_lock(&sleeper_mutex); - while (master_wakeup) - { + while (master_wakeup) { pthread_cond_wait(&sleep_threshhold, &sleeper_mutex); } pthread_mutex_unlock(&sleeper_mutex); /* Do Stuff */ - switch (context->test) - { + switch (context->test) { case SET_TEST: assert(context->execute_pairs); execute_set(context->memc, context->execute_pairs, context->execute_number); @@ -187,7 +150,8 @@ static __attribute__((noreturn)) void *run_task(void *p) break; case MGET_TEST: - execute_mget(context->memc, (const char*const*)context->keys, context->key_lengths, context->initial_number); + execute_mget(context->memc, (const char *const *) context->keys, context->key_lengths, + context->initial_number); break; } @@ -195,36 +159,29 @@ static __attribute__((noreturn)) void *run_task(void *p) pthread_exit(0); } - } - -int main(int argc, char *argv[]) -{ +int main(int argc, char *argv[]) { conclusions_st conclusion; - srandom((unsigned int)time(NULL)); + srandom((unsigned int) time(NULL)); options_parse(argc, argv); - if (opt_servers == NULL) - { + if (opt_servers == NULL) { char *temp; - if ((temp= getenv("MEMCACHED_SERVERS"))) - { - opt_servers= strdup(temp); + if ((temp = getenv("MEMCACHED_SERVERS"))) { + opt_servers = strdup(temp); } - - if (opt_servers == NULL) - { - std::cerr << "No Servers provided" << std::endl; + + if (opt_servers == NULL) { + std::cerr << "No servers provided" << std::endl; exit(EXIT_FAILURE); } } - memcached_server_st *servers= memcached_servers_parse(opt_servers); - if (servers == NULL or memcached_server_list_count(servers) == 0) - { + memcached_server_st *servers = memcached_servers_parse(opt_servers); + if (servers == NULL or memcached_server_list_count(servers) == 0) { std::cerr << "Invalid server list provided:" << opt_servers << std::endl; return EXIT_FAILURE; } @@ -232,77 +189,65 @@ int main(int argc, char *argv[]) pthread_mutex_init(&sleeper_mutex, NULL); pthread_cond_init(&sleep_threshhold, NULL); - int error_code= EXIT_SUCCESS; + int error_code = EXIT_SUCCESS; try { scheduler(servers, &conclusion); - } - catch(std::exception& e) - { + } catch (std::exception &e) { std::cerr << "Died with exception: " << e.what() << std::endl; - error_code= EXIT_FAILURE; + error_code = EXIT_FAILURE; } free(opt_servers); - (void)pthread_mutex_destroy(&sleeper_mutex); - (void)pthread_cond_destroy(&sleep_threshhold); + (void) pthread_mutex_destroy(&sleeper_mutex); + (void) pthread_cond_destroy(&sleep_threshhold); conclusions_print(&conclusion); memcached_server_list_free(servers); return error_code; } -void scheduler(memcached_server_st *servers, conclusions_st *conclusion) -{ - unsigned int actual_loaded= 0; /* Fix warning */ +void scheduler(memcached_server_st *servers, conclusions_st *conclusion) { + unsigned int actual_loaded = 0; /* Fix warning */ struct timeval start_time, end_time; - pairs_st *pairs= NULL; + pairs_st *pairs = NULL; - memcached_st *memc= memcached_create(NULL); + memcached_st *memc = memcached_create(NULL); memcached_server_push(memc, servers); /* We need to set udp behavior before adding servers to the client */ - if (opt_udp_io) - { - if (memcached_failed(memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_USE_UDP, opt_udp_io))) - { + if (opt_udp_io) { + if (memcached_failed(memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_USE_UDP, opt_udp_io))) { std::cerr << "Failed to enable UDP." << std::endl; memcached_free(memc); exit(EXIT_FAILURE); } } - memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, - (uint64_t)opt_binary); + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, (uint64_t) opt_binary); - if (opt_flush) - { + if (opt_flush) { flush_all(memc); } - if (opt_createial_load) - { - pairs= load_create_data(memc, opt_createial_load, &actual_loaded); + if (opt_createial_load) { + pairs = load_create_data(memc, opt_createial_load, &actual_loaded); } - char **keys= static_cast(calloc(actual_loaded, sizeof(char*))); - size_t *key_lengths= static_cast(calloc(actual_loaded, sizeof(size_t))); + char **keys = static_cast(calloc(actual_loaded, sizeof(char *))); + size_t *key_lengths = static_cast(calloc(actual_loaded, sizeof(size_t))); - if (keys == NULL or key_lengths == NULL) - { + if (keys == NULL or key_lengths == NULL) { free(keys); free(key_lengths); - keys= NULL; - key_lengths= NULL; - } - else - { - for (uint32_t x= 0; x < actual_loaded; ++x) - { - keys[x]= pairs[x].key; - key_lengths[x]= pairs[x].key_length; + keys = NULL; + key_lengths = NULL; + } else { + for (uint32_t x = 0; x < actual_loaded; ++x) { + keys[x] = pairs[x].key; + key_lengths[x] = pairs[x].key_length; } } @@ -316,190 +261,172 @@ void scheduler(memcached_server_st *servers, conclusions_st *conclusion) } pthread_mutex_lock(&sleeper_mutex); - master_wakeup= 1; + master_wakeup = 1; pthread_mutex_unlock(&sleeper_mutex); - pthread_t *threads= new (std::nothrow) pthread_t[opt_concurrency]; + pthread_t *threads = new (std::nothrow) pthread_t[opt_concurrency]; - if (threads == NULL) - { + if (threads == NULL) { exit(EXIT_FAILURE); } - for (uint32_t x= 0; x < opt_concurrency; x++) - { - thread_context_st *context= new thread_context_st(memc, opt_test); - context->test= opt_test; - - context->initial_pairs= pairs; - context->initial_number= actual_loaded; - context->keys= keys; - context->key_lengths= key_lengths; - - if (opt_test == SET_TEST) - { - context->execute_pairs= pairs_generate(opt_execute_number, VALUE_BYTES); - context->execute_number= opt_execute_number; + for (uint32_t x = 0; x < opt_concurrency; x++) { + thread_context_st *context = new thread_context_st(memc, opt_test); + context->test = opt_test; + + context->initial_pairs = pairs; + context->initial_number = actual_loaded; + context->keys = keys; + context->key_lengths = key_lengths; + + if (opt_test == SET_TEST) { + context->execute_pairs = pairs_generate(opt_execute_number, VALUE_BYTES); + context->execute_number = opt_execute_number; } /* now you create the thread */ - if (pthread_create(threads +x, NULL, run_task, (void *)context) != 0) - { - fprintf(stderr,"Could not create thread\n"); + if (pthread_create(threads + x, NULL, run_task, (void *) context) != 0) { + fprintf(stderr, "Could not create thread\n"); exit(1); } } pthread_mutex_lock(&sleeper_mutex); - master_wakeup= 0; + master_wakeup = 0; pthread_mutex_unlock(&sleeper_mutex); pthread_cond_broadcast(&sleep_threshhold); gettimeofday(&start_time, NULL); - for (uint32_t x= 0; x < opt_concurrency; x++) - { + for (uint32_t x = 0; x < opt_concurrency; x++) { void *retval; pthread_join(threads[x], &retval); } - delete [] threads; + delete[] threads; gettimeofday(&end_time, NULL); - conclusion->load_time= timedif(end_time, start_time); - conclusion->read_time= timedif(end_time, start_time); + conclusion->load_time = timedif(end_time, start_time); + conclusion->read_time = timedif(end_time, start_time); free(keys); free(key_lengths); pairs_free(pairs); memcached_free(memc); } -void options_parse(int argc, char *argv[]) -{ - memcached_programs_help_st help_options[]= - { - {0}, +void options_parse(int argc, char *argv[]) { + memcached_programs_help_st help_options[] = { + {0}, }; - static struct option long_options[]= - { - {(OPTIONSTRING)"concurrency", required_argument, NULL, OPT_SLAP_CONCURRENCY}, - {(OPTIONSTRING)"debug", no_argument, &opt_verbose, OPT_DEBUG}, - {(OPTIONSTRING)"quiet", no_argument, NULL, OPT_QUIET}, - {(OPTIONSTRING)"execute-number", required_argument, NULL, OPT_SLAP_EXECUTE_NUMBER}, - {(OPTIONSTRING)"flag", no_argument, &opt_displayflag, OPT_FLAG}, - {(OPTIONSTRING)"flush", no_argument, &opt_flush, OPT_FLUSH}, - {(OPTIONSTRING)"help", no_argument, NULL, OPT_HELP}, - {(OPTIONSTRING)"initial-load", required_argument, NULL, OPT_SLAP_INITIAL_LOAD}, /* Number to load initially */ - {(OPTIONSTRING)"non-blocking", no_argument, &opt_non_blocking_io, OPT_SLAP_NON_BLOCK}, - {(OPTIONSTRING)"servers", required_argument, NULL, OPT_SERVERS}, - {(OPTIONSTRING)"tcp-nodelay", no_argument, &opt_tcp_nodelay, OPT_SLAP_TCP_NODELAY}, - {(OPTIONSTRING)"test", required_argument, NULL, OPT_SLAP_TEST}, - {(OPTIONSTRING)"verbose", no_argument, &opt_verbose, OPT_VERBOSE}, - {(OPTIONSTRING)"version", no_argument, NULL, OPT_VERSION}, - {(OPTIONSTRING)"binary", no_argument, NULL, OPT_BINARY}, - {(OPTIONSTRING)"udp", no_argument, NULL, OPT_UDP}, + static struct option long_options[] = { + {(OPTIONSTRING) "concurrency", required_argument, NULL, OPT_SLAP_CONCURRENCY}, + {(OPTIONSTRING) "debug", no_argument, &opt_verbose, OPT_DEBUG}, + {(OPTIONSTRING) "quiet", no_argument, NULL, OPT_QUIET}, + {(OPTIONSTRING) "execute-number", required_argument, NULL, OPT_SLAP_EXECUTE_NUMBER}, + {(OPTIONSTRING) "flag", no_argument, &opt_displayflag, OPT_FLAG}, + {(OPTIONSTRING) "flush", no_argument, &opt_flush, OPT_FLUSH}, + {(OPTIONSTRING) "help", no_argument, NULL, OPT_HELP}, + {(OPTIONSTRING) "initial-load", required_argument, NULL, + OPT_SLAP_INITIAL_LOAD}, /* Number to load initially */ + {(OPTIONSTRING) "non-blocking", no_argument, &opt_non_blocking_io, OPT_SLAP_NON_BLOCK}, + {(OPTIONSTRING) "servers", required_argument, NULL, OPT_SERVERS}, + {(OPTIONSTRING) "tcp-nodelay", no_argument, &opt_tcp_nodelay, OPT_SLAP_TCP_NODELAY}, + {(OPTIONSTRING) "test", required_argument, NULL, OPT_SLAP_TEST}, + {(OPTIONSTRING) "verbose", no_argument, &opt_verbose, OPT_VERBOSE}, + {(OPTIONSTRING) "version", no_argument, NULL, OPT_VERSION}, + {(OPTIONSTRING) "binary", no_argument, NULL, OPT_BINARY}, + {(OPTIONSTRING) "udp", no_argument, NULL, OPT_UDP}, {0, 0, 0, 0}, - }; + }; - bool opt_help= false; - bool opt_version= false; - int option_index= 0; - while (1) - { - int option_rv= getopt_long(argc, argv, "Vhvds:", long_options, &option_index); + bool opt_help = false; + bool opt_version = false; + int option_index = 0; + while (1) { + int option_rv = getopt_long(argc, argv, "Vhvds:", long_options, &option_index); - if (option_rv == -1) break; + if (option_rv == -1) + break; - switch (option_rv) - { + switch (option_rv) { case 0: break; case OPT_UDP: - if (opt_test == GET_TEST) - { - fprintf(stderr, "You can not run a get test in UDP mode. UDP mode " - "does not currently support get ops.\n"); + if (opt_test == GET_TEST) { + fprintf(stderr, + "You can not run a get test in UDP mode. UDP mode " + "does not currently support get ops.\n"); exit(1); } - opt_udp_io= true; + opt_udp_io = true; break; case OPT_BINARY: - opt_binary= true; + opt_binary = true; break; case OPT_VERBOSE: /* --verbose or -v */ - opt_verbose= OPT_VERBOSE; + opt_verbose = OPT_VERBOSE; break; case OPT_DEBUG: /* --debug or -d */ - opt_verbose= OPT_DEBUG; + opt_verbose = OPT_DEBUG; break; case OPT_VERSION: /* --version or -V */ - opt_version= true; + opt_version = true; break; case OPT_HELP: /* --help or -h */ - opt_help= true; + opt_help = true; break; case OPT_SERVERS: /* --servers or -s */ - opt_servers= strdup(optarg); + opt_servers = strdup(optarg); break; case OPT_SLAP_TEST: - if (strcmp(optarg, "get") == 0) - { - if (opt_udp_io == 1) - { - fprintf(stderr, "You can not run a get test in UDP mode. UDP mode " + if (strcmp(optarg, "get") == 0) { + if (opt_udp_io == 1) { + fprintf(stderr, + "You can not run a get test in UDP mode. UDP mode " "does not currently support get ops.\n"); exit(EXIT_FAILURE); } - opt_test= GET_TEST ; - } - else if (strcmp(optarg, "set") == 0) - { - opt_test= SET_TEST; - } - else if (strcmp(optarg, "mget") == 0) - { - opt_test= MGET_TEST; - } - else - { + opt_test = GET_TEST; + } else if (strcmp(optarg, "set") == 0) { + opt_test = SET_TEST; + } else if (strcmp(optarg, "mget") == 0) { + opt_test = MGET_TEST; + } else { fprintf(stderr, "Your test, %s, is not a known test\n", optarg); exit(EXIT_FAILURE); } break; case OPT_SLAP_CONCURRENCY: - errno= 0; - opt_concurrency= (unsigned int)strtoul(optarg, (char **)NULL, 10); - if (errno != 0) - { + errno = 0; + opt_concurrency = (unsigned int) strtoul(optarg, (char **) NULL, 10); + if (errno != 0) { fprintf(stderr, "Invalid value for concurrency: %s\n", optarg); exit(EXIT_FAILURE); } break; case OPT_SLAP_EXECUTE_NUMBER: - errno= 0; - opt_execute_number= (unsigned int)strtoul(optarg, (char **)NULL, 10); - if (errno != 0) - { + errno = 0; + opt_execute_number = (unsigned int) strtoul(optarg, (char **) NULL, 10); + if (errno != 0) { fprintf(stderr, "Invalid value for execute: %s\n", optarg); exit(EXIT_FAILURE); } break; case OPT_SLAP_INITIAL_LOAD: - errno= 0; - opt_createial_load= (unsigned int)strtoul(optarg, (char **)NULL, 10); - if (errno != 0) - { + errno = 0; + opt_createial_load = (unsigned int) strtoul(optarg, (char **) NULL, 10); + if (errno != 0) { fprintf(stderr, "Invalid value for initial load: %s\n", optarg); exit(EXIT_FAILURE); } @@ -509,7 +436,6 @@ void options_parse(int argc, char *argv[]) close_stdio(); break; - case '?': /* getopt_long already printed an error message. */ exit(EXIT_FAILURE); @@ -519,30 +445,27 @@ void options_parse(int argc, char *argv[]) } } - if (opt_version) - { + if (opt_version) { version_command(PROGRAM_NAME); exit(EXIT_SUCCESS); } - if (opt_help) - { + if (opt_help) { help_command(PROGRAM_NAME, PROGRAM_DESCRIPTION, long_options, help_options); exit(EXIT_SUCCESS); } if ((opt_test == GET_TEST or opt_test == MGET_TEST) and opt_createial_load == 0) - opt_createial_load= DEFAULT_INITIAL_LOAD; + opt_createial_load = DEFAULT_INITIAL_LOAD; if (opt_execute_number == 0) - opt_execute_number= DEFAULT_EXECUTE_NUMBER; + opt_execute_number = DEFAULT_EXECUTE_NUMBER; if (opt_concurrency == 0) - opt_concurrency= DEFAULT_CONCURRENCY; + opt_concurrency = DEFAULT_CONCURRENCY; } -void conclusions_print(conclusions_st *conclusion) -{ +void conclusions_print(conclusions_st *conclusion) { printf("\tThreads connecting to servers %u\n", opt_concurrency); #ifdef NOT_FINISHED printf("\tLoaded %u rows\n", conclusion->rows_loaded); @@ -556,20 +479,18 @@ void conclusions_print(conclusions_st *conclusion) conclusion->read_time % 1000); } -void flush_all(memcached_st *memc) -{ +void flush_all(memcached_st *memc) { memcached_flush(memc, 0); } pairs_st *load_create_data(memcached_st *memc, unsigned int number_of, - unsigned int *actual_loaded) -{ - memcached_st *memc_clone= memcached_clone(NULL, memc); + unsigned int *actual_loaded) { + memcached_st *memc_clone = memcached_clone(NULL, memc); /* We always used non-blocking IO for load since it is faster */ memcached_behavior_set(memc_clone, MEMCACHED_BEHAVIOR_NO_BLOCK, 0); - pairs_st *pairs= pairs_generate(number_of, VALUE_BYTES); - *actual_loaded= execute_set(memc_clone, pairs, number_of); + pairs_st *pairs = pairs_generate(number_of, VALUE_BYTES); + *actual_loaded = execute_set(memc_clone, pairs, number_of); memcached_free(memc_clone);