Commit 09c459cb authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Eliminate the cnt_start state by folding it into cnt_recv

parent 5d82c73b
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
*DOT hash -> CNT_Request [label="Busy object\nS_STP_WORKING\nR_STP_LOOKUP" *DOT hash -> CNT_Request [label="Busy object\nS_STP_WORKING\nR_STP_LOOKUP"
*DOT color=blue] *DOT color=blue]
*DOT disembark -> hash [style=dotted, color=blue] *DOT disembark -> hash [style=dotted, color=blue]
*DOT http1_wait -> CNT_Request [label="S_STP_WORKING\nR_STP_START"] *DOT http1_wait -> CNT_Request [label="S_STP_WORKING\nR_STP_RECV"]
*DOT http1_wait -> disembark [label="Session close"] *DOT http1_wait -> disembark [label="Session close"]
*DOT http1_wait -> disembark [label="Timeout" color=green] *DOT http1_wait -> disembark [label="Timeout" color=green]
*DOT disembark -> waiter [style=dotted, color=green] *DOT disembark -> waiter [style=dotted, color=green]
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
*DOT [label="Busy object\nS_STP_WORKING\nR_STP_LOOKUP" color=blue] *DOT [label="Busy object\nS_STP_WORKING\nR_STP_LOOKUP" color=blue]
*DOT CNT_Request -> http1_cleanup *DOT CNT_Request -> http1_cleanup
*DOT http1_cleanup -> disembark [label="Session close"] *DOT http1_cleanup -> disembark [label="Session close"]
*DOT http1_cleanup -> CNT_Request [label="S_STP_WORKING\nR_STP_START"] *DOT http1_cleanup -> CNT_Request [label="S_STP_WORKING\nR_STP_RECV"]
*DOT http1_cleanup -> http1_wait [label="S_STP_NEWREQ"] *DOT http1_cleanup -> http1_wait [label="S_STP_NEWREQ"]
*DOT *DOT
*DOT } *DOT }
...@@ -331,10 +331,10 @@ HTTP1_Session(struct worker *wrk, struct req *req) ...@@ -331,10 +331,10 @@ HTTP1_Session(struct worker *wrk, struct req *req)
assert( assert(
sp->sess_step == S_STP_NEWREQ || sp->sess_step == S_STP_NEWREQ ||
req->req_step == R_STP_LOOKUP || req->req_step == R_STP_LOOKUP ||
req->req_step == R_STP_START); req->req_step == R_STP_RECV);
if (sp->sess_step == S_STP_WORKING) { if (sp->sess_step == S_STP_WORKING) {
if (req->req_step == R_STP_START) if (req->req_step == R_STP_RECV)
done = http1_dissect(wrk, req); done = http1_dissect(wrk, req);
if (done == 0) if (done == 0)
done = CNT_Request(wrk, req); done = CNT_Request(wrk, req);
...@@ -350,7 +350,7 @@ HTTP1_Session(struct worker *wrk, struct req *req) ...@@ -350,7 +350,7 @@ HTTP1_Session(struct worker *wrk, struct req *req)
break; break;
case SESS_DONE_RET_START: case SESS_DONE_RET_START:
sp->sess_step = S_STP_WORKING; sp->sess_step = S_STP_WORKING;
req->req_step = R_STP_START; req->req_step = R_STP_RECV;
break; break;
default: default:
WRONG("Illegal enum http1_cleanup_ret"); WRONG("Illegal enum http1_cleanup_ret");
...@@ -362,7 +362,7 @@ HTTP1_Session(struct worker *wrk, struct req *req) ...@@ -362,7 +362,7 @@ HTTP1_Session(struct worker *wrk, struct req *req)
if (done) if (done)
return; return;
sp->sess_step = S_STP_WORKING; sp->sess_step = S_STP_WORKING;
req->req_step = R_STP_START; req->req_step = R_STP_RECV;
} }
} }
} }
...@@ -1105,6 +1105,16 @@ cnt_recv(const struct worker *wrk, struct req *req) ...@@ -1105,6 +1105,16 @@ cnt_recv(const struct worker *wrk, struct req *req)
AZ(req->obj); AZ(req->obj);
AZ(req->busyobj); AZ(req->busyobj);
/* Assign XID and log */
req->xid = ++xids; /* XXX not locked */
VSLb(req->vsl, SLT_ReqStart, "%s %s %u",
req->sp->addr, req->sp->port, req->xid);
if (req->err_code) {
req->req_step = R_STP_ERROR;
return (0);
}
/* By default we use the first backend */ /* By default we use the first backend */
AZ(req->director); AZ(req->director);
req->director = req->vcl->director[0]; req->director = req->vcl->director[0];
...@@ -1168,42 +1178,6 @@ cnt_recv(const struct worker *wrk, struct req *req) ...@@ -1168,42 +1178,6 @@ cnt_recv(const struct worker *wrk, struct req *req)
} }
} }
/*--------------------------------------------------------------------
* START
* First time we see a request
*
DOT start [
DOT shape=box
DOT label="cnt_start:\nDissect request\nHandle expect"
DOT ]
DOT start -> recv [style=bold,color=green]
DOT start -> DONE [label=errors]
*/
static int
cnt_start(struct worker *wrk, struct req *req)
{
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
AZ(req->restarts);
AZ(req->obj);
AN(req->vcl);
AZ(req->esi_level);
assert(!isnan(req->t_req));
/* Assign XID and log */
req->xid = ++xids; /* XXX not locked */
VSLb(req->vsl, SLT_ReqStart, "%s %s %u",
req->sp->addr, req->sp->port, req->xid);
if (req->err_code)
req->req_step = R_STP_ERROR;
else
req->req_step = R_STP_RECV;
return (0);
}
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
* Central state engine dispatcher. * Central state engine dispatcher.
* *
...@@ -1235,8 +1209,7 @@ CNT_Request(struct worker *wrk, struct req *req) ...@@ -1235,8 +1209,7 @@ CNT_Request(struct worker *wrk, struct req *req)
*/ */
assert( assert(
req->req_step == R_STP_LOOKUP || req->req_step == R_STP_LOOKUP ||
req->req_step == R_STP_START || req->req_step == R_STP_RECV);
req->req_step == R_STP_RECV); // from ESI
req->wrk = wrk; req->wrk = wrk;
......
...@@ -38,7 +38,6 @@ SESS_STEP(working, WORKING) ...@@ -38,7 +38,6 @@ SESS_STEP(working, WORKING)
#ifdef REQ_STEP #ifdef REQ_STEP
REQ_STEP(restart, RESTART, (wrk, req)) REQ_STEP(restart, RESTART, (wrk, req))
REQ_STEP(recv, RECV, (wrk, req)) REQ_STEP(recv, RECV, (wrk, req))
REQ_STEP(start, START, (wrk, req))
REQ_STEP(pipe, PIPE, (wrk, req)) REQ_STEP(pipe, PIPE, (wrk, req))
REQ_STEP(pass, PASS, (wrk, req)) REQ_STEP(pass, PASS, (wrk, req))
REQ_STEP(lookup, LOOKUP, (wrk, req)) REQ_STEP(lookup, LOOKUP, (wrk, req))
......
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