Skip to content

Instantly share code, notes, and snippets.

@dancriel
Forked from perbu/grave-v4.vcl
Last active August 4, 2023 06:56
Show Gist options
  • Save dancriel/e07bdd601e2f3fadcafa2ac6ecaff2f3 to your computer and use it in GitHub Desktop.
Save dancriel/e07bdd601e2f3fadcafa2ac6ecaff2f3 to your computer and use it in GitHub Desktop.
Automatically enable grace for all objects in Varnish 5
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(miss);
}
}
}
sub vcl_backend_response {
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;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment