Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}