Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
varnish-cache
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
varnishcache
varnish-cache
Commits
737d6c2d
Commit
737d6c2d
authored
Sep 24, 2018
by
Poul-Henning Kamp
Committed by
Dridi Boukelmoune
Oct 16, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
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
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
73 additions
and
70 deletions
+73
-70
VSC_main.vsc
bin/varnishd/VSC_main.vsc
+17
-0
cache.h
bin/varnishd/cache/cache.h
+1
-1
cache_ban.c
bin/varnishd/cache/cache_ban.c
+16
-18
cache_ban.h
bin/varnishd/cache/cache_ban.h
+1
-1
cache_ban_build.c
bin/varnishd/cache/cache_ban_build.c
+7
-7
cache_ban_lurker.c
bin/varnishd/cache/cache_ban_lurker.c
+30
-22
cache_vrt.c
bin/varnishd/cache/cache_vrt.c
+1
-21
No files found.
bin/varnishd/VSC_main.vsc
View file @
737d6c2d
...
@@ -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
...
...
bin/varnishd/cache/cache.h
View file @
737d6c2d
...
@@ -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] */
...
...
bin/varnishd/cache/cache_ban.c
View file @
737d6c2d
...
@@ -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
);
}
}
...
...
bin/varnishd/cache/cache_ban.h
View file @
737d6c2d
...
@@ -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
);
...
...
bin/varnishd/cache/cache_ban_build.c
View file @
737d6c2d
...
@@ -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
++
;
}
}
}
}
}
}
...
...
bin/varnishd/cache/cache_ban_lurker.c
View file @
737d6c2d
...
@@ -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
;
}
}
...
...
bin/varnishd/cache/cache_vrt.c
View file @
737d6c2d
...
@@ -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
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment