[master] 32ef5dce5 Cancel a request for a private (streaming) object from vcl_deliver
Nils Goroll
nils.goroll at uplex.de
Wed Apr 10 09:29:08 UTC 2019
commit 32ef5dce5dd3d0e435186fc638e3749ea3e7b3c0
Author: Nils Goroll <nils.goroll at uplex.de>
Date: Sun Apr 7 18:18:03 2019 +0200
Cancel a request for a private (streaming) object from vcl_deliver
for anything but return (deliver)
Fixes #2963
diff --git a/bin/varnishd/cache/cache_req_fsm.c b/bin/varnishd/cache/cache_req_fsm.c
index c6764e0c2..6a367bed7 100644
--- a/bin/varnishd/cache/cache_req_fsm.c
+++ b/bin/varnishd/cache/cache_req_fsm.c
@@ -160,6 +160,7 @@ cnt_deliver(struct worker *wrk, struct req *req)
assert(req->restarts <= cache_param->max_restarts);
if (wrk->handling != VCL_RET_DELIVER) {
+ HSH_Cancel(wrk, req->objcore, NULL);
(void)HSH_DerefObjCore(wrk, &req->objcore, HSH_RUSH_POLICY);
http_Teardown(req->resp);
diff --git a/bin/varnishtest/tests/r02964.vtc b/bin/varnishtest/tests/r02964.vtc
new file mode 100644
index 000000000..89f3d4184
--- /dev/null
+++ b/bin/varnishtest/tests/r02964.vtc
@@ -0,0 +1,49 @@
+varnishtest "Cancel private busy obj from vcl_deliver"
+
+server s1 {
+ rxreq
+ expect req.url == "/hfm"
+ txresp -hdr "HFM: True" -bodylen 65530
+ rxreq
+ expect req.url == "/hfp"
+ txresp -hdr "HFP: True" -bodylen 65550
+} -start
+
+varnish v1 -arg "-s Transient=default" -vcl+backend {
+ sub vcl_recv {
+ if (req.restarts > 0) {
+ return (synth(200));
+ }
+ }
+ sub vcl_backend_response {
+ if (bereq.url == "/hfm") {
+ set beresp.uncacheable = true;
+ } else if (bereq.url == "/hfp") {
+ return (pass(1m));
+ }
+ }
+ sub vcl_deliver {
+ if (req.restarts == 0) {
+ return (restart);
+ }
+ }
+} -start
+
+logexpect l1 -v v1 -g raw {
+ expect * * Storage "Transient"
+ expect * * Storage "Transient"
+} -start
+
+client c1 {
+ txreq -url "/hfm"
+ rxresp
+ expect resp.status == 200
+ txreq -url "/hfp"
+ rxresp
+ expect resp.status == 200
+} -run
+
+logexpect l1 -wait
+
+varnish v1 -expect SM?.Transient.c_bytes > 131072
+varnish v1 -expect SM?.Transient.g_bytes < 2000
More information about the varnish-commit
mailing list