On Tue, Mar 8, 2011 at 3:51 PM, Per Buer <[email protected]> wrote: > Hi Drew, list. > On Tue, Mar 8, 2011 at 9:34 PM, Drew Smathers <[email protected]> > wrote: >> >> Sorry to bump my own thread, but does anyone know of a way to set >> saintmode if a backend is down, vs. up and misbehaving (returning 500, >> etc)? >> >> Also, I added a backend probe and this indeed caused grace to kick in >> once the probe determined the backend as sick.I think the docs should >> be clarified if this isn't a bug (grace not working without probe): >> >> http://www.varnish-cache.org/docs/2.1/tutorial/handling_misbehaving_servers.html#tutorial-handling-misbehaving-servers > > Check out the trunk version of the docs. Committed some earlier today. >
Thanks, I see a lot is getting >> >> Finally it's somewhat disconcerting that in the interim between a >> cache expiry and before varnish determines a backend as down (sick) it >> will 503 - so this could affect many clients during that window. >> Ideally, I'd like to successfully service requests if there's an >> object in the cache - period - but I guess this isn't possible now >> with varnish? > > Actually it is. In the docs there is a somewhat dirty trick where set a > marker in vcl_error, restart and pick up on the error and switch backend to > one that is permanetly down. Grace kicks in and serves the stale content. > Sometime post 3.0 there will be a refactoring of the whole vcl_error > handling and we'll end up with something a bit more elegant. > Well a dirty trick is good enough if makes a paying customer for me. :P This is working perfectly now. I would suggest giving an example of "magic marker" mentioned in the document which mentions the trick (http://www.varnish-cache.org/docs/trunk/tutorial/handling_misbehaving_servers.html). Here's a stripped down version of my VCL incorporating the trick: backend webapp { .host = "127.0.0.1"; .port = "8000"; .probe = { .url = "/hello/"; .interval = 5s; .timeout = 1s; .window = 5; .threshold = 3; } } /* A backend that will always fail. */ backend failapp { .host = "127.0.0.1"; .port = "9000"; .probe = { .url = "/hello/"; .interval = 12h; .timeout = 1s; .window = 1; .threshold = 1; } } sub vcl_recv { if (req.http.X-Varnish-Error == "1") { set req.backend = failapp; unset req.http.X-Varnish-Error; } else { set req.backend = webapp; } if (! req.backend.healthy) { set req.grace = 24h; } else { set req.grace = 1m; } } sub vcl_error { if ( req.http.X-Varnish-Error != "1" ) { set req.http.X-Varnish-Error = "1"; return (restart); } } sub vcl_fetch { set beresp.grace = 24h; } _______________________________________________ varnish-misc mailing list [email protected] http://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
