使用缓存上传的future参数。

This commit is contained in:
zhengchao
2018-10-18 21:42:53 +08:00
parent 529f7037ba
commit 2f6be2c864
3 changed files with 38 additions and 7 deletions

View File

@@ -386,11 +386,35 @@ enum cache_query_status async_web_cache_query(struct cache_handle* handle, unsig
query_ctx->is_undefined_obj=is_undefined_obj;
p=future_to_promise(f);
promise_set_ctx(p, query_ctx, cache_query_ctx_free_cb);
query_ctx->f_tango_cache_fetch=future_create("wrap_cache_qry", wrap_cache_query_on_succ, wrap_cache_query_on_fail, p);
query_ctx->f_tango_cache_fetch=future_create("_cache_qry", wrap_cache_query_on_succ, wrap_cache_query_on_fail, p);
ret=tango_cache_fetch_object(handle->clients[thread_id], query_ctx->f_tango_cache_fetch, &meta);
assert(ret==0);
return WEB_CACHE_QUERING;
}
struct wrap_cache_up_ctx
{
char* url;
time_t start;
struct future* f;
};
void wrap_cache_up_ctx_free(struct wrap_cache_up_ctx* ctx)
{
FREE(&(ctx->url));
future_destroy(ctx->f);
free(ctx);
}
static void wrap_cache_update_on_succ(future_result_t * result, void * user)
{
struct wrap_cache_up_ctx* ctx=(struct wrap_cache_up_ctx*)user;
printf("cache upload success: %s elapse: %d\n", ctx->url, time(NULL)-ctx->start);
wrap_cache_up_ctx_free(ctx);
}
static void wrap_cache_update_on_fail(enum e_future_error err, const char * what, void * user)
{
struct wrap_cache_up_ctx* ctx=(struct wrap_cache_up_ctx*)user;
printf("cache upload failed: %s elapse: %d\n", ctx->url, time(NULL)-ctx->start);
wrap_cache_up_ctx_free(ctx);
}
struct cache_update_context* web_cache_update_start(struct cache_handle* handle, unsigned int thread_id,
const struct tfe_http_session * session)
@@ -436,9 +460,16 @@ struct cache_update_context* web_cache_update_start(struct cache_handle* handle,
meta.std_hdr[i]=buffer;
i++;
memcpy(&meta.put, &resp_freshness, sizeof(resp_freshness));
write_ctx=tango_cache_update_start(handle->clients[thread_id], NULL, &meta);
struct wrap_cache_up_ctx* wrap_cache_up_ctx=ALLOC(struct wrap_cache_up_ctx, 1);
wrap_cache_up_ctx->url=tfe_strdup(session->req->req_spec.url);
wrap_cache_up_ctx->start=time(NULL);
wrap_cache_up_ctx->f=future_create("cache_up", wrap_cache_update_on_succ, wrap_cache_update_on_fail, wrap_cache_up_ctx);
printf("cache update start: %s\n", wrap_cache_up_ctx->url);
write_ctx=tango_cache_update_start(handle->clients[thread_id], wrap_cache_up_ctx->f, &meta);
if(write_ctx==NULL)//exceed maximum cache memory size.
{
wrap_cache_up_ctx_free(wrap_cache_up_ctx);
return NULL;
}
if(is_undefined_obj)