X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=clients%2Fms_setting.c;h=3eb4d0e6e9d9a79668f91aef06512864a46de338;hb=af788b4b866ef0220dcdc4c357efbcbdb942cd27;hp=d269e33022250c4007713d6ce76516e945b58614;hpb=c218b967dc33cc25954bd376921268ed61b383f4;p=awesomized%2Flibmemcached diff --git a/clients/ms_setting.c b/clients/ms_setting.c index d269e330..3eb4d0e6 100644 --- a/clients/ms_setting.c +++ b/clients/ms_setting.c @@ -11,13 +11,14 @@ #include "config.h" +#include + #include #include #include #include #include #include -#include #include @@ -52,7 +53,7 @@ ms_setting_st ms_setting; /* store the settings specified by user */ /* read setting from configuration file */ static void ms_get_serverlist(char *str); -static int ms_get_cpu_count(void); +static uint32_t ms_get_cpu_count(void); ms_conf_type_t ms_get_conf_type(char *line); static int ms_is_line_data(char *line); static int ms_read_is_data(char *line, ssize_t nread); @@ -155,60 +156,28 @@ static ssize_t getline (char **line, size_t *line_size, FILE *fp) */ static void ms_get_serverlist(char *str) { - char *string; - int64_t port; - char *begin_ptr; - char *end_ptr= str + strlen(str); ms_mcd_server_t *srvs= NULL; - char buffer[512]; - char *ptr= NULL; /** * Servers list format is like this. For example: * "localhost:11108, localhost:11109" */ - for (begin_ptr= str, string= index(str, ','); - begin_ptr != end_ptr; - string= index(begin_ptr, ',')) - { - port= 0; - - if (string) - { - memcpy(buffer, begin_ptr, (size_t)(string - begin_ptr)); - buffer[(unsigned int)(string - begin_ptr)]= '\0'; - begin_ptr= string + 1; - } - else - { - size_t length= strlen(begin_ptr); - memcpy(buffer, begin_ptr, length); - buffer[length]= '\0'; - begin_ptr= end_ptr; - } - - ptr= index(buffer, ':'); - - if (ptr != NULL) - { - ptr[0]= '\0'; - ptr++; - port= strtol(ptr, (char **)NULL, 10); - } + memcached_server_st *server_pool; + server_pool = memcached_servers_parse(str); + for (uint32_t loop= 0; loop < memcached_server_list_count(server_pool); loop++) + { assert(ms_setting.srv_cnt < ms_setting.total_srv_cnt); - strcpy(ms_setting.servers[ms_setting.srv_cnt].srv_host_name, buffer); - ms_setting.servers[ms_setting.srv_cnt].srv_port= (int)port; + strcpy(ms_setting.servers[ms_setting.srv_cnt].srv_host_name, server_pool[loop].hostname); + ms_setting.servers[ms_setting.srv_cnt].srv_port= server_pool[loop].port; ms_setting.servers[ms_setting.srv_cnt].disconn_cnt= 0; ms_setting.servers[ms_setting.srv_cnt].reconn_cnt= 0; ms_setting.srv_cnt++; if (ms_setting.srv_cnt >= ms_setting.total_srv_cnt) { - srvs= (ms_mcd_server_t *)realloc( - ms_setting.servers, - (size_t)ms_setting.total_srv_cnt - * sizeof(ms_mcd_server_t) * 2); + srvs= (ms_mcd_server_t *)realloc( ms_setting.servers, + (size_t)ms_setting.total_srv_cnt * sizeof(ms_mcd_server_t) * 2); if (srvs == NULL) { fprintf(stderr, "Can't reallocate servers structure.\n"); @@ -217,19 +186,18 @@ static void ms_get_serverlist(char *str) ms_setting.servers= srvs; ms_setting.total_srv_cnt*= 2; } - - if (isspace(*begin_ptr)) - begin_ptr++; } + + memcached_server_free(server_pool); } /* ms_get_serverlist */ /** * used to get the CPU count of the current system * - * @return return the cpu count if get, else return 1 + * @return return the cpu count if get, else return EXIT_FAILURE */ -static int ms_get_cpu_count() +static uint32_t ms_get_cpu_count() { #ifdef HAVE__SC_NPROCESSORS_ONLN return sysconf(_SC_NPROCESSORS_CONF); @@ -255,7 +223,7 @@ static int ms_get_cpu_count() #endif /* the system with one cpu at least */ - return 1; + return EXIT_FAILURE; } /* ms_get_cpu_count */ @@ -294,7 +262,7 @@ ms_conf_type_t ms_get_conf_type(char *line) * * @param line, string of one line * - * @return if success, return 1, else return 0 + * @return if success, return EXIT_FAILURE, else return EXIT_SUCCESS */ static int ms_is_line_data(char *line) { @@ -307,9 +275,9 @@ static int ms_is_line_data(char *line) begin_ptr++; } if ((begin_ptr[0] == '\0') || (begin_ptr[0] == '#')) - return 0; + return EXIT_SUCCESS; - return 1; + return EXIT_FAILURE; } /* ms_is_line_data */ @@ -319,14 +287,14 @@ static int ms_is_line_data(char *line) * @param line, string of one line * @param nread, length of the line * - * @return if it's EOF or not line data, return 0, else return 1 + * @return if it's EOF or not line data, return EXIT_SUCCESS, else return EXIT_FAILURE */ static int ms_read_is_data(char *line, ssize_t nread) { if ((nread == EOF) || ! ms_is_line_data(line)) - return 0; + return EXIT_SUCCESS; - return 1; + return EXIT_FAILURE; } /* ms_read_is_data */ @@ -373,7 +341,6 @@ static void ms_parse_cfg_file(char *cfg_file) FILE *f; size_t start_len, end_len; double proportion; - size_t frequence; char *line= NULL; size_t read_len; ssize_t nread; @@ -466,8 +433,8 @@ static void ms_parse_cfg_file(char *cfg_file) if (nread != EOF) { - if (sscanf(line, "%zu %zu %lf %zu", &start_len, &end_len, - &proportion, &frequence) != 3) + if (sscanf(line, "%zu %zu %lf", &start_len, &end_len, + &proportion) != 3) { conf_type= ms_get_conf_type(line); break; @@ -510,11 +477,15 @@ static void ms_parse_cfg_file(char *cfg_file) if (nread != EOF) { - if (sscanf(line, "%d %lf\n", &cmd_type, &proportion) != 2) + if (sscanf(line, "%d %lf", &cmd_type, &proportion) != 2) { conf_type= ms_get_conf_type(line); break; } + if (cmd_type >= CMD_NULL) + { + continue; + } ms_setting.cmd_distr[ms_setting.cmd_used_count].cmd_type= cmd_type; ms_setting.cmd_distr[ms_setting.cmd_used_count].cmd_prop= @@ -604,7 +575,7 @@ static void ms_calc_avg_size() * @param distr, pointer of distribution structure array * @param length, length of the array * - * @return always return 0 + * @return always return EXIT_SUCCESS */ static int ms_shuffle_distr(ms_distr_t *distr, int length) { @@ -643,7 +614,7 @@ static int ms_shuffle_distr(ms_distr_t *distr, int length) } /* switch */ } - return 0; + return EXIT_SUCCESS; } /* ms_shuffle_distr */ @@ -712,7 +683,7 @@ static void ms_build_distr() exit(1); } - if (! ms_setting.binary_prot + if (! ms_setting.binary_prot_ && ((start_len > MAX_KEY_SIZE) || (end_len > MAX_KEY_SIZE))) { fprintf(stderr, "key length must be less than 250 bytes.\n"); @@ -909,7 +880,7 @@ static void ms_setting_slapmode_init_pre() ms_setting.reconnect= false; ms_setting.verbose= false; ms_setting.facebook_test= false; - ms_setting.binary_prot= false; + ms_setting.binary_prot_= false; ms_setting.stat_freq= 0; ms_setting.srv_str= NULL; ms_setting.cfg_file= NULL; @@ -951,7 +922,7 @@ void ms_setting_init_pre() static void ms_setting_slapmode_init_post() { ms_setting.total_key_rng_cnt= KEY_RANGE_COUNT_INIT; - ms_setting.key_distr= + ms_setting.key_distr= (ms_key_distr_t *)malloc((size_t)ms_setting.total_key_rng_cnt * sizeof(ms_key_distr_t)); if (ms_setting.key_distr == NULL) @@ -962,7 +933,7 @@ static void ms_setting_slapmode_init_post() ms_setting.total_val_rng_cnt= VALUE_RANGE_COUNT_INIT; - ms_setting.value_distr= + ms_setting.value_distr= (ms_value_distr_t *)malloc((size_t)ms_setting.total_val_rng_cnt * sizeof( ms_value_distr_t)); if (ms_setting.value_distr == NULL) @@ -1011,13 +982,6 @@ static void ms_setting_slapmode_init_post() exit(1); } - if ((ms_setting.udp - || ms_setting.facebook_test) && ms_setting.binary_prot) - { - fprintf(stderr, "Binary protocol doesn't support UDP now.\n"); - exit(1); - } - if ((ms_setting.rep_write_srv > 0) && (ms_setting.srv_cnt < 2)) { fprintf(stderr, "Please specify 2 servers at least for replication\n"); @@ -1038,26 +1002,12 @@ static void ms_setting_slapmode_init_post() exit(1); } - if ((ms_setting.rep_write_srv > 0) && (ms_setting.sock_per_conn > 1)) - { - fprintf(stderr, "Replication doesn't support multi-socks " - "in one connection structure.\n"); - exit(1); - } - if (ms_setting.facebook_test && (ms_setting.rep_write_srv > 0)) { fprintf(stderr, "facebook test couldn't work with replication.\n"); exit(1); } - if (ms_setting.reconnect && (ms_setting.sock_per_conn > 1)) - { - fprintf(stderr, "Reconnection doesn't support multi-socks " - "in one connection structure.\n"); - exit(1); - } - ms_build_distr(); /* initialize global character block */