[master] acf3b946e vmod_purge: restrict to hit and miss
Nils Goroll
nils.goroll at uplex.de
Mon Apr 24 13:46:09 UTC 2023
commit acf3b946e7f287cde86075d02c9e84b767226370
Author: Walid Boudebouda <walid.boudebouda at gmail.com>
Date: Thu Mar 9 11:31:33 2023 +0100
vmod_purge: restrict to hit and miss
Both $Functions call VRT_purge which fails if not called from vcl_hit
or vcl_miss
diff --git a/bin/varnishtest/tests/r02339.vtc b/bin/varnishtest/tests/r02339.vtc
index d4d06e859..60848137d 100644
--- a/bin/varnishtest/tests/r02339.vtc
+++ b/bin/varnishtest/tests/r02339.vtc
@@ -9,47 +9,13 @@ varnish v1 -cliok "param.set thread_pools 1"
varnish v1 -cliok "param.set vsl_mask +ExpKill"
varnish v1 -vcl+backend {
import purge;
- import vtc;
- sub vcl_recv {
- if (req.url == "recv") { purge.hard(); }
- 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") { purge.hard(); }
- }
sub vcl_miss {
if (req.url == "miss") { purge.hard(); }
}
sub vcl_hit {
if (req.url == "hit") { purge.hard(); }
}
- sub vcl_purge {
- if (req.url == "purge") { purge.hard(); }
- }
- sub vcl_pass {
- if (req.url == "pass") { purge.hard(); }
- }
- sub vcl_deliver {
- if (req.url == "deliver") { purge.hard(); }
- }
- sub vcl_synth {
- if (req.url == "synth") { purge.hard(); }
- }
- sub vcl_backend_fetch {
- if (bereq.url == "fetch") { purge.hard(); }
- if (bereq.url == "error") {
- set bereq.backend = vtc.no_backend();
- }
- }
- sub vcl_backend_error {
- if (bereq.url == "error") { purge.hard(); }
- }
- sub vcl_backend_response {
- if (bereq.url == "response") { purge.hard(); }
- }
} -start
varnish v1 -cliok "param.set timeout_idle 2"
@@ -70,34 +36,6 @@ logexpect l1 -v v1 {
expect * 1004 VCL_call MISS
expect 0 = VCL_return fetch
- expect * 1007 VCL_call RECV
- expect 0 = VCL_Error purge
- expect 0 = VCL_return fail
-
- expect * 1009 VCL_call HASH
- expect 0 = VCL_Error purge
- expect 0 = VCL_return fail
-
- expect * 1011 VCL_call PURGE
- expect 0 = VCL_Error purge
-
- expect * 1013 VCL_call PASS
- expect 0 = VCL_Error purge
-
- expect * 1015 VCL_call DELIVER
- expect 0 = VCL_Error purge
-
- expect * 1018 VCL_call SYNTH
- expect 0 = VCL_Error purge
-
- expect * 1021 VCL_call BACKEND_FETCH
- expect 0 = VCL_Error purge
-
- expect * 1024 VCL_call BACKEND_ERROR
- expect 0 = VCL_Error purge
-
- expect * 1027 VCL_call BACKEND_RESPONSE
- expect 0 = VCL_Error purge
} -start
client c1 {
@@ -117,67 +55,58 @@ client c1 {
logexpect l0 -wait
logexpect l2 -wait
-client c1 {
- txreq -url recv
- rxresp
- expect resp.status == 503
- expect_close
-} -run
+varnish v1 -errvcl "Not available in subroutine 'vcl_purge'" {
+ import purge;
-client c1 {
- txreq -url hash
- rxresp
- expect resp.status == 503
- expect_close
-} -run
+ sub vcl_purge {
+ if (req.url == "purge") { purge.hard(); }
+ }
+}
-client c1 {
- txreq -url purge
- rxresp
- expect resp.status == 503
- expect_close
-} -run
+varnish v1 -errvcl "Not available in subroutine 'vcl_pass'" {
+ import purge;
-client c1 {
- txreq -url pass
- rxresp
- expect resp.status == 503
- expect_close
-} -run
+ sub vcl_pass {
+ if (req.url == "pass") { purge.hard(); }
+ }
+}
-client c1 {
- txreq -url deliver
- rxresp
- expect resp.status == 503
- expect_close
-} -run
+varnish v1 -errvcl "Not available in subroutine 'vcl_deliver'" {
+ import purge;
-client c1 {
- txreq -url synth
- rxresp
- expect resp.status == 500
- expect_close
-} -run
+ sub vcl_deliver {
+ if (req.url == "deliver") { purge.hard(); }
+ }
+}
-client c1 {
- txreq -url fetch
- rxresp
- expect resp.status == 503
- expect_close
-} -run
+varnish v1 -errvcl "Not available in subroutine 'vcl_synth'" {
+ import purge;
-client c1 {
- txreq -url error
- rxresp
- expect resp.status == 503
- expect_close
-} -run
+ sub vcl_synth {
+ if (req.url == "synth") { purge.hard(); }
+ }
+}
-client c1 {
- txreq -url response
- rxresp
- expect resp.status == 503
- expect_close
-} -run
+varnish v1 -errvcl "Not available in subroutine 'vcl_backend_fetch'" {
+ import purge;
+
+ sub vcl_backend_fetch {
+ if (bereq.url == "fetch") { purge.hard(); }
+ }
+}
-logexpect l1 -wait
+varnish v1 -errvcl "Not available in subroutine 'vcl_backend_error'" {
+ import purge;
+
+ sub vcl_backend_error {
+ if (bereq.url == "error") { purge.hard(); }
+ }
+}
+
+varnish v1 -errvcl "Not available in subroutine 'vcl_backend_response'" {
+ import purge;
+
+ sub vcl_backend_response {
+ if (bereq.url == "response") { purge.hard(); }
+ }
+}
\ No newline at end of file
diff --git a/vmod/vmod_purge.vcc b/vmod/vmod_purge.vcc
index fd320f816..dc55a7f30 100644
--- a/vmod/vmod_purge.vcc
+++ b/vmod/vmod_purge.vcc
@@ -94,6 +94,8 @@ Example::
set req.http.purged = purge.hard();
+$Restrict vcl_hit vcl_miss
+
$Function INT soft(DURATION ttl = 0, DURATION grace = -1, DURATION keep = -1)
Sets the *ttl*, *grace* and *keep*.
@@ -101,9 +103,9 @@ Sets the *ttl*, *grace* and *keep*.
By default, *ttl* is set to 0 with *grace* and *keep* periods left
untouched. Setting a negative value for *grace* or *keep* periods
leaves them untouched. Setting all three parameters to ``0`` is
-equivalent to a hard purge. It can only be called from ``vcl_hit{}``
-or ``vcl_miss{}``. It returns the number of soft-purged objects.
+equivalent to a hard purge. It returns the number of soft-purged objects.
+$Restrict vcl_hit vcl_miss
SEE ALSO
========
More information about the varnish-commit
mailing list