]] David Birdsong | I couldn't find this anywhere, so apologies if it's already been hashed out. | | Would it be possible for the backend health checks to be altered to | consider a 204 response from a backend as healthy?
The attached patch does that. It's against trunk. phk, please review and ack/nack. (It needs documentation and possibly a test case.) -- Tollef Fog Heen Redpill Linpro -- Changing the game! t: +47 21 54 41 73
>From c443cb77c965a65dd670a876f371e5c5a058bcd2 Mon Sep 17 00:00:00 2001 From: Tollef Fog Heen <[email protected]> Date: Fri, 23 Oct 2009 11:49:14 +0200 Subject: [PATCH] Add support for setting the expected response for backend probes. Syntax is backend b0 { .host = "127.0.0.1"; .probe = { .url = "/test.jpg"; .timeout = 224 ms; .expected_response = 204; } } --- varnish-cache/bin/varnishd/cache_backend_poll.c | 5 ++++- varnish-cache/include/vrt.h | 1 + varnish-cache/lib/libvcl/vcc_backend.c | 9 ++++++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/varnish-cache/bin/varnishd/cache_backend_poll.c b/varnish-cache/bin/varnishd/cache_backend_poll.c index 2ab08ca..fe7f8b3 100644 --- a/varnish-cache/bin/varnishd/cache_backend_poll.c +++ b/varnish-cache/bin/varnishd/cache_backend_poll.c @@ -237,7 +237,7 @@ vbp_poke(struct vbp_target *vt) i = sscanf(vt->resp_buf, "HTTP/%*f %u %s", &resp, buf); - if (i == 2 && resp == 200) + if (i == 2 && resp == vt->probe.expected_response) vt->happy |= 1; } @@ -340,6 +340,9 @@ vbp_wrk_poll_backend(void *priv) if (vt->probe.threshold == ~0U) vt->probe.initial = vt->probe.threshold - 1; + if (vt->probe.expected_response == 0) + vt->probe.expected_response = 200; + if (vt->probe.initial > vt->probe.threshold) vt->probe.initial = vt->probe.threshold; diff --git a/varnish-cache/include/vrt.h b/varnish-cache/include/vrt.h index 5f6250e..2a7ef3a 100644 --- a/varnish-cache/include/vrt.h +++ b/varnish-cache/include/vrt.h @@ -55,6 +55,7 @@ struct vrt_backend_probe { unsigned window; unsigned threshold; unsigned initial; + unsigned expected_response; }; /* diff --git a/varnish-cache/lib/libvcl/vcc_backend.c b/varnish-cache/lib/libvcl/vcc_backend.c index c0b206c..2575107 100644 --- a/varnish-cache/lib/libvcl/vcc_backend.c +++ b/varnish-cache/lib/libvcl/vcc_backend.c @@ -343,7 +343,7 @@ vcc_ParseProbe(struct tokenlist *tl) struct token *t_field; struct token *t_did = NULL, *t_window = NULL, *t_threshold = NULL; struct token *t_initial = NULL; - unsigned window, threshold, initial; + unsigned window, threshold, initial, expected_response; fs = vcc_FldSpec(tl, "?url", @@ -353,6 +353,7 @@ vcc_ParseProbe(struct tokenlist *tl) "?window", "?threshold", "?initial", + "?expected_response", NULL); ExpectErr(tl, '{'); @@ -361,6 +362,7 @@ vcc_ParseProbe(struct tokenlist *tl) window = 0; threshold = 0; initial = 0; + expected_response = 0; Fb(tl, 0, "\t.probe = {\n"); while (tl->t->tok != '}') { @@ -411,6 +413,10 @@ vcc_ParseProbe(struct tokenlist *tl) threshold = vcc_UintVal(tl); vcc_NextToken(tl); ERRCHK(tl); + } else if (vcc_IdIs(t_field, "expected_response")) { + expected_response = vcc_UintVal(tl); + vcc_NextToken(tl); + ERRCHK(tl); } else { vcc_ErrToken(tl, t_field); vcc_ErrWhere(tl, t_field); @@ -457,6 +463,7 @@ vcc_ParseProbe(struct tokenlist *tl) Fb(tl, 0, "\t\t.initial = %u,\n", initial); else Fb(tl, 0, "\t\t.initial = ~0U,\n", initial); + Fb(tl, 0, "\t\t.expected_response = %u,\n", expected_response); Fb(tl, 0, "\t},\n"); ExpectErr(tl, '}'); vcc_NextToken(tl); -- 1.6.3.3
_______________________________________________ varnish-misc mailing list [email protected] http://projects.linpro.no/mailman/listinfo/varnish-misc
