修正cache_cookied_content开关未生效的bug;在http结束时增加cache日志;
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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]));
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user