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); //} }
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; }
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); }
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); }
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(¤t_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; }
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); }
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); }
/** * \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; }