[4.0] e258ca1 Remove negative Age assertion and truncate to zero instead.
Martin Blix Grydeland
martin at varnish-software.com
Tue Jun 24 11:31:38 CEST 2014
commit e258ca15604b210aad3d70960eccd21fce645778
Author: Martin Blix Grydeland <martin at varnish-software.com>
Date: Thu Apr 24 14:55:06 2014 +0200
Remove negative Age assertion and truncate to zero instead.
The Age reported on response objects is calculated from the last
request timestamp taken. For a cache hit that hasn't been on a
waitinglist, that will be the Start timestamp. This opens a race where
the requests' last timestamp could be before the objects t_origin.
Truncate the Age to zero rather than assert in that case.
Fixes: #1486
diff --git a/bin/varnishd/cache/cache_req_fsm.c b/bin/varnishd/cache/cache_req_fsm.c
index 2518422..88cebcd 100644
--- a/bin/varnishd/cache/cache_req_fsm.c
+++ b/bin/varnishd/cache/cache_req_fsm.c
@@ -117,10 +117,12 @@ cnt_deliver(struct worker *wrk, struct req *req)
/* We base Age calculation upon the last timestamp taken during
client request processing. This gives some inaccuracy, but
since Age is only full second resolution that shouldn't
- matter. */
- assert(req->t_prev > req->obj->exp.t_origin);
+ matter. (Last request timestamp could be a Start timestamp
+ taken before the object entered into cache leading to negative
+ age. Truncate to zero in that case).
+ */
http_PrintfHeader(req->resp, "Age: %.0f",
- req->t_prev - req->obj->exp.t_origin);
+ fmax(0., req->t_prev - req->obj->exp.t_origin));
http_SetHeader(req->resp, "Via: 1.1 varnish (v4)");
More information about the varnish-commit
mailing list