支持Head获取对象元信息操作,支持从redis获取元信息;调整内部超时检查逻辑;

This commit is contained in:
zhangchengwei
2018-10-23 20:26:06 +08:00
committed by zhengchao
parent 46db35c9a5
commit 8edd964e21
15 changed files with 1244 additions and 62 deletions

View File

@@ -17,6 +17,9 @@
#include "cache_evbase_client.h"
#include "tango_cache_transfer.h"
#include "tango_cache_tools.h"
#ifdef HEAD_OBJECT_FROM_REDIS
#include "tango_cache_redis.h"
#endif
enum CACHE_ASYN_CMD
{
@@ -28,6 +31,7 @@ enum CACHE_ASYN_CMD
CACHE_ASYN_UPLOAD_FRAG_EVBUF,
CACHE_ASYN_UPLOAD_END,
CACHE_ASYN_DELETE,
CACHE_ASYN_HEAD,
};
struct databuffer
@@ -158,7 +162,15 @@ static void cache_asyn_ioevent_dispatch(struct databuffer *buffer)
tango_cache_fetch_start(ctx_asyn->ctx);
cache_asyn_ctx_destroy(ctx_asyn);
break;
case CACHE_ASYN_HEAD:
#ifdef HEAD_OBJECT_FROM_REDIS
tango_cache_head_redis(ctx_asyn->ctx);
#else
tango_cache_fetch_start(ctx_asyn->ctx);
#endif
cache_asyn_ctx_destroy(ctx_asyn);
break;
case CACHE_ASYN_DELETE:
cache_delete_minio_object(ctx_asyn->ctx);
cache_asyn_ctx_destroy(ctx_asyn);
@@ -450,7 +462,7 @@ int cache_evbase_fetch_object(struct cache_evbase_instance *instance, struct fut
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, f, meta);
ctx_asyn->ctx = tango_cache_fetch_prepare(instance->instance, CACHE_REQUEST_GET, f, meta);
if(ctx_asyn->ctx == NULL)
{
free(ctx_asyn);
@@ -473,6 +485,36 @@ int cache_evbase_fetch_object(struct cache_evbase_instance *instance, struct fut
return 0;
}
int cache_evbase_head_object(struct cache_evbase_instance *instance, struct future* f, struct tango_cache_meta_get *meta)
{
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_fetch_prepare(instance->instance, CACHE_REQUEST_HEAD, f, meta);
if(ctx_asyn->ctx == NULL)
{
free(ctx_asyn);
return -1;
}
buffer = (struct databuffer *)malloc(sizeof(struct databuffer));
buffer->ctx_asyn = ctx_asyn;
buffer->cmd_type = CACHE_ASYN_HEAD;
if(iothread_notify_event(instance->notify_sendfd, &buffer, sizeof(void *), 2) != sizeof(void *))
{
tango_cache_set_fail_state(ctx_asyn->ctx, CACHE_ERR_SOCKPAIR);
promise_failed(future_to_promise(f), FUTURE_ERROR_CANCEL, tango_cache_get_errstring(ctx_asyn->ctx));
tango_cache_ctx_destroy(ctx_asyn->ctx);
cache_asyn_ctx_destroy(ctx_asyn);
free(buffer);
return -2;
}
return 0;
}
int cache_evbase_delete_object(struct cache_evbase_instance *instance, struct future* f, const char *objkey)
{
struct cache_evbase_ctx *ctx_asyn;