[experimental-ims] 0008c89 Sanitize and document the Sess{Open|Close} VSL messages.

Poul-Henning Kamp phk at FreeBSD.org
Thu Dec 18 10:27:50 CET 2014


commit 0008c89ed6dd5c6010a43cfb4b6762d0d9bbebf4
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Tue Jul 3 10:06:24 2012 +0000

    Sanitize and document the Sess{Open|Close} VSL messages.
    
    Some breakage on the far side of varnishapi expected, mode to come.

diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 2162413..1a42bd0 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -75,6 +75,30 @@ body_status(enum body_status e)
 	}
 }
 
+/*--------------------------------------------------------------------*/
+
+enum sess_close {
+	SC_NULL = 0,
+#define SESS_CLOSE(nm, desc)	SC_##nm,
+#include "tbl/sess_close.h"
+#undef SESS_CLOSE
+};
+
+static inline const char *
+sess_close_str(enum sess_close sc, int want_desc)
+{
+	switch (sc) {
+	case SC_NULL:		return(want_desc ? "(null)": "NULL");
+#define SESS_CLOSE(nm, desc)	case SC_##nm: return(want_desc ? desc : #nm);
+#include "tbl/sess_close.h"
+#undef SESS_CLOSE
+
+	default:		return(want_desc ? "(invalid)" : "INVALID");
+	}
+}
+
+/*--------------------------------------------------------------------*/
+
 /*
  * NB: HDR_STATUS is only used in cache_http.c, everybody else uses the
  * http->status integer field.
@@ -585,7 +609,7 @@ struct req {
 
 	unsigned char		digest[DIGEST_LEN];
 
-	const char		*doclose;
+	enum sess_close		doclose;
 	struct exp		exp;
 	unsigned		cur_method;
 	unsigned		handling;
@@ -655,6 +679,7 @@ struct sess {
 
 	enum sess_step		sess_step;
 	int			fd;
+	enum sess_close		reason;
 	unsigned		vsl_id;
 	uint32_t		vxid;
 
@@ -840,7 +865,7 @@ const char *http_GetReq(const struct http *hp);
 int http_HdrIs(const struct http *hp, const char *hdr, const char *val);
 uint16_t http_DissectRequest(struct req *);
 uint16_t http_DissectResponse(struct http *sp, const struct http_conn *htc);
-const char *http_DoConnection(const struct http *hp);
+enum sess_close http_DoConnection(const struct http *);
 void http_CopyHome(const struct http *hp);
 void http_Unset(struct http *hp, const char *hdr);
 void http_CollectHdr(struct http *hp, const char *hdr);
@@ -919,8 +944,8 @@ unsigned WRW_Write(const struct worker *w, const void *ptr, int len);
 unsigned WRW_WriteH(const struct worker *w, const txt *hh, const char *suf);
 
 /* cache_session.c [SES] */
-void SES_Close(struct sess *sp, const char *reason);
-void SES_Delete(struct sess *sp, const char *reason, double now);
+void SES_Close(struct sess *sp, enum sess_close reason);
+void SES_Delete(struct sess *sp, enum sess_close reason, double now);
 void SES_Charge(struct worker *, struct req *);
 struct sesspool *SES_NewPool(struct pool *pp, unsigned pool_no);
 void SES_DeletePool(struct sesspool *sp);
diff --git a/bin/varnishd/cache/cache_center.c b/bin/varnishd/cache/cache_center.c
index c50d503..e71ad87 100644
--- a/bin/varnishd/cache/cache_center.c
+++ b/bin/varnishd/cache/cache_center.c
@@ -109,7 +109,7 @@ cnt_wait(struct sess *sp, struct worker *wrk, struct req *req)
 	int i, j, tmo;
 	struct pollfd pfd[1];
 	double now, when;
-	const char *why = NULL;
+	enum sess_close why = SC_NULL;
 
 	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
 	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
@@ -143,16 +143,16 @@ cnt_wait(struct sess *sp, struct worker *wrk, struct req *req)
 			req->t_req = now;
 			return (0);
 		} else if (i == -1) {
-			why = "EOF";
+			why = SC_REM_CLOSE;
 			break;
 		} else if (i == -2) {
-			why = "overflow";
+			why = SC_RX_OVERFLOW;
 			break;
 		} else if (i == -3) {
 			/* Nothing but whitespace */
 			when = sp->t_idle + cache_param->timeout_idle;
 			if (when < now) {
-				why = "timeout";
+				why = SC_RX_TIMEOUT;
 				break;
 			}
 			when = sp->t_idle + cache_param->timeout_linger;
@@ -170,7 +170,7 @@ cnt_wait(struct sess *sp, struct worker *wrk, struct req *req)
 			when = sp->t_rx + cache_param->timeout_req;
 			tmo = (int)(1e3 * (when - now));
 			if (when < now || tmo == 0) {
-				why = "req timeout";
+				why = SC_RX_TIMEOUT;
 				break;
 			}
 		}
@@ -255,7 +255,7 @@ cnt_sess_done(struct sess *sp, struct worker *wrk, struct req *req)
 	req->hash_always_miss = 0;
 	req->hash_ignore_busy = 0;
 
-	if (sp->fd >= 0 && req->doclose != NULL) {
+	if (sp->fd >= 0 && req->doclose != SC_NULL) {
 		/*
 		 * This is an orderly close of the connection; ditch nolinger
 		 * before we close, to get queued data transmitted.
@@ -268,7 +268,7 @@ cnt_sess_done(struct sess *sp, struct worker *wrk, struct req *req)
 		wrk->stats.sess_closed++;
 		AZ(req->vcl);
 		SES_ReleaseReq(req);
-		SES_Delete(sp, NULL, NAN);
+		SES_Delete(sp, SC_NULL, NAN);
 		return (SESS_DONE_RET_GONE);
 	}
 
@@ -318,9 +318,9 @@ CNT_Session(struct worker *wrk, struct req *req)
 	 */
 	if (sp->sess_step == S_STP_NEWREQ && VTCP_blocking(sp->fd)) {
 		if (errno == ECONNRESET)
-			SES_Close(sp, "remote closed");
+			SES_Close(sp, SC_REM_CLOSE);
 		else
-			SES_Close(sp, "error");
+			SES_Close(sp, SC_TX_ERROR);
 		sdr = cnt_sess_done(sp, wrk, req);
 		assert(sdr == SESS_DONE_RET_GONE);
 		return;
@@ -437,7 +437,7 @@ cnt_prepresp(struct worker *wrk, struct req *req)
 			req->res_mode |= RES_CHUNKED;
 		} else {
 			req->res_mode |= RES_EOF;
-			req->doclose = "EOF mode";
+			req->doclose = SC_TX_EOF;
 		}
 	}
 
@@ -573,7 +573,7 @@ cnt_error(struct worker *wrk, struct req *req)
 	    (uint16_t)cache_param->http_max_hdr);
 	bo->stats = NULL;
 	if (req->obj == NULL) {
-		req->doclose = "Out of objects";
+		req->doclose = SC_OVERLOAD;
 		req->director = NULL;
 		http_Teardown(bo->beresp);
 		http_Teardown(bo->bereq);
@@ -611,7 +611,7 @@ cnt_error(struct worker *wrk, struct req *req)
 
 
 	/* We always close when we take this path */
-	req->doclose = "error";
+	req->doclose = SC_TX_ERROR;
 	req->wantbody = 1;
 
 	assert(req->handling == VCL_RET_DELIVER);
@@ -1504,7 +1504,7 @@ cnt_start(struct worker *wrk, struct req *req)
 
 	/* If we could not even parse the request, just close */
 	if (req->err_code == 400) {
-		SES_Close(req->sp, "junk");
+		SES_Close(req->sp, SC_RX_JUNK);
 		return (1);
 	}
 
@@ -1520,7 +1520,7 @@ cnt_start(struct worker *wrk, struct req *req)
 		if (strcasecmp(p, "100-continue")) {
 			req->err_code = 417;
 		} else if (strlen(r) != write(req->sp->fd, r, strlen(r))) {
-			SES_Close(req->sp, "remote closed");
+			SES_Close(req->sp, SC_REM_CLOSE);
 			return (1);
 		}
 	}
diff --git a/bin/varnishd/cache/cache_esi_deliver.c b/bin/varnishd/cache/cache_esi_deliver.c
index 7e4305e..cc722ce 100644
--- a/bin/varnishd/cache/cache_esi_deliver.c
+++ b/bin/varnishd/cache/cache_esi_deliver.c
@@ -325,7 +325,7 @@ ESI_Deliver(struct req *req)
 						st->ptr + off, l2);
 					if (WRW_Error(req->wrk)) {
 						SES_Close(req->sp,
-						    "remote closed");
+						    SC_REM_CLOSE);
 						p = e;
 						break;
 					}
@@ -376,7 +376,7 @@ ESI_Deliver(struct req *req)
 			if (vgz != NULL)
 				VGZ_WrwFlush(req->wrk, vgz);
 			if (WRW_Flush(req->wrk)) {
-				SES_Close(req->sp, "remote closed");
+				SES_Close(req->sp, SC_REM_CLOSE);
 				p = e;
 				break;
 			}
diff --git a/bin/varnishd/cache/cache_http.c b/bin/varnishd/cache/cache_http.c
index 411b2d3..eb5998a 100644
--- a/bin/varnishd/cache/cache_http.c
+++ b/bin/varnishd/cache/cache_http.c
@@ -410,19 +410,19 @@ http_GetHdrField(const struct http *hp, const char *hdr,
  * XXX: redo with http_GetHdrField() ?
  */
 
-const char *
+enum sess_close
 http_DoConnection(const struct http *hp)
 {
 	char *p, *q;
-	const char *ret;
+	enum sess_close ret;
 	unsigned u;
 
 	if (!http_GetHdr(hp, H_Connection, &p)) {
 		if (hp->protover < 11)
-			return ("not HTTP/1.1");
-		return (NULL);
+			return (SC_REQ_HTTP10);
+		return (SC_NULL);
 	}
-	ret = NULL;
+	ret = SC_NULL;
 	AN(p);
 	for (; *p; p++) {
 		if (vct_issp(*p))
@@ -434,7 +434,7 @@ http_DoConnection(const struct http *hp)
 				break;
 		u = pdiff(p, q);
 		if (u == 5 && !strncasecmp(p, "close", u))
-			ret = "Connection: close";
+			ret = SC_REQ_CLOSE;
 		u = http_findhdr(hp, u, p);
 		if (u != 0)
 			hp->hdf[u] |= HDF_FILTER;
diff --git a/bin/varnishd/cache/cache_pipe.c b/bin/varnishd/cache/cache_pipe.c
index 8fa9e3c..238d0a3 100644
--- a/bin/varnishd/cache/cache_pipe.c
+++ b/bin/varnishd/cache/cache_pipe.c
@@ -92,7 +92,7 @@ PipeRequest(struct req *req)
 	i = WRW_FlushRelease(wrk);
 
 	if (i) {
-		SES_Close(req->sp, "pipe");
+		SES_Close(req->sp, SC_TX_PIPE);
 		VDI_CloseFd(&vc);
 		return;
 	}
@@ -132,7 +132,7 @@ PipeRequest(struct req *req)
 			fds[1].fd = -1;
 		}
 	}
-	SES_Close(req->sp, "pipe");
+	SES_Close(req->sp, SC_TX_PIPE);
 	VDI_CloseFd(&vc);
 	bo->vbc = NULL;
 }
diff --git a/bin/varnishd/cache/cache_response.c b/bin/varnishd/cache/cache_response.c
index cdad653..e82ab67 100644
--- a/bin/varnishd/cache/cache_response.c
+++ b/bin/varnishd/cache/cache_response.c
@@ -285,5 +285,5 @@ RES_WriteObj(struct req *req)
 		WRW_EndChunk(req->wrk);
 
 	if (WRW_FlushRelease(req->wrk) && req->sp->fd >= 0)
-		SES_Close(req->sp, "remote closed");
+		SES_Close(req->sp, SC_REM_CLOSE);
 }
diff --git a/bin/varnishd/cache/cache_session.c b/bin/varnishd/cache/cache_session.c
index 7f88212..59dccf6 100644
--- a/bin/varnishd/cache/cache_session.c
+++ b/bin/varnishd/cache/cache_session.c
@@ -175,7 +175,7 @@ ses_vsl_socket(struct sess *sp, const char *lsockname)
 		strcpy(laddr, "-");
 		strcpy(lport, "-");
 	}
-	VSL(SLT_SessionOpen, sp->vxid, "%s %s %s %s %s",
+	VSL(SLT_SessOpen, sp->vxid, "%s %s %s %s %s",
 	    sp->addr, sp->port, lsockname, laddr, lport);
 }
 
@@ -203,6 +203,7 @@ SES_pool_accept_task(struct worker *wrk, void *arg)
 		VCA_FailSess(wrk);
 		return;
 	}
+	wrk->acct_tmp.sess++;
 
 	sp->t_open = VTIM_real();
 	sp->t_rx = sp->t_open;
@@ -217,9 +218,6 @@ SES_pool_accept_task(struct worker *wrk, void *arg)
 
 	req->vxid = VXID_Get(&wrk->vxid_pool);
 
-
-	wrk->acct_tmp.sess++;
-
 	sp->sess_step = S_STP_NEWREQ;
 	ses_pool_task(wrk, req);
 }
@@ -249,7 +247,7 @@ SES_ScheduleReq(struct req *req)
 		sp->t_idle = VTIM_real();
 		AN (req->vcl);
 		VCL_Rel(&req->vcl);
-		SES_Delete(sp, "dropped", sp->t_idle);
+		SES_Delete(sp, SC_OVERLOAD, sp->t_idle);
 		return (1);
 	}
 	return (0);
@@ -282,7 +280,7 @@ SES_Handle(struct sess *sp, double now)
 	if (Pool_Task(pp->pool, &sp->task, POOL_QUEUE_FRONT)) {
 		VSC_C_main->client_drop_late++;
 		sp->t_idle = VTIM_real();
-		SES_Delete(sp, "dropped", sp->t_idle);
+		SES_Delete(sp, SC_OVERLOAD, sp->t_idle);
 	}
 }
 
@@ -293,12 +291,12 @@ SES_Handle(struct sess *sp, double now)
  */
 
 void
-SES_Close(struct sess *sp, const char *reason)
+SES_Close(struct sess *sp, enum sess_close reason)
 {
 	int i;
 
 	assert(sp->fd >= 0);
-	VSL(SLT_SessionClose, sp->vsl_id, "%s", reason);
+	sp->reason = reason;
 	i = close(sp->fd);
 	assert(i == 0 || errno != EBADF); /* XXX EINVAL seen */
 	sp->fd = -1;
@@ -314,7 +312,7 @@ SES_Close(struct sess *sp, const char *reason)
  */
 
 void
-SES_Delete(struct sess *sp, const char *reason, double now)
+SES_Delete(struct sess *sp, enum sess_close reason, double now)
 {
 	struct acct *b;
 	struct sesspool *pp;
@@ -324,7 +322,7 @@ SES_Delete(struct sess *sp, const char *reason, double now)
 	CHECK_OBJ_NOTNULL(pp, SESSPOOL_MAGIC);
 	AN(pp->pool);
 
-	if (reason != NULL)
+	if (reason != SC_NULL)
 		SES_Close(sp, reason);
 	if (isnan(now))
 		now = VTIM_real();
@@ -338,10 +336,11 @@ SES_Delete(struct sess *sp, const char *reason, double now)
 
 	b = &sp->acct_ses;
 
-	VSL(SLT_StatSess, sp->vsl_id, "%s %s %.0f %ju %ju %ju %ju %ju %ju %ju",
-	    sp->addr, sp->port,
+	VSL(SLT_SessClose, sp->vxid,
+	    "%s %.3f %ju %ju %ju %ju %ju %ju",
+	    sess_close_str(sp->reason, 0),
 	    now - sp->t_open,
-	    b->sess, b->req, b->pipe, b->pass,
+	    b->req, b->pipe, b->pass,
 	    b->fetch, b->hdrbytes, b->bodybytes);
 
 	MPL_Free(pp->mpl_sess, sp);
diff --git a/bin/varnishd/flint.lnt b/bin/varnishd/flint.lnt
index 5ddd6ce..2a15a34 100644
--- a/bin/varnishd/flint.lnt
+++ b/bin/varnishd/flint.lnt
@@ -109,6 +109,10 @@
 -esym(458, name_key)
 
 //////////////
+// 436 = Apparent preprocessor directive in invocation of macro '___'
+-emacro(436, SLTM)
+
+//////////////
 
 +libh mgt_event.h
 
diff --git a/bin/varnishd/mgt/mgt_main.c b/bin/varnishd/mgt/mgt_main.c
index fd7c97f..7b42437 100644
--- a/bin/varnishd/mgt/mgt_main.c
+++ b/bin/varnishd/mgt/mgt_main.c
@@ -86,7 +86,7 @@ mgt_sltm(const char *tag, const char *sdesc, const char *ldesc)
 		printf("%s\n", sdesc);
 	else
 		printf("%s\n", "(description not yet written)");
-		
+
 }
 
 static void
diff --git a/bin/varnishd/waiter/cache_waiter.c b/bin/varnishd/waiter/cache_waiter.c
index e89d550..53d7f0f 100644
--- a/bin/varnishd/waiter/cache_waiter.c
+++ b/bin/varnishd/waiter/cache_waiter.c
@@ -74,6 +74,6 @@ WAIT_Enter(struct sess *sp)
 	* acceptor thread, to reduce syscall density of the latter.
 	*/
 	if (VTCP_nonblocking(sp->fd))
-		SES_Close(sp, "remote closed");
+		SES_Close(sp, SC_REM_CLOSE);
 	waiter->pass(waiter_priv, sp);
 }
diff --git a/bin/varnishd/waiter/cache_waiter_kqueue.c b/bin/varnishd/waiter/cache_waiter_kqueue.c
index 423bf26..a7403d6 100644
--- a/bin/varnishd/waiter/cache_waiter_kqueue.c
+++ b/bin/varnishd/waiter/cache_waiter_kqueue.c
@@ -133,7 +133,7 @@ vwk_sess_ev(struct vwk *vwk, const struct kevent *kp, double now)
 		return;
 	} else if (kp->flags & EV_EOF) {
 		VTAILQ_REMOVE(&vwk->sesshead, sp, list);
-		SES_Delete(sp, "EOF", now);
+		SES_Delete(sp, SC_REM_CLOSE, now);
 		return;
 	} else {
 		VSL(SLT_Debug, sp->vsl_id,
@@ -204,7 +204,7 @@ vwk_thread(void *priv)
 				break;
 			VTAILQ_REMOVE(&vwk->sesshead, sp, list);
 			// XXX: not yet (void)VTCP_linger(sp->fd, 0);
-			SES_Delete(sp, "timeout", now);
+			SES_Delete(sp, SC_RX_TIMEOUT, now);
 		}
 	}
 }
diff --git a/bin/varnishd/waiter/cache_waiter_poll.c b/bin/varnishd/waiter/cache_waiter_poll.c
index a31bec1..4339617 100644
--- a/bin/varnishd/waiter/cache_waiter_poll.c
+++ b/bin/varnishd/waiter/cache_waiter_poll.c
@@ -162,7 +162,7 @@ vwp_main(void *priv)
 				VTAILQ_REMOVE(&vwp->sesshead, sp, list);
 				vwp_unpoll(vwp, fd);
 				// XXX: not yet (void)VTCP_linger(sp->fd, 0);
-				SES_Delete(sp, "timeout", now);
+				SES_Delete(sp, SC_RX_TIMEOUT, now);
 			}
 		}
 		if (v2 && vwp->pollfd[vwp->pipes[0]].revents) {
diff --git a/bin/varnishlog/varnishlog.c b/bin/varnishlog/varnishlog.c
index a606861..bf7d32b 100644
--- a/bin/varnishlog/varnishlog.c
+++ b/bin/varnishlog/varnishlog.c
@@ -115,9 +115,9 @@ h_order(void *priv, enum VSL_tag_e tag, unsigned fd, unsigned len,
 		ob[fd] = VSB_new_auto();
 		assert(ob[fd] != NULL);
 	}
-	if ((tag == SLT_BackendOpen || tag == SLT_SessionOpen ||
+	if ((tag == SLT_BackendOpen || tag == SLT_SessOpen ||
 		(tag == SLT_ReqStart &&
-		    last[fd] != SLT_SessionOpen &&
+		    last[fd] != SLT_SessOpen &&
 		    last[fd] != SLT_VCL_acl) ||
 		(tag == SLT_BackendXID &&
 		    last[fd] != SLT_BackendOpen)) &&
@@ -127,7 +127,7 @@ h_order(void *priv, enum VSL_tag_e tag, unsigned fd, unsigned len,
 		 * the end of the previous one.  Spit it out anyway before
 		 * starting on the new one.
 		 */
-		if (last[fd] != SLT_SessionClose)
+		if (last[fd] != SLT_SessClose)
 			VSB_printf(ob[fd], "%5d %-12s %c %s\n",
 			    fd, "Interrupted", type, VSL_tags[tag]);
 		h_order_finish(fd, vd);
@@ -165,7 +165,6 @@ h_order(void *priv, enum VSL_tag_e tag, unsigned fd, unsigned len,
 	case SLT_ReqEnd:
 	case SLT_BackendClose:
 	case SLT_BackendReuse:
-	case SLT_StatSess:
 		h_order_finish(fd, vd);
 		break;
 	default:
@@ -180,8 +179,8 @@ do_order(struct VSM_data *vd)
 	int i;
 
 	if (!b_flag) {
-		VSL_Select(vd, SLT_SessionOpen);
-		VSL_Select(vd, SLT_SessionClose);
+		VSL_Select(vd, SLT_SessOpen);
+		VSL_Select(vd, SLT_SessClose);
 		VSL_Select(vd, SLT_ReqEnd);
 	}
 	if (!c_flag) {
diff --git a/bin/varnishncsa/varnishncsa.c b/bin/varnishncsa/varnishncsa.c
index 9bdf87f..9c9267e 100644
--- a/bin/varnishncsa/varnishncsa.c
+++ b/bin/varnishncsa/varnishncsa.c
@@ -535,11 +535,11 @@ collect_client(struct logline *lp, enum VSL_tag_e tag, unsigned spec,
 		lp->df_b = trimline(ptr, end);
 		break;
 
-	case SLT_SessionClose:
+	case SLT_SessClose:
 		if (!lp->active)
 			break;
-		if (strncmp(ptr, "pipe", len) == 0 ||
-		    strncmp(ptr, "error", len) == 0) {
+		if (strncmp(ptr, "TX_PIPE", len) == 0 ||
+		    strncmp(ptr, "TX_ERROR", len) == 0) {
 			clean_logline(lp);
 			break;
 		}
diff --git a/include/tbl/sess_close.h b/include/tbl/sess_close.h
new file mode 100644
index 0000000..c9d28ba
--- /dev/null
+++ b/include/tbl/sess_close.h
@@ -0,0 +1,43 @@
+/*-
+ * Copyright (c) 2012 Varnish Software AS
+ * All rights reserved.
+ *
+ * Author: Poul-Henning Kamp <phk at phk.freebsd.dk>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+/*lint -save -e525 -e539 */
+
+SESS_CLOSE(REM_CLOSE,	"Client Closed")
+SESS_CLOSE(REQ_CLOSE,	"Client requested close")
+SESS_CLOSE(REQ_HTTP10,	"proto < HTTP.1.1")
+SESS_CLOSE(RX_JUNK,	"Received junk data")
+SESS_CLOSE(RX_OVERFLOW,	"Received buffer overflow")
+SESS_CLOSE(RX_TIMEOUT,	"Receive timeout")
+SESS_CLOSE(TX_PIPE,	"Piped transaction")
+SESS_CLOSE(TX_ERROR,	"Error transaction")
+SESS_CLOSE(TX_EOF,	"EOF transmission")
+SESS_CLOSE(OVERLOAD,	"Out of some resource")
+
+/*lint -restore */
diff --git a/include/tbl/vsl_tags.h b/include/tbl/vsl_tags.h
index c79f378..27fed4d 100644
--- a/include/tbl/vsl_tags.h
+++ b/include/tbl/vsl_tags.h
@@ -52,7 +52,6 @@ SLTM(Error, "Error messages",
 SLTM(CLI, "CLI communication",
 	"CLI communication between master and child process."
 )
-SLTM(StatSess, "Session statistics", "")
 
 SLTM(ReqEnd, "Client request end",
 	"Marks the end of client request.\n\n"
@@ -64,7 +63,9 @@ SLTM(ReqEnd, "Client request end",
 	"dTtx\n    Time to transmit response\n\n"
 )
 
-SLTM(SessionOpen, "Client connection opened",
+/*---------------------------------------------------------------------*/
+
+SLTM(SessOpen, "Client connection opened",
 	"The first record for a client connection, with the\n"
 	"socket-endpoints of the connection.\n\n"
 	"caddr\n    Client IPv4/6 address\n\n"
@@ -74,19 +75,24 @@ SLTM(SessionOpen, "Client connection opened",
 	"lport\n    Local TCP port ('-' if !$log_local_addr)\n\n"
 )
 
-SLTM(SessionClose, "Client connection closed",
-	"SessionClose tells you why HTTP client-connections are closed.  "
-	"These can be:  "
-	"'timeout' - No keep-alive was received within sess_timeout.  "
-	"'Connection: close' - The client specifed that keepalive should "
-	"be disabled by sending a 'Connection: close' header.  "
-	"'no request' - No initial request was received within sess_timeout.  "
-	"'EOF' - ?  "
-	"'remote closed' - ?  "
-	"'error' - Processing reached vcl_error even if the status code "
-	"indicates success.  "
-	"' blast' - ?"
+#define SESS_CLOSE(nm, desc) "    " #nm "\n\t" desc "\n\n"
+
+SLTM(SessClose, "Client connection closed",
+	"SessionClose is the last record for any client connection.\n\n"
+	"reason\n    Why the connection closed.\n\n"
+#include <tbl/sess_close.h>
+	"duration\n    How long the session were open.\n\n"
+	"Nreq\n    How many requests on session.\n\n"
+	"Npipe\n    If 'pipe' were used on session.\n\n"
+	"Npass\n    Requests handled with pass.\n\n"
+	"Nfetch\n    Backend fetches by session.\n\n"
+	"Bhdr\n    Header bytes sent on session.\n\n"
+	"Bbody\n    Body bytes sent on session.\n\n"
 )
+#undef SESS_CLOSE
+
+/*---------------------------------------------------------------------*/
+
 SLTM(BackendOpen, "Backend connection opened", "")
 SLTM(BackendXID, "The unique ID of the backend transaction", "")
 SLTM(BackendReuse, "Backend connection reused", "")



More information about the varnish-commit mailing list