static struct node * gossip_add_node_to_rack(struct server_pool *sp, struct string *dc, struct gossip_rack *g_rack, struct string *address, struct string *ip, struct string *port, struct dyn_token *token) { rstatus_t status; log_debug(LOG_VERB, "gossip_add_node_to_rack : dc[%.*s] rack[%.*s] address[%.*s] ip[%.*s] port[%.*s]", dc->len, dc->data, g_rack->name, address->len, address->data, ip->len, ip->data, port->len, port->data); int port_i = dn_atoi(port->data, port->len); if (port_i == 0) { return NULL; //bad data } struct node *gnode = (struct node *) array_push(&g_rack->nodes); node_init(gnode); status = string_copy(&gnode->dc, dc->data, dc->len); status = string_copy(&gnode->rack, g_rack->name.data, g_rack->name.len); status = string_copy(&gnode->name, ip->data, ip->len); status = string_copy(&gnode->pname, address->data, address->len); //ignore the port for now gnode->port = port_i; struct dyn_token * gtoken = &gnode->token; copy_dyn_token(token, gtoken); g_rack->nnodes++; //add into dicts dictAdd(g_rack->dict_name_nodes, &gnode->name, gnode); dictAdd(g_rack->dict_token_nodes, token_to_string(token), gnode); return gnode; }
static rstatus_t dn_get_options(int argc, char **argv, struct instance *nci) { int c, value; // char str[128]; opterr = 0; for (;;) { c = getopt_long(argc, argv, short_options, long_options, NULL); if (c == -1) { /* no more options */ break; } switch (c) { case 'h': show_version = 1; show_help = 1; break; case 'V': show_version = 1; break; case 't': test_conf = 1; nci->log_level = 11; break; case 'd': daemonize = 1; break; case 'D': describe_stats = 1; show_version = 1; break; case 'v': value = dn_atoi(optarg, strlen(optarg)); if (value < 0) { log_stderr("dynomite: option -v requires a number"); return DN_ERROR; } nci->log_level = value; break; case 'o': nci->log_filename = optarg; break; case 'c': nci->conf_filename = optarg; break; case 's': value = dn_atoi(optarg, strlen(optarg)); if (value < 0) { log_stderr("dynomite: option -s requires a number"); return DN_ERROR; } if (!dn_valid_port(value)) { log_stderr("dynomite: option -s value %d is not a valid " "port", value); return DN_ERROR; } nci->stats_port = (uint16_t)value; break; case 'i': value = dn_atoi(optarg, strlen(optarg)); if (value < 0) { log_stderr("dynomite: option -i requires a number"); return DN_ERROR; } nci->stats_interval = value; break; case 'a': nci->stats_addr = optarg; break; case 'p': nci->pid_filename = optarg; break; case 'm': value = dn_atoi(optarg, strlen(optarg)); if (value <= 0) { log_stderr("dynomite: option -m requires a non-zero number"); return DN_ERROR; } if (value < DN_MBUF_MIN_SIZE || value > DN_MBUF_MAX_SIZE) { log_stderr("dynomite: mbuf chunk size must be between %zu and" " %zu bytes", DN_MBUF_MIN_SIZE, DN_MBUF_MAX_SIZE); return DN_ERROR; } nci->mbuf_chunk_size = (size_t)value; break; case 'n': sampling_freq = dn_atoi(optarg,strlen(optarg)); loga("Sampling freq %d", sampling_freq); break; case '?': switch (optopt) { case 'o': case 'c': case 'p': log_stderr("dynomite: option -%c requires a file name", optopt); break; case 'm': case 'v': case 's': case 'i': log_stderr("dynomite: option -%c requires a number", optopt); break; case 'a': log_stderr("dynomite: option -%c requires a string", optopt); break; default: log_stderr("dynomite: invalid option -- '%c'", optopt); break; } return DN_ERROR; default: log_stderr("dynomite: invalid option -- '%c'", optopt); return DN_ERROR; } } return DN_OK; }
static rstatus_t dn_get_options(int argc, char **argv, struct instance *nci) { int c, value; opterr = 0; for (;;) { c = getopt_long(argc, argv, short_options, long_options, NULL); if (c == -1) { /* no more options */ break; } switch (c) { case 'h': show_version = 1; show_help = 1; break; case 'V': show_version = 1; break; case 't': test_conf = 1; nci->log_level = 11; break; case 'd': daemonize = 1; break; case 'D': describe_stats = 1; show_version = 1; break; case 'g': enable_gossip = 1; break; case 'v': value = dn_atoi(optarg, strlen(optarg)); if (value < 0) { log_stderr("dynomite: option -v requires a number"); return DN_ERROR; } nci->log_level = value; break; case 'o': nci->log_filename = optarg; break; case 'c': nci->conf_filename = optarg; break; case 's': value = dn_atoi(optarg, strlen(optarg)); if (value < 0) { log_stderr("dynomite: option -s requires a number"); return DN_ERROR; } if (!dn_valid_port(value)) { log_stderr("dynomite: option -s value %d is not a valid " "port", value); return DN_ERROR; } nci->stats_port = (uint16_t)value; break; case 'i': value = dn_atoi(optarg, strlen(optarg)); if (value < 0) { log_stderr("dynomite: option -i requires a number"); return DN_ERROR; } nci->stats_interval = value; break; case 'a': nci->stats_addr = optarg; break; case 'p': nci->pid_filename = optarg; break; case 'm': value = dn_atoi(optarg, strlen(optarg)); if (value <= 0) { log_stderr("dynomite: option -m requires a non-zero number"); return DN_ERROR; } if (value < DN_MBUF_MIN_SIZE || value > DN_MBUF_MAX_SIZE) { log_stderr("dynomite: mbuf chunk size must be between %zu and" " %zu bytes", DN_MBUF_MIN_SIZE, DN_MBUF_MAX_SIZE); return DN_ERROR; } if ((value / 16) * 16 != value) { log_stderr("dynomite: mbuf chunk size must be a multiple of 16"); return DN_ERROR; } nci->mbuf_chunk_size = (size_t)value; break; case 'M': value = dn_atoi(optarg, strlen(optarg)); if (value <= 0) { log_stderr("dynomite: option -M requires a non-zero number"); return DN_ERROR; } if (value < DN_MIN_ALLOC_MSGS || value > DN_MAX_ALLOC_MSGS) { log_stderr("dynomite: max allocated messages buffer must be between %zu and" " %zu messages", DN_MIN_ALLOC_MSGS, DN_MAX_ALLOC_MSGS); return DN_ERROR; } nci->alloc_msgs_max = (size_t)value; break; case 'x': value = dn_atoi(optarg, strlen(optarg)); if (value <= 0) { log_stderr("dynomite: option -x requires a non-zero number"); return DN_ERROR; } admin_opt = value; break; case '?': switch (optopt) { case 'o': case 'c': case 'p': log_stderr("dynomite: option -%c requires a file name", optopt); break; case 'm': case 'M': case 'v': case 's': case 'i': log_stderr("dynomite: option -%c requires a number", optopt); break; case 'a': log_stderr("dynomite: option -%c requires a string", optopt); break; default: log_stderr("dynomite: invalid option -- '%c'", optopt); break; } return DN_ERROR; default: log_stderr("dynomite: invalid option -- '%c'", optopt); return DN_ERROR; } } return DN_OK; }