Commit f81aeddd authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

More untangling of req vs. session state.

Eliminate the t_rx timestamp, I doubt it made anything clearer
for anybody.

Add timestamp to SessOpen VSL record.
parent a6419c8a
...@@ -706,7 +706,6 @@ struct sess { ...@@ -706,7 +706,6 @@ struct sess {
/* Timestamps, all on TIM_real() timescale */ /* Timestamps, all on TIM_real() timescale */
double t_open; /* fd accepted */ double t_open; /* fd accepted */
double t_idle; /* fd accepted or resp sent */ double t_idle; /* fd accepted or resp sent */
double t_rx;
#if defined(HAVE_EPOLL_CTL) #if defined(HAVE_EPOLL_CTL)
struct epoll_event ev; struct epoll_event ev;
......
...@@ -118,14 +118,13 @@ cnt_sess_wait(struct sess *sp, struct worker *wrk, struct req *req) ...@@ -118,14 +118,13 @@ cnt_sess_wait(struct sess *sp, struct worker *wrk, struct req *req)
assert(req->sp == sp); assert(req->sp == sp);
assert(!isnan(sp->t_rx));
AZ(req->vcl); AZ(req->vcl);
AZ(req->obj); AZ(req->obj);
AZ(req->esi_level); AZ(req->esi_level);
assert(req->xid == 0); assert(req->xid == 0);
req->t_req = sp->t_rx; assert(isnan(req->t_req));
req->t_resp = NAN; assert(isnan(req->t_resp));
tmo = (int)(1e3 * cache_param->timeout_linger); tmo = (int)(1e3 * cache_param->timeout_linger);
while (1) { while (1) {
...@@ -159,7 +158,7 @@ cnt_sess_wait(struct sess *sp, struct worker *wrk, struct req *req) ...@@ -159,7 +158,7 @@ cnt_sess_wait(struct sess *sp, struct worker *wrk, struct req *req)
when = sp->t_idle + cache_param->timeout_linger; when = sp->t_idle + cache_param->timeout_linger;
tmo = (int)(1e3 * (when - now)); tmo = (int)(1e3 * (when - now));
if (when < now || tmo == 0) { if (when < now || tmo == 0) {
sp->t_rx = NAN; req->t_req = NAN;
wrk->stats.sess_herd++; wrk->stats.sess_herd++;
SES_ReleaseReq(req); SES_ReleaseReq(req);
WAIT_Enter(sp); WAIT_Enter(sp);
...@@ -167,7 +166,9 @@ cnt_sess_wait(struct sess *sp, struct worker *wrk, struct req *req) ...@@ -167,7 +166,9 @@ cnt_sess_wait(struct sess *sp, struct worker *wrk, struct req *req)
} }
} else { } else {
/* Working on it */ /* Working on it */
when = sp->t_rx + cache_param->timeout_req; if (isnan(req->t_req))
req->t_req = now;
when = req->t_req + cache_param->timeout_req;
tmo = (int)(1e3 * (when - now)); tmo = (int)(1e3 * (when - now));
if (when < now || tmo == 0) { if (when < now || tmo == 0) {
why = SC_RX_TIMEOUT; why = SC_RX_TIMEOUT;
...@@ -224,7 +225,6 @@ cnt_sess_done(struct sess *sp, struct worker *wrk, struct req *req) ...@@ -224,7 +225,6 @@ cnt_sess_done(struct sess *sp, struct worker *wrk, struct req *req)
req->vcl = NULL; req->vcl = NULL;
} }
sp->t_idle = W_TIM_real(wrk); sp->t_idle = W_TIM_real(wrk);
if (req->xid == 0) if (req->xid == 0)
req->t_resp = sp->t_idle; req->t_resp = sp->t_idle;
...@@ -262,8 +262,6 @@ cnt_sess_done(struct sess *sp, struct worker *wrk, struct req *req) ...@@ -262,8 +262,6 @@ cnt_sess_done(struct sess *sp, struct worker *wrk, struct req *req)
wrk->stats.sess_pipeline++; wrk->stats.sess_pipeline++;
return (SESS_DONE_RET_START); return (SESS_DONE_RET_START);
} else { } else {
sp->t_rx = sp->t_idle;
req->t_req = NAN;
if (Tlen(req->htc->rxbuf)) if (Tlen(req->htc->rxbuf))
wrk->stats.sess_readahead++; wrk->stats.sess_readahead++;
return (SESS_DONE_RET_WAIT); return (SESS_DONE_RET_WAIT);
...@@ -303,6 +301,12 @@ CNT_Session(struct worker *wrk, struct req *req) ...@@ -303,6 +301,12 @@ CNT_Session(struct worker *wrk, struct req *req)
return; return;
} }
if (sp->sess_step == S_STP_NEWREQ) {
HTC_Init(req->htc, req->ws, sp->fd, req->vsl,
cache_param->http_req_size,
cache_param->http_req_hdr_len);
}
while (1) { while (1) {
/* /*
* Possible entrance states * Possible entrance states
......
...@@ -104,7 +104,6 @@ ses_setup(struct sess *sp) ...@@ -104,7 +104,6 @@ ses_setup(struct sess *sp)
sp->sockaddr.ss_family = sp->mysockaddr.ss_family = PF_UNSPEC; sp->sockaddr.ss_family = sp->mysockaddr.ss_family = PF_UNSPEC;
sp->t_open = NAN; sp->t_open = NAN;
sp->t_idle = NAN; sp->t_idle = NAN;
sp->t_rx = NAN;
} }
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
...@@ -202,8 +201,8 @@ ses_vsl_socket(struct sess *sp, const char *lsockname) ...@@ -202,8 +201,8 @@ ses_vsl_socket(struct sess *sp, const char *lsockname)
strcpy(laddr, "-"); strcpy(laddr, "-");
strcpy(lport, "-"); strcpy(lport, "-");
} }
VSL(SLT_SessOpen, sp->vxid, "%s %s %s %s %s", VSL(SLT_SessOpen, sp->vxid, "%s %s %s %s %s %.6f",
sp->addr, sp->port, lsockname, laddr, lport); sp->addr, sp->port, lsockname, laddr, lport, sp->t_open);
} }
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
...@@ -232,7 +231,6 @@ SES_pool_accept_task(struct worker *wrk, void *arg) ...@@ -232,7 +231,6 @@ SES_pool_accept_task(struct worker *wrk, void *arg)
wrk->stats.s_sess++; wrk->stats.s_sess++;
sp->t_open = VTIM_real(); sp->t_open = VTIM_real();
sp->t_rx = sp->t_open;
sp->t_idle = sp->t_open; sp->t_idle = sp->t_open;
sp->vxid = VXID_Get(&wrk->vxid_pool); sp->vxid = VXID_Get(&wrk->vxid_pool);
...@@ -266,10 +264,9 @@ SES_ScheduleReq(struct req *req) ...@@ -266,10 +264,9 @@ SES_ScheduleReq(struct req *req)
if (Pool_Task(pp->pool, &sp->task, POOL_QUEUE_FRONT)) { if (Pool_Task(pp->pool, &sp->task, POOL_QUEUE_FRONT)) {
VSC_C_main->client_drop_late++; VSC_C_main->client_drop_late++;
sp->t_idle = VTIM_real();
AN (req->vcl); AN (req->vcl);
VCL_Rel(&req->vcl); VCL_Rel(&req->vcl);
SES_Delete(sp, SC_OVERLOAD, sp->t_idle); SES_Delete(sp, SC_OVERLOAD, NAN);
return (1); return (1);
} }
return (0); return (0);
...@@ -290,11 +287,9 @@ SES_Handle(struct sess *sp, double now) ...@@ -290,11 +287,9 @@ SES_Handle(struct sess *sp, double now)
AN(pp->pool); AN(pp->pool);
sp->task.func = ses_sess_pool_task; sp->task.func = ses_sess_pool_task;
sp->task.priv = sp; sp->task.priv = sp;
sp->t_rx = now;
if (Pool_Task(pp->pool, &sp->task, POOL_QUEUE_FRONT)) { if (Pool_Task(pp->pool, &sp->task, POOL_QUEUE_FRONT)) {
VSC_C_main->client_drop_late++; VSC_C_main->client_drop_late++;
sp->t_idle = VTIM_real(); SES_Delete(sp, SC_OVERLOAD, now);
SES_Delete(sp, SC_OVERLOAD, sp->t_idle);
} }
} }
...@@ -403,9 +398,8 @@ ses_GetReq(struct sess *sp) ...@@ -403,9 +398,8 @@ ses_GetReq(struct sess *sp)
WS_Init(req->ws, "req", p, e - p); WS_Init(req->ws, "req", p, e - p);
HTC_Init(req->htc, req->ws, sp->fd, req->vsl, req->t_req = NAN;
cache_param->http_req_size, req->t_resp = NAN;
cache_param->http_req_hdr_len);
return (req); return (req);
} }
...@@ -417,6 +411,7 @@ SES_ReleaseReq(struct req *req) ...@@ -417,6 +411,7 @@ SES_ReleaseReq(struct req *req)
struct sesspool *pp; struct sesspool *pp;
CHECK_OBJ_NOTNULL(req, REQ_MAGIC); CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
AZ(req->vcl);
#define ACCT(foo) AZ(req->acct_req.foo); #define ACCT(foo) AZ(req->acct_req.foo);
#include "tbl/acct_fields.h" #include "tbl/acct_fields.h"
#undef ACCT #undef ACCT
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment