Esempio n. 1
0
void AdConHashs::Clear()
{
	vector<struct node_s *>::iterator iter;
	
	if(m_bFirst == false)
	{
		if (m_pHandleA != NULL) 
		{
			conhash_fini(m_pHandleA);
			m_pHandleA = NULL;
		}
	
		for (iter = m_vNodesA.begin(); iter != m_vNodesA.end(); iter ++)
		{
			free(*iter);
		}
		m_vNodesA.clear();
	}
	else
	{
		if (m_pHandleB != NULL) 
		{
			conhash_fini(m_pHandleB);
			m_pHandleB = NULL;
		}

		for (iter = m_vNodesB.begin(); iter != m_vNodesB.end(); iter ++)
		{
			free(*iter);
		}
		
		m_vNodesB.clear();
	}
}
int main()
{
    int i;
    const struct node_s *node;
    char str[128];
    long hashes[512];

    /* init conhash instance */
    struct conhash_s *conhash = conhash_init(NULL);
    if(conhash)
    {
        /* set nodes */
        conhash_set_node(&g_nodes[0], "memcache_1", 32);
        conhash_set_node(&g_nodes[1], "memcache_2", 24);
        conhash_set_node(&g_nodes[2], "memcache_3", 25);
        conhash_set_node(&g_nodes[3], "memcache_4", 10);
        conhash_set_node(&g_nodes[4], "memcache_5", 48);

        /* add nodes */
        conhash_add_node(conhash, &g_nodes[0]);
        conhash_add_node(conhash, &g_nodes[1]);
        conhash_add_node(conhash, &g_nodes[2]);
        conhash_add_node(conhash, &g_nodes[3]);
        conhash_add_node(conhash, &g_nodes[4]);

        printf("virtual nodes number %d\n", conhash_get_vnodes_num(conhash));
        printf("the hashing results--------------------------------------:\n");

        /* try object */
        for(i = 0; i < 20; i++)
        {
            sprintf(str, "James.km%03d", i);
            node = conhash_lookup(conhash, str);
            if(node) printf("[%16s] is in node: [%16s]\n", str, node->iden);
        }
        conhash_get_vnodes(conhash, hashes, sizeof(hashes)/sizeof(hashes[0]));
        conhash_del_node(conhash, &g_nodes[2]);
        printf("remove node[%s], virtual nodes number %d\n", g_nodes[2].iden, conhash_get_vnodes_num(conhash));
        printf("the hashing results--------------------------------------:\n");
        for(i = 0; i < 20; i++)
        {
            sprintf(str, "James.km%03d", i);
            node = conhash_lookup(conhash, str);
            if(node) printf("[%16s] is in node: [%16s]\n", str, node->iden);
        }
    }
    conhash_fini(conhash);
    return 0;
}
Esempio n. 3
0
void AdConHash::Clear()
{
	map<void *, struct node_s *>::iterator iter;

	pthread_rwlock_wrlock(&m_pLock);
	if (m_pHandle != NULL) 
	{
		conhash_fini(m_pHandle);
		m_pHandle = NULL;
	}
	
	for (iter = m_mNodes.begin(); iter != m_mNodes.end(); iter ++)
	{
		free(iter->second);
	}
	m_mNodes.clear();
	pthread_rwlock_unlock(&m_pLock);
}
Esempio n. 4
0
int main()
{
    int i;
    const struct node_s *node;
    char str[128];
    long hashes[512];

    /* init conhash instance */
    struct conhash_s *conhash = conhash_init(NULL);
    if(conhash)
    {
        /* set nodes */
        conhash_set_node(&g_nodes[0], "titanic", 32);
        conhash_set_node(&g_nodes[1], "terminator2018", 24);
        conhash_set_node(&g_nodes[2], "Xenomorph", 25);
        conhash_set_node(&g_nodes[3], "True Lies", 10);
        conhash_set_node(&g_nodes[4], "avantar", 48);

        /* add nodes */
        conhash_add_node(conhash, &g_nodes[0]);
        conhash_add_node(conhash, &g_nodes[1]);
        conhash_add_node(conhash, &g_nodes[2]);
        conhash_add_node(conhash, &g_nodes[3]);
        conhash_add_node(conhash, &g_nodes[4]);

        printf("virtual nodes number %d\n", conhash_get_vnodes_num(conhash));
        printf("origin: the hashing results--------------------------------------:\n");

        /* try object */
        for(i = 0; i < 20; i++)
        {
            sprintf(str, "James.km%03d", i);
            node = conhash_lookup(conhash, str);
            if(node) printf("[%16s] is in node: [%16s]\n", str, node->iden);
        }
        conhash_get_vnodes(conhash, hashes, sizeof(hashes)/sizeof(hashes[0]));
		/******************delete node********************/
        conhash_del_node(conhash, &g_nodes[2]);
        printf("remove node[%s], virtual nodes number %d\n", g_nodes[2].iden, conhash_get_vnodes_num(conhash));
        printf("remove: the hashing results--------------------------------------:\n");
        for(i = 0; i < 20; i++)
        {
            sprintf(str, "James.km%03d", i);
            node = conhash_lookup(conhash, str);
            if(node) printf("[%16s] is in node: [%16s]\n", str, node->iden);
        }

		/*******************add node***********************/
        conhash_add_node(conhash, &g_nodes[2]);
        printf("add node[%s], virtual nodes number %d\n", g_nodes[2].iden, conhash_get_vnodes_num(conhash));
        printf("add: the hashing results--------------------------------------:\n");
        for(i = 0; i < 20; i++)
        {
            sprintf(str, "James.km%03d", i);
            node = conhash_lookup(conhash, str);
            if(node) printf("[%16s] is in node: [%16s]\n", str, node->iden);
        }
    }
    conhash_fini(conhash);
    return 0;
}