update数据增加evbuffer接口
This commit is contained in:
114
cache/cache_evbase_client.cpp
vendored
114
cache/cache_evbase_client.cpp
vendored
@@ -21,8 +21,10 @@
|
||||
enum CACHE_ASYN_CMD
|
||||
{
|
||||
CACHE_ASYN_FETCH=0,
|
||||
CACHE_ASYN_UPLOAD_ONCE,
|
||||
CACHE_ASYN_UPLOAD_FRAG,
|
||||
CACHE_ASYN_UPLOAD_ONCE_DATA,
|
||||
CACHE_ASYN_UPLOAD_ONCE_EVBUF,
|
||||
CACHE_ASYN_UPLOAD_FRAG_DATA,
|
||||
CACHE_ASYN_UPLOAD_FRAG_EVBUF,
|
||||
CACHE_ASYN_UPLOAD_END,
|
||||
};
|
||||
|
||||
@@ -30,6 +32,7 @@ struct databuffer
|
||||
{
|
||||
char *data;
|
||||
size_t size;
|
||||
struct evbuffer *evbuf;
|
||||
enum CACHE_ASYN_CMD cmd_type;
|
||||
struct cache_evbase_ctx *ctx_asyn;
|
||||
};
|
||||
@@ -149,15 +152,25 @@ static void cache_asyn_ioevent_dispatch(struct databuffer *buffer)
|
||||
cache_asyn_ctx_destroy(ctx_asyn);
|
||||
break;
|
||||
|
||||
case CACHE_ASYN_UPLOAD_ONCE:
|
||||
tango_cache_upload_once_start(ctx_asyn->ctx, buffer->data, buffer->size);
|
||||
case CACHE_ASYN_UPLOAD_ONCE_DATA:
|
||||
tango_cache_upload_once_start_data(ctx_asyn->ctx, PUT_MEM_FREE, buffer->data, buffer->size);
|
||||
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);
|
||||
evbuffer_free(buffer->evbuf);
|
||||
cache_asyn_ctx_destroy(ctx_asyn);
|
||||
break;
|
||||
|
||||
case CACHE_ASYN_UPLOAD_FRAG:
|
||||
tango_cache_update_frag(ctx_asyn->ctx, buffer->data, buffer->size);
|
||||
case CACHE_ASYN_UPLOAD_FRAG_DATA:
|
||||
tango_cache_update_frag_data(ctx_asyn->ctx, buffer->data, buffer->size);
|
||||
free(buffer->data);
|
||||
break;
|
||||
|
||||
case CACHE_ASYN_UPLOAD_FRAG_EVBUF:
|
||||
tango_cache_update_frag_evbuf(ctx_asyn->ctx, EVBUFFER_MOVE, buffer->evbuf);
|
||||
evbuffer_free(buffer->evbuf);
|
||||
break;
|
||||
|
||||
case CACHE_ASYN_UPLOAD_END:
|
||||
tango_cache_update_end(ctx_asyn->ctx);
|
||||
@@ -240,7 +253,7 @@ void cache_evbase_update_end(struct cache_evbase_ctx *ctx_asyn)
|
||||
}
|
||||
}
|
||||
|
||||
int cache_evbase_update_frag(struct cache_evbase_ctx *ctx_asyn, enum PUT_MEMORY_COPY_WAY way, const char *data, size_t size)
|
||||
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;
|
||||
|
||||
@@ -250,7 +263,7 @@ int cache_evbase_update_frag(struct cache_evbase_ctx *ctx_asyn, enum PUT_MEMORY_
|
||||
}
|
||||
|
||||
buffer = (struct databuffer *)malloc(sizeof(struct databuffer));
|
||||
if(way == PUT_ONCE_COPY)
|
||||
if(way == PUT_MEM_COPY)
|
||||
{
|
||||
buffer->data = (char *)malloc(size);
|
||||
memcpy(buffer->data, data, size);
|
||||
@@ -261,7 +274,7 @@ int cache_evbase_update_frag(struct cache_evbase_ctx *ctx_asyn, enum PUT_MEMORY_
|
||||
}
|
||||
buffer->size = size;
|
||||
buffer->ctx_asyn = ctx_asyn;
|
||||
buffer->cmd_type = CACHE_ASYN_UPLOAD_FRAG;
|
||||
buffer->cmd_type = CACHE_ASYN_UPLOAD_FRAG_DATA;
|
||||
|
||||
if(iothread_notify_event(ctx_asyn->instance_asyn->notify_sendfd, &buffer, sizeof(void *), 0) != sizeof(void *))
|
||||
{
|
||||
@@ -278,6 +291,34 @@ int cache_evbase_update_frag(struct cache_evbase_ctx *ctx_asyn, enum PUT_MEMORY_
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cache_evbase_update_frag_evbuf(struct cache_evbase_ctx *ctx_asyn, struct evbuffer *evbuf)
|
||||
{
|
||||
struct databuffer *buffer;
|
||||
|
||||
if(ctx_asyn->ctx->fail_state)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
buffer = (struct databuffer *)malloc(sizeof(struct databuffer));
|
||||
buffer->ctx_asyn = ctx_asyn;
|
||||
buffer->cmd_type = CACHE_ASYN_UPLOAD_FRAG_EVBUF;
|
||||
buffer->evbuf = evbuffer_new();
|
||||
evbuffer_add_buffer(buffer->evbuf, evbuf);
|
||||
|
||||
if(iothread_notify_event(ctx_asyn->instance_asyn->notify_sendfd, &buffer, sizeof(void *), 0) != sizeof(void *))
|
||||
{
|
||||
ctx_asyn->ctx->fail_state = true;
|
||||
if(ctx_asyn->ctx->future != NULL)
|
||||
{
|
||||
promise_failed(future_to_promise(ctx_asyn->ctx->future), FUTURE_ERROR_CANCEL, "write sockpair error");
|
||||
}
|
||||
evbuffer_free(buffer->evbuf);
|
||||
free(buffer);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct cache_evbase_ctx *cache_evbase_update_start(struct cache_evbase_instance *instance, struct future* future, struct tango_cache_meta *meta)
|
||||
{
|
||||
struct cache_evbase_ctx *ctx_asyn;
|
||||
@@ -296,7 +337,8 @@ struct cache_evbase_ctx *cache_evbase_update_start(struct cache_evbase_instance
|
||||
return ctx_asyn;
|
||||
}
|
||||
|
||||
int cache_evbase_upload_once(struct cache_evbase_instance *instance, struct future* future, enum PUT_MEMORY_COPY_WAY way, const char *data, size_t size, struct tango_cache_meta *meta, char *filename, size_t namelen)
|
||||
int cache_evbase_upload_once_data(struct cache_evbase_instance *instance, struct future* future,
|
||||
enum PUT_MEMORY_COPY_WAY way, const char *data, size_t size, struct tango_cache_meta *meta, char *objectkey, size_t keysize)
|
||||
{
|
||||
struct cache_evbase_ctx *ctx_asyn;
|
||||
struct tango_cache_ctx *ctx;
|
||||
@@ -307,10 +349,9 @@ int cache_evbase_upload_once(struct cache_evbase_instance *instance, struct futu
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
ctx->way = PUT_ONCE_FREE;
|
||||
if(filename != NULL)
|
||||
if(objectkey != NULL)
|
||||
{
|
||||
snprintf(filename, namelen, "%s", ctx->file_key);
|
||||
snprintf(objectkey, keysize, "%s", ctx->file_key);
|
||||
}
|
||||
|
||||
ctx_asyn = (struct cache_evbase_ctx *)calloc(1, sizeof(struct cache_evbase_ctx));
|
||||
@@ -318,7 +359,7 @@ int cache_evbase_upload_once(struct cache_evbase_instance *instance, struct futu
|
||||
ctx_asyn->ctx = ctx;
|
||||
|
||||
buffer = (struct databuffer *)malloc(sizeof(struct databuffer));
|
||||
if(way == PUT_ONCE_COPY)
|
||||
if(way == PUT_MEM_COPY)
|
||||
{
|
||||
buffer->data = (char *)malloc(size);
|
||||
memcpy(buffer->data, data, size);
|
||||
@@ -329,7 +370,7 @@ int cache_evbase_upload_once(struct cache_evbase_instance *instance, struct futu
|
||||
}
|
||||
buffer->size = size;
|
||||
buffer->ctx_asyn = ctx_asyn;
|
||||
buffer->cmd_type = CACHE_ASYN_UPLOAD_ONCE;
|
||||
buffer->cmd_type = CACHE_ASYN_UPLOAD_ONCE_DATA;
|
||||
|
||||
if(iothread_notify_event(instance->notify_sendfd, &buffer, sizeof(void *), 0) != sizeof(void *))
|
||||
{
|
||||
@@ -347,6 +388,49 @@ int cache_evbase_upload_once(struct cache_evbase_instance *instance, struct futu
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cache_evbase_upload_once_evbuf(struct cache_evbase_instance *instance, struct future* future,
|
||||
struct evbuffer *evbuf, struct tango_cache_meta *meta, char *objectkey, size_t keysize)
|
||||
{
|
||||
struct cache_evbase_ctx *ctx_asyn;
|
||||
struct tango_cache_ctx *ctx;
|
||||
struct databuffer *buffer;
|
||||
|
||||
ctx = tango_cache_update_prepare(instance->instance, future, meta);
|
||||
if(ctx == NULL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
if(objectkey != NULL)
|
||||
{
|
||||
snprintf(objectkey, keysize, "%s", ctx->file_key);
|
||||
}
|
||||
|
||||
ctx_asyn = (struct cache_evbase_ctx *)calloc(1, sizeof(struct cache_evbase_ctx));
|
||||
ctx_asyn->instance_asyn = instance;
|
||||
ctx_asyn->ctx = ctx;
|
||||
|
||||
buffer = (struct databuffer *)malloc(sizeof(struct databuffer));
|
||||
buffer->ctx_asyn = ctx_asyn;
|
||||
buffer->cmd_type = CACHE_ASYN_UPLOAD_ONCE_EVBUF;
|
||||
buffer->evbuf = evbuffer_new();
|
||||
evbuffer_add_buffer(buffer->evbuf, evbuf);
|
||||
|
||||
if(iothread_notify_event(instance->notify_sendfd, &buffer, sizeof(void *), 0) != sizeof(void *))
|
||||
{
|
||||
ctx_asyn->ctx->fail_state = true;
|
||||
if(ctx_asyn->ctx->future != NULL)
|
||||
{
|
||||
promise_failed(future_to_promise(ctx_asyn->ctx->future), FUTURE_ERROR_CANCEL, "write sockpair error");
|
||||
}
|
||||
evbuffer_free(buffer->evbuf);
|
||||
free(buffer);
|
||||
tango_cache_ctx_destroy(ctx);
|
||||
cache_asyn_ctx_destroy(ctx_asyn);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cache_evbase_fetch(struct cache_evbase_instance *instance, struct future* future, struct tango_cache_meta *meta)
|
||||
{
|
||||
struct cache_evbase_ctx *ctx_asyn;
|
||||
|
||||
Reference in New Issue
Block a user