r1078 - in trunk/varnish-cache: bin/varnishd include

phk at projects.linpro.no phk at projects.linpro.no
Mon Sep 18 20:49:47 CEST 2006


Author: phk
Date: 2006-09-18 20:49:46 +0200 (Mon, 18 Sep 2006)
New Revision: 1078

Modified:
   trunk/varnish-cache/bin/varnishd/cache_http.c
   trunk/varnish-cache/bin/varnishd/cache_pool.c
   trunk/varnish-cache/bin/varnishd/heritage.h
   trunk/varnish-cache/bin/varnishd/mgt_param.c
   trunk/varnish-cache/include/stat_field.h
Log:
Introduce three new params, to limit overflow queue length
and to force HTTP/1.1 protocol version.




Modified: trunk/varnish-cache/bin/varnishd/cache_http.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_http.c	2006-09-18 17:18:57 UTC (rev 1077)
+++ trunk/varnish-cache/bin/varnishd/cache_http.c	2006-09-18 18:49:46 UTC (rev 1078)
@@ -12,6 +12,7 @@
 #include <string.h>
 #include <ctype.h>
 
+#include "heritage.h"
 #include "shmlog.h"
 #include "cache.h"
 
@@ -664,7 +665,10 @@
 	CHECK_OBJ_NOTNULL(to, HTTP_MAGIC);
 	http_copyh(w, fd, to, fm, HTTP_HDR_REQ, HTTP_T_Request);
 	http_copyh(w, fd, to, fm, HTTP_HDR_URL, HTTP_T_URL);
-	http_copyh(w, fd, to, fm, HTTP_HDR_PROTO, HTTP_T_Protocol);
+	if (params->backend_http11)
+		http_seth(w, fd, to, HTTP_HDR_PROTO, HTTP_T_Protocol, "HTTP/1.1");
+	else
+		http_copyh(w, fd, to, fm, HTTP_HDR_PROTO, HTTP_T_Protocol);
 }
 
 
@@ -674,7 +678,10 @@
 
 	CHECK_OBJ_NOTNULL(fm, HTTP_MAGIC);
 	CHECK_OBJ_NOTNULL(to, HTTP_MAGIC);
-	http_copyh(w, fd, to, fm, HTTP_HDR_PROTO, HTTP_T_Protocol);
+	if (params->client_http11)
+		http_seth(w, fd, to, HTTP_HDR_PROTO, HTTP_T_Protocol, "HTTP/1.1");
+	else
+		http_copyh(w, fd, to, fm, HTTP_HDR_PROTO, HTTP_T_Protocol);
 	http_copyh(w, fd, to, fm, HTTP_HDR_STATUS, HTTP_T_Status);
 	http_copyh(w, fd, to, fm, HTTP_HDR_RESPONSE, HTTP_T_Response);
 }

Modified: trunk/varnish-cache/bin/varnishd/cache_pool.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_pool.c	2006-09-18 17:18:57 UTC (rev 1077)
+++ trunk/varnish-cache/bin/varnishd/cache_pool.c	2006-09-18 18:49:46 UTC (rev 1078)
@@ -268,6 +268,14 @@
 	UNLOCK(&qp->mtx);
 
 	LOCK(&tmtx);
+	if ((VSL_stats->n_wrk_overflow >
+	    (params->wthread_max * params->overflow_max) / 100)) {
+		VSL_stats->n_wrk_drop++;
+		UNLOCK(&tmtx);
+		vca_close_session(sp, "dropped");
+		vca_return_session(sp);
+		return;
+	}
 	/*
 	 * XXX: If there are too many requests in the overflow queue
 	 * XXX: we should kill the request right here. 

Modified: trunk/varnish-cache/bin/varnishd/heritage.h
===================================================================
--- trunk/varnish-cache/bin/varnishd/heritage.h	2006-09-18 17:18:57 UTC (rev 1077)
+++ trunk/varnish-cache/bin/varnishd/heritage.h	2006-09-18 18:49:46 UTC (rev 1078)
@@ -38,6 +38,8 @@
 	unsigned		wthread_timeout;
 	unsigned		wthread_pools;
 
+	unsigned		overflow_max;
+
 	/* Memory allocation hints */
 	unsigned		mem_workspace;
 
@@ -69,6 +71,10 @@
 	/* Srcaddr hash */
 	unsigned		srcaddr_hash;
 	unsigned		srcaddr_ttl;
+
+	/* HTTP proto behaviour */
+	unsigned		backend_http11;
+	unsigned		client_http11;
 };
 
 extern struct params *params;

Modified: trunk/varnish-cache/bin/varnishd/mgt_param.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/mgt_param.c	2006-09-18 17:18:57 UTC (rev 1077)
+++ trunk/varnish-cache/bin/varnishd/mgt_param.c	2006-09-18 18:49:46 UTC (rev 1078)
@@ -161,6 +161,16 @@
 /*--------------------------------------------------------------------*/
 
 static void
+tweak_overflow_max(struct cli *cli, struct parspec *par, const char *arg)
+{
+
+	(void)par;
+	tweak_generic_uint(cli, &params->overflow_max, arg, 0, UINT_MAX);
+}
+
+/*--------------------------------------------------------------------*/
+
+static void
 tweak_http_workspace(struct cli *cli, struct parspec *par, const char *arg)
 {
 
@@ -299,6 +309,24 @@
 
 /*--------------------------------------------------------------------*/
 
+static void
+tweak_backend_http11(struct cli *cli, struct parspec *par, const char *arg)
+{
+	(void)par;
+	tweak_generic_bool(cli, &params->backend_http11, arg);
+}
+
+/*--------------------------------------------------------------------*/
+
+static void
+tweak_client_http11(struct cli *cli, struct parspec *par, const char *arg)
+{
+	(void)par;
+	tweak_generic_bool(cli, &params->client_http11, arg);
+}
+
+/*--------------------------------------------------------------------*/
+
 /*
  * Make sure to end all lines with either a space or newline of the
  * formatting will go haywire.
@@ -355,6 +383,11 @@
 		EXPERIMENTAL
 		DELAYED_EFFECT,
 		"120", "seconds" },
+	{ "overflow_max", tweak_overflow_max,
+		"Limit on overflow queue length in percent of "
+		"thread_pool_max parameter.\n"
+		EXPERIMENTAL,
+		"100", "%" },
 	{ "http_workspace", tweak_http_workspace,
 		"Bytes of HTTP protocol workspace allocated. "
 		"This space must be big enough for the entire HTTP protocol "
@@ -439,6 +472,18 @@
 		"Zero will disable srcaddr accounting entirely.\n"
 		EXPERIMENTAL,
 		"30", "seconds" },
+	{ "backend_http11", tweak_backend_http11,
+		"Force all backend requests to be HTTP/1.1.\n"
+		"By default we copy the protocol version from the "
+		"incoming client request."
+		EXPERIMENTAL,
+		"off", "bool" },
+	{ "client_http11", tweak_client_http11,
+		"Force all client responses to be HTTP/1.1.\n"
+		"By default we copy the protocol version from the "
+		"backend response."
+		EXPERIMENTAL,
+		"off", "bool" },
 	{ NULL, NULL, NULL }
 };
 

Modified: trunk/varnish-cache/include/stat_field.h
===================================================================
--- trunk/varnish-cache/include/stat_field.h	2006-09-18 17:18:57 UTC (rev 1077)
+++ trunk/varnish-cache/include/stat_field.h	2006-09-18 18:49:46 UTC (rev 1078)
@@ -27,6 +27,7 @@
 MAC_STAT(n_wrk_max,		uint64_t, "u", "N worker threads limited")
 MAC_STAT(n_wrk_queue,		uint64_t, "u", "N queued work requests")
 MAC_STAT(n_wrk_overflow,	uint64_t, "u", "N overflowed work requests")
+MAC_STAT(n_wrk_drop,		uint64_t, "u", "N dropped work requests")
 
 MAC_STAT(n_expired,		uint64_t, "u", "N expired objects")
 MAC_STAT(n_deathrow,		uint64_t, "u", "N objects on deathrow")




More information about the varnish-commit mailing list