增加集群版redis作为元信息和对象缓存,去除Minio事件通知的redis元信息获取方式。
This commit is contained in:
108
cache/src/cache_evbase_client.cpp
vendored
108
cache/src/cache_evbase_client.cpp
vendored
@@ -17,7 +17,6 @@
|
||||
#include "cache_evbase_client.h"
|
||||
#include "tango_cache_transfer.h"
|
||||
#include "tango_cache_tools.h"
|
||||
#include "tango_cache_redis.h"
|
||||
|
||||
enum CACHE_ASYN_CMD
|
||||
{
|
||||
@@ -39,6 +38,7 @@ struct databuffer
|
||||
size_t size;
|
||||
struct evbuffer *evbuf;
|
||||
enum CACHE_ASYN_CMD cmd_type;
|
||||
enum OBJECT_LOCATION where_to_get;
|
||||
struct cache_evbase_ctx *ctx_asyn;
|
||||
};
|
||||
|
||||
@@ -61,11 +61,6 @@ struct tango_cache_result *cache_evbase_read_result(void *promise_result)
|
||||
return tango_cache_read_result(promise_result);
|
||||
}
|
||||
|
||||
void cache_evbase_get_object_path(const struct cache_evbase_ctx *ctx_asyn, char *path, size_t pathsize)
|
||||
{
|
||||
tango_cache_get_object_path(ctx_asyn->ctx, path, pathsize);
|
||||
}
|
||||
|
||||
static int create_notification_pipe(evutil_socket_t sv[2])
|
||||
{
|
||||
if(evutil_socketpair(AF_LOCAL, SOCK_STREAM, 0, sv) == -1)
|
||||
@@ -161,7 +156,7 @@ static void cache_asyn_ioevent_dispatch(struct databuffer *buffer)
|
||||
{
|
||||
case CACHE_ASYN_FETCH:
|
||||
p = ctx_asyn->ctx->promise;
|
||||
if(tango_cache_fetch_start(ctx_asyn->ctx) < 0)
|
||||
if(do_tango_cache_fetch_object(ctx_asyn->ctx, buffer->where_to_get) < 0)
|
||||
{
|
||||
promise_failed(p, FUTURE_ERROR_CANCEL, "CACHE_ASYN_FETCH failed");
|
||||
}
|
||||
@@ -169,14 +164,7 @@ static void cache_asyn_ioevent_dispatch(struct databuffer *buffer)
|
||||
break;
|
||||
case CACHE_ASYN_HEAD:
|
||||
p = ctx_asyn->ctx->promise;
|
||||
if(ctx_asyn->instance_asyn->instance->param->head_meta_source == HEAD_META_FROM_REDIS)
|
||||
{
|
||||
ret = tango_cache_head_redis(ctx_asyn->ctx);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = tango_cache_fetch_start(ctx_asyn->ctx);
|
||||
}
|
||||
ret = do_tango_cache_head_object(ctx_asyn->ctx, buffer->where_to_get);
|
||||
if(ret<0)
|
||||
{
|
||||
promise_failed(p, FUTURE_ERROR_CANCEL, "CACHE_ASYN_HEAD failed");
|
||||
@@ -190,11 +178,11 @@ static void cache_asyn_ioevent_dispatch(struct databuffer *buffer)
|
||||
break;
|
||||
|
||||
case CACHE_ASYN_UPLOAD_ONCE_DATA:
|
||||
tango_cache_upload_once_start_data(ctx_asyn->ctx, PUT_MEM_FREE, buffer->data, buffer->size, true);
|
||||
do_tango_cache_upload_once_data(ctx_asyn->ctx, PUT_MEM_FREE, buffer->data, buffer->size, true);
|
||||
cache_asyn_ctx_destroy(ctx_asyn);
|
||||
break;
|
||||
case CACHE_ASYN_UPLOAD_ONCE_EVBUF:
|
||||
tango_cache_upload_once_start_evbuf(ctx_asyn->ctx, EVBUFFER_MOVE, buffer->evbuf, true);
|
||||
do_tango_cache_upload_once_evbuf(ctx_asyn->ctx, EVBUFFER_MOVE, buffer->evbuf, true);
|
||||
evbuffer_free(buffer->evbuf);
|
||||
cache_asyn_ctx_destroy(ctx_asyn);
|
||||
break;
|
||||
@@ -215,7 +203,7 @@ static void cache_asyn_ioevent_dispatch(struct databuffer *buffer)
|
||||
break;
|
||||
|
||||
case CACHE_ASYN_UPLOAD_END:
|
||||
tango_cache_update_end(ctx_asyn->ctx);
|
||||
do_tango_cache_update_end(ctx_asyn->ctx, true);
|
||||
cache_asyn_ctx_destroy(ctx_asyn);
|
||||
break;
|
||||
case CACHE_ASYN_UPLOAD_CANCEL:
|
||||
@@ -271,24 +259,37 @@ static void* thread_listen_sockpair(void *arg)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void cache_evbase_update_end(struct cache_evbase_ctx *ctx_asyn)
|
||||
int cache_evbase_update_end(struct cache_evbase_ctx *ctx_asyn, char *path/*OUT*/, size_t pathsize)
|
||||
{
|
||||
struct databuffer *buffer;
|
||||
|
||||
if(ctx_asyn->ctx->fail_state)
|
||||
{
|
||||
tango_cache_ctx_destroy(ctx_asyn->ctx, false);
|
||||
cache_asyn_ctx_destroy(ctx_asyn);
|
||||
return -1;
|
||||
}
|
||||
buffer = (struct databuffer *)malloc(sizeof(struct databuffer));
|
||||
buffer->ctx_asyn = ctx_asyn;
|
||||
buffer->cmd_type = CACHE_ASYN_UPLOAD_END;
|
||||
|
||||
|
||||
//ENDʱ<44><CAB1><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ʼ<EFBFBD>ֶ<EFBFBD><D6B6>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD>locateһ<65><D2BB>λ<EFBFBD><CEBB>
|
||||
ctx_asyn->ctx->locate = tango_cache_object_locate(ctx_asyn->ctx->instance, ctx_asyn->object_size);
|
||||
tango_cache_get_object_path(ctx_asyn->ctx, path, pathsize);
|
||||
if(ctx_asyn->ctx->instance->param->object_store_way != CACHE_ALL_MINIO)
|
||||
{
|
||||
cJSON_AddNumberToObject(ctx_asyn->ctx->put.object_meta, "Content-Length", ctx_asyn->object_size);
|
||||
}
|
||||
|
||||
if(iothread_notify_event(ctx_asyn->instance_asyn->notify_sendfd, &buffer, sizeof(void *), 2) != sizeof(void *))
|
||||
{
|
||||
if(!ctx_asyn->ctx->fail_state)
|
||||
{
|
||||
tango_cache_set_fail_state(ctx_asyn->ctx, CACHE_ERR_SOCKPAIR);
|
||||
}
|
||||
tango_cache_ctx_destroy(ctx_asyn->ctx);
|
||||
tango_cache_set_fail_state(ctx_asyn->ctx, CACHE_ERR_SOCKPAIR);
|
||||
tango_cache_ctx_destroy(ctx_asyn->ctx, false);
|
||||
cache_asyn_ctx_destroy(ctx_asyn);
|
||||
free(buffer);
|
||||
return -2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void cache_evbase_update_cancel(struct cache_evbase_ctx *ctx_asyn)
|
||||
@@ -317,8 +318,10 @@ int cache_evbase_update_frag_data(struct cache_evbase_ctx *ctx_asyn, enum PUT_ME
|
||||
|
||||
if(ctx_asyn->ctx->fail_state)
|
||||
{
|
||||
return -1;
|
||||
if(way == PUT_MEM_FREE) free((void *)data);
|
||||
return 0;//<2F><>ʱ<EFBFBD>Ⱥ<EFBFBD><C8BA>Է<EFBFBD><D4B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>Իص<D4BB><D8B5><EFBFBD>ʽ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>֪<EFBFBD><D6AA>ʱEND<4E><44><EFBFBD><EFBFBD><EFBFBD>⡣
|
||||
}
|
||||
ctx_asyn->object_size += size;
|
||||
|
||||
buffer = (struct databuffer *)malloc(sizeof(struct databuffer));
|
||||
if(way == PUT_MEM_COPY)
|
||||
@@ -336,10 +339,7 @@ int cache_evbase_update_frag_data(struct cache_evbase_ctx *ctx_asyn, enum PUT_ME
|
||||
|
||||
if(iothread_notify_event(ctx_asyn->instance_asyn->notify_sendfd, &buffer, sizeof(void *), 2) != sizeof(void *))
|
||||
{
|
||||
if(!ctx_asyn->ctx->fail_state)
|
||||
{
|
||||
tango_cache_set_fail_state(ctx_asyn->ctx, CACHE_ERR_SOCKPAIR);
|
||||
}
|
||||
tango_cache_set_fail_state(ctx_asyn->ctx, CACHE_ERR_SOCKPAIR);
|
||||
free(buffer->data);
|
||||
free(buffer);
|
||||
return -2;
|
||||
@@ -353,8 +353,9 @@ int cache_evbase_update_frag_evbuf(struct cache_evbase_ctx *ctx_asyn, struct evb
|
||||
|
||||
if(ctx_asyn->ctx->fail_state)
|
||||
{
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
ctx_asyn->object_size += evbuffer_get_length(evbuf);
|
||||
buffer = (struct databuffer *)malloc(sizeof(struct databuffer));
|
||||
buffer->ctx_asyn = ctx_asyn;
|
||||
buffer->cmd_type = CACHE_ASYN_UPLOAD_FRAG_EVBUF;
|
||||
@@ -363,10 +364,7 @@ int cache_evbase_update_frag_evbuf(struct cache_evbase_ctx *ctx_asyn, struct evb
|
||||
|
||||
if(iothread_notify_event(ctx_asyn->instance_asyn->notify_sendfd, &buffer, sizeof(void *), 2) != sizeof(void *))
|
||||
{
|
||||
if(!ctx_asyn->ctx->fail_state)
|
||||
{
|
||||
tango_cache_set_fail_state(ctx_asyn->ctx, CACHE_ERR_SOCKPAIR);
|
||||
}
|
||||
tango_cache_set_fail_state(ctx_asyn->ctx, CACHE_ERR_SOCKPAIR);
|
||||
evbuffer_free(buffer->evbuf);
|
||||
free(buffer);
|
||||
return -2;
|
||||
@@ -379,13 +377,17 @@ struct cache_evbase_ctx *cache_evbase_update_start(struct cache_evbase_instance
|
||||
struct cache_evbase_ctx *ctx_asyn;
|
||||
struct tango_cache_ctx *ctx;
|
||||
struct databuffer *buffer;
|
||||
enum OBJECT_LOCATION maybe_loc=OBJECT_IN_UNKNOWN;
|
||||
|
||||
ctx = tango_cache_update_prepare(instance->instance, f, meta);
|
||||
if(instance->instance->param->object_store_way != CACHE_SMALL_REDIS)
|
||||
{
|
||||
maybe_loc = OBJECT_IN_MINIO;
|
||||
}
|
||||
ctx = tango_cache_update_prepare(instance->instance, f, meta, maybe_loc);
|
||||
if(ctx == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ctx_asyn = (struct cache_evbase_ctx *)calloc(1, sizeof(struct cache_evbase_ctx));
|
||||
ctx_asyn->instance_asyn = instance;
|
||||
ctx_asyn->ctx = ctx;
|
||||
@@ -413,16 +415,12 @@ int cache_evbase_upload_once_data(struct cache_evbase_instance *instance, struct
|
||||
struct tango_cache_ctx *ctx;
|
||||
struct databuffer *buffer;
|
||||
|
||||
ctx = tango_cache_update_prepare(instance->instance, f, meta);
|
||||
ctx = tango_cache_update_once_prepare(instance->instance, f, meta, size, path, pathsize);
|
||||
if(ctx == NULL)
|
||||
{
|
||||
if(way == PUT_MEM_FREE) free((void *)data);
|
||||
return -1;
|
||||
}
|
||||
if(path != NULL)
|
||||
{
|
||||
snprintf(path, pathsize, "http://%s/%s/%s", ctx->hostaddr, instance->instance->param->bucketname, ctx->object_key);
|
||||
}
|
||||
|
||||
ctx_asyn = (struct cache_evbase_ctx *)calloc(1, sizeof(struct cache_evbase_ctx));
|
||||
ctx_asyn->instance_asyn = instance;
|
||||
ctx_asyn->ctx = ctx;
|
||||
@@ -460,16 +458,11 @@ int cache_evbase_upload_once_evbuf(struct cache_evbase_instance *instance, struc
|
||||
struct tango_cache_ctx *ctx;
|
||||
struct databuffer *buffer;
|
||||
|
||||
ctx = tango_cache_update_prepare(instance->instance, f, meta);
|
||||
ctx = tango_cache_update_once_prepare(instance->instance, f, meta, evbuffer_get_length(evbuf), path, pathsize);
|
||||
if(ctx == NULL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
if(path != NULL)
|
||||
{
|
||||
snprintf(path, pathsize, "http://%s/%s/%s", ctx->hostaddr, instance->instance->param->bucketname, ctx->object_key);
|
||||
}
|
||||
|
||||
ctx_asyn = (struct cache_evbase_ctx *)calloc(1, sizeof(struct cache_evbase_ctx));
|
||||
ctx_asyn->instance_asyn = instance;
|
||||
ctx_asyn->ctx = ctx;
|
||||
@@ -492,14 +485,18 @@ int cache_evbase_upload_once_evbuf(struct cache_evbase_instance *instance, struc
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cache_evbase_fetch_object(struct cache_evbase_instance *instance, struct future* f, struct tango_cache_meta_get *meta)
|
||||
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)
|
||||
{
|
||||
struct cache_evbase_ctx *ctx_asyn;
|
||||
struct databuffer *buffer;
|
||||
|
||||
if(instance->instance->param->object_store_way != CACHE_SMALL_REDIS)
|
||||
{
|
||||
where_to_get = OBJECT_IN_MINIO;
|
||||
}
|
||||
ctx_asyn = (struct cache_evbase_ctx *)calloc(1, sizeof(struct cache_evbase_ctx));
|
||||
ctx_asyn->instance_asyn = instance;
|
||||
ctx_asyn->ctx = tango_cache_fetch_prepare(instance->instance, CACHE_REQUEST_GET, f, meta);
|
||||
ctx_asyn->ctx = tango_cache_fetch_prepare(instance->instance, CACHE_REQUEST_GET, f, meta, where_to_get);
|
||||
if(ctx_asyn->ctx == NULL)
|
||||
{
|
||||
free(ctx_asyn);
|
||||
@@ -509,6 +506,7 @@ int cache_evbase_fetch_object(struct cache_evbase_instance *instance, struct fut
|
||||
buffer = (struct databuffer *)malloc(sizeof(struct databuffer));
|
||||
buffer->ctx_asyn = ctx_asyn;
|
||||
buffer->cmd_type = CACHE_ASYN_FETCH;
|
||||
buffer->where_to_get = where_to_get;
|
||||
|
||||
if(iothread_notify_event(instance->notify_sendfd, &buffer, sizeof(void *), 2) != sizeof(void *))
|
||||
{
|
||||
@@ -525,10 +523,15 @@ int cache_evbase_head_object(struct cache_evbase_instance *instance, struct futu
|
||||
{
|
||||
struct cache_evbase_ctx *ctx_asyn;
|
||||
struct databuffer *buffer;
|
||||
enum OBJECT_LOCATION location = OBJECT_IN_MINIO;
|
||||
|
||||
if(instance->instance->param->object_store_way != CACHE_ALL_MINIO)
|
||||
{
|
||||
location = OBJECT_IN_REDIS;
|
||||
}
|
||||
ctx_asyn = (struct cache_evbase_ctx *)calloc(1, sizeof(struct cache_evbase_ctx));
|
||||
ctx_asyn->instance_asyn = instance;
|
||||
ctx_asyn->ctx = tango_cache_fetch_prepare(instance->instance, CACHE_REQUEST_HEAD, f, meta);
|
||||
ctx_asyn->ctx = tango_cache_fetch_prepare(instance->instance, CACHE_REQUEST_HEAD, f, meta, location);
|
||||
if(ctx_asyn->ctx == NULL)
|
||||
{
|
||||
free(ctx_asyn);
|
||||
@@ -538,6 +541,7 @@ int cache_evbase_head_object(struct cache_evbase_instance *instance, struct futu
|
||||
buffer = (struct databuffer *)malloc(sizeof(struct databuffer));
|
||||
buffer->ctx_asyn = ctx_asyn;
|
||||
buffer->cmd_type = CACHE_ASYN_HEAD;
|
||||
buffer->where_to_get = location;
|
||||
|
||||
if(iothread_notify_event(instance->notify_sendfd, &buffer, sizeof(void *), 2) != sizeof(void *))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user