]> err.no Git - varnish/commitdiff
Enforce a minimum ttl for "hit for pass" objects to prevent a value
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Wed, 21 Jan 2009 23:00:43 +0000 (23:00 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Wed, 21 Jan 2009 23:00:43 +0000 (23:00 +0000)
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

varnish-cache/bin/varnishd/cache_center.c
varnish-cache/bin/varnishtest/tests/r00425.vtc [new file with mode: 0644]

index 437acb8e7a205fd8130ce36658d11667b2986b27..fea97a13282cdde37aeb115e9123d72f4c4334f2 100644 (file)
@@ -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 (file)
index 0000000..0a31b63
--- /dev/null
@@ -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