diff --git a/plugin/business/pangu-http/src/pangu_http.cpp b/plugin/business/pangu-http/src/pangu_http.cpp index c195aba..3eb4ef1 100644 --- a/plugin/business/pangu-http/src/pangu_http.cpp +++ b/plugin/business/pangu-http/src/pangu_http.cpp @@ -539,8 +539,8 @@ struct pangu_http_ctx struct tfe_http_half* cache_revalidate_req; struct tfe_http_half* cached_response; size_t cache_result_declared_sz, cache_result_actual_sz; - struct cache_write_context* cache_update_ctx; - + struct cache_write_context* cache_write_ctx; + int cache_wirte_result; int thread_id; }; @@ -594,10 +594,10 @@ static void pangu_http_ctx_free(struct pangu_http_ctx * ctx) { Maat_stream_scan_string_end(&(ctx->sp)); } - if(ctx->cache_update_ctx) + if(ctx->cache_write_ctx) { - web_cache_write_end(ctx->cache_update_ctx); - ctx->cache_update_ctx=NULL; + web_cache_write_end(ctx->cache_write_ctx); + ctx->cache_write_ctx=NULL; } //On session recycle @@ -1367,16 +1367,16 @@ void cache_write(const struct tfe_http_session * session, enum tfe_http_event ev if(events & EV_HTTP_RESP_BODY_BEGIN) { - ctx->cache_update_ctx=web_cache_write_start(g_pangu_rt->cache, thread_id, session, &(ctx->cmid)); + ctx->cache_write_ctx=web_cache_write_start(g_pangu_rt->cache, thread_id, session, &(ctx->cmid)); } - if(events & EV_HTTP_RESP_BODY_CONT && ctx->cache_update_ctx!=NULL) + if(events & EV_HTTP_RESP_BODY_CONT && ctx->cache_write_ctx!=NULL) { - web_cache_write(ctx->cache_update_ctx, body_frag, frag_size); + web_cache_write(ctx->cache_write_ctx, body_frag, frag_size); } - if(events & EV_HTTP_RESP_BODY_END && ctx->cache_update_ctx!=NULL) + if(events & EV_HTTP_RESP_BODY_END && ctx->cache_write_ctx!=NULL) { - web_cache_write_end(ctx->cache_update_ctx); - ctx->cache_update_ctx=NULL; + ctx->cache_wirte_result=web_cache_write_end(ctx->cache_write_ctx); + ctx->cache_write_ctx=NULL; //printf("cache update success: %s\n", ctx->ref_session->req->req_spec.url); } @@ -1482,6 +1482,10 @@ void pangu_on_http_end(const struct tfe_stream * stream, { ATOMIC_INC(&(g_pangu_rt->stat_val[STAT_ACTION_REPLACE])); } + TFE_LOG_DEBUG(g_pangu_rt->local_logger, "cache %s %s upload=%d", + session->req->req_spec.url, + cache_pending_result_string(ctx->pending_result), + ctx->cache_wirte_result); cache_mid_clear(&(ctx->cmid)); pangu_http_ctx_free(ctx); *pme = NULL; diff --git a/plugin/business/pangu-http/src/pangu_web_cache.cpp b/plugin/business/pangu-http/src/pangu_web_cache.cpp index 04fb972..7e62313 100644 --- a/plugin/business/pangu-http/src/pangu_web_cache.cpp +++ b/plugin/business/pangu-http/src/pangu_web_cache.cpp @@ -132,6 +132,29 @@ struct cache_write_context size_t content_len; size_t uploaded_len; }; +const char* cache_pending_result_string(enum cache_pending_result result) +{ + switch (result) + { + case PENDING_RESULT_NONE: + return "none"; + case PENDING_RESULT_FOBIDDEN: + return "forbidden"; + case PENDING_RESULT_REVALIDATE: + return "revalidate"; + case PENDING_RESULT_ALLOWED: + return "allowd"; + case PENDING_RESULT_HIT: + return "hit"; + case PENDING_RESULT_MISS: + return "miss"; + default: + assert(0); + return "?"; + } + +} + static void web_cache_stat_cb(evutil_socket_t fd, short what, void * arg) { struct cache_handle* cache=(struct cache_handle *)arg; @@ -743,7 +766,7 @@ struct cache_handle* create_web_cache_handle(const char* profile_path, const cha MESA_load_profile_int_def(profile_path, section, "max_cache_obj_size", &(temp), 1024*1024*1024); cache->default_cache_policy.max_cache_obj_size=temp; //<1GB by default - MESA_load_profile_int_def(profile_path, section, "min_cache_obj_size", &(temp), 16*1024); + MESA_load_profile_int_def(profile_path, section, "min_cache_obj_size", &(temp), 1*1024); cache->default_cache_policy.min_cache_obj_size=temp;// > 16kb by default if(cache->cache_policy_enabled) @@ -982,14 +1005,14 @@ static void cache_read_meta_on_succ(future_result_t * result, void * user) break; case RESULT_TYPE_USERTAG: cached_meta_set(&ctx->cached_obj_meta, RESULT_TYPE_USERTAG, _result->data_frag, _result->size); - TFE_LOG_DEBUG(ctx->ref_handle->logger, "cache meta query hit: %s %s %s" + TFE_LOG_DEBUG(ctx->ref_handle->logger, "cache meta read hit: %s %s %s" , ctx->url , ctx->cached_obj_meta.last_modified ? ctx->cached_obj_meta.last_modified:"no_last_modify" , ctx->cached_obj_meta.etag ? ctx->cached_obj_meta.etag:"no_etag"); break; case RESULT_TYPE_MISS: ctx->status=PENDING_RESULT_MISS; - TFE_LOG_DEBUG(ctx->ref_handle->logger, "cache meta query miss: %s", ctx->url); + TFE_LOG_DEBUG(ctx->ref_handle->logger, "cache meta read miss: %s", ctx->url); //NOT break intentionally. case RESULT_TYPE_END: //last call. @@ -1077,7 +1100,7 @@ enum cache_pending_result web_cache_async_pending(struct cache_handle* handle, u } if(_mid->shall_bypass || (!param->force_caching && !param->cache_dyn_url && _mid->is_dyn_url && param->key_descr.qs_num==0) || - (!param->force_caching && param->cache_cookied_cont && _mid->has_cookie)) + (!param->force_caching && !param->cache_cookied_cont && _mid->has_cookie)) { _mid->result=PENDING_RESULT_FOBIDDEN; return _mid->result; @@ -1262,7 +1285,7 @@ struct cache_write_context* web_cache_write_start(struct cache_handle* handle, u if(!(param->ignore_res_nocache || param->force_caching)) { ATOMIC_INC(&(handle->stat_val[STAT_CACHE_WRITE_FORBIDEN])); - TFE_LOG_DEBUG(handle->logger, "cache update forbiden: %s", session->req->req_spec.url); + TFE_LOG_DEBUG(handle->logger, "cache write forbiden: %s", session->req->req_spec.url); return NULL; } break; @@ -1280,6 +1303,13 @@ struct cache_write_context* web_cache_write_start(struct cache_handle* handle, u || (!param->cache_html && _mid->is_html) ) { + ATOMIC_INC(&(handle->stat_val[STAT_CACHE_WRITE_FORBIDEN])); + TFE_LOG_DEBUG(handle->logger, "cache write forbiden: %s, bypass:%d, cont_len:%lld, has_cookie:%d, is_html:%d", + session->req->req_spec.url, + _mid->shall_bypass, + content_len, + _mid->has_cookie, + _mid->is_html); ATOMIC_INC(&(handle->stat_val[STAT_CACHE_WRITE_BYPASS])); return NULL; } @@ -1372,31 +1402,37 @@ void web_cache_write(struct cache_write_context* ctx, const unsigned char * body ATOMIC_ADD(&(ctx->ref_cache_handle->stat_val[STAT_CACHE_WRITE_BYTES]), frag_size); return; } -void web_cache_write_end(struct cache_write_context* ctx) +int web_cache_write_end(struct cache_write_context* ctx) { - int ret=0; + int tmp_ret=0, ret=0; struct cache_write_future_ctx* future_ctx=ctx->future_ctx; if(ctx->uploaded_len==ctx->content_len) { - ret=tango_cache_update_end(ctx->write_ctx, future_ctx->upload_path, sizeof(future_ctx->upload_path)); - if(ret<0) + tmp_ret=tango_cache_update_end(ctx->write_ctx, future_ctx->upload_path, sizeof(future_ctx->upload_path)); + if(tmp_ret<0) { //upload too slow or storage server error; TFE_LOG_DEBUG(ctx->ref_cache_handle->logger, "cache upload failed: %s",ctx->future_ctx->url); cache_write_future_ctx_free(ctx->future_ctx); ctx->future_ctx=NULL; ATOMIC_INC(&(ctx->ref_cache_handle->stat_val[STAT_CACHE_WRITE_ERR])); + ret=-1; + } + else + { + ret=1; } } else { tango_cache_update_cancel(ctx->write_ctx); - ATOMIC_INC(&(ctx->ref_cache_handle->stat_val[STAT_CACHE_WRITE_CANCEL])); + ATOMIC_INC(&(ctx->ref_cache_handle->stat_val[STAT_CACHE_WRITE_CANCEL])); + ret=-2; } ATOMIC_DEC(&(ctx->ref_cache_handle->stat_val[STAT_CACHE_WRITING])); ctx->write_ctx = NULL; ctx->ref_cache_handle = NULL; free(ctx); - return; + return ret; } diff --git a/plugin/business/pangu-http/src/pangu_web_cache.h b/plugin/business/pangu-http/src/pangu_web_cache.h index 8656660..ce381ba 100644 --- a/plugin/business/pangu-http/src/pangu_web_cache.h +++ b/plugin/business/pangu-http/src/pangu_web_cache.h @@ -44,6 +44,7 @@ enum cache_pending_result PENDING_RESULT_HIT, PENDING_RESULT_MISS }; +const char* cache_pending_result_string(enum cache_pending_result); struct cache_mid; void cache_mid_clear(struct cache_mid **mid); @@ -58,7 +59,11 @@ struct cache_write_context; struct cache_write_context* web_cache_write_start(struct cache_handle* handle, unsigned int thread_id, const struct tfe_http_session * session, struct cache_mid **mid); void web_cache_write(struct cache_write_context* ctx, const unsigned char * body_frag, size_t frag_size); -void web_cache_write_end(struct cache_write_context* ctx); +//return 1 on success +//return -1 on failed +//return -2 on cancel + +int web_cache_write_end(struct cache_write_context* ctx);