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 ?<br><br><div class="gmail_quote">

On Tue, Mar 8, 2011 at 7:23 PM, Drew Smathers <span dir="ltr"><<a href="mailto:drew.smathers@gmail.com" target="_blank">drew.smathers@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div>On Tue, Mar 8, 2011 at 3:51 PM, Per Buer <<a href="mailto:perbu@varnish-software.com" target="_blank">perbu@varnish-software.com</a>> wrote:<br>
> Hi Drew, list.<br>
> On Tue, Mar 8, 2011 at 9:34 PM, Drew Smathers <<a href="mailto:drew.smathers@gmail.com" target="_blank">drew.smathers@gmail.com</a>><br>
> wrote:<br>
>><br>
>> Sorry to bump my own thread, but does anyone know of a way to set<br>
>> saintmode if a backend is down, vs. up and misbehaving (returning 500,<br>
>> etc)?<br>
>><br>
>> Also, I added a backend probe and this indeed caused grace to kick in<br>
>> once the probe determined the backend as sick.I think the docs should<br>
>> be clarified if this isn't a bug (grace not working without probe):<br>
>><br>
>> <a href="http://www.varnish-cache.org/docs/2.1/tutorial/handling_misbehaving_servers.html#tutorial-handling-misbehaving-servers" target="_blank">http://www.varnish-cache.org/docs/2.1/tutorial/handling_misbehaving_servers.html#tutorial-handling-misbehaving-servers</a><br>


><br>
> Check out the trunk version of the docs. Committed some earlier today.<br>
><br>
<br>
</div>Thanks, I see a lot is getting<br>
<div><br>
>><br>
>> Finally it's somewhat disconcerting that in the interim between a<br>
>> cache expiry and before varnish determines a backend as down (sick) it<br>
>> will 503 - so this could affect many clients during that window.<br>
>> Ideally, I'd like to successfully service requests if there's an<br>
>> object in the cache - period - but I guess this isn't possible now<br>
>> with varnish?<br>
><br>
> Actually it is. In the docs there is a somewhat dirty trick where set a<br>
> marker in vcl_error, restart and pick up on the error and switch backend to<br>
> one that is permanetly down. Grace kicks in and serves the stale content.<br>
> Sometime post 3.0 there will be a refactoring of the whole vcl_error<br>
> handling and we'll end up with something a bit more elegant.<br>
><br>
<br>
</div>Well a dirty trick is good enough if makes a paying customer for me.  :P<br>
<br>
This is working perfectly now. I would suggest giving an example of<br>
"magic marker" mentioned in the document which mentions the trick<br>
(<a href="http://www.varnish-cache.org/docs/trunk/tutorial/handling_misbehaving_servers.html" target="_blank">http://www.varnish-cache.org/docs/trunk/tutorial/handling_misbehaving_servers.html</a>).<br>
 Here's a stripped down version of my VCL incorporating the trick:<br>
<div><br>
backend webapp {<br>
    .host = "127.0.0.1";<br>
    .port = "8000";<br>
</div>    .probe = {<br>
        .url = "/hello/";<br>
        .interval = 5s;<br>
        .timeout = 1s;<br>
        .window = 5;<br>
        .threshold = 3;<br>
    }<br>
}<br>
<br>
/* A backend that will always fail. */<br>
backend failapp {<br>
<div>    .host = "127.0.0.1";<br>
</div>    .port = "9000";<br>
    .probe = {<br>
        .url = "/hello/";<br>
        .interval = 12h;<br>
        .timeout = 1s;<br>
        .window = 1;<br>
        .threshold = 1;<br>
    }<br>
}<br>
<br>
sub vcl_recv {<br>
<br>
   if (req.http.X-Varnish-Error == "1") {<br>
       set req.backend = failapp;<br>
       unset req.http.X-Varnish-Error;<br>
   } else {<br>
       set req.backend = webapp;<br>
   }<br>
<br>
   if (! req.backend.healthy) {<br>
       set req.grace = 24h;<br>
   } else {<br>
       set req.grace = 1m;<br>
   }<br>
}<br>
<br>
sub vcl_error {<br>
    if ( req.http.X-Varnish-Error != "1" ) {<br>
        set req.http.X-Varnish-Error = "1";<br>
        return (restart);<br>
<div>    }<br>
<br>
}<br>
<br>
sub vcl_fetch {<br>
   set beresp.grace = 24h;<br>
}<br>
<br>
</div><div><div></div><div>_______________________________________________<br>
varnish-misc mailing list<br>
<a href="mailto:varnish-misc@varnish-cache.org" target="_blank">varnish-misc@varnish-cache.org</a><br>
<a href="http://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc" target="_blank">http://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc</a></div></div></blockquote></div><br>