[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