Mailing List Archive

r3388 - in trunk/varnish-cache/bin: varnishd varnishtest/tests
Author: phk
Date: 2008-11-11 21:22:05 +0100 (Tue, 11 Nov 2008)
New Revision: 3388

Added:
trunk/varnish-cache/bin/varnishtest/tests/v00023.vtc
Modified:
trunk/varnish-cache/bin/varnishd/cache_vrt.c
Log:
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.



Modified: trunk/varnish-cache/bin/varnishd/cache_vrt.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_vrt.c 2008-11-11 19:07:30 UTC (rev 3387)
+++ trunk/varnish-cache/bin/varnishd/cache_vrt.c 2008-11-11 20:22:05 UTC (rev 3388)
@@ -320,9 +320,16 @@
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);
}


Added: trunk/varnish-cache/bin/varnishtest/tests/v00023.vtc
===================================================================
--- trunk/varnish-cache/bin/varnishtest/tests/v00023.vtc (rev 0)
+++ trunk/varnish-cache/bin/varnishtest/tests/v00023.vtc 2008-11-11 20:22:05 UTC (rev 3388)
@@ -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