From: phk Date: Wed, 21 Jan 2009 23:00:43 +0000 (+0000) Subject: Enforce a minimum ttl for "hit for pass" objects to prevent a value X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ae3d9827e35926baf01ab96cb3d28c430ad2a38b;p=varnish Enforce a minimum ttl for "hit for pass" objects to prevent a value of zero from serializing access to an object with very draconian backend cache-control headers. We could get far even with a one second TTL, but following our general "there is a reason people put Varnish there in the first place" logic we use the default_ttl parameter (default: 120 s) for this value. If another value is desired, this can be set in vcl_fetch, even if it looks somewhat counter-intuitive: sub vcl_fetch { if (obj.http.set-cookie) { set obj.ttl = 10s; pass; } } Fixes #425 git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@3537 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- diff --git a/varnish-cache/bin/varnishd/cache_center.c b/varnish-cache/bin/varnishd/cache_center.c index 437acb8e..fea97a13 100644 --- a/varnish-cache/bin/varnishd/cache_center.c +++ b/varnish-cache/bin/varnishd/cache_center.c @@ -413,6 +413,8 @@ cnt_fetch(struct sess *sp) return (0); case VCL_RET_PASS: sp->obj->pass = 1; + if (sp->obj->ttl - sp->t_req < params->default_ttl) + sp->obj->ttl = sp->t_req + params->default_ttl; break; case VCL_RET_DELIVER: break; diff --git a/varnish-cache/bin/varnishtest/tests/r00425.vtc b/varnish-cache/bin/varnishtest/tests/r00425.vtc new file mode 100644 index 00000000..0a31b63b --- /dev/null +++ b/varnish-cache/bin/varnishtest/tests/r00425.vtc @@ -0,0 +1,34 @@ +# $Id$ + +test "check late pass stalling" + +server s1 { + rxreq + txresp \ + -hdr "Set-Cookie: foo=bar" \ + -hdr "Expires: Thu, 19 Nov 1981 08:52:00 GMT" \ + -body "1111\n" + rxreq + txresp \ + -hdr "Set-Cookie: foo=bar" \ + -hdr "Expires: Thu, 19 Nov 1981 08:52:00 GMT" \ + -body "22222n" + rxreq + txresp \ + -hdr "Set-Cookie: foo=bar" \ + -hdr "Expires: Thu, 19 Nov 1981 08:52:00 GMT" \ + -body "33333n" +} -start + +varnish v1 -vcl+backend { } -start + +client c1 { + txreq + rxresp + txreq + rxresp + txreq + rxresp +} -run + +varnish v1 -expect cache_hitpass == 2