Exemplo n.º 1
0
void RiakTest::AddLink()
{
	const char* bucket = "rfs";
	//const char* key = "f057fbee-d7a4-43a3-b761-163f243730ab";
	//const char* key = "90de2941-bbdf-4a4b-8c0d-14d4dc12e649";	//folder
	//const char* key = "6d31c25e-ddc0-4bc6-8b96-8f190b279a71";
	//const char* key = "root";
	const char* key = "1ca3815e-69cb-4054-99a8-b4b28d57e5b9";
	riack_string rbucket, rkey;
	riack_get_object *obj;

	rbucket.len = strlen(bucket);
	rbucket.value = (char*)bucket;

	rkey.len = strlen(key);
	rkey.value = (char*)key;

	int ret = riack_get(m_riak, &rbucket, &rkey, NULL, &obj);

	riack_link* r_link = obj->object.content->links;
	r_link = (riack_link*)realloc(r_link, sizeof(riack_link)*(obj->object.content->link_count + 1));
	obj->object.content->links = r_link;

	r_link += obj->object.content->link_count;
	memset(r_link, 0, sizeof(riack_link));
	//r_link->bucket.value = "rfs";
	//r_link->bucket.len = strlen("rfs");
	r_link->key.value = "85ad7086-a50d-4ac3-a61f-8987df66966c";
	r_link->key.len = strlen("85ad7086-a50d-4ac3-a61f-8987df66966c");
	r_link->tag.value = "parent";
	r_link->tag.len = strlen("parent");
	obj->object.content->link_count++;

	obj->object.bucket.value = "rfs";
	obj->object.bucket.len = 3;

	ret = riack_put(m_riak, &(obj->object), NULL, NULL);
	ret == RIACK_SUCCESS;

	char skey[_MAX_PATH];
	char sval[_MAX_PATH];

	//int count = obj->object.content->usermeta_count;
	//for (int i = 0; i < count; i++)
	//{
	//	riack_pair& r_meta = obj->object.content->usermetas[i];

	//	memset(skey, 0, _MAX_PATH);
	//	memset(sval, 0, _MAX_PATH);

	//	memcpy(skey, r_meta.key.value, r_meta.key.len);
	//	memcpy(sval, r_meta.value, r_meta.value_len);

	//	printf("[%s]:%s\n", skey, sval);
	//}


}
Exemplo n.º 2
0
static int _mapcache_cache_riak_has_tile(mapcache_context *ctx, mapcache_cache *pcache, mapcache_tile *tile) {
    int error;
    int retries = 3;
    RIACK_STRING key;
    struct RIACK_GET_OBJECT obj;
    struct RIACK_CLIENT *client;
    mapcache_pooled_connection *pc;
    mapcache_cache_riak *cache = (mapcache_cache_riak*)pcache;

    key.value = mapcache_util_get_tile_key(ctx, tile, NULL, " \r\n\t\f\e\a\b", "#");
    if (GC_HAS_ERROR(ctx)) {
        return MAPCACHE_FALSE;
    }
    key.len = strlen(key.value);

    pc = _riak_get_connection(ctx, cache, tile);
    if (GC_HAS_ERROR(ctx)) {
        return MAPCACHE_FALSE;
    }
    client = pc->connection;

    do
    {
        error = riack_get(client, cache->bucket, key, 0, &obj);
        if (error != RIACK_SUCCESS) {
            ctx->log(ctx, MAPCACHE_WARN, "Retry %d in riak_has_tile for tile %s from cache %s due to error %d", (4-retries), key.value, cache->cache.name, error);
            for (error = riack_reconnect(client);
                    error != RIACK_SUCCESS && retries > 0;
                    error = riack_reconnect(client))
            {
                --retries;
            }

            --retries;
        }
    }
    while (error != RIACK_SUCCESS && retries >= 0);

    if (error != RIACK_SUCCESS) {
        riack_free_get_object(client, &obj);    // riack_get allocates the returned object so we need to deallocate it.
        mapcache_connection_pool_invalidate_connection(ctx,pc);
        ctx->set_error(ctx, 500, "riak: failed to get key %s: %d", key, error);
        return MAPCACHE_FALSE;
    }

    if (obj.object.content_count < 1 || obj.object.content[0].data_len == 0) {
        error = MAPCACHE_FALSE;
    } else {
        error = MAPCACHE_TRUE;
    }

    riack_free_get_object(client, &obj);    // riack_get allocates the returned object so we need to deallocate it.
    mapcache_connection_pool_release_connection(ctx,pc);

    return error;
}
Exemplo n.º 3
0
void RiakTest::GetKey()
{
	const char* bucket = "rfs";
	const char* key = "root";

	riack_string rbucket, rkey;
	riack_get_object *robj = NULL;

	rbucket.len = strlen(bucket);
	rbucket.value = (char*)bucket;

	rkey.len = strlen(key);
	rkey.value = (char*)key;

	int ret = riack_get(m_riak, &rbucket, &rkey, NULL, &robj);


	riack_free_get_object_p(m_riak, &robj);
}
Exemplo n.º 4
0
void RiakTest::Add_Link_test_111_v2()
{
	const char* bucket = "test";
	const char* key = "key_111";
	const char* type = "text/plain";
	const char* data = "value_111";

	//const char* bucket = "rfs";
	//const char* key = "root";
	//const char* type = "text/plain";
	//const char* data = "value_111";

	riack_string rbucket, rkey;
	riack_get_object *robj = NULL;
	
	rbucket.len = strlen(bucket);
	rbucket.value = (char*)bucket;
	rkey.len = strlen(key);
	rkey.value = (char*)key;

	int ret = riack_get(m_riak, &rbucket, &rkey, NULL, &robj);

	riack_copy_string(robj->object.bucket, rbucket);
	riack_copy_string(robj->object.key, rkey);

	riack_content& r_content = robj->object.content[0];
	riack_link* r_link = r_content.links;
	r_content.links = (riack_link*)realloc(r_link, (r_content.link_count + 1)*sizeof(riack_link));
	r_link = r_content.links + r_content.link_count;
	r_content.link_count += 1;

	const char* l_bucket = "test_444";
	const char* l_key = "key_444";
	const char* l_tag = "parent";
	memset(r_link, 0, sizeof(r_link));
	riack_set_link(*r_link, l_bucket, l_key, l_tag);

	riack_put(m_riak, &(robj->object), NULL, NULL);

	riack_free_get_object_p(m_riak, &robj);
}
Exemplo n.º 5
0
int test_meta_links_load()
{
	RIACK_STRING bucket_posts, bucket_answers;
	struct RIACK_GET_OBJECT get_post;
	struct RIACK_OBJECT put_post;
	struct RIACK_STRING_LINKED_LIST *keys_posts, *current_post, *keys_answers, *current_answer;
	bucket_posts.len = strlen(RIAK_TEST_BUCKET_POSTS);
	bucket_posts.value = RIAK_TEST_BUCKET_POSTS;
	bucket_answers.len = strlen(RIAK_TEST_BUCKET_ANSWERS);
	bucket_answers.value = RIAK_TEST_BUCKET_ANSWERS;
	// Make random links between posts and comments
	if ((riack_list_keys(test_client, bucket_posts, &keys_posts) == RIACK_SUCCESS)&&
		(riack_list_keys(test_client, bucket_answers, &keys_answers) == RIACK_SUCCESS)) {
		current_post = keys_posts;
		current_answer = keys_answers;
		while (current_post && current_post->next) {
			if (riack_get(test_client, bucket_posts, current_post->string, 0, &get_post) == RIACK_SUCCESS) {
				if (get_post.object.content_count == 1) {
					memset(&put_post, 0, sizeof(put_post));

					put_post.bucket = copy_string(&bucket_posts);
					put_post.key = copy_string(&current_post->string);

					put_post.content_count = 1;
					put_post.content = copy_content(get_post.object.content);

					current_answer = test_make_links(current_answer, get_post.object.content);
					if (riack_put(test_client, put_post, 0, 0) != RIACK_SUCCESS) {
						return 1;
					}
					riack_free_object(test_client, &put_post);
				}
				riack_free_get_object(test_client, &get_post);
			}
			current_post = current_post->next;
		}
	}
	return 0;
}
Exemplo n.º 6
0
void RiakTest::GetObject()
{
	const char* bucket = "rfs";
	//const char* key = "f057fbee-d7a4-43a3-b761-163f243730ab";
	//const char* key = "90de2941-bbdf-4a4b-8c0d-14d4dc12e649";	//folder
	//const char* key = "6d31c25e-ddc0-4bc6-8b96-8f190b279a71";
	const char* key = "root";
	riack_string rbucket, rkey;
	riack_get_object *obj;

	rbucket.len = strlen(bucket);
	rbucket.value = (char*)bucket;

	rkey.len = strlen(key);
	rkey.value = (char*)key;

	int ret = riack_get(m_riak, &rbucket, &rkey, NULL, &obj);

	char skey[_MAX_PATH];
	char sval[_MAX_PATH];

	int count = obj->object.content->usermeta_count;
	for (int i = 0; i < count; i++)
	{
		riack_pair& r_meta = obj->object.content->usermetas[i];
		
		memset(skey, 0, _MAX_PATH);
		memset(sval, 0, _MAX_PATH);

		memcpy(skey, r_meta.key.value, r_meta.key.len);
		memcpy(sval, r_meta.value, r_meta.value_len);

		printf("[%s]:%s\n", skey, sval);
	}
	

	riack_free_get_object_p(m_riak, &obj);
}
Exemplo n.º 7
0
void RiakTest::Add_Link_test_111()
{
	const char* bucket = "test";
	const char* key = "key_111";
	const char* type = "text/plain";
	const char* data = "value_111";


	riack_string rbucket, rkey;
	riack_get_object *robj = NULL;
	riack_object *nobj = NULL;

	rbucket.len = strlen(bucket);
	rbucket.value = (char*)bucket;
	rkey.len = strlen(key);
	rkey.value = (char*)key;

	int ret = riack_get(m_riak, &rbucket, &rkey, NULL, &robj);

	//riack_content& r_content = robj->object.content[0];
	//riack_link* r_link = r_content.links;
	//r_content.links = (riack_link*)realloc(r_link, (r_content.link_count + 1)*sizeof(riack_link));
	//r_link = &(r_content.links[r_content.link_count]);
	//r_content.link_count += 1;

	const char* l_bucket = "test_444";
	const char* link = "key_444";
	const char* targ = "parent";
	//memset(r_link, 0, sizeof(r_link));
	//r_link->bucket.value = (char*)strdup(l_bucket);
	//r_link->bucket.len = strlen(l_bucket);
	//r_link->key.len = strlen(link);
	//r_link->key.value = (char*)strdup(link);
	//r_link->key.len = strlen(link);
	//r_link->tag.value = (char*)strdup(targ);
	//r_link->tag.len = strlen(targ);

	nobj = riack_object_add_link_new(&(robj->object), bucket, key, l_bucket, link, targ);

	//{
	//	
	//	nobj = riack_object_alloc(m_riak);
	//	nobj->bucket.value = (char*)strdup(bucket);
	//	nobj->bucket.len = strlen(bucket);
	//	nobj->key.value = (char*)strdup(key);
	//	nobj->key.len = strlen(key);
	//	nobj->content_count = 1;
	//	nobj->content = (riack_content*)malloc(sizeof(riack_content));
	//	memset(nobj->content, 0, sizeof(riack_content));
	//	nobj->content[0].content_type.value = (char*)strdup(type);
	//	nobj->content[0].content_type.len = strlen(type);
	//	nobj->content[0].data = (unsigned char*)strdup(data);
	//	nobj->content[0].data_len = strlen(data);
	//	// link
	//	const char* l_bucket = "test_333";
	//	const char* link = "key_333";
	//	const char* targ = "parent";
	//	nobj->content[0].link_count = 1;
	//	riack_link* r_link = (riack_link*)malloc(sizeof(riack_link)*nobj->content[0].link_count);
	//	nobj->content[0].links = r_link;

	//	memset(r_link, 0, sizeof(r_link));		
	//	r_link->bucket.value = (char*)strdup(l_bucket);
	//	r_link->bucket.len = strlen(l_bucket);
	//	r_link->key.len = strlen(link);
	//	r_link->key.value = (char*)strdup(link);
	//	r_link->key.len = strlen(link);
	//	r_link->tag.value = (char*)strdup(targ);
	//	r_link->tag.len = strlen(targ);

	//	//l_bucket = "test_444";
	//	//link = "key_444";
	//	//r_link++;
	//	//memset(r_link, 0, sizeof(r_link));
	//	//r_link->bucket.value = (char*)strdup(l_bucket);
	//	//r_link->bucket.len = strlen(l_bucket);
	//	//r_link->key.len = strlen(link);
	//	//r_link->key.value = (char*)strdup(link);
	//	//r_link->key.len = strlen(link);
	//	//r_link->tag.value = (char*)strdup(targ);
	//	//r_link->tag.len = strlen(targ);
	//}

	riack_free_get_object_p(m_riak, &robj);

	riack_put(m_riak, nobj, NULL, NULL);
	
	riack_free_object_p(m_riak, &nobj);
}
Exemplo n.º 8
0
/**
 * \brief get content of given tile
 *
 * fills the mapcache_tile::data of the given tile with content stored on the riak server
 * \private \memberof mapcache_cache_riak
 * \sa mapcache_cache::tile_get()
 */
static int _mapcache_cache_riak_get(mapcache_context *ctx, mapcache_cache *pcache, mapcache_tile *tile) {
    int error;
    int connect_error = RIACK_SUCCESS;
    int retries = 3;
    RIACK_STRING key;
    struct RIACK_GET_OBJECT obj;
    struct RIACK_GET_PROPERTIES properties;
    struct RIACK_CLIENT *client;
    mapcache_pooled_connection *pc;
    mapcache_cache_riak *cache = (mapcache_cache_riak*)pcache;

    memset(&properties, 0, sizeof(struct RIACK_GET_PROPERTIES));

    //Use Buckets defaults instead of setting the read/write attributes
    /*
    properties.r_use = 1;
    properties.r = 1;
    */


    key.value = mapcache_util_get_tile_key(ctx, tile, NULL, " \r\n\t\f\e\a\b", "#");
    if (GC_HAS_ERROR(ctx)) {
        return MAPCACHE_FAILURE;
    }
    key.len = strlen(key.value);

    tile->encoded_data = mapcache_buffer_create(0, ctx->pool);

    pc = _riak_get_connection(ctx, cache, tile);
    if (GC_HAS_ERROR(ctx)) {
        return MAPCACHE_FAILURE;
    }
    client = pc->connection;

    // If we get an error it is advised that we call reconnect.  It also appears
    // that every now and then we get an error and need to retry once again to
    // get it to work.
    do
    {
        error = riack_get(client, cache->bucket, key, &properties, &obj);
        if (error != RIACK_SUCCESS) {
            ctx->log(ctx, MAPCACHE_WARN, "Retry %d in riak_get for tile %s from cache %s due to error %d", (4-retries), key.value, cache->cache.name, error);
            for (connect_error = riack_reconnect(client);
                    connect_error != RIACK_SUCCESS && retries > 0;
                    connect_error = riack_reconnect(client))
            {
                --retries;
            }

            --retries;
        }
    }
    while (error != RIACK_SUCCESS && retries >= 0);

    if (error != RIACK_SUCCESS)
    {
        if (connect_error != RIACK_SUCCESS)
            mapcache_connection_pool_invalidate_connection(ctx,pc);
        else
            mapcache_connection_pool_release_connection(ctx,pc);

        ctx->set_error(ctx, 500, "Failed to get tile %s from cache %s due to error %d", key.value, cache->cache.name, error);
        return MAPCACHE_FAILURE;
    }

    // Check if tile exists.  If it doesn't we need to return CACHE_MISS or things go wrong.
    // Mapcache doesn't appear to use the has_tile function and uses _get instead so we need
    // to do this sort of test here instead of erroring.
    if (obj.object.content_count < 1 || obj.object.content[0].data_len == 0) {
        riack_free_get_object(client, &obj);  // Need to free the object here as well.
        mapcache_connection_pool_release_connection(ctx,pc);
        return MAPCACHE_CACHE_MISS;
    }

    // Copy the data into the buffer
    mapcache_buffer_append(tile->encoded_data, obj.object.content[0].data_len, obj.object.content[0].data);

    riack_free_get_object(client, &obj);    // riack_get allocates the returned object so we need to deallocate it.

    mapcache_connection_pool_release_connection(ctx,pc);

    return MAPCACHE_SUCCESS;
}