Commit 295e99af authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Change "GONE" bans to "COMPLETED" bans.

parent d7942b7e
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
* Bans are compiled into bytestrings as follows: * Bans are compiled into bytestrings as follows:
* 8 bytes - double: timestamp XXX: Byteorder ? * 8 bytes - double: timestamp XXX: Byteorder ?
* 4 bytes - be32: length * 4 bytes - be32: length
* 1 byte - flags: 0x01: BAN_F_{REQ|OBJ|GONE} * 1 byte - flags: 0x01: BAN_F_{REQ|OBJ|COMPLETED}
* N tests * N tests
* A test have this form: * A test have this form:
* 1 byte - arg (see ban_vars.h col 3 "BANS_ARG_XXX") * 1 byte - arg (see ban_vars.h col 3 "BANS_ARG_XXX")
...@@ -88,7 +88,7 @@ ...@@ -88,7 +88,7 @@
#define BANS_FLAG_REQ (1<<0) #define BANS_FLAG_REQ (1<<0)
#define BANS_FLAG_OBJ (1<<1) #define BANS_FLAG_OBJ (1<<1)
#define BANS_FLAG_GONE (1<<2) #define BANS_FLAG_COMPLETED (1<<2)
#define BANS_FLAG_HTTP (1<<3) #define BANS_FLAG_HTTP (1<<3)
#define BANS_FLAG_ERROR (1<<4) #define BANS_FLAG_ERROR (1<<4)
...@@ -268,7 +268,7 @@ ban_equal(const uint8_t *bs1, const uint8_t *bs2) ...@@ -268,7 +268,7 @@ ban_equal(const uint8_t *bs1, const uint8_t *bs2)
} }
static void static void
ban_mark_gone(struct ban *b) ban_mark_completed(struct ban *b)
{ {
unsigned ln; unsigned ln;
...@@ -276,13 +276,13 @@ ban_mark_gone(struct ban *b) ...@@ -276,13 +276,13 @@ ban_mark_gone(struct ban *b)
Lck_AssertHeld(&ban_mtx); Lck_AssertHeld(&ban_mtx);
AN(b->spec); AN(b->spec);
AZ(b->flags & BANS_FLAG_GONE); AZ(b->flags & BANS_FLAG_COMPLETED);
ln = ban_len(b->spec); ln = ban_len(b->spec);
b->flags |= BANS_FLAG_GONE; b->flags |= BANS_FLAG_COMPLETED;
b->spec[BANS_FLAGS] |= BANS_FLAG_GONE; 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);
VSC_C_main->bans_gone++; VSC_C_main->bans_completed++;
VSC_C_main->bans_persisted_fragmentation += ln - ban_len(b->spec); VSC_C_main->bans_persisted_fragmentation += ln - ban_len(b->spec);
} }
...@@ -555,16 +555,16 @@ BAN_Insert(struct ban *b) ...@@ -555,16 +555,16 @@ BAN_Insert(struct ban *b)
if (be == NULL) if (be == NULL)
return (NULL); return (NULL);
/* Hunt down duplicates, and mark them as gone */ /* Hunt down duplicates, and mark them as completed */
bi = b; bi = b;
Lck_Lock(&ban_mtx); Lck_Lock(&ban_mtx);
while(!ban_shutdown && bi != be) { while(!ban_shutdown && bi != be) {
bi = VTAILQ_NEXT(bi, list); bi = VTAILQ_NEXT(bi, list);
if (bi->flags & BANS_FLAG_GONE) if (bi->flags & BANS_FLAG_COMPLETED)
continue; continue;
if (!ban_equal(b->spec, bi->spec)) if (!ban_equal(b->spec, bi->spec))
continue; continue;
ban_mark_gone(bi); ban_mark_completed(bi);
VSC_C_main->bans_dups++; VSC_C_main->bans_dups++;
} }
be->refcount--; be->refcount--;
...@@ -671,7 +671,7 @@ ban_info(enum baninfo event, const uint8_t *ban, unsigned len) ...@@ -671,7 +671,7 @@ ban_info(enum baninfo event, const uint8_t *ban, unsigned len)
if (STV_BanInfo(event, ban, len)) { if (STV_BanInfo(event, ban, len)) {
/* One or more stevedores reported failure. Export the /* One or more stevedores reported failure. Export the
* list instead. The exported list should take up less * list instead. The exported list should take up less
* space due to drops being purged and gones being * space due to drops being purged and completed being
* truncated. */ * truncated. */
/* XXX: Keep some measure of how much space can be /* XXX: Keep some measure of how much space can be
* saved, and only export if it's worth it. Assert if * saved, and only export if it's worth it. Assert if
...@@ -684,8 +684,8 @@ ban_info(enum baninfo event, const uint8_t *ban, unsigned len) ...@@ -684,8 +684,8 @@ ban_info(enum baninfo event, const uint8_t *ban, unsigned len)
* Put a skeleton ban in the list, unless there is an identical, * Put a skeleton ban in the list, unless there is an identical,
* time & condition, ban already in place. * time & condition, ban already in place.
* *
* If a newer ban has same condition, mark the new ban GONE. * If a newer ban has same condition, mark the inserted ban COMPLETED,
* mark any older bans, with the same condition, GONE as well. * also mark any older bans, with the same condition COMPLETED.
*/ */
static void static void
...@@ -727,8 +727,8 @@ ban_reload(const uint8_t *ban, unsigned len) ...@@ -727,8 +727,8 @@ ban_reload(const uint8_t *ban, unsigned len)
} }
if (duplicate) if (duplicate)
VSC_C_main->bans_dups++; VSC_C_main->bans_dups++;
if (duplicate || (ban[BANS_FLAGS] & BANS_FLAG_GONE)) if (duplicate || (ban[BANS_FLAGS] & BANS_FLAG_COMPLETED))
ban_mark_gone(b2); 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
...@@ -737,10 +737,10 @@ ban_reload(const uint8_t *ban, unsigned len) ...@@ -737,10 +737,10 @@ ban_reload(const uint8_t *ban, unsigned len)
/* Hunt down older duplicates */ /* Hunt down older duplicates */
for (b = VTAILQ_NEXT(b2, list); b != NULL; b = VTAILQ_NEXT(b, list)) { for (b = VTAILQ_NEXT(b2, list); b != NULL; b = VTAILQ_NEXT(b, list)) {
if (b->flags & BANS_FLAG_GONE) if (b->flags & BANS_FLAG_COMPLETED)
continue; continue;
if (ban_equal(b->spec, ban)) { if (ban_equal(b->spec, ban)) {
ban_mark_gone(b); ban_mark_completed(b);
VSC_C_main->bans_dups++; VSC_C_main->bans_dups++;
} }
} }
...@@ -927,7 +927,7 @@ ban_check_object(struct object *o, struct vsl_log *vsl, ...@@ -927,7 +927,7 @@ ban_check_object(struct object *o, struct vsl_log *vsl,
tests = 0; tests = 0;
for (b = b0; b != oc->ban; b = VTAILQ_NEXT(b, list)) { for (b = b0; b != oc->ban; b = VTAILQ_NEXT(b, list)) {
CHECK_OBJ_NOTNULL(b, BAN_MAGIC); CHECK_OBJ_NOTNULL(b, BAN_MAGIC);
if (b->flags & BANS_FLAG_GONE) if (b->flags & BANS_FLAG_COMPLETED)
continue; continue;
if (ban_evaluate(b->spec, o->http, req_http, &tests)) if (ban_evaluate(b->spec, o->http, req_http, &tests))
break; break;
...@@ -975,8 +975,8 @@ ban_cleantail(void) ...@@ -975,8 +975,8 @@ ban_cleantail(void)
Lck_Lock(&ban_mtx); Lck_Lock(&ban_mtx);
b = VTAILQ_LAST(&ban_head, banhead_s); b = VTAILQ_LAST(&ban_head, banhead_s);
if (b != VTAILQ_FIRST(&ban_head) && b->refcount == 0) { if (b != VTAILQ_FIRST(&ban_head) && b->refcount == 0) {
if (b->flags & BANS_FLAG_GONE) if (b->flags & BANS_FLAG_COMPLETED)
VSC_C_main->bans_gone--; VSC_C_main->bans_completed--;
if (b->flags & BANS_FLAG_OBJ) if (b->flags & BANS_FLAG_OBJ)
VSC_C_main->bans_obj--; VSC_C_main->bans_obj--;
if (b->flags & BANS_FLAG_REQ) if (b->flags & BANS_FLAG_REQ)
...@@ -1117,7 +1117,7 @@ ban_lurker_work(struct worker *wrk, struct vsl_log *vsl) ...@@ -1117,7 +1117,7 @@ ban_lurker_work(struct worker *wrk, struct vsl_log *vsl)
Lck_Unlock(&ban_mtx); Lck_Unlock(&ban_mtx);
i = 0; i = 0;
while (b != NULL) { while (b != NULL) {
if (b->flags & BANS_FLAG_GONE) { if (b->flags & BANS_FLAG_COMPLETED) {
; ;
} else if (b->flags & BANS_FLAG_REQ) { } else if (b->flags & BANS_FLAG_REQ) {
; ;
...@@ -1138,9 +1138,10 @@ ban_lurker_work(struct worker *wrk, struct vsl_log *vsl) ...@@ -1138,9 +1138,10 @@ ban_lurker_work(struct worker *wrk, struct vsl_log *vsl)
VTAILQ_FOREACH_REVERSE(bt, &ban_head, banhead_s, list) { VTAILQ_FOREACH_REVERSE(bt, &ban_head, banhead_s, list) {
if (bt == VTAILQ_LAST(&obans, banhead_s)) { if (bt == VTAILQ_LAST(&obans, banhead_s)) {
if (DO_DEBUG(DBG_LURKER)) if (DO_DEBUG(DBG_LURKER))
VSLb(vsl, SLT_Debug, "Lurk bt gone %p", bt); VSLb(vsl, SLT_Debug,
"Lurk bt completed %p", bt);
Lck_Lock(&ban_mtx); Lck_Lock(&ban_mtx);
ban_mark_gone(bt); ban_mark_completed(bt);
Lck_Unlock(&ban_mtx); Lck_Unlock(&ban_mtx);
VTAILQ_REMOVE(&obans, bt, l_list); VTAILQ_REMOVE(&obans, bt, l_list);
if (VTAILQ_EMPTY(&obans)) if (VTAILQ_EMPTY(&obans))
...@@ -1283,9 +1284,9 @@ ccf_ban_list(struct cli *cli, const char * const *av, void *priv) ...@@ -1283,9 +1284,9 @@ ccf_ban_list(struct cli *cli, const char * const *av, void *priv)
VCLI_Out(cli, "Present bans:\n"); VCLI_Out(cli, "Present bans:\n");
VTAILQ_FOREACH(b, &ban_head, list) { VTAILQ_FOREACH(b, &ban_head, list) {
VCLI_Out(cli, "%10.6f %5u%s", ban_time(b->spec), VCLI_Out(cli, "%10.6f %5u %s", ban_time(b->spec),
bl == b ? b->refcount - 1 : b->refcount, bl == b ? b->refcount - 1 : b->refcount,
b->flags & BANS_FLAG_GONE ? "G" : "-"); b->flags & BANS_FLAG_COMPLETED ? "C" : " ");
if (DO_DEBUG(DBG_LURKER)) { if (DO_DEBUG(DBG_LURKER)) {
VCLI_Out(cli, "%s%s%s %p ", VCLI_Out(cli, "%s%s%s %p ",
b->flags & BANS_FLAG_REQ ? "R" : "-", b->flags & BANS_FLAG_REQ ? "R" : "-",
...@@ -1327,7 +1328,7 @@ BAN_Init(void) ...@@ -1327,7 +1328,7 @@ BAN_Init(void)
AN(ban_magic); AN(ban_magic);
AZ(BAN_Insert(ban_magic)); AZ(BAN_Insert(ban_magic));
Lck_Lock(&ban_mtx); Lck_Lock(&ban_mtx);
ban_mark_gone(ban_magic); ban_mark_completed(ban_magic);
Lck_Unlock(&ban_mtx); Lck_Unlock(&ban_mtx);
} }
......
...@@ -97,7 +97,7 @@ delay .1 ...@@ -97,7 +97,7 @@ delay .1
varnish v1 -cliok "ban.list" varnish v1 -cliok "ban.list"
varnish v1 -expect bans == 6 varnish v1 -expect bans == 6
varnish v1 -expect bans_gone == 1 varnish v1 -expect bans_completed == 1
varnish v1 -expect bans_req == 1 varnish v1 -expect bans_req == 1
varnish v1 -expect bans_obj == 4 varnish v1 -expect bans_obj == 4
varnish v1 -expect bans_added == 6 varnish v1 -expect bans_added == 6
...@@ -118,7 +118,7 @@ delay 2 ...@@ -118,7 +118,7 @@ delay 2
varnish v1 -cliok "ban.list" varnish v1 -cliok "ban.list"
varnish v1 -expect bans == 5 varnish v1 -expect bans == 5
varnish v1 -expect bans_gone == 4 varnish v1 -expect bans_completed == 4
varnish v1 -expect bans_req == 1 varnish v1 -expect bans_req == 1
varnish v1 -expect bans_obj == 4 varnish v1 -expect bans_obj == 4
varnish v1 -expect bans_added == 6 varnish v1 -expect bans_added == 6
...@@ -143,7 +143,7 @@ delay 1 ...@@ -143,7 +143,7 @@ delay 1
varnish v1 -cliok "ban.list" varnish v1 -cliok "ban.list"
varnish v1 -expect bans == 4 varnish v1 -expect bans == 4
varnish v1 -expect bans_gone == 3 varnish v1 -expect bans_completed == 3
varnish v1 -expect bans_req == 1 varnish v1 -expect bans_req == 1
varnish v1 -expect bans_obj == 3 varnish v1 -expect bans_obj == 3
varnish v1 -expect bans_added == 6 varnish v1 -expect bans_added == 6
...@@ -168,7 +168,7 @@ delay 1 ...@@ -168,7 +168,7 @@ delay 1
varnish v1 -cliok "ban.list" varnish v1 -cliok "ban.list"
varnish v1 -expect bans == 1 varnish v1 -expect bans == 1
varnish v1 -expect bans_gone == 1 varnish v1 -expect bans_completed == 1
varnish v1 -expect bans_req == 0 varnish v1 -expect bans_req == 0
varnish v1 -expect bans_obj == 1 varnish v1 -expect bans_obj == 1
varnish v1 -expect bans_added == 6 varnish v1 -expect bans_added == 6
......
varnishtest "Check that reloaded bans with gone flag are really gone on restart" varnishtest "Check that reloaded bans with completed flag are really completed on restart"
shell "rm -f ${tmpdir}/_.per[12]" shell "rm -f ${tmpdir}/_.per[12]"
...@@ -36,8 +36,8 @@ varnish v1 -expect bans == 3 ...@@ -36,8 +36,8 @@ varnish v1 -expect bans == 3
# Expect 1 of the 2 added to be marked dup # Expect 1 of the 2 added to be marked dup
varnish v1 -expect bans_dups == 1 varnish v1 -expect bans_dups == 1
# Expect ban_magic plus our 1 dup to be marked gone # Expect ban_magic plus our 1 dup to be marked completed
varnish v1 -expect bans_gone == 2 varnish v1 -expect bans_completed == 2
# Restart # Restart
varnish v1 -stop varnish v1 -stop
...@@ -54,4 +54,4 @@ client c1 { ...@@ -54,4 +54,4 @@ client c1 {
# Expect our duplicate # Expect our duplicate
varnish v1 -expect bans_dups == 1 varnish v1 -expect bans_dups == 1
# One more than before restart due to the new ban_magic # One more than before restart due to the new ban_magic
varnish v1 -expect bans_gone == 3 varnish v1 -expect bans_completed == 3
varnishtest "#1266 - Check persisted truncated gone bans" varnishtest "#1266 - Check persisted truncated completed bans"
# Test that bans which has been gone'd, truncated and persisted works # Test that bans which has been completed, truncated and persisted works
shell "rm -f ${tmpdir}/_.per1" shell "rm -f ${tmpdir}/_.per1"
...@@ -17,7 +17,7 @@ varnish v1 \ ...@@ -17,7 +17,7 @@ varnish v1 \
} }
varnish v1 -start varnish v1 -start
# Add a ban that will (with lurker help) become a truncated gone ban last # Add a ban that will (with lurker help) become a truncated completed ban last
# in the list # in the list
varnish v1 -cliok "ban obj.http.x-foo == bar" varnish v1 -cliok "ban obj.http.x-foo == bar"
delay 1 delay 1
......
...@@ -485,8 +485,8 @@ VSC_F(bans, uint64_t, 0, 'g', info, ...@@ -485,8 +485,8 @@ VSC_F(bans, uint64_t, 0, 'g', info,
"Number of all bans in system, including bans superseded" "Number of all bans in system, including bans superseded"
" by newer bans and bans already checked by the ban-lurker." " by newer bans and bans already checked by the ban-lurker."
) )
VSC_F(bans_gone, uint64_t, 0, 'g', diag, VSC_F(bans_completed, uint64_t, 0, 'g', diag,
"Number of bans marked 'gone'", "Number of bans marked 'completed'",
"Number of bans which are no longer active, either because they" "Number of bans which are no longer active, either because they"
" got checked by the ban-lurker or superseded by newer identical bans." " got checked by the ban-lurker or superseded by newer identical bans."
) )
...@@ -556,7 +556,7 @@ VSC_F(bans_persisted_bytes, uint64_t, 0, 'g', diag, ...@@ -556,7 +556,7 @@ VSC_F(bans_persisted_bytes, uint64_t, 0, 'g', diag,
VSC_F(bans_persisted_fragmentation, uint64_t, 0, 'g', diag, VSC_F(bans_persisted_fragmentation, uint64_t, 0, 'g', diag,
"Extra bytes in persisted ban lists due to fragmentation", "Extra bytes in persisted ban lists due to fragmentation",
"Number of extra bytes accumulated through dropped and" "Number of extra bytes accumulated through dropped and"
" gone bans in the persistent ban lists." " completed bans in the persistent ban lists."
) )
/*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/
......
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