[1]统一GET/PUT结束后结果通知机制,API直接调用失败时不回调,其他情况回调(promise);

[2]hiredis版本确定为0.14.0版;
[3]修复tango_cache_ctx_destroy中TAILQ内存释放的BUG;
This commit is contained in:
zhangchengwei
2018-10-27 11:03:58 +08:00
parent 990e247155
commit 0e6b5dd610
11 changed files with 150 additions and 90 deletions

View File

@@ -76,6 +76,10 @@ void get_future_success(future_result_t* result, void * user)
void get_future_failed(enum e_future_error err, const char * what, void * user)
{
struct future_pdata *pdata = (struct future_pdata *)user;
future_destroy(pdata->future);
fclose(pdata->fp);
free(pdata);
printf("GET fail: %s\n", what);
}
@@ -110,6 +114,10 @@ void head_future_success(future_result_t* result, void * user)
void head_future_failed(enum e_future_error err, const char * what, void * user)
{
struct future_pdata *pdata = (struct future_pdata *)user;
future_destroy(pdata->future);
free(pdata);
printf("HEAD fail: %s\n", what);
}
@@ -204,8 +212,6 @@ static void dummy_accept_callback(evutil_socket_t fd, short events, void *arg)
struct future_pdata *pdata;
struct tango_cache_ctx *ctx;
pdata = (struct future_pdata *)malloc(sizeof(struct future_pdata));
do
{
@@ -230,23 +236,30 @@ static void dummy_accept_callback(evutil_socket_t fd, short events, void *arg)
if(!strcasecmp(p, "GET"))
{
sprintf(filename, "file_index_%u.bin", index++);
pdata = (struct future_pdata *)malloc(sizeof(struct future_pdata));
pdata->fp = fopen(filename, "w");
pdata->future = future_create(get_future_success, get_future_failed, pdata);
tango_cache_fetch_object(tango_instance, pdata->future, &getmeta);
if(tango_cache_fetch_object(tango_instance, pdata->future, &getmeta) < 0)
{
get_future_failed(FUTURE_ERROR_CANCEL, "", pdata);
}
}
else if(!strcasecmp(p, "HEAD"))
{
sprintf(filename, "file_index_%u.bin", index++);
pdata->fp = fopen(filename, "w");
pdata = (struct future_pdata *)malloc(sizeof(struct future_pdata));
pdata->future = future_create(head_future_success, head_future_failed, pdata);
tango_cache_head_object(tango_instance, pdata->future, &getmeta);
if(tango_cache_head_object(tango_instance, pdata->future, &getmeta) < 0)
{
head_future_failed(FUTURE_ERROR_CANCEL, "", pdata);
}
}
else if(!strcasecmp(p, "PUTONCE"))
{
size_t filelen;
p = get_file_content(s, &filelen);
pdata = (struct future_pdata *)malloc(sizeof(struct future_pdata));
pdata->future = future_create(put_future_success, put_future_failed, pdata);
tango_cache_upload_once_data(tango_instance, pdata->future, PUT_MEM_FREE, p, filelen, &putmeta, pdata->filename, 256);
@@ -254,6 +267,7 @@ static void dummy_accept_callback(evutil_socket_t fd, short events, void *arg)
else if(!strcasecmp(p, "PUTONCEEV"))
{
size_t readlen;
pdata = (struct future_pdata *)malloc(sizeof(struct future_pdata));
pdata->future = future_create(put_future_success, put_future_failed, pdata);
struct evbuffer *evbuf = evbuffer_new();
char buffer[1024];
@@ -273,12 +287,14 @@ static void dummy_accept_callback(evutil_socket_t fd, short events, void *arg)
}
else if(!strcasecmp(p, "DEL"))
{
pdata = (struct future_pdata *)malloc(sizeof(struct future_pdata));
pdata->future = future_create(del_future_success, del_future_failed, pdata);
sprintf(pdata->filename, "%s", s);
tango_cache_delete_object(tango_instance, pdata->future, s);
}
else if(!strcasecmp(p, "DELMUL")) //TODO
{
pdata = (struct future_pdata *)malloc(sizeof(struct future_pdata));
pdata->future = future_create(del_future_success, del_future_failed, pdata);
sprintf(pdata->filename, "%s", s);
@@ -290,9 +306,15 @@ static void dummy_accept_callback(evutil_socket_t fd, short events, void *arg)
}
else
{
pdata = (struct future_pdata *)malloc(sizeof(struct future_pdata));
pdata->future = future_create(put_future_success, put_future_failed, pdata);
ctx = tango_cache_update_start(tango_instance, pdata->future, &putmeta);
if(ctx==NULL)
{
put_future_failed(FUTURE_ERROR_CANCEL, "NULL", pdata);
continue;
}
tango_cache_get_object_path(ctx, pdata->filename, 256);
FILE *fp = fopen(s, "r");
@@ -302,6 +324,7 @@ static void dummy_accept_callback(evutil_socket_t fd, short events, void *arg)
assert(n>=0);
tango_cache_update_frag_data(ctx, buffer, n);
}
fclose(fp);
tango_cache_update_end(ctx);
}
}