コード例 #1
0
static struct dyn_token *
dnode_peer_pool_hash(struct server_pool *pool, uint8_t *key, uint32_t keylen)
{
	ASSERT(array_n(&pool->peers) != 0);
	ASSERT(key != NULL && keylen != 0);

	struct dyn_token *token = dn_alloc(sizeof(struct dyn_token));
	if (token == NULL) {
		return NULL;
	}
	init_dyn_token(token);

	rstatus_t status = pool->key_hash((char *)key, keylen, token);
	if (status != DN_OK) {
		dn_free(token);
		return NULL;
	}

	return token;
}
コード例 #2
0
ファイル: dyn_gossip.c プロジェクト: amimimor/dynomite
static rstatus_t
gossip_update_seeds(struct server_pool *sp, struct mbuf *seeds)
{
	struct string rack_name;
	struct string dc_name;
	struct string port_str;
	struct string address;
	struct string ip;
	//struct array tokens;
	struct dyn_token token;

	struct string temp;

	string_init(&rack_name);
	string_init(&dc_name);
	string_init(&port_str);
	string_init(&address);
	string_init(&ip);
	init_dyn_token(&token);

	uint8_t *p, *q, *start;
	start = seeds->start;
	p = seeds->last - 1;
	q = dn_strrchr(p, start, '|');

	uint8_t *seed_node;
	uint32_t seed_node_len;

	while (q > start) {
		seed_node = q + 1;
		seed_node_len = (uint32_t)(p - seed_node + 1);
		string_copy(&temp, seed_node, seed_node_len);
		//array_init(&tokens, 1, sizeof(struct dyn_token));
		init_dyn_token(&token);
		parse_seeds(&temp, &dc_name, &rack_name, &port_str, &address, &ip,  &token);
		log_debug(LOG_VERB, "address          : '%.*s'", address.len, address.data);
		log_debug(LOG_VERB, "rack_name         : '%.*s'", rack_name.len, rack_name.data);
		log_debug(LOG_VERB, "dc_name        : '%.*s'", dc_name.len, dc_name.data);
		log_debug(LOG_VERB, "ip         : '%.*s'", ip.len, ip.data);

		//struct dyn_token *token = array_get(&tokens, 0);
		gossip_add_node_if_absent(sp, &dc_name, &rack_name, &address, &ip, &port_str, &token, NORMAL, (uint64_t) time(NULL));

		p = q - 1;
		q = dn_strrchr(p, start, '|');
		string_deinit(&temp);
		//array_deinit(&tokens);
		deinit_dyn_token(&token);
		string_deinit(&rack_name);
		string_deinit(&dc_name);
		string_deinit(&port_str);
		string_deinit(&address);
		string_deinit(&ip);
	}

	if (q == NULL) {
		seed_node_len = (uint32_t)(p - start + 1);
		seed_node = start;

		string_copy(&temp, seed_node, seed_node_len);
		//array_init(&tokens, 1, sizeof(struct dyn_token));
		init_dyn_token(&token);
		parse_seeds(&temp, &dc_name, &rack_name, &port_str, &address, &ip, &token);

		//struct dyn_token *token = array_get(&tokens, 0);
		gossip_add_node_if_absent(sp, &dc_name, &rack_name, &address, &ip, &port_str, &token, NORMAL, (uint64_t) time(NULL));
	}

	string_deinit(&temp);
	//array_deinit(&tokens);
	deinit_dyn_token(&token);
	string_deinit(&rack_name);
	string_deinit(&dc_name);
	string_deinit(&port_str);
	string_deinit(&address);
	string_deinit(&ip);

	gossip_debug();
	return DN_OK;
}