使用缓存上传的future参数。
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user