From 9f110a6dae02055df931380489251ae2c2b8a42a Mon Sep 17 00:00:00 2001 From: phk Date: Tue, 11 Nov 2008 20:22:05 +0000 Subject: [PATCH] Make sure that set obj.ttl = 0s means that the object is not hit again by actually using "-1" instead. This works around the rounding error which otherwise causes the object to be inside TTL for up to one second - epsilon. git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@3388 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- varnish-cache/bin/varnishd/cache_vrt.c | 13 ++++++-- .../bin/varnishtest/tests/v00023.vtc | 31 +++++++++++++++++++ 2 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 varnish-cache/bin/varnishtest/tests/v00023.vtc diff --git a/varnish-cache/bin/varnishd/cache_vrt.c b/varnish-cache/bin/varnishd/cache_vrt.c index 1fb38474..70099441 100644 --- a/varnish-cache/bin/varnishd/cache_vrt.c +++ b/varnish-cache/bin/varnishd/cache_vrt.c @@ -320,9 +320,16 @@ VRT_l_obj_ttl(const struct sess *sp, double a) CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC); /* XXX */ WSP(sp, SLT_TTL, "%u VCL %.0f %.0f", sp->obj->xid, a, sp->t_req); - if (a < 0) - a = 0; - sp->obj->ttl = sp->t_req + a; + /* + * If people set obj.ttl = 0s, they don't expect it to be cacheable + * any longer, but it will still be for up to 1s - epsilon because + * of the rounding to seconds. + * We special case and make sure that rounding does not surprise. + */ + if (a <= 0) + sp->obj->ttl = sp->t_req - 1; + else + sp->obj->ttl = sp->t_req + a; EXP_Rearm(sp->obj); } diff --git a/varnish-cache/bin/varnishtest/tests/v00023.vtc b/varnish-cache/bin/varnishtest/tests/v00023.vtc new file mode 100644 index 00000000..229e4445 --- /dev/null +++ b/varnish-cache/bin/varnishtest/tests/v00023.vtc @@ -0,0 +1,31 @@ +# $Id$ + +test "Test that obj.ttl = 0s prevents subsequent hits" + +server s1 { + rxreq + expect req.url == "/foo" + txresp -status 200 -body "1" + rxreq + expect req.url == "/foo" + txresp -status 200 -body "22" +} -start + +varnish v1 -vcl+backend { + sub vcl_hit { + set obj.ttl = 0s; + restart; + } +} -start + +client c1 { + txreq -url "/foo" + rxresp + expect resp.status == 200 + expect resp.bodylen == 1 + + txreq -url "/foo" + rxresp + expect resp.status == 200 + expect resp.bodylen == 2 +} -run -- 2.39.5