[master] 20181dd Assign default storage for vcl_backend_error

Nils Goroll nils.goroll at uplex.de
Wed Nov 15 13:41:06 UTC 2017


commit 20181ddd8632743d18d4ffa0f44dab70031f4c27
Author: Nils Goroll <nils.goroll at uplex.de>
Date:   Wed Nov 15 14:30:56 2017 +0100

    Assign default storage for vcl_backend_error
    
    Creating "backend synthetic" content was impossible whenever a fetch
    had already started, unless storage was assigned (again) explicitly
    from VCL.
    
    Fixes #2494

diff --git a/bin/varnishd/cache/cache_fetch.c b/bin/varnishd/cache/cache_fetch.c
index 9c25e70..2ad7854 100644
--- a/bin/varnishd/cache/cache_fetch.c
+++ b/bin/varnishd/cache/cache_fetch.c
@@ -764,6 +764,9 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo)
 	if (bo->fetch_objcore->stobj->stevedore != NULL)
 		ObjFreeObj(bo->wrk, bo->fetch_objcore);
 
+	if (bo->storage == NULL)
+		bo->storage = STV_next();
+
 	// XXX: reset all beresp flags ?
 
 	HTTP_Setup(bo->beresp, bo->ws, bo->vsl, SLT_BerespMethod);
diff --git a/bin/varnishtest/tests/r02494.vtc b/bin/varnishtest/tests/r02494.vtc
new file mode 100644
index 0000000..c7e90a3
--- /dev/null
+++ b/bin/varnishtest/tests/r02494.vtc
@@ -0,0 +1,28 @@
+varnishtest "vcl_back_backend_error default storage"
+
+server s1 {
+	rxreq
+	txresp -nolen -hdr "Content-Length: 10240" -body 1024
+} -start
+
+varnish v1 -vcl+backend {
+	sub vcl_backend_response {
+		set beresp.do_stream = false;
+	}
+	sub vcl_backend_error {
+		set beresp.status = 200;
+		set beresp.ttl = 1h;
+		return (deliver);
+	}
+} -start
+
+client c1 {
+	txreq -url "/"
+	rxresp
+	expect resp.status == 200
+} -run
+client c2 {
+	txreq -url "/"
+	rxresp
+	expect resp.status == 200
+} -run


More information about the varnish-commit mailing list