Just re-surfacing an old thread. Could you do this another way by creating a director of both the real backend and "failapp". Then, when you restart you should be out of backend choices, no ?
On Tue, Mar 8, 2011 at 7:23 PM, Drew Smathers <[email protected]>wrote: > 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 >
_______________________________________________ varnish-misc mailing list [email protected] http://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
