[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