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
3abbe2bc
Commit
3abbe2bc
authored
Jun 05, 2017
by
Dridi Boukelmoune
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Universal failure for VRT_purge
Coverage via a simple debug.purge() wrapper.
parent
b124cf41
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
210 additions
and
3 deletions
+210
-3
cache_vrt.c
bin/varnishd/cache/cache_vrt.c
+9
-3
r02339.vtc
bin/varnishtest/tests/r02339.vtc
+183
-0
changes.rst
doc/changes.rst
+3
-0
vrt.h
include/vrt.h
+1
-0
vmod.vcc
lib/libvmod_debug/vmod.vcc
+4
-0
vmod_debug.c
lib/libvmod_debug/vmod_debug.c
+10
-0
No files found.
bin/varnishd/cache/cache_vrt.c
View file @
3abbe2bc
...
...
@@ -539,11 +539,17 @@ VRT_purge(VRT_CTX, double ttl, double grace, double keep)
{
CHECK_OBJ_NOTNULL
(
ctx
,
VRT_CTX_MAGIC
);
if
(
ctx
->
method
!=
VCL_MET_HIT
&&
ctx
->
method
!=
VCL_MET_MISS
)
{
VSLb
(
ctx
->
vsl
,
SLT_VCL_Error
,
"purge can only happen in vcl_hit{} or vcl_miss{}"
);
VRT_handling
(
ctx
,
VCL_RET_FAIL
);
return
;
}
CHECK_OBJ_NOTNULL
(
ctx
->
req
,
REQ_MAGIC
);
CHECK_OBJ_NOTNULL
(
ctx
->
req
->
wrk
,
WORKER_MAGIC
);
if
(
ctx
->
method
==
VCL_MET_HIT
||
ctx
->
method
==
VCL_MET_MISS
)
HSH_Purge
(
ctx
->
req
->
wrk
,
ctx
->
req
->
objcore
->
objhead
,
ttl
,
grace
,
keep
);
HSH_Purge
(
ctx
->
req
->
wrk
,
ctx
->
req
->
objcore
->
objhead
,
ttl
,
grace
,
keep
);
}
/*--------------------------------------------------------------------
...
...
bin/varnishtest/tests/r02339.vtc
0 → 100644
View file @
3abbe2bc
varnishtest "VMOD purge"
server s1 -repeat 12 {
rxreq
txresp
} -start
varnish v1 -arg "-p thread_pools=1" -vcl+backend {
import debug;
sub vcl_recv {
if (req.url == "recv") { debug.purge(); }
if (req.url == "pass") { return (pass); }
if (req.url == "purge") { return (purge); }
if (req.url == "synth") { return (synth(200)); }
}
sub vcl_hash {
if (req.url == "hash") { debug.purge(); }
}
sub vcl_miss {
if (req.url == "miss") { debug.purge(); }
}
sub vcl_hit {
if (req.url == "hit") { debug.purge(); }
}
sub vcl_purge {
if (req.url == "purge") { debug.purge(); }
}
sub vcl_pass {
if (req.url == "pass") { debug.purge(); }
}
sub vcl_deliver {
if (req.url == "deliver") { debug.purge(); }
}
sub vcl_synth {
if (req.url == "synth") { debug.purge(); }
}
sub vcl_backend_fetch {
if (bereq.url == "fetch") { debug.purge(); }
if (bereq.url == "error") {
set bereq.backend = debug.no_backend();
}
}
sub vcl_backend_error {
if (bereq.url == "error") { debug.purge(); }
}
sub vcl_backend_response {
if (bereq.url == "response") { debug.purge(); }
}
} -start
logexpect l0 -v v1 -g raw {
expect * 0 ExpKill "EXP_Expired x=1002"
} -start
logexpect l1 -v v1 {
expect * 1002 Begin "bereq 1001 fetch"
expect * 1003 VCL_call HIT
expect * = VCL_Log PURGE
expect * = VCL_call DELIVER
expect * 1004 VCL_call MISS
expect * = VCL_Log PURGE
expect * = VCL_call DELIVER
expect * 1007 VCL_call RECV
expect * = VCL_Log PURGE
expect * = VCL_Error purge
expect * = VCL_return fail
expect * 1009 VCL_call HASH
expect * = VCL_Log PURGE
expect * = VCL_Error purge
expect * = VCL_return fail
expect * 1011 VCL_call PURGE
expect * = VCL_Log PURGE
expect * = VCL_Error purge
expect * 1013 VCL_call PASS
expect * = VCL_Log PURGE
expect * = VCL_Error purge
expect * 1015 VCL_call DELIVER
expect * = VCL_Log PURGE
expect * = VCL_Error purge
expect * 1018 VCL_call SYNTH
expect * = VCL_Log PURGE
expect * = VCL_Error purge
expect * 1021 VCL_call BACKEND_FETCH
expect * = VCL_Log PURGE
expect * = VCL_Error purge
expect * 1024 VCL_call BACKEND_ERROR
expect * = VCL_Log PURGE
expect * = VCL_Error purge
expect * 1027 VCL_call BACKEND_RESPONSE
expect * = VCL_Log PURGE
expect * = VCL_Error purge
} -start
client c1 {
txreq -url hit
rxresp
expect resp.status == 200
txreq -url hit
rxresp
expect resp.status == 200
txreq -url miss
rxresp
expect resp.status == 200
} -run
logexpect l0 -wait
client c1 {
txreq -url recv
rxresp
expect resp.status == 503
expect_close
} -run
client c1 {
txreq -url hash
rxresp
expect resp.status == 503
expect_close
} -run
client c1 {
txreq -url purge
rxresp
expect resp.status == 503
expect_close
} -run
client c1 {
txreq -url pass
rxresp
expect resp.status == 503
expect_close
} -run
client c1 {
txreq -url deliver
rxresp
expect resp.status == 503
expect_close
} -run
client c1 {
txreq -url synth
expect_close
} -run
client c1 {
txreq -url fetch
rxresp
expect resp.status == 503
expect_close
} -run
client c1 {
txreq -url error
rxresp
expect resp.status == 503
expect_close
} -run
client c1 {
txreq -url response
rxresp
expect resp.status == 503
expect_close
} -run
logexpect l1 -wait
doc/changes.rst
View file @
3abbe2bc
...
...
@@ -6,6 +6,9 @@ Varnish Cache Trunk (ongoing)
* On platforms with setproctitle(3), use the -i argument rather than -n
* VRT_purge fails a transaction if used outside of ``vcl_hit`` and
``vcl_miss`` (#2339)
* VSM_Name() returns the -i argument name, rather than the -n name.
* VUT.name is goine, use VSM_Name(VUT.vsm)
...
...
include/vrt.h
View file @
3abbe2bc
...
...
@@ -41,6 +41,7 @@
*
* 6.1 (unreleased):
* http_CollectHdrSep added
* VRT_purge modified (may fail a transaction)
* 6.0 (2017-03-15):
* VRT_hit_for_pass added
* VRT_ipcmp added
...
...
lib/libvmod_debug/vmod.vcc
View file @
3abbe2bc
...
...
@@ -219,3 +219,7 @@ Returns the size in bytes of a collection of C-datatypes.
* 'z' = size_t
* 'o' = off_t
* 'j' = intmax_t
$Function VOID purge(DURATION ttl = 0, DURATION grace = 0, DURATION keep = 0)
Performs a purge, by default a hard purge where ttl, grace and keep are zero.
lib/libvmod_debug/vmod_debug.c
View file @
3abbe2bc
...
...
@@ -572,3 +572,13 @@ vmod_typesize(VRT_CTX, VCL_STRING s)
}
return
((
VCL_INT
)
i
);
}
VCL_VOID
vmod_purge
(
VRT_CTX
,
double
ttl
,
double
grace
,
double
keep
)
{
CHECK_OBJ_NOTNULL
(
ctx
,
VRT_CTX_MAGIC
);
VSLb
(
ctx
->
vsl
,
SLT_VCL_Log
,
"PURGE"
);
VRT_purge
(
ctx
,
ttl
,
grace
,
keep
);
}
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