[master] 93d8050 Only set new lurker destination ban if we already had one.

Martin Blix Grydeland martin at varnish-software.com
Thu Mar 3 10:49:43 CET 2016


commit 93d805014df919f9be761c6d8ad4ed86eb90c2cb
Author: Martin Blix Grydeland <martin at varnish-software.com>
Date:   Wed Mar 2 14:22:42 2016 +0100

    Only set new lurker destination ban if we already had one.
    
    Without this we could start running ban_lurker_test_ban with an empty
    list of bans to test, causing a lot of unnecessary ban and oh mutex
    contention on every ban lurker invocation until the REQ ban triggering
    it is gone.
    
    Also don't call ban_lurker_test_ban when our destination ban is the
    same as the one being tested. This would be wasted work.
    
    Adjust the c00049.vtc test case for the bans now not being
    unnecessarily tested.

diff --git a/bin/varnishd/cache/cache_ban_lurker.c b/bin/varnishd/cache/cache_ban_lurker.c
index bca5dde..1741762 100644
--- a/bin/varnishd/cache/cache_ban_lurker.c
+++ b/bin/varnishd/cache/cache_ban_lurker.c
@@ -145,6 +145,9 @@ ban_lurker_test_ban(struct worker *wrk, struct vsl_log *vsl, struct ban *bt,
 	unsigned tests;
 	int i;
 
+	/* It's an error to give an empty list to test against */
+	AZ(VTAILQ_EMPTY(obans));
+
 	/*
 	 * First see if there is anything to do, and if so, insert marker
 	 */
@@ -222,12 +225,13 @@ ban_lurker_work(struct worker *wrk, struct vsl_log *vsl)
 	bd = NULL;
 	VTAILQ_INIT(&obans);
 	for (; b != NULL; b = VTAILQ_NEXT(b, list)) {
-		if (bd != NULL)
+		if (bd != NULL && bd != b)
 			ban_lurker_test_ban(wrk, vsl, b, &obans, bd);
 		if (b->flags & BANS_FLAG_COMPLETED)
 			continue;
 		if (b->flags & BANS_FLAG_REQ) {
-			bd = VTAILQ_NEXT(b, list);
+			if (bd != NULL)
+				bd = VTAILQ_NEXT(b, list);
 			continue;
 		}
 		n = ban_time(b->spec) - d;
diff --git a/bin/varnishtest/tests/c00049.vtc b/bin/varnishtest/tests/c00049.vtc
index e86c513..43f9e1b 100644
--- a/bin/varnishtest/tests/c00049.vtc
+++ b/bin/varnishtest/tests/c00049.vtc
@@ -132,8 +132,8 @@ varnish v1 -expect bans_deleted == 2
 varnish v1 -expect bans_tested == 0
 varnish v1 -expect bans_tests_tested == 0
 varnish v1 -expect bans_obj_killed == 0
-varnish v1 -expect bans_lurker_tested == 10
-varnish v1 -expect bans_lurker_tests_tested == 11
+varnish v1 -expect bans_lurker_tested == 8
+varnish v1 -expect bans_lurker_tests_tested == 9
 varnish v1 -expect bans_lurker_obj_killed == 4
 varnish v1 -expect bans_dups == 0
 
@@ -157,8 +157,8 @@ varnish v1 -expect bans_deleted == 2
 varnish v1 -expect bans_tested == 1
 varnish v1 -expect bans_tests_tested == 1
 varnish v1 -expect bans_obj_killed == 0
-varnish v1 -expect bans_lurker_tested == 10
-varnish v1 -expect bans_lurker_tests_tested == 11
+varnish v1 -expect bans_lurker_tested == 8
+varnish v1 -expect bans_lurker_tests_tested == 9
 varnish v1 -expect bans_lurker_obj_killed == 4
 varnish v1 -expect bans_dups == 0
 
@@ -182,8 +182,8 @@ varnish v1 -expect bans_deleted == 5
 varnish v1 -expect bans_tested == 2
 varnish v1 -expect bans_tests_tested == 2
 varnish v1 -expect bans_obj_killed == 1
-varnish v1 -expect bans_lurker_tested == 10
-varnish v1 -expect bans_lurker_tests_tested == 11
+varnish v1 -expect bans_lurker_tested == 8
+varnish v1 -expect bans_lurker_tests_tested == 9
 varnish v1 -expect bans_lurker_obj_killed == 4
 varnish v1 -expect bans_dups == 0
 



More information about the varnish-commit mailing list