支持promise finish。
This commit is contained in:
35
cache/src/cache_evbase_client.cpp
vendored
35
cache/src/cache_evbase_client.cpp
vendored
@@ -28,6 +28,7 @@ enum CACHE_ASYN_CMD
|
||||
CACHE_ASYN_UPLOAD_FRAG_DATA,
|
||||
CACHE_ASYN_UPLOAD_FRAG_EVBUF,
|
||||
CACHE_ASYN_UPLOAD_END,
|
||||
CACHE_ASYN_UPLOAD_CANCEL,
|
||||
CACHE_ASYN_DELETE,
|
||||
CACHE_ASYN_HEAD,
|
||||
};
|
||||
@@ -153,21 +154,21 @@ static void cache_asyn_ctx_destroy(struct cache_evbase_ctx *ctx_asyn)
|
||||
static void cache_asyn_ioevent_dispatch(struct databuffer *buffer)
|
||||
{
|
||||
struct cache_evbase_ctx *ctx_asyn=buffer->ctx_asyn;
|
||||
struct future *f;
|
||||
struct promise *p;
|
||||
int ret=0;
|
||||
|
||||
switch(buffer->cmd_type)
|
||||
{
|
||||
case CACHE_ASYN_FETCH:
|
||||
f = ctx_asyn->ctx->future;
|
||||
p = ctx_asyn->ctx->promise;
|
||||
if(tango_cache_fetch_start(ctx_asyn->ctx) < 0)
|
||||
{
|
||||
promise_failed(future_to_promise(f), FUTURE_ERROR_CANCEL, "CACHE_ASYN_FETCH failed");
|
||||
promise_failed(p, FUTURE_ERROR_CANCEL, "CACHE_ASYN_FETCH failed");
|
||||
}
|
||||
cache_asyn_ctx_destroy(ctx_asyn);
|
||||
break;
|
||||
case CACHE_ASYN_HEAD:
|
||||
f = ctx_asyn->ctx->future;
|
||||
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);
|
||||
@@ -178,7 +179,7 @@ static void cache_asyn_ioevent_dispatch(struct databuffer *buffer)
|
||||
}
|
||||
if(ret<0)
|
||||
{
|
||||
promise_failed(future_to_promise(f), FUTURE_ERROR_CANCEL, "CACHE_ASYN_HEAD failed");
|
||||
promise_failed(p, FUTURE_ERROR_CANCEL, "CACHE_ASYN_HEAD failed");
|
||||
}
|
||||
cache_asyn_ctx_destroy(ctx_asyn);
|
||||
break;
|
||||
@@ -217,6 +218,10 @@ static void cache_asyn_ioevent_dispatch(struct databuffer *buffer)
|
||||
tango_cache_update_end(ctx_asyn->ctx);
|
||||
cache_asyn_ctx_destroy(ctx_asyn);
|
||||
break;
|
||||
case CACHE_ASYN_UPLOAD_CANCEL:
|
||||
tango_cache_update_cancel(ctx_asyn->ctx);
|
||||
cache_asyn_ctx_destroy(ctx_asyn);
|
||||
break;
|
||||
default: assert(0);break;
|
||||
}
|
||||
}
|
||||
@@ -286,6 +291,26 @@ void cache_evbase_update_end(struct cache_evbase_ctx *ctx_asyn)
|
||||
}
|
||||
}
|
||||
|
||||
void cache_evbase_update_cancel(struct cache_evbase_ctx *ctx_asyn)
|
||||
{
|
||||
struct databuffer *buffer;
|
||||
|
||||
buffer = (struct databuffer *)malloc(sizeof(struct databuffer));
|
||||
buffer->ctx_asyn = ctx_asyn;
|
||||
buffer->cmd_type = CACHE_ASYN_UPLOAD_CANCEL;
|
||||
|
||||
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, false);
|
||||
cache_asyn_ctx_destroy(ctx_asyn);
|
||||
free(buffer);
|
||||
}
|
||||
}
|
||||
|
||||
int cache_evbase_update_frag_data(struct cache_evbase_ctx *ctx_asyn, enum PUT_MEMORY_COPY_WAY way, const char *data, size_t size)
|
||||
{
|
||||
struct databuffer *buffer;
|
||||
|
||||
Reference in New Issue
Block a user