[PATCH] Don't do conditionals for passes, leave that to the backend

Rogier 'DocWilco' Mulhuijzen github at bsdchicks.com
Mon Oct 15 16:09:33 CEST 2012


---
 bin/varnishd/cache/cache_response.c |    5 +++-
 bin/varnishtest/tests/r01206.vtc    |   48 +++++++++++++++++++++++++++++++++++
 2 files changed, 52 insertions(+), 1 deletion(-)
 create mode 100644 bin/varnishtest/tests/r01206.vtc

diff --git a/bin/varnishd/cache/cache_response.c b/bin/varnishd/cache/cache_response.c
index cb152a5..9839102 100644
--- a/bin/varnishd/cache/cache_response.c
+++ b/bin/varnishd/cache/cache_response.c
@@ -108,6 +108,7 @@ RES_BuildHttp(struct req *req)
 	char time_str[30];
 
 	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+	CHECK_OBJ_NOTNULL(req->obj, OBJECT_MAGIC);
 
 	http_ClrHeader(req->resp);
 	http_FilterResp(req->obj->http, req->resp, 0);
@@ -122,7 +123,9 @@ RES_BuildHttp(struct req *req)
 	if (req->res_mode & RES_GUNZIP)
 		http_Unset(req->resp, H_Content_Encoding);
 
-	if (req->obj->response == 200
+	if (req->obj->objcore != NULL
+	    && !(req->obj->objcore->flags & OC_F_PASS)
+            && req->obj->response == 200
 	    && req->http->conds && RFC2616_Do_Cond(req)) {
 		req->wantbody = 0;
 		http_SetResp(req->resp, "HTTP/1.1", 304, "Not Modified");
diff --git a/bin/varnishtest/tests/r01206.vtc b/bin/varnishtest/tests/r01206.vtc
new file mode 100644
index 0000000..1f8444d
--- /dev/null
+++ b/bin/varnishtest/tests/r01206.vtc
@@ -0,0 +1,48 @@
+varnishtest "Pass shouldn't honor IMS/INM if the backend doesn't"
+
+server s1 {
+	rxreq
+	txresp -bodylen 6
+
+	rxreq
+	txresp -hdr "ETag: 123456789" \
+	    -bodylen 6
+
+	rxreq
+	txresp -hdr "Last-Modified: Thu, 26 Jun 2008 12:00:01 GMT" \
+	    -bodylen 6
+} -start
+
+varnish v1 -vcl+backend {
+	sub vcl_recv {
+		return(pass);
+	}
+} -start
+
+client c1 {
+	txreq
+	rxresp
+	expect resp.status == 200
+	expect resp.bodylen == 6
+
+	txreq -hdr "If-None-Match: 123456789"
+	rxresp
+	expect resp.status == 200
+	expect resp.bodylen == 6
+
+	txreq -hdr "If-Modified-Since: Thu, 26 Jun 2008 12:00:01 GMT"
+	rxresp
+	expect resp.status == 200
+	expect resp.bodylen == 6
+} -run
+
+server s1 -start
+
+varnish v1 -vcl+backend {
+	sub vcl_fetch {
+		set beresp.do_pass = true;
+	}
+}
+
+client c1 -run
+
-- 
1.7.9.5




More information about the varnish-dev mailing list