BUG/MINOR: mux-h1: Correctly report Ti timer when HTX and keepalives are used

When HTTP keepalives are used in conjunction with HTX, the Ti timer
reports the elapsed time since the beginning of the connection instead
of the end of the previous request as stated in the documentation. Th,
Tq and Tt also report incorrectly as a result.

When creating a new h1s, check if it is the first request on the
connection. If not, set the session create times to the current
timestamp rather than the initial session accept timestamp. This makes
the logged timers behave as stated in the documentation.

This fix should be backported to 1.9 and 2.0.
This commit is contained in:
Dave Pirotte 2019-07-10 13:57:38 +00:00 committed by Christopher Faulet
parent 37243bc61f
commit 234740f65d

View File

@ -306,11 +306,21 @@ static struct h1s *h1s_create(struct h1c *h1c, struct conn_stream *cs, struct se
if (!sess)
sess = h1c->conn->owner;
/* Timers for subsequent sessions on the same HTTP 1.x connection
* measure from `now`, not from the connection accept time */
if (h1s->flags & H1S_F_NOT_FIRST) {
h1s->csinfo.create_date = date;
h1s->csinfo.tv_create = now;
h1s->csinfo.t_handshake = 0;
h1s->csinfo.t_idle = -1;
}
else {
h1s->csinfo.create_date = sess->accept_date;
h1s->csinfo.tv_create = sess->tv_accept;
h1s->csinfo.t_handshake = sess->t_handshake;
h1s->csinfo.t_idle = -1;
}
}
else {
if (h1c->px->options2 & PR_O2_RSPBUG_OK)
h1s->res.err_pos = -1;