Commit 737d6c2d authored by Poul-Henning Kamp's avatar Poul-Henning Kamp Committed by Dridi Boukelmoune

Move all the ban counters into a "ban-mtx" group, update them directly

in VSC_C_main and protect them with the ban-mtx.
parent 2d0ee3eb
...@@ -595,6 +595,7 @@ ...@@ -595,6 +595,7 @@
.. varnish_vsc:: bans .. varnish_vsc:: bans
:type: gauge :type: gauge
:group: ban_mtx
:oneliner: Count of bans :oneliner: Count of bans
Number of all bans in system, including bans superseded by newer Number of all bans in system, including bans superseded by newer
...@@ -603,6 +604,7 @@ ...@@ -603,6 +604,7 @@
.. varnish_vsc:: bans_completed .. varnish_vsc:: bans_completed
:type: gauge :type: gauge
:level: diag :level: diag
:group: ban_mtx
:oneliner: Number of bans marked 'completed' :oneliner: Number of bans marked 'completed'
Number of bans which are no longer active, either because they got Number of bans which are no longer active, either because they got
...@@ -611,6 +613,7 @@ ...@@ -611,6 +613,7 @@
.. varnish_vsc:: bans_obj .. varnish_vsc:: bans_obj
:type: gauge :type: gauge
:level: diag :level: diag
:group: ban_mtx
:oneliner: Number of bans using obj.* :oneliner: Number of bans using obj.*
Number of bans which use obj.* variables. These bans can possibly Number of bans which use obj.* variables. These bans can possibly
...@@ -619,6 +622,7 @@ ...@@ -619,6 +622,7 @@
.. varnish_vsc:: bans_req .. varnish_vsc:: bans_req
:type: gauge :type: gauge
:level: diag :level: diag
:group: ban_mtx
:oneliner: Number of bans using req.* :oneliner: Number of bans using req.*
Number of bans which use req.* variables. These bans can not be Number of bans which use req.* variables. These bans can not be
...@@ -626,18 +630,21 @@ ...@@ -626,18 +630,21 @@
.. varnish_vsc:: bans_added .. varnish_vsc:: bans_added
:level: diag :level: diag
:group: ban_mtx
:oneliner: Bans added :oneliner: Bans added
Counter of bans added to ban list. Counter of bans added to ban list.
.. varnish_vsc:: bans_deleted .. varnish_vsc:: bans_deleted
:level: diag :level: diag
:group: ban_mtx
:oneliner: Bans deleted :oneliner: Bans deleted
Counter of bans deleted from ban list. Counter of bans deleted from ban list.
.. varnish_vsc:: bans_tested .. varnish_vsc:: bans_tested
:level: diag :level: diag
:group: ban_mtx
:oneliner: Bans tested against objects (lookup) :oneliner: Bans tested against objects (lookup)
Count of how many bans and objects have been tested against each Count of how many bans and objects have been tested against each
...@@ -645,12 +652,14 @@ ...@@ -645,12 +652,14 @@
.. varnish_vsc:: bans_obj_killed .. varnish_vsc:: bans_obj_killed
:level: diag :level: diag
:group: ban_mtx
:oneliner: Objects killed by bans (lookup) :oneliner: Objects killed by bans (lookup)
Number of objects killed by bans during object lookup. Number of objects killed by bans during object lookup.
.. varnish_vsc:: bans_lurker_tested .. varnish_vsc:: bans_lurker_tested
:level: diag :level: diag
:group: ban_mtx
:oneliner: Bans tested against objects (lurker) :oneliner: Bans tested against objects (lurker)
Count of how many bans and objects have been tested against each Count of how many bans and objects have been tested against each
...@@ -658,6 +667,7 @@ ...@@ -658,6 +667,7 @@
.. varnish_vsc:: bans_tests_tested .. varnish_vsc:: bans_tests_tested
:level: diag :level: diag
:group: ban_mtx
:oneliner: Ban tests tested against objects (lookup) :oneliner: Ban tests tested against objects (lookup)
Count of how many tests and objects have been tested against each Count of how many tests and objects have been tested against each
...@@ -666,6 +676,7 @@ ...@@ -666,6 +676,7 @@
.. varnish_vsc:: bans_lurker_tests_tested .. varnish_vsc:: bans_lurker_tests_tested
:level: diag :level: diag
:group: ban_mtx
:oneliner: Ban tests tested against objects (lurker) :oneliner: Ban tests tested against objects (lurker)
Count of how many tests and objects have been tested against each Count of how many tests and objects have been tested against each
...@@ -674,12 +685,14 @@ ...@@ -674,12 +685,14 @@
.. varnish_vsc:: bans_lurker_obj_killed .. varnish_vsc:: bans_lurker_obj_killed
:level: diag :level: diag
:group: ban_mtx
:oneliner: Objects killed by bans (lurker) :oneliner: Objects killed by bans (lurker)
Number of objects killed by the ban-lurker. Number of objects killed by the ban-lurker.
.. varnish_vsc:: bans_lurker_obj_killed_cutoff .. varnish_vsc:: bans_lurker_obj_killed_cutoff
:level: diag :level: diag
:group: ban_mtx
:oneliner: Objects killed by bans for cutoff (lurker) :oneliner: Objects killed by bans for cutoff (lurker)
Number of objects killed by the ban-lurker to keep the number of Number of objects killed by the ban-lurker to keep the number of
...@@ -687,12 +700,14 @@ ...@@ -687,12 +700,14 @@
.. varnish_vsc:: bans_dups .. varnish_vsc:: bans_dups
:level: diag :level: diag
:group: ban_mtx
:oneliner: Bans superseded by other bans :oneliner: Bans superseded by other bans
Count of bans replaced by later identical bans. Count of bans replaced by later identical bans.
.. varnish_vsc:: bans_lurker_contention .. varnish_vsc:: bans_lurker_contention
:level: diag :level: diag
:group: ban_mtx
:oneliner: Lurker gave way for lookup :oneliner: Lurker gave way for lookup
Number of times the ban-lurker had to wait for lookups. Number of times the ban-lurker had to wait for lookups.
...@@ -701,6 +716,7 @@ ...@@ -701,6 +716,7 @@
:type: gauge :type: gauge
:format: bytes :format: bytes
:level: diag :level: diag
:group: ban_mtx
:oneliner: Bytes used by the persisted ban lists :oneliner: Bytes used by the persisted ban lists
Number of bytes used by the persisted ban lists. Number of bytes used by the persisted ban lists.
...@@ -709,6 +725,7 @@ ...@@ -709,6 +725,7 @@
:type: gauge :type: gauge
:format: bytes :format: bytes
:level: diag :level: diag
:group: ban_mtx
:oneliner: Extra bytes in persisted ban lists due to fragmentation :oneliner: Extra bytes in persisted ban lists due to fragmentation
Number of extra bytes accumulated through dropped and completed Number of extra bytes accumulated through dropped and completed
......
...@@ -578,7 +578,7 @@ struct sess { ...@@ -578,7 +578,7 @@ struct sess {
struct ban_proto *BAN_Build(void); struct ban_proto *BAN_Build(void);
const char *BAN_AddTest(struct ban_proto *, const char *BAN_AddTest(struct ban_proto *,
const char *, const char *, const char *); const char *, const char *, const char *);
const char *BAN_Commit(struct ban_proto *b, struct VSC_main *stats); const char *BAN_Commit(struct ban_proto *b);
void BAN_Abandon(struct ban_proto *b); void BAN_Abandon(struct ban_proto *b);
/* cache_cli.c [CLI] */ /* cache_cli.c [CLI] */
......
...@@ -152,7 +152,7 @@ ban_equal(const uint8_t *bs1, const uint8_t *bs2) ...@@ -152,7 +152,7 @@ ban_equal(const uint8_t *bs1, const uint8_t *bs2)
} }
void void
ban_mark_completed(struct ban *b, struct VSC_main *stats) ban_mark_completed(struct ban *b)
{ {
unsigned ln; unsigned ln;
...@@ -166,7 +166,7 @@ ban_mark_completed(struct ban *b, struct VSC_main *stats) ...@@ -166,7 +166,7 @@ ban_mark_completed(struct ban *b, struct VSC_main *stats)
b->spec[BANS_FLAGS] |= BANS_FLAG_COMPLETED; b->spec[BANS_FLAGS] |= BANS_FLAG_COMPLETED;
VWMB(); VWMB();
vbe32enc(b->spec + BANS_LENGTH, BANS_HEAD_LEN); vbe32enc(b->spec + BANS_LENGTH, BANS_HEAD_LEN);
stats->bans_completed++; VSC_C_main->bans_completed++;
bans_persisted_fragmentation += ln - ban_len(b->spec); bans_persisted_fragmentation += ln - ban_len(b->spec);
/* /*
* XXX absolute update of gauges - may be inaccurate for * XXX absolute update of gauges - may be inaccurate for
...@@ -367,7 +367,6 @@ ban_reload(const uint8_t *ban, unsigned len) ...@@ -367,7 +367,6 @@ ban_reload(const uint8_t *ban, unsigned len)
struct ban *b, *b2; struct ban *b, *b2;
int duplicate = 0; int duplicate = 0;
double t0, t1, t2 = 9e99; double t0, t1, t2 = 9e99;
struct VSC_main *stats = VSC_C_main; // XXX accurate?
ASSERT_CLI(); ASSERT_CLI();
Lck_AssertHeld(&ban_mtx); Lck_AssertHeld(&ban_mtx);
...@@ -386,8 +385,8 @@ ban_reload(const uint8_t *ban, unsigned len) ...@@ -386,8 +385,8 @@ ban_reload(const uint8_t *ban, unsigned len)
duplicate = 1; duplicate = 1;
} }
stats->bans++; VSC_C_main->bans++;
stats->bans_added++; VSC_C_main->bans_added++;
b2 = ban_alloc(); b2 = ban_alloc();
AN(b2); AN(b2);
...@@ -395,13 +394,13 @@ ban_reload(const uint8_t *ban, unsigned len) ...@@ -395,13 +394,13 @@ ban_reload(const uint8_t *ban, unsigned len)
AN(b2->spec); AN(b2->spec);
memcpy(b2->spec, ban, len); memcpy(b2->spec, ban, len);
if (ban[BANS_FLAGS] & BANS_FLAG_REQ) { if (ban[BANS_FLAGS] & BANS_FLAG_REQ) {
stats->bans_req++; VSC_C_main->bans_req++;
b2->flags |= BANS_FLAG_REQ; b2->flags |= BANS_FLAG_REQ;
} }
if (duplicate) if (duplicate)
stats->bans_dups++; VSC_C_main->bans_dups++;
if (duplicate || (ban[BANS_FLAGS] & BANS_FLAG_COMPLETED)) if (duplicate || (ban[BANS_FLAGS] & BANS_FLAG_COMPLETED))
ban_mark_completed(b2, stats); ban_mark_completed(b2);
if (b == NULL) if (b == NULL)
VTAILQ_INSERT_TAIL(&ban_head, b2, list); VTAILQ_INSERT_TAIL(&ban_head, b2, list);
else else
...@@ -418,8 +417,8 @@ ban_reload(const uint8_t *ban, unsigned len) ...@@ -418,8 +417,8 @@ ban_reload(const uint8_t *ban, unsigned len)
if (b->flags & BANS_FLAG_COMPLETED) if (b->flags & BANS_FLAG_COMPLETED)
continue; continue;
if (ban_equal(b->spec, ban)) { if (ban_equal(b->spec, ban)) {
ban_mark_completed(b, stats); ban_mark_completed(b);
stats->bans_dups++; VSC_C_main->bans_dups++;
} }
} }
} }
...@@ -548,7 +547,6 @@ BAN_CheckObject(struct worker *wrk, struct objcore *oc, struct req *req) ...@@ -548,7 +547,6 @@ BAN_CheckObject(struct worker *wrk, struct objcore *oc, struct req *req)
struct vsl_log *vsl; struct vsl_log *vsl;
struct ban *b0, *bn; struct ban *b0, *bn;
unsigned tests; unsigned tests;
struct VSC_main *stats;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC); CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
...@@ -557,7 +555,6 @@ BAN_CheckObject(struct worker *wrk, struct objcore *oc, struct req *req) ...@@ -557,7 +555,6 @@ BAN_CheckObject(struct worker *wrk, struct objcore *oc, struct req *req)
assert(oc->refcnt > 0); assert(oc->refcnt > 0);
vsl = req->vsl; vsl = req->vsl;
stats = wrk->stats;
CHECK_OBJ_NOTNULL(oc->ban, BAN_MAGIC); CHECK_OBJ_NOTNULL(oc->ban, BAN_MAGIC);
...@@ -600,8 +597,8 @@ BAN_CheckObject(struct worker *wrk, struct objcore *oc, struct req *req) ...@@ -600,8 +597,8 @@ BAN_CheckObject(struct worker *wrk, struct objcore *oc, struct req *req)
Lck_Lock(&ban_mtx); Lck_Lock(&ban_mtx);
bn->refcount--; bn->refcount--;
stats->bans_tested++; VSC_C_main->bans_tested++;
stats->bans_tests_tested += tests; VSC_C_main->bans_tests_tested += tests;
if (b == bn) { if (b == bn) {
/* not banned */ /* not banned */
...@@ -612,6 +609,8 @@ BAN_CheckObject(struct worker *wrk, struct objcore *oc, struct req *req) ...@@ -612,6 +609,8 @@ BAN_CheckObject(struct worker *wrk, struct objcore *oc, struct req *req)
oc->ban = b0; oc->ban = b0;
b = NULL; b = NULL;
} }
if (b != NULL)
VSC_C_main->bans_obj_killed++;
if (VTAILQ_LAST(&ban_head, banhead_s)->refcount == 0) if (VTAILQ_LAST(&ban_head, banhead_s)->refcount == 0)
ban_kick_lurker(); ban_kick_lurker();
...@@ -624,7 +623,6 @@ BAN_CheckObject(struct worker *wrk, struct objcore *oc, struct req *req) ...@@ -624,7 +623,6 @@ BAN_CheckObject(struct worker *wrk, struct objcore *oc, struct req *req)
return (0); return (0);
} else { } else {
VSLb(vsl, SLT_ExpBan, "%u banned lookup", ObjGetXID(wrk, oc)); VSLb(vsl, SLT_ExpBan, "%u banned lookup", ObjGetXID(wrk, oc));
stats->bans_obj_killed++;
return (1); return (1);
} }
} }
...@@ -672,7 +670,7 @@ ccf_ban(struct cli *cli, const char * const *av, void *priv) ...@@ -672,7 +670,7 @@ ccf_ban(struct cli *cli, const char * const *av, void *priv)
if (err == NULL) { if (err == NULL) {
// XXX racy - grab wstat lock? // XXX racy - grab wstat lock?
err = BAN_Commit(bp, VSC_C_main); err = BAN_Commit(bp);
} }
if (err != NULL) { if (err != NULL) {
...@@ -821,9 +819,9 @@ BAN_Init(void) ...@@ -821,9 +819,9 @@ BAN_Init(void)
bp = BAN_Build(); bp = BAN_Build();
AN(bp); AN(bp);
AZ(pthread_cond_init(&ban_lurker_cond, NULL)); AZ(pthread_cond_init(&ban_lurker_cond, NULL));
AZ(BAN_Commit(bp, VSC_C_main)); AZ(BAN_Commit(bp));
Lck_Lock(&ban_mtx); Lck_Lock(&ban_mtx);
ban_mark_completed(VTAILQ_FIRST(&ban_head), VSC_C_main); ban_mark_completed(VTAILQ_FIRST(&ban_head));
Lck_Unlock(&ban_mtx); Lck_Unlock(&ban_mtx);
} }
......
...@@ -109,7 +109,7 @@ extern pthread_cond_t ban_lurker_cond; ...@@ -109,7 +109,7 @@ extern pthread_cond_t ban_lurker_cond;
extern uint64_t bans_persisted_bytes; extern uint64_t bans_persisted_bytes;
extern uint64_t bans_persisted_fragmentation; extern uint64_t bans_persisted_fragmentation;
void ban_mark_completed(struct ban *b, struct VSC_main *stats); void ban_mark_completed(struct ban *);
unsigned ban_len(const uint8_t *banspec); unsigned ban_len(const uint8_t *banspec);
void ban_info_new(const uint8_t *ban, unsigned len); void ban_info_new(const uint8_t *ban, unsigned len);
void ban_info_drop(const uint8_t *ban, unsigned len); void ban_info_drop(const uint8_t *ban, unsigned len);
......
...@@ -246,7 +246,7 @@ BAN_AddTest(struct ban_proto *bp, ...@@ -246,7 +246,7 @@ BAN_AddTest(struct ban_proto *bp,
*/ */
const char * const char *
BAN_Commit(struct ban_proto *bp, struct VSC_main *stats) BAN_Commit(struct ban_proto *bp)
{ {
struct ban *b, *bi; struct ban *b, *bi;
ssize_t ln; ssize_t ln;
...@@ -294,8 +294,8 @@ BAN_Commit(struct ban_proto *bp, struct VSC_main *stats) ...@@ -294,8 +294,8 @@ BAN_Commit(struct ban_proto *bp, struct VSC_main *stats)
VTAILQ_INSERT_HEAD(&ban_head, b, list); VTAILQ_INSERT_HEAD(&ban_head, b, list);
ban_start = b; ban_start = b;
stats->bans++; VSC_C_main->bans++;
stats->bans_added++; VSC_C_main->bans_added++;
bans_persisted_bytes += ln; bans_persisted_bytes += ln;
/* /*
* XXX absolute update of gauges - may be inaccurate for Pool_Sumstat * XXX absolute update of gauges - may be inaccurate for Pool_Sumstat
...@@ -304,9 +304,9 @@ BAN_Commit(struct ban_proto *bp, struct VSC_main *stats) ...@@ -304,9 +304,9 @@ BAN_Commit(struct ban_proto *bp, struct VSC_main *stats)
VSC_C_main->bans_persisted_bytes = bans_persisted_bytes; VSC_C_main->bans_persisted_bytes = bans_persisted_bytes;
if (b->flags & BANS_FLAG_OBJ) if (b->flags & BANS_FLAG_OBJ)
stats->bans_obj++; VSC_C_main->bans_obj++;
if (b->flags & BANS_FLAG_REQ) if (b->flags & BANS_FLAG_REQ)
stats->bans_req++; VSC_C_main->bans_req++;
if (bi != NULL) if (bi != NULL)
ban_info_new(b->spec, ln); /* Notify stevedores */ ban_info_new(b->spec, ln); /* Notify stevedores */
...@@ -317,8 +317,8 @@ BAN_Commit(struct ban_proto *bp, struct VSC_main *stats) ...@@ -317,8 +317,8 @@ BAN_Commit(struct ban_proto *bp, struct VSC_main *stats)
bi = VTAILQ_NEXT(bi, list)) { bi = VTAILQ_NEXT(bi, list)) {
if (!(bi->flags & BANS_FLAG_COMPLETED) && if (!(bi->flags & BANS_FLAG_COMPLETED) &&
ban_equal(b->spec, bi->spec)) { ban_equal(b->spec, bi->spec)) {
ban_mark_completed(bi, stats); ban_mark_completed(bi);
stats->bans_dups++; VSC_C_main->bans_dups++;
} }
} }
} }
......
...@@ -62,7 +62,7 @@ ban_kick_lurker(void) ...@@ -62,7 +62,7 @@ ban_kick_lurker(void)
*/ */
static int static int
ban_cleantail(const struct ban *victim, struct VSC_main *stats) ban_cleantail(const struct ban *victim)
{ {
struct ban *b, *bt; struct ban *b, *bt;
struct banhead_s freelist = VTAILQ_HEAD_INITIALIZER(freelist); struct banhead_s freelist = VTAILQ_HEAD_INITIALIZER(freelist);
...@@ -78,13 +78,13 @@ ban_cleantail(const struct ban *victim, struct VSC_main *stats) ...@@ -78,13 +78,13 @@ ban_cleantail(const struct ban *victim, struct VSC_main *stats)
if (b != VTAILQ_FIRST(&ban_head) && b->refcount == 0) { if (b != VTAILQ_FIRST(&ban_head) && b->refcount == 0) {
assert(VTAILQ_EMPTY(&b->objcore)); assert(VTAILQ_EMPTY(&b->objcore));
if (b->flags & BANS_FLAG_COMPLETED) if (b->flags & BANS_FLAG_COMPLETED)
stats->bans_completed--; VSC_C_main->bans_completed--;
if (b->flags & BANS_FLAG_OBJ) if (b->flags & BANS_FLAG_OBJ)
stats->bans_obj--; VSC_C_main->bans_obj--;
if (b->flags & BANS_FLAG_REQ) if (b->flags & BANS_FLAG_REQ)
stats->bans_req--; VSC_C_main->bans_req--;
stats->bans--; VSC_C_main->bans--;
stats->bans_deleted++; VSC_C_main->bans_deleted++;
VTAILQ_REMOVE(&ban_head, b, list); VTAILQ_REMOVE(&ban_head, b, list);
VTAILQ_INSERT_TAIL(&freelist, b, list); VTAILQ_INSERT_TAIL(&freelist, b, list);
bans_persisted_fragmentation += bans_persisted_fragmentation +=
...@@ -125,7 +125,7 @@ ban_cleantail(const struct ban *victim, struct VSC_main *stats) ...@@ -125,7 +125,7 @@ ban_cleantail(const struct ban *victim, struct VSC_main *stats)
*/ */
static struct objcore * static struct objcore *
ban_lurker_getfirst(struct vsl_log *vsl, struct ban *bt, struct VSC_main *stats) ban_lurker_getfirst(struct vsl_log *vsl, struct ban *bt)
{ {
struct objhead *oh; struct objhead *oh;
struct objcore *oc, *noc; struct objcore *oc, *noc;
...@@ -154,8 +154,8 @@ ban_lurker_getfirst(struct vsl_log *vsl, struct ban *bt, struct VSC_main *stats) ...@@ -154,8 +154,8 @@ ban_lurker_getfirst(struct vsl_log *vsl, struct ban *bt, struct VSC_main *stats)
assert(move_oc == 0); assert(move_oc == 0);
/* hold off to give lookup a chance and reiterate */ /* hold off to give lookup a chance and reiterate */
VSC_C_main->bans_lurker_contention++;
Lck_Unlock(&ban_mtx); Lck_Unlock(&ban_mtx);
stats->bans_lurker_contention++;
VSL_Flush(vsl, 0); VSL_Flush(vsl, 0);
VTIM_sleep(cache_param->ban_lurker_holdoff); VTIM_sleep(cache_param->ban_lurker_holdoff);
Lck_Lock(&ban_mtx); Lck_Lock(&ban_mtx);
...@@ -209,10 +209,9 @@ ban_lurker_test_ban(struct worker *wrk, struct vsl_log *vsl, struct ban *bt, ...@@ -209,10 +209,9 @@ ban_lurker_test_ban(struct worker *wrk, struct vsl_log *vsl, struct ban *bt,
struct objcore *oc; struct objcore *oc;
unsigned tests; unsigned tests;
int i; int i;
struct VSC_main *stats; uint64_t tested = 0, tested_tests = 0, lok = 0, lokc = 0;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
stats = wrk->stats;
/* /*
* First see if there is anything to do, and if so, insert markers * First see if there is anything to do, and if so, insert markers
...@@ -232,9 +231,16 @@ ban_lurker_test_ban(struct worker *wrk, struct vsl_log *vsl, struct ban *bt, ...@@ -232,9 +231,16 @@ ban_lurker_test_ban(struct worker *wrk, struct vsl_log *vsl, struct ban *bt,
VTIM_sleep(cache_param->ban_lurker_sleep); VTIM_sleep(cache_param->ban_lurker_sleep);
ban_batch = 0; ban_batch = 0;
} }
oc = ban_lurker_getfirst(vsl, bt, stats); oc = ban_lurker_getfirst(vsl, bt);
if (oc == NULL) if (oc == NULL) {
Lck_Lock(&ban_mtx);
VSC_C_main->bans_lurker_tested += tested;
VSC_C_main->bans_lurker_tests_tested += tested_tests;
VSC_C_main->bans_lurker_obj_killed += lok;
VSC_C_main->bans_lurker_obj_killed_cutoff += lokc;
Lck_Unlock(&ban_mtx);
return; return;
}
i = 0; i = 0;
VTAILQ_FOREACH_REVERSE_SAFE(bl, obans, banhead_s, l_list, bln) { VTAILQ_FOREACH_REVERSE_SAFE(bl, obans, banhead_s, l_list, bln) {
if (oc->ban != bt) { if (oc->ban != bt) {
...@@ -256,21 +262,20 @@ ban_lurker_test_ban(struct worker *wrk, struct vsl_log *vsl, struct ban *bt, ...@@ -256,21 +262,20 @@ ban_lurker_test_ban(struct worker *wrk, struct vsl_log *vsl, struct ban *bt,
tests = 0; tests = 0;
i = ban_evaluate(wrk, bl->spec, oc, NULL, i = ban_evaluate(wrk, bl->spec, oc, NULL,
&tests); &tests);
stats->bans_lurker_tested++; tested++;
stats->bans_lurker_tests_tested += tests; tested_tests += tests;
} }
if (i) { if (i) {
if (kill) { if (kill) {
VSLb(vsl, SLT_ExpBan, VSLb(vsl, SLT_ExpBan,
"%u killed for lurker cutoff", "%u killed for lurker cutoff",
ObjGetXID(wrk, oc)); ObjGetXID(wrk, oc));
stats-> lokc++;
bans_lurker_obj_killed_cutoff++;
} else { } else {
VSLb(vsl, SLT_ExpBan, VSLb(vsl, SLT_ExpBan,
"%u banned by lurker", "%u banned by lurker",
ObjGetXID(wrk, oc)); ObjGetXID(wrk, oc));
stats->bans_lurker_obj_killed++; lok++;
} }
HSH_Kill(oc); HSH_Kill(oc);
break; break;
...@@ -278,6 +283,11 @@ ban_lurker_test_ban(struct worker *wrk, struct vsl_log *vsl, struct ban *bt, ...@@ -278,6 +283,11 @@ ban_lurker_test_ban(struct worker *wrk, struct vsl_log *vsl, struct ban *bt,
} }
if (i == 0 && oc->ban == bt) { if (i == 0 && oc->ban == bt) {
Lck_Lock(&ban_mtx); Lck_Lock(&ban_mtx);
VSC_C_main->bans_lurker_tested += tested;
VSC_C_main->bans_lurker_tests_tested += tested_tests;
VSC_C_main->bans_lurker_obj_killed += lok;
VSC_C_main->bans_lurker_obj_killed_cutoff += lokc;
tested = tested_tests = lok = lokc = 0;
if (oc->ban == bt) { if (oc->ban == bt) {
bt->refcount--; bt->refcount--;
VTAILQ_REMOVE(&bt->objcore, oc, ban_list); VTAILQ_REMOVE(&bt->objcore, oc, ban_list);
...@@ -311,14 +321,12 @@ ban_lurker_work(struct worker *wrk, struct vsl_log *vsl) ...@@ -311,14 +321,12 @@ ban_lurker_work(struct worker *wrk, struct vsl_log *vsl)
struct banhead_s obans; struct banhead_s obans;
double d, dt, n; double d, dt, n;
unsigned count = 0, cutoff = UINT_MAX; unsigned count = 0, cutoff = UINT_MAX;
struct VSC_main *stats;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
stats = wrk->stats;
dt = 49.62; // Random, non-magic dt = 49.62; // Random, non-magic
if (cache_param->ban_lurker_sleep == 0) { if (cache_param->ban_lurker_sleep == 0) {
(void)ban_cleantail(NULL, stats); (void)ban_cleantail(NULL);
return (dt); return (dt);
} }
if (cache_param->ban_cutoff > 0) if (cache_param->ban_cutoff > 0)
...@@ -358,7 +366,7 @@ ban_lurker_work(struct worker *wrk, struct vsl_log *vsl) ...@@ -358,7 +366,7 @@ ban_lurker_work(struct worker *wrk, struct vsl_log *vsl)
* containted the first oban, all obans were on the tail and we're * containted the first oban, all obans were on the tail and we're
* done. * done.
*/ */
if (ban_cleantail(VTAILQ_FIRST(&obans), stats)) if (ban_cleantail(VTAILQ_FIRST(&obans)))
return (dt); return (dt);
if (VTAILQ_FIRST(&obans) == NULL) if (VTAILQ_FIRST(&obans) == NULL)
...@@ -386,7 +394,7 @@ ban_lurker_work(struct worker *wrk, struct vsl_log *vsl) ...@@ -386,7 +394,7 @@ ban_lurker_work(struct worker *wrk, struct vsl_log *vsl)
Lck_Lock(&ban_mtx); Lck_Lock(&ban_mtx);
VTAILQ_FOREACH(b, &obans, l_list) { VTAILQ_FOREACH(b, &obans, l_list) {
ban_mark_completed(b, stats); ban_mark_completed(b);
if (b == bd) if (b == bd)
break; break;
} }
......
...@@ -559,26 +559,6 @@ VRT_synth_page(VRT_CTX, const char *str, ...) ...@@ -559,26 +559,6 @@ VRT_synth_page(VRT_CTX, const char *str, ...)
/*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/
static struct VSC_main *
vrt_stats(VRT_CTX)
{
struct worker *wrk;
if (ctx->req) {
CHECK_OBJ_NOTNULL(ctx->req, REQ_MAGIC);
wrk = ctx->req->wrk;
} else if (ctx->bo) {
CHECK_OBJ_NOTNULL(ctx->bo, BUSYOBJ_MAGIC);
wrk = ctx->bo->wrk;
} else {
// XXX
return (VSC_C_main);
}
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
return (wrk->stats);
}
VCL_VOID VCL_VOID
VRT_ban_string(VRT_CTX, VCL_STRING str) VRT_ban_string(VRT_CTX, VCL_STRING str)
{ {
...@@ -634,7 +614,7 @@ VRT_ban_string(VRT_CTX, VCL_STRING str) ...@@ -634,7 +614,7 @@ VRT_ban_string(VRT_CTX, VCL_STRING str)
break; break;
} }
if (av[++i] == NULL) { if (av[++i] == NULL) {
err = BAN_Commit(bp, vrt_stats(ctx)); err = BAN_Commit(bp);
if (err == NULL) if (err == NULL)
bp = NULL; bp = NULL;
else else
......
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