Commit fd557aa1 authored by Geoff Simmons's avatar Geoff Simmons

Add reader.next_check().

parent d735accc
...@@ -117,6 +117,15 @@ recently checked. ...@@ -117,6 +117,15 @@ recently checked.
XXX ... XXX ...
.. _xreader.next_check():
DURATION xreader.next_check()
-----------------------------
Returns the time remaining until the next check will be performed.
XXX ...
.. _file.version(): .. _file.version():
STRING version() STRING version()
......
...@@ -16,6 +16,7 @@ varnish v1 -vcl { ...@@ -16,6 +16,7 @@ varnish v1 -vcl {
set req.http.Size = rdr.size(); set req.http.Size = rdr.size();
set req.http.Mtime = rdr.mtime(); set req.http.Mtime = rdr.mtime();
set req.http.Delta-Mtime = now - rdr.mtime(); set req.http.Delta-Mtime = now - rdr.mtime();
set req.http.Next-Check = rdr.next_check();
return (synth(200)); return (synth(200));
} }
...@@ -23,6 +24,7 @@ varnish v1 -vcl { ...@@ -23,6 +24,7 @@ varnish v1 -vcl {
set resp.http.Size = req.http.Size; set resp.http.Size = req.http.Size;
set resp.http.Mtime = req.http.Mtime; set resp.http.Mtime = req.http.Mtime;
set resp.http.Delta-Mtime = req.http.Delta-Mtime; set resp.http.Delta-Mtime = req.http.Delta-Mtime;
set resp.http.Next-Check = req.http.Next-Check;
return (deliver); return (deliver);
} }
} -start } -start
...@@ -36,6 +38,8 @@ client c1 { ...@@ -36,6 +38,8 @@ client c1 {
expect resp.http.Mtime ~ "GMT$" expect resp.http.Mtime ~ "GMT$"
expect resp.http.Delta-Mtime > 0 expect resp.http.Delta-Mtime > 0
expect resp.http.Delta-Mtime < 1 expect resp.http.Delta-Mtime < 1
expect resp.http.Next-Check >= 0
expect resp.http.Next-Check <= 0.1
} -run } -run
shell {echo -n "foo" > ${tmpdir}/sz} shell {echo -n "foo" > ${tmpdir}/sz}
...@@ -49,6 +53,8 @@ client c1 { ...@@ -49,6 +53,8 @@ client c1 {
expect resp.http.Mtime ~ "GMT$" expect resp.http.Mtime ~ "GMT$"
expect resp.http.Delta-Mtime > 0 expect resp.http.Delta-Mtime > 0
expect resp.http.Delta-Mtime < 1 expect resp.http.Delta-Mtime < 1
expect resp.http.Next-Check >= 0
expect resp.http.Next-Check <= 0.1
} -run } -run
shell {rm -f ${tmpdir}/sz} shell {rm -f ${tmpdir}/sz}
...@@ -100,3 +106,36 @@ logexpect l1 -v v1 -d 0 -g vxid -q "VCL_Error" { ...@@ -100,3 +106,36 @@ logexpect l1 -v v1 -d 0 -g vxid -q "VCL_Error" {
client c1 -run client c1 -run
logexpect l1 -wait logexpect l1 -wait
shell {touch ${tmpdir}/nxtchk}
varnish v1 -vcl {
import ${vmod_file};
backend b { .host = "${bad_ip}"; }
sub vcl_init {
new rdr = file.reader("${tmpdir}/nxtchk", ttl=0.1s);
}
sub vcl_recv {
set req.http.Next-Check = rdr.next_check();
return (synth(200));
}
sub vcl_synth {
set resp.http.Next-Check = req.http.Next-Check;
return (deliver);
}
}
shell {rm -f ${tmpdir}/nxtchk}
delay .1
# next_check() is not affected by errors.
client c1 {
txreq
rxresp
expect resp.status == 200
expect resp.http.Next-Check >= 0
expect resp.http.Next-Check <= 0.1
} -run
...@@ -560,6 +560,23 @@ vmod_reader_mtime(VRT_CTX, struct VPFX(file_reader) *rdr) ...@@ -560,6 +560,23 @@ vmod_reader_mtime(VRT_CTX, struct VPFX(file_reader) *rdr)
return (secs + nsecs * 1e-9); return (secs + nsecs * 1e-9);
} }
VCL_DURATION
vmod_reader_next_check(VRT_CTX, struct VPFX(file_reader) *rdr)
{
struct itimerspec t;
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(rdr, FILE_READER_MAGIC);
errno = 0;
if (timer_gettime(rdr->timerid, &t) != 0) {
VRT_fail(ctx, "%s.next_check(): timer read failed: %s",
rdr->vcl_name, vstrerror(errno));
return (0.);
}
return (t.it_value.tv_sec + 1e-9 * t.it_value.tv_nsec);
}
VCL_STRING VCL_STRING
vmod_version(VRT_CTX) vmod_version(VRT_CTX)
{ {
......
...@@ -85,6 +85,12 @@ recently checked. ...@@ -85,6 +85,12 @@ recently checked.
XXX ... XXX ...
$Method DURATION .next_check()
Returns the time remaining until the next check will be performed.
XXX ...
$Function STRING version() $Function STRING version()
Return the version string for this VMOD. Return the version string for this VMOD.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment