[4.1] 49e6b53 Clear bo->was_304 on return(retry)

Dag Haavi Finstad daghf at varnish-software.com
Tue Jun 5 12:12:08 UTC 2018


commit 49e6b53c55d48c8fb8eacf5dbe52d1aee7c2e821
Author: Dag Haavi Finstad <daghf at varnish-software.com>
Date:   Tue Jun 5 14:04:57 2018 +0200

    Clear bo->was_304 on return(retry)
    
    Fixes: #2700

diff --git a/bin/varnishd/cache/cache_fetch.c b/bin/varnishd/cache/cache_fetch.c
index eb3d58e..146426e 100644
--- a/bin/varnishd/cache/cache_fetch.c
+++ b/bin/varnishd/cache/cache_fetch.c
@@ -236,6 +236,7 @@ vbf_stp_retry(struct worker *wrk, struct busyobj *bo)
 	bo->storage_hint = NULL;
 	bo->do_esi = 0;
 	bo->do_stream = 1;
+	bo->was_304 = 0;
 
 	/* reset fetch processors */
 	VFP_Setup(vfc);
diff --git a/bin/varnishtest/tests/r02700.vtc b/bin/varnishtest/tests/r02700.vtc
new file mode 100644
index 0000000..ca4598d
--- /dev/null
+++ b/bin/varnishtest/tests/r02700.vtc
@@ -0,0 +1,47 @@
+varnishtest "#2700: IMS and return (retry)"
+
+server s1 {
+	rxreq
+	txresp -hdr {Etag: "foo"} -body "1"
+
+	rxreq
+	expect req.http.If-None-Match == {"foo"}
+	expect req.http.retries == "0"
+	txresp -status 304
+
+	rxreq
+	expect req.http.retries == "1"
+	expect req.http.If-None-Match == {"foo"}
+	txresp -status 304
+} -start
+
+
+varnish v1 -vcl+backend {
+	sub vcl_backend_fetch {
+		set bereq.http.retries = bereq.retries;
+	}
+	sub vcl_backend_response {
+		set beresp.ttl = 1ms;
+		set beresp.grace = 0s;
+		set beresp.keep = 1h;
+
+		if (beresp.was_304 && bereq.retries == 0) {
+			return (retry);
+		}
+
+		set beresp.http.was-304 = beresp.was_304;
+        }
+} -start
+
+client c1 {
+	txreq
+	rxresp
+	expect resp.status == 200
+	expect resp.http.was-304 == "false"
+
+	delay 0.1
+
+	txreq
+	rxresp
+	expect resp.http.was-304 == "true"
+} -run


More information about the varnish-commit mailing list