[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