Created
March 1, 2016 18:16
-
-
Save perbu/93803707dbcdbc345da0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
sub vcl_hit { | |
if (obj.ttl >= 0s) { | |
# normal hit | |
return (deliver); | |
} | |
# We have no fresh fish. Lets look at the stale ones. | |
if (std.healthy(req.backend_hint)) { | |
# Backend is healthy. Limit age to 10s. | |
if (obj.ttl + 10s > 0s) { | |
set req.http.grace = "normal(limited)"; | |
return (deliver); | |
} else { | |
# No candidate for grace. Fetch a fresh object. | |
return(fetch); | |
} | |
} else { | |
# backend is sick - use full grace | |
if (obj.ttl + obj.grace > 0s) { | |
set req.http.grace = "full"; | |
return (deliver); | |
} else { | |
# no graced object. | |
return (fetch); | |
} | |
} | |
} | |
sub vcl_backend_response { | |
set beresp.ttl = 10s; | |
set beresp.grace = 1h; | |
} | |
sub vcl_recv { | |
# intial state | |
set req.http.grace = "none"; | |
} | |
sub vcl_deliver { | |
# copy to resp so we can tell from the outside. | |
set resp.http.grace = req.http.grace; | |
} | |
Is this working on Varnish 6? I never hit the req.http.grace = "full";
line. After 10 seconds of the backend going offline, I get a 503 Backend fetch failed
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@ureimers My understanding is that the default behavior will run after your custom behavior, unless you return somewhere in your vcl_recv function, which will prevent the default behavior (not recommended). Hopefully someone can correct me if this is wrong.