[PATCH 1/4] Remove the duplicate drop tail bans code.

Martin Blix Grydeland martin at varnish-software.com
Wed Nov 21 11:23:16 CET 2012


This is now only done in the main ban_lurker thread loop.
---
 bin/varnishd/cache/cache_ban.c |   50 +++++++++++++++-------------------------
 1 file changed, 18 insertions(+), 32 deletions(-)

diff --git a/bin/varnishd/cache/cache_ban.c b/bin/varnishd/cache/cache_ban.c
index bf671bc..47a8518 100644
--- a/bin/varnishd/cache/cache_ban.c
+++ b/bin/varnishd/cache/cache_ban.c
@@ -835,7 +835,7 @@ ban_CheckLast(void)
 static int
 ban_lurker_work(struct worker *wrk, struct vsl_log *vsl, unsigned pass)
 {
-	struct ban *b, *b0, *b2;
+	struct ban *b, *b0;
 	struct objhead *oh;
 	struct objcore *oc, *oc2;
 	struct object *o;
@@ -844,18 +844,6 @@ ban_lurker_work(struct worker *wrk, struct vsl_log *vsl, unsigned pass)
 	AN(pass & BAN_F_LURK);
 	AZ(pass & ~BAN_F_LURK);
 
-	/* First route the last ban(s) */
-	do {
-		Lck_Lock(&ban_mtx);
-		b2 = ban_CheckLast();
-		if (b2 != NULL)
-			/* Notify stevedores */
-			STV_BanInfo(BI_DROP, b2->spec, ban_len(b2->spec));
-		Lck_Unlock(&ban_mtx);
-		if (b2 != NULL)
-			BAN_Free(b2);
-	} while (b2 != NULL);
-
 	/*
 	 * Find out if we have any bans we can do something about
 	 * If we find any, tag them with our pass number.
@@ -982,18 +970,16 @@ ban_lurker(struct worker *wrk, void *priv)
 	struct ban *bf;
 	unsigned pass = (1 << LURK_SHIFT);
 	struct vsl_log vsl;
+	double ban_sleep;
 
-	int i = 0;
 	VSL_Setup(&vsl, NULL, 0);
 
 	(void)priv;
 	while (1) {
+		ban_sleep = 1.0;
 
-		while (cache_param->ban_lurker_sleep == 0.0) {
-			/*
-			 * Ban-lurker is disabled:
-			 * Clean the last ban, if possible, and sleep
-			 */
+		/* Clear any gone last bans */
+		do {
 			Lck_Lock(&ban_mtx);
 			bf = ban_CheckLast();
 			if (bf != NULL)
@@ -1003,22 +989,22 @@ ban_lurker(struct worker *wrk, void *priv)
 			Lck_Unlock(&ban_mtx);
 			if (bf != NULL)
 				BAN_Free(bf);
-			else
-				VTIM_sleep(1.0);
-		}
+		} while (bf != NULL);
 
-		i = ban_lurker_work(wrk, &vsl, pass);
-		VSL_Flush(&vsl, 0);
-		WRK_SumStat(wrk);
-		if (i) {
-			pass += (1 << LURK_SHIFT);
-			pass &= BAN_F_LURK;
-			if (pass == 0)
+		if (cache_param->ban_lurker_sleep != 0.0) {
+			/* Ban lurker enabled */
+			if (ban_lurker_work(wrk, &vsl, pass)) {
 				pass += (1 << LURK_SHIFT);
-			VTIM_sleep(cache_param->ban_lurker_sleep);
-		} else {
-			VTIM_sleep(1.0);
+				pass &= BAN_F_LURK;
+				if (pass == 0)
+					pass += (1 << LURK_SHIFT);
+				ban_sleep = cache_param->ban_lurker_sleep;
+			}
+			VSL_Flush(&vsl, 0);
+			WRK_SumStat(wrk);
 		}
+
+		VTIM_sleep(ban_sleep);
 	}
 	NEEDLESS_RETURN(NULL);
 }
-- 
1.7.9.5




More information about the varnish-dev mailing list