From a70aa35a3a6d24ec415527ce2ad52e7fc80c4c79 Mon Sep 17 00:00:00 2001 From: zhangchengwei Date: Sat, 15 Dec 2018 13:50:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86bucketname=E4=BD=9C=E4=B8=BAobject=5Fk?= =?UTF-8?q?ey=E7=9A=84=E4=B8=80=E9=83=A8=E5=88=86=EF=BC=9B=E4=BF=AE?= =?UTF-8?q?=E6=94=B9delete=E6=8E=A5=E5=8F=A3=E5=8A=A0=E5=85=A5minioaddr?= =?UTF-8?q?=E5=92=8Cbucket=E5=8F=AF=E9=80=89=E5=8F=82=E6=95=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cache/include/cache_evbase_client.h | 11 ++++--- cache/include/tango_cache_client.h | 2 +- cache/include/tango_cache_pending.h | 47 +++++------------------------ cache/src/cache_evbase_client.cpp | 4 +-- cache/src/tango_cache_client.cpp | 30 ++++++++++-------- cache/src/tango_cache_client_in.h | 4 +-- cache/src/tango_cache_redis.cpp | 24 +++++++-------- cache/src/tango_cache_transfer.cpp | 16 +++++----- 8 files changed, 56 insertions(+), 82 deletions(-) diff --git a/cache/include/cache_evbase_client.h b/cache/include/cache_evbase_client.h index 86d757a..b34e4eb 100644 --- a/cache/include/cache_evbase_client.h +++ b/cache/include/cache_evbase_client.h @@ -37,15 +37,16 @@ struct tango_cache_parameter *cache_evbase_parameter_new(const char* profile_pat /*创建实例,线程安全,内部会启动一个线程*/ struct cache_evbase_instance *cache_evbase_instance_new(struct tango_cache_parameter *param, void *runtimelog); -//GET接口,成功返回0,失败返回-1,future回调函数会在另外的线程中执行,下同 +/******************************************* GET接口 ****************************************/ +//成功返回0,失败返回-1,future回调函数会在另外的线程中执行,下同 int cache_evbase_fetch_object(struct cache_evbase_instance *instance, struct future* f, struct tango_cache_meta_get *meta, enum OBJECT_LOCATION where_to_get); int cache_evbase_head_object(struct cache_evbase_instance *instance, struct future* f, struct tango_cache_meta_get *meta); struct tango_cache_result *cache_evbase_read_result(void *promise_result); -//DELETE接口 -int cache_evbase_delete_object(struct cache_evbase_instance *instance, struct future* f, const char *objkey); +/****************************************** DELETE接口 **************************************/ +int cache_evbase_delete_object(struct cache_evbase_instance *instance, struct future* f, const char *objkey, const char *minio_addr=NULL, const char *bucket=NULL); -//一次性上传接口 +/***************************************** 一次性上传接口 **********************************/ int cache_evbase_upload_once_data(struct cache_evbase_instance *instance, struct future* f, enum PUT_MEMORY_COPY_WAY way, const char *data, size_t size, struct tango_cache_meta_put *meta, @@ -55,7 +56,7 @@ int cache_evbase_upload_once_evbuf(struct cache_evbase_instance *instance, struc struct tango_cache_meta_put *meta, char *path/*OUT*/, size_t pathsize); -//流式上传接口 +/****************************************** 流式上传接口 ***********************************/ struct cache_evbase_ctx *cache_evbase_update_start(struct cache_evbase_instance *instance, struct future* f, struct tango_cache_meta_put *meta); int cache_evbase_update_frag_data(struct cache_evbase_ctx *ctx_asyn, enum PUT_MEMORY_COPY_WAY way, const char *data, size_t size); int cache_evbase_update_frag_evbuf(struct cache_evbase_ctx *ctx_asyn, struct evbuffer *evbuf); diff --git a/cache/include/tango_cache_client.h b/cache/include/tango_cache_client.h index 83e87f2..226d4c1 100644 --- a/cache/include/tango_cache_client.h +++ b/cache/include/tango_cache_client.h @@ -111,7 +111,7 @@ struct tango_cache_result *tango_cache_read_result(future_result_t *promise_resu /****************************************** DELETE接口的API ******************************************/ -int tango_cache_delete_object(struct tango_cache_instance *instance, struct future* f, const char *objkey); +int tango_cache_delete_object(struct tango_cache_instance *instance, struct future* f, const char *objkey, const char *minio_addr=NULL, const char *bucket=NULL); /****************************************** UPLOAD接口的API ******************************************/ diff --git a/cache/include/tango_cache_pending.h b/cache/include/tango_cache_pending.h index a8d5858..0c72635 100644 --- a/cache/include/tango_cache_pending.h +++ b/cache/include/tango_cache_pending.h @@ -1,48 +1,13 @@ #pragma once #include - -enum tfe_http_std_field -{ - TFE_HTTP_UNKNOWN_FIELD = 0, - TFE_HTTP_HOST, - TFE_HTTP_REFERER, - TFE_HTTP_USER_AGENT, - TFE_HTTP_COOKIE, - TFE_HTTP_PROXY_AUTHORIZATION, - TFE_HTTP_AUTHORIZATION, - TFE_HTTP_LOCATION, - TFE_HTTP_SERVER, - TFE_HTTP_ETAG, - TFE_HTTP_DATE, - TFE_HTTP_TRAILER, - TFE_HTTP_TRANSFER_ENCODING, - TFE_HTTP_VIA, - TFE_HTTP_PRAGMA, - TFE_HTTP_CONNECTION, - TFE_HTTP_CONT_ENCODING, - TFE_HTTP_CONT_LANGUAGE, - TFE_HTTP_CONT_LOCATION, - TFE_HTTP_CONT_RANGE, - TFE_HTTP_CONT_LENGTH, - TFE_HTTP_CONT_TYPE, - TFE_HTTP_CONT_DISPOSITION, - TFE_HTTP_EXPIRES, - TFE_HTTP_ACCEPT_ENCODING, - TFE_HTTP_CACHE_CONTROL, - TLF_HTTP_IF_MATCH, - TLF_HTTP_IF_NONE_MATCH, - TLF_HTTP_IF_MODIFIED_SINCE, - TLF_HTTP_IF_UNMODIFIED_SINCE, - TLF_HTTP_LAST_MODIFIED -}; - +#include enum cache_pending_action { UNDEFINED = 0, ALLOWED, FORBIDDEN, - VERIFY + REVALIDATE }; @@ -65,6 +30,8 @@ struct response_freshness{ time_t timeout; }; + +time_t read_GMT_time(const char* gmt_string); /* 鍑芥暟鍔熻兘锛 鏍规嵁璇锋眰澶村瓧娈靛垽鏂槸鍚﹀厑璁稿皢缂撳瓨浣滀负璇ヨ姹傜殑鍝嶅簲锛屽苟涓斿皢璇锋眰瀛楁瀵圭紦瀛樻柊椴滃害鐨勭害鏉熻寖鍥翠綔涓轰紶鍑哄弬鏁拌繑鍥炵粰璋冪敤鑰 @@ -76,9 +43,9 @@ restrict:濡傛灉璇ュ嚱鏁拌繑鍥炲间负ALLOWED锛屽垯杩斿洖璇锋眰Cache-Control瀛楁 UNDEFINED = 0,//璇锋眰瀛楁涓湭瀹氫箟缂撳瓨鐨勮涓 ALLOWED ,//鍏佽浣跨敤缂撳瓨浣滀负璇ヨ姹傜殑鍝嶅簲 FORBIDDEN,//绂佹浣跨敤缂撳瓨浣滀负璇ヨ姹傜殑鍝嶅簲锛岄渶瑕佸悜婧愭湇鍔″櫒璇锋眰 -VERIFY,//绂佹浣跨敤鏈獙璇佹湁鏁堟х殑缂撳瓨浣滀负璇ヨ姹傜殑鍝嶅簲 +REVALIDATE,//绂佹浣跨敤鏈獙璇佹湁鏁堟х殑缂撳瓨浣滀负璇ヨ姹傜殑鍝嶅簲 */ -enum cache_pending_action tfe_cache_get_pending(const struct tfe_http_field *request, size_t n_fields,struct request_freshness* restrict); +enum cache_pending_action tfe_cache_get_pending(const struct tfe_http_half *request, struct request_freshness* restrict); @@ -94,4 +61,4 @@ UNDEFINED = 0,//鍝嶅簲瀛楁涓湭瀹氫箟缂撳瓨鐨勮涓 ALLOWED ,//鍏佽缂撳瓨璇ュ搷搴 FORBIDDEN,//绂佹缂撳瓨璇ュ搷搴 */ -enum cache_pending_action tfe_cache_put_pending(const struct tfe_http_field *response, size_t n_fields, struct response_freshness* freshness); \ No newline at end of file +enum cache_pending_action tfe_cache_put_pending(const struct tfe_http_half *response, struct response_freshness* freshness); diff --git a/cache/src/cache_evbase_client.cpp b/cache/src/cache_evbase_client.cpp index 27aa420..bef351e 100644 --- a/cache/src/cache_evbase_client.cpp +++ b/cache/src/cache_evbase_client.cpp @@ -554,14 +554,14 @@ int cache_evbase_head_object(struct cache_evbase_instance *instance, struct futu return 0; } -int cache_evbase_delete_object(struct cache_evbase_instance *instance, struct future* f, const char *objkey) +int cache_evbase_delete_object(struct cache_evbase_instance *instance, struct future* f, const char *objkey, const char *minio_addr, const char *bucket) { struct cache_evbase_ctx *ctx_asyn; struct databuffer *buffer; ctx_asyn = (struct cache_evbase_ctx *)calloc(1, sizeof(struct cache_evbase_ctx)); ctx_asyn->instance_asyn = instance; - ctx_asyn->ctx = tango_cache_delete_prepare(instance->instance, f, objkey); + ctx_asyn->ctx = tango_cache_delete_prepare(instance->instance, f, objkey, minio_addr, bucket); if(ctx_asyn->ctx == NULL) { free(ctx_asyn); diff --git a/cache/src/tango_cache_client.cpp b/cache/src/tango_cache_client.cpp index 032ce61..02d53ae 100644 --- a/cache/src/tango_cache_client.cpp +++ b/cache/src/tango_cache_client.cpp @@ -283,11 +283,11 @@ void tango_cache_get_object_path(struct tango_cache_ctx *ctx, char *path/*OUT*/, { if(ctx->locate == OBJECT_IN_MINIO) { - snprintf(path, pathsize, "http://%s/%s/%s", ctx->hostaddr, ctx->instance->param->bucketname, ctx->object_key); + snprintf(path, pathsize, "http://%s/%s", ctx->hostaddr, ctx->object_key); } else { - snprintf(path, pathsize, "redis://%s/%s/%s", ctx->instance->redisaddr, ctx->instance->param->bucketname, ctx->object_key); + snprintf(path, pathsize, "redis://%s/%s", ctx->instance->redisaddr, ctx->object_key); } } } @@ -405,14 +405,14 @@ struct tango_cache_ctx *tango_cache_update_prepare(struct tango_cache_instance * if(instance->param->hash_object_key) { caculate_sha256(meta->url, strlen(meta->url), buffer, 72); - snprintf(ctx->object_key, 256, "%c%c/%c%c/%s", buffer[0], buffer[1], buffer[2], buffer[3], buffer+4); + snprintf(ctx->object_key, 256, "%s/%c%c/%c%c/%s", instance->param->bucketname, buffer[0], buffer[1], buffer[2], buffer[3], buffer+4); //保存原始URL snprintf(buffer, 2064, "x-amz-meta-url: %s", meta->url); ctx->headers = curl_slist_append(ctx->headers, buffer); } else { - snprintf(ctx->object_key, 256, "%s", meta->url); + snprintf(ctx->object_key, 256, "%s/%s", instance->param->bucketname, meta->url); } if(wired_load_balancer_lookup(instance->param->minio.wiredlb, ctx->object_key, strlen(ctx->object_key), ctx->hostaddr, 48)) { @@ -591,11 +591,11 @@ struct tango_cache_ctx *tango_cache_fetch_prepare(struct tango_cache_instance *i if(instance->param->hash_object_key) { caculate_sha256(meta->url, strlen(meta->url), sha256, 72); - snprintf(ctx->object_key, 256, "%c%c/%c%c/%s", sha256[0], sha256[1], sha256[2], sha256[3], sha256+4); + snprintf(ctx->object_key, 256, "%s/%c%c/%c%c/%s", instance->param->bucketname, sha256[0], sha256[1], sha256[2], sha256[3], sha256+4); } else { - snprintf(ctx->object_key, 256, "%s", meta->url); + snprintf(ctx->object_key, 256, "%s/%s", instance->param->bucketname, meta->url); } if(wired_load_balancer_lookup(instance->param->minio.wiredlb, ctx->object_key, strlen(ctx->object_key), ctx->hostaddr, 48)) { @@ -639,10 +639,11 @@ int tango_cache_head_object(struct tango_cache_instance *instance, struct future return do_tango_cache_head_object(ctx, location); } -struct tango_cache_ctx *tango_cache_delete_prepare(struct tango_cache_instance *instance, struct future* f, const char *objkey) +struct tango_cache_ctx *tango_cache_delete_prepare(struct tango_cache_instance *instance, struct future* f, const char *objkey, const char *minio_addr, const char *bucket) { struct tango_cache_ctx *ctx; char sha256[72]; + const char *pbucket; if(sessions_exceeds_limit(instance, OBJECT_IN_MINIO)) { @@ -656,16 +657,21 @@ struct tango_cache_ctx *tango_cache_delete_prepare(struct tango_cache_instance * ctx->promise = future_to_promise(f); ctx->method = CACHE_REQUEST_DELETE; + pbucket = (bucket==NULL)?instance->param->bucketname:bucket; if(instance->param->hash_object_key) { caculate_sha256(objkey, strlen(objkey), sha256, 72); - snprintf(ctx->object_key, 256, "%c%c/%c%c/%s", sha256[0], sha256[1], sha256[2], sha256[3], sha256+4); + snprintf(ctx->object_key, 256, "%s/%c%c/%c%c/%s", pbucket, sha256[0], sha256[1], sha256[2], sha256[3], sha256+4); } else { - snprintf(ctx->object_key, 256, "%s", objkey); + snprintf(ctx->object_key, 256, "%s/%s", pbucket, objkey); } - if(wired_load_balancer_lookup(instance->param->minio.wiredlb, ctx->object_key, strlen(ctx->object_key), ctx->hostaddr, 48)) + if(minio_addr != NULL) + { + snprintf(ctx->hostaddr, 48, "%s", minio_addr); + } + else if(wired_load_balancer_lookup(instance->param->minio.wiredlb, ctx->object_key, strlen(ctx->object_key), ctx->hostaddr, 48)) { instance->error_code = CACHE_ERR_WIREDLB; instance->statistic.totaldrop_num += 1; @@ -675,11 +681,11 @@ struct tango_cache_ctx *tango_cache_delete_prepare(struct tango_cache_instance * return ctx; } -int tango_cache_delete_object(struct tango_cache_instance *instance, struct future* f, const char *objkey) +int tango_cache_delete_object(struct tango_cache_instance *instance, struct future* f, const char *objkey, const char *minio_addr, const char *bucket) { struct tango_cache_ctx *ctx; - ctx = tango_cache_delete_prepare(instance, f, objkey); + ctx = tango_cache_delete_prepare(instance, f, objkey, minio_addr, bucket); if(ctx == NULL) { return -1; diff --git a/cache/src/tango_cache_client_in.h b/cache/src/tango_cache_client_in.h index 5f0a938..ed846dc 100644 --- a/cache/src/tango_cache_client_in.h +++ b/cache/src/tango_cache_client_in.h @@ -194,8 +194,8 @@ struct tango_cache_ctx *tango_cache_update_prepare(struct tango_cache_instance * struct future* f, struct tango_cache_meta_put *meta, enum OBJECT_LOCATION maybe_loc); struct tango_cache_ctx *tango_cache_fetch_prepare(struct tango_cache_instance *instance, enum CACHE_REQUEST_METHOD method, struct future* f, struct tango_cache_meta_get *meta, enum OBJECT_LOCATION where_to_get); -struct tango_cache_ctx *tango_cache_delete_prepare(struct tango_cache_instance *instance, struct future* f, const char *objkey); - +struct tango_cache_ctx *tango_cache_delete_prepare(struct tango_cache_instance *instance, + struct future* f, const char *objkey, const char *minio_addr, const char *bucket); enum OBJECT_LOCATION tango_cache_object_locate(struct tango_cache_instance *instance, size_t object_size); void tango_cache_get_object_path(struct tango_cache_ctx *ctx, char *path/*OUT*/, size_t pathsize); diff --git a/cache/src/tango_cache_redis.cpp b/cache/src/tango_cache_redis.cpp index dbd1537..c1fcbc5 100644 --- a/cache/src/tango_cache_redis.cpp +++ b/cache/src/tango_cache_redis.cpp @@ -221,8 +221,8 @@ int tango_cache_head_redis(struct tango_cache_ctx *ctx) { int ret = -1; - ret = redisClusterAsyncCommand(ctx->instance->redis_ac, redis_hget_command_cb, ctx, "HMGET %s/%s OBJECT_META OBJECT_LOCATION", - ctx->instance->param->bucketname, ctx->object_key); + ret = redisClusterAsyncCommand(ctx->instance->redis_ac, redis_hget_command_cb, ctx, + "HMGET %s OBJECT_META OBJECT_LOCATION", ctx->object_key); if(ret != REDIS_OK) { tango_cache_set_fail_state(ctx, CACHE_ERR_REDIS_CONNECT); @@ -240,8 +240,8 @@ int tango_cache_fetch_redis(struct tango_cache_ctx *ctx) { int ret = -1; - ret = redisClusterAsyncCommand(ctx->instance->redis_ac, redis_hget_command_cb, ctx, "HMGET %s/%s OBJECT_META OBJECT_LOCATION OBJECT_BODY", - ctx->instance->param->bucketname, ctx->object_key); + ret = redisClusterAsyncCommand(ctx->instance->redis_ac, redis_hget_command_cb, ctx, + "HMGET %s OBJECT_META OBJECT_LOCATION OBJECT_BODY", ctx->object_key); if(ret != REDIS_OK) { tango_cache_set_fail_state(ctx, CACHE_ERR_REDIS_CONNECT); @@ -259,8 +259,8 @@ int tango_cache_try_fetch_redis(struct tango_cache_ctx *ctx) { int ret = -1; - ret = redisClusterAsyncCommand(ctx->instance->redis_ac, redis_hget_command_cb, ctx, "HMGET %s/%s OBJECT_META OBJECT_LOCATION OBJECT_BODY", - ctx->instance->param->bucketname, ctx->object_key); + ret = redisClusterAsyncCommand(ctx->instance->redis_ac, redis_hget_command_cb, ctx, + "HMGET %s OBJECT_META OBJECT_LOCATION OBJECT_BODY", ctx->object_key); if(ret != REDIS_OK) { tango_cache_set_fail_state(ctx, CACHE_ERR_REDIS_CONNECT); @@ -295,8 +295,8 @@ static void redis_hset_command_cb(struct redisClusterAsyncContext *ac, void *vre { case PUT_STATE_REDIS_META: case PUT_STATE_REDIS_ALL: - ret = redisClusterAsyncCommand(ctx->instance->redis_ac, redis_hset_command_cb, ctx, "EXPIRE %s/%s %u", - ctx->instance->param->bucketname, ctx->object_key, ctx->put.object_ttl); + ret = redisClusterAsyncCommand(ctx->instance->redis_ac, redis_hset_command_cb, ctx, + "EXPIRE %s %u", ctx->object_key, ctx->put.object_ttl); if(ret != REDIS_OK) { tango_cache_set_fail_state(ctx, CACHE_ERR_REDIS_EXEC); @@ -321,8 +321,8 @@ int redis_put_minio_object_meta(struct tango_cache_ctx *ctx, bool callback) char *meta; meta = cJSON_PrintUnformatted(ctx->put.object_meta); - ret = redisClusterAsyncCommand(ctx->instance->redis_ac, redis_hset_command_cb, ctx, "HMSET %s/%s OBJECT_LOCATION minio OBJECT_META %s", - ctx->instance->param->bucketname, ctx->object_key, meta); + ret = redisClusterAsyncCommand(ctx->instance->redis_ac, redis_hset_command_cb, ctx, + "HMSET %s OBJECT_LOCATION minio OBJECT_META %s", ctx->object_key, meta); if(ret != REDIS_OK) { tango_cache_set_fail_state(ctx, CACHE_ERR_REDIS_CONNECT); @@ -344,8 +344,8 @@ int redis_put_complete_part_data(struct tango_cache_ctx *ctx, enum PUT_MEMORY_CO ctx->instance->statistic.memory_used -= size; meta = cJSON_PrintUnformatted(ctx->put.object_meta); - ret = redisClusterAsyncCommand(ctx->instance->redis_ac, redis_hset_command_cb, ctx, "HMSET %s/%s OBJECT_LOCATION redis OBJECT_META %s OBJECT_BODY %b", - ctx->instance->param->bucketname, ctx->object_key, meta, data, size); + ret = redisClusterAsyncCommand(ctx->instance->redis_ac, redis_hset_command_cb, ctx, + "HMSET %s OBJECT_LOCATION redis OBJECT_META %s OBJECT_BODY %b", ctx->object_key, meta, data, size); if(ret != REDIS_OK) { tango_cache_set_fail_state(ctx, CACHE_ERR_REDIS_CONNECT); diff --git a/cache/src/tango_cache_transfer.cpp b/cache/src/tango_cache_transfer.cpp index 7413e2f..183eb2d 100644 --- a/cache/src/tango_cache_transfer.cpp +++ b/cache/src/tango_cache_transfer.cpp @@ -124,11 +124,11 @@ static int http_put_bodypart_request_evbuf(struct tango_cache_ctx *ctx, bool ful ctx->put.upload_offset = 0; if(full) { - snprintf(minio_url, 256, "http://%s/%s/%s", ctx->hostaddr, ctx->instance->param->bucketname, ctx->object_key); + snprintf(minio_url, 256, "http://%s/%s", ctx->hostaddr, ctx->object_key); } else { - snprintf(minio_url, 256, "http://%s/%s/%s?partNumber=%d&uploadId=%s", ctx->hostaddr, ctx->instance->param->bucketname, ctx->object_key, ++ctx->put.part_index, ctx->put.uploadID); + snprintf(minio_url, 256, "http://%s/%s?partNumber=%d&uploadId=%s", ctx->hostaddr, ctx->object_key, ++ctx->put.part_index, ctx->put.uploadID); curl_easy_setopt(ctx->curl, CURLOPT_HEADERFUNCTION, curl_put_multipart_header_cb); curl_easy_setopt(ctx->curl, CURLOPT_HEADERDATA, ctx); } @@ -185,7 +185,7 @@ int curl_get_minio_uploadID(struct tango_cache_ctx *ctx) return -1; } - snprintf(minio_url, 256, "http://%s/%s/%s?uploads", ctx->hostaddr, ctx->instance->param->bucketname, ctx->object_key); + snprintf(minio_url, 256, "http://%s/%s?uploads", ctx->hostaddr, ctx->object_key); curl_easy_setopt(ctx->curl, CURLOPT_POST, 1L); curl_easy_setopt(ctx->curl, CURLOPT_POSTFIELDSIZE, 0); //默认使用回调函数调用fread,测试发现关闭Expect时会导致卡在curl_multi_socket_action curl_easy_setopt(ctx->curl, CURLOPT_URL, minio_url); @@ -215,7 +215,7 @@ int cache_delete_minio_object(struct tango_cache_ctx *ctx, bool call_back) return -1; } - snprintf(minio_url, 256, "http://%s/%s/%s", ctx->hostaddr, ctx->instance->param->bucketname, ctx->object_key); + snprintf(minio_url, 256, "http://%s/%s", ctx->hostaddr, ctx->object_key); curl_easy_setopt(ctx->curl, CURLOPT_CUSTOMREQUEST, "DELETE"); curl_easy_setopt(ctx->curl, CURLOPT_URL, minio_url); curl_easy_setopt(ctx->curl, CURLOPT_WRITEFUNCTION, curl_response_any_cb); @@ -239,7 +239,7 @@ bool cache_cancel_upload_minio(struct tango_cache_ctx *ctx) return false; } - snprintf(minio_url, 256, "http://%s/%s/%s?uploadId=%s", ctx->hostaddr, ctx->instance->param->bucketname, ctx->object_key, ctx->put.uploadID); + snprintf(minio_url, 256, "http://%s/%s?uploadId=%s", ctx->hostaddr, ctx->object_key, ctx->put.uploadID); curl_easy_setopt(ctx->curl, CURLOPT_CUSTOMREQUEST, "DELETE"); curl_easy_setopt(ctx->curl, CURLOPT_URL, minio_url); curl_easy_setopt(ctx->curl, CURLOPT_WRITEFUNCTION, curl_response_any_cb); @@ -265,7 +265,7 @@ bool cache_kick_combine_minio(struct tango_cache_ctx *ctx) } construct_complete_xml(ctx, &ctx->put.combine_xml, &len); - snprintf(minio_url, 256, "http://%s/%s/%s?uploadId=%s", ctx->hostaddr, ctx->instance->param->bucketname, ctx->object_key, ctx->put.uploadID); + snprintf(minio_url, 256, "http://%s/%s?uploadId=%s", ctx->hostaddr, ctx->object_key, ctx->put.uploadID); curl_easy_setopt(ctx->curl, CURLOPT_POST, 1L); curl_easy_setopt(ctx->curl, CURLOPT_URL, minio_url); curl_easy_setopt(ctx->curl, CURLOPT_WRITEFUNCTION, curl_response_any_cb); @@ -522,7 +522,7 @@ int http_put_complete_part_data(struct tango_cache_ctx *ctx, enum PUT_MEMORY_COP } ctx->put.state = PUT_STATE_END; - snprintf(minio_url, 256, "http://%s/%s/%s", ctx->hostaddr, ctx->instance->param->bucketname, ctx->object_key); + snprintf(minio_url, 256, "http://%s/%s", ctx->hostaddr, ctx->object_key); curl_easy_setopt(ctx->curl, CURLOPT_URL, minio_url); curl_easy_setopt(ctx->curl, CURLOPT_WRITEFUNCTION, curl_response_any_cb); curl_easy_setopt(ctx->curl, CURLOPT_WRITEDATA, ctx); @@ -901,7 +901,7 @@ static int tango_cache_fetch_minio(struct tango_cache_ctx *ctx) return -1; } - snprintf(minio_url, 256, "http://%s/%s/%s", ctx->hostaddr, ctx->instance->param->bucketname, ctx->object_key); + snprintf(minio_url, 256, "http://%s/%s", ctx->hostaddr, ctx->object_key); curl_easy_setopt(ctx->curl, CURLOPT_URL, minio_url); if(ctx->method == CACHE_REQUEST_HEAD) {