From b53107e2983fe289a5c9e01077b7f7acfe8676a9 Mon Sep 17 00:00:00 2001 From: zhengchao Date: Sat, 24 Nov 2018 16:41:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BC=93=E5=AD=98=E7=AD=96?= =?UTF-8?q?=E7=95=A5=E7=9A=84=E7=BB=9F=E8=AE=A1=E6=97=A5=E5=BF=97=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pangu-http/src/pangu_web_cache.cpp | 69 +++++++++++-------- 1 file changed, 40 insertions(+), 29 deletions(-) diff --git a/plugin/business/pangu-http/src/pangu_web_cache.cpp b/plugin/business/pangu-http/src/pangu_web_cache.cpp index 8f89d93..5f7ff0d 100644 --- a/plugin/business/pangu-http/src/pangu_web_cache.cpp +++ b/plugin/business/pangu-http/src/pangu_web_cache.cpp @@ -36,6 +36,8 @@ enum cache_stat_field STAT_CACHE_QUERY_ABANDON, STAT_CACHE_QUERYING, STAT_CACHE_PENDING, + STAT_CACHE_POLICY_MATCH, + STAT_CACHE_POLICY_EFFECT, STAT_CACHE_UPLOAD_CNT, STAT_CACHE_UPLOAD_BYPASS, STAT_CACHE_UPLOAD_OVERRIDE, @@ -224,6 +226,8 @@ const char* statsd_server_ip, int statsd_server_port, const char*histogram_bins) set_stat_spec(&spec[STAT_CACHE_QUERY_ABANDON], "get_abandon",FS_STYLE_STATUS, FS_CALC_CURRENT); set_stat_spec(&spec[STAT_CACHE_QUERYING], "getting",FS_STYLE_STATUS, FS_CALC_CURRENT); set_stat_spec(&spec[STAT_CACHE_PENDING], "pending",FS_STYLE_STATUS, FS_CALC_CURRENT); + set_stat_spec(&spec[STAT_CACHE_POLICY_MATCH], "policy_match",FS_STYLE_FIELD, FS_CALC_CURRENT); + set_stat_spec(&spec[STAT_CACHE_POLICY_EFFECT], "policy_effect",FS_STYLE_FIELD, FS_CALC_CURRENT); set_stat_spec(&spec[STAT_CACHE_UPLOAD_CNT], "cache_put",FS_STYLE_FIELD, FS_CALC_CURRENT); set_stat_spec(&spec[STAT_CACHE_UPLOAD_BYPASS], "cache_bypass",FS_STYLE_FIELD, FS_CALC_CURRENT); set_stat_spec(&spec[STAT_CACHE_UPLOAD_OVERRIDE], "or_put",FS_STYLE_FIELD, FS_CALC_CURRENT); @@ -604,6 +608,34 @@ void cache_param_dup(int idx, MAAT_RULE_EX_DATA *to, MAAT_RULE_EX_DATA *from, lo *((struct cache_param**)to)=from_param; return; } +struct cache_mid +{ + enum cache_pending_result result; + struct request_freshness req_fresshness; + char shall_bypass; + char is_using_exception_param; + char is_dyn_url; + char is_html; + char has_cookie; + char use_cnt; + int cfg_id; + char* cache_key; + struct cache_param* param; +}; +void cache_mid_clear(struct cache_mid **mid) +{ + if(*mid==NULL) + { + return; + } + if((*mid)->is_using_exception_param) + { + cache_param_free(0, NULL, NULL, (void**)&((*mid)->param), 0, NULL); + } + FREE(&((*mid)->cache_key)); + FREE(mid); + return; +} static void cache_key_bloom_gc_cb(evutil_socket_t fd, short what, void * arg) { @@ -743,8 +775,8 @@ static char* read_http1_hdr(const char* hdr, const char* field_name) struct cache_query_context { struct cache_handle* ref_handle; + const struct cache_mid* ref_mid; char* url; - struct cached_meta meta; struct tango_cache_result* ref_tango_cache_result; @@ -821,6 +853,10 @@ static void cache_query_obj_on_succ(future_result_t * result, void * user) { case RESULT_TYPE_HEADER: ATOMIC_INC(&(ctx->ref_handle->stat_val[STAT_CACHE_QUERY_HIT])); + if(ctx->ref_mid->is_using_exception_param==1) + { + ATOMIC_INC(&(ctx->ref_handle->stat_val[STAT_CACHE_POLICY_EFFECT])); + } FS_operate(ctx->ref_handle->fs_handle, ctx->ref_handle->fs_id[STAT_CACHE_QUERY_HIT_OJB_SIZE], 0, FS_OP_SET, ctx->ref_tango_cache_result->tlength/1024); cached_meta_set(&ctx->meta, RESULT_TYPE_HEADER, ctx->ref_tango_cache_result->data_frag, ctx->ref_tango_cache_result->size); ctx->meta.content_length=ctx->ref_tango_cache_result->tlength; @@ -950,34 +986,7 @@ static void cache_query_meta_on_fail(enum e_future_error err, const char * what, cache_pending_ctx_free_cb(ctx); return; } -struct cache_mid -{ - enum cache_pending_result result; - struct request_freshness req_fresshness; - char shall_bypass; - char is_using_exception_param; - char is_dyn_url; - char is_html; - char has_cookie; - char use_cnt; - int cfg_id; - char* cache_key; - struct cache_param* param; -}; -void cache_mid_clear(struct cache_mid **mid) -{ - if(*mid==NULL) - { - return; - } - if((*mid)->is_using_exception_param) - { - cache_param_free(0, NULL, NULL, (void**)&((*mid)->param), 0, NULL); - } - FREE(&((*mid)->cache_key)); - FREE(mid); - return; -} + #define CACHE_ACTION_BYPASS 0x80 enum cache_pending_result web_cache_async_pending(struct cache_handle* handle, unsigned int thread_id, @@ -1036,6 +1045,7 @@ enum cache_pending_result web_cache_async_pending(struct cache_handle* handle, u cache_policy.config_id, request->req_spec.url, _mid->cache_key!=NULL?_mid->cache_key:"null"); + ATOMIC_INC(&(handle->stat_val[STAT_CACHE_POLICY_MATCH])); } if(_mid->shall_bypass || @@ -1141,6 +1151,7 @@ int web_cache_async_query(struct cache_handle* handle, unsigned int thread_id, meta.get=_mid->req_fresshness; query_ctx=ALLOC(struct cache_query_context, 1); query_ctx->ref_handle=handle; + query_ctx->ref_mid=_mid; query_ctx->url=tfe_strdup(request->req_spec.url); p=future_to_promise(f);