[4.1] 26c2815 Only set new lurker destination ban if we already had one.
Martin Blix Grydeland
martin at varnish-software.com
Thu Mar 3 10:52:53 CET 2016
commit 26c281595b3b6b4a8c4089fd2994f7ce480ab593
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 b4bbc30..fecf6b0 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
*/
@@ -223,12 +226,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