Commit 26c28159 authored by Martin Blix Grydeland's avatar Martin Blix Grydeland

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.
parent ea2d74c4
......@@ -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;
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment