X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Futilities.c;h=2094d2186e3a14c3d88ac01236cdf192391ef88d;hb=635de3ca55245a58f49b487798476fbc96b5e364;hp=ed0dbb308d917d119a5b60c76fbb58eea6457867;hpb=7bfd925c54662cf1f67b651559dd91f77bfe8817;p=m6w6%2Flibmemcached diff --git a/src/utilities.c b/src/utilities.c index ed0dbb30..2094d218 100644 --- a/src/utilities.c +++ b/src/utilities.c @@ -1,60 +1,8 @@ +#include #include -#include +#include #include "utilities.h" -memcached_server_st *parse_opt_servers(char *server_strings) -{ - char *string; - unsigned int port; - char *begin_ptr; - char *end_ptr; - memcached_server_st *servers= NULL; - memcached_return rc; - - assert(server_strings); - - end_ptr= server_strings + strlen(server_strings); - - for (begin_ptr= server_strings, string= index(server_strings, ','); - begin_ptr != end_ptr; - string= index(begin_ptr, ',')) - { - char buffer[HUGE_STRING_LEN]; - char *ptr; - port= 0; - - memset(buffer, 0, HUGE_STRING_LEN); - if (string) - { - memcpy(buffer, begin_ptr, string - begin_ptr); - begin_ptr= string+1; - } - else - { - size_t length= strlen(begin_ptr); - memcpy(buffer, begin_ptr, length); - begin_ptr= end_ptr; - } - - ptr= index(buffer, ':'); - - if (ptr) - { - ptr[0]= 0; - - ptr++; - - port= strtol(ptr, (char **)NULL, 10); - } - - servers= memcached_server_list_append(servers, buffer, port, &rc); - - if (isspace(*begin_ptr)) - begin_ptr++; - } - - return servers; -} long int timedif(struct timeval a, struct timeval b) { @@ -73,6 +21,34 @@ void version_command(char *command_name) exit(0); } +char *lookup_help(memcached_options option) +{ + switch (option) + { + case OPT_SERVERS: return("List which servers you wish to connect to."); + case OPT_VERSION: return("Display the version of the application and then exit."); + case OPT_HELP: return("Diplay this message and then exit."); + case OPT_VERBOSE: return("Give more details on the progression of the application."); + case OPT_DEBUG: return("Provide output only useful for debugging."); + case OPT_FLAG: return("Provide flag information for storage operation."); + case OPT_EXPIRE: return("Set the expire option for the object."); + case OPT_SET: return("Use set command with memcached when storing."); + case OPT_REPLACE: return("Use replace command with memcached when storing."); + case OPT_ADD: return("Use add command with memcached when storing."); + case OPT_SLAP_EXECUTE_NUMBER: return("Number of times to execute the given test."); + case OPT_SLAP_INITIAL_LOAD: return("Number of key pairs to load before executing tests."); + case OPT_SLAP_TEST: return("Test to run."); + case OPT_SLAP_CONCURRENCY: return("Number of users to simulate with load."); + case OPT_SLAP_NON_BLOCK: return("Set TCP up to use non-blocking IO."); + case OPT_SLAP_TCP_NODELAY: return("Set TCP socket up to use nodelay."); + case OPT_FLUSH: return("Flush servers before running tests."); + case OPT_HASH: return("Select hash type."); + }; + + WATCHPOINT_ASSERT(0); + return "forgot to document this function :)"; +} + void help_command(char *command_name, char *description, const struct option *long_options, memcached_programs_help_st *options) @@ -84,9 +60,50 @@ void help_command(char *command_name, char *description, printf("Current options. A '=' means the option takes a value.\n\n"); for (x= 0; long_options[x].name; x++) + { + char *help_message; + printf("\t --%s%c\n", long_options[x].name, long_options[x].has_arg ? '=' : ' '); + if ((help_message= lookup_help(long_options[x].val))) + printf("\t\t%s\n", help_message); + } printf("\n"); exit(0); } + +void process_hash_option(memcached_st *memc, char *opt_hash) +{ + unsigned int set; + memcached_return rc; + + if (opt_hash == NULL) + return; + + if (!strcasecmp(opt_hash, "CRC")) + set= MEMCACHED_HASH_CRC; + else if (!strcasecmp(opt_hash, "FNV1_64")) + set= MEMCACHED_HASH_FNV1_64; + else if (!strcasecmp(opt_hash, "FNV1A_64")) + set= MEMCACHED_HASH_FNV1A_64; + else if (!strcasecmp(opt_hash, "FNV1_32")) + set= MEMCACHED_HASH_FNV1_32; + else if (!strcasecmp(opt_hash, "FNV1A_32")) + set= MEMCACHED_HASH_FNV1A_32; + else if (!strcasecmp(opt_hash, "KETAMA")) + set= MEMCACHED_HASH_KETAMA; + else + { + fprintf(stderr, "hash: type not recognized %s\n", opt_hash); + exit(1); + } + + rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, &set); + if (rc != MEMCACHED_SUCCESS) + { + fprintf(stderr, "hash: memcache error %s\n", memcached_strerror(memc, rc)); + exit(1); + } +} +