Last active
August 30, 2019 13:00
-
-
Save rezan/55d00e5d3839d4f28a51bf9d3dd87fdb to your computer and use it in GitHub Desktop.
Serve stale on error
This file contains hidden or 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
# | |
# Stale-If-Error (v1.0) | |
# | |
import std; | |
sub vcl_recv { | |
# First pass, clear SIE headers | |
if (!req.restarts) { | |
unset req.http.x-sie6-enabled; | |
unset req.http.x-sie6-abandon; | |
} | |
# SIE possible, attempt to serve fresh, skip vcl_recv | |
else if (req.restarts == 1 && req.http.x-sie6-enabled) { | |
set req.grace = 0s; | |
return (hash); | |
} | |
# SIE serve fresh failed, serve stale, skip vcl_recv | |
else if (req.http.x-sie6-abandon) { | |
set req.grace = 100y; | |
return (hash); | |
} | |
} | |
sub vcl_hit { | |
# Stale object found, attempt SIE | |
if (!req.restarts && obj.ttl < 0s && std.healthy(req.backend_hint)) { | |
set req.http.x-sie6-enabled = "true"; | |
return (restart); | |
} | |
} | |
sub vcl_backend_fetch { | |
# Dont do SIE bgfetch on stale delivery | |
if (bereq.is_bgfetch && bereq.http.x-sie6-abandon) { | |
return (abandon); | |
} | |
} | |
sub vcl_backend_response { | |
# SIE and we got an error, attempt to serve stale | |
if (bereq.http.x-sie6-enabled && beresp.status >= 500) { | |
return (abandon); | |
} | |
} | |
sub vcl_backend_error { | |
# SIE and we got an error, attempt to serve stale | |
if (bereq.http.x-sie6-enabled) { | |
return (abandon); | |
} | |
} | |
sub vcl_synth { | |
# Backend SIE error, restart so we can attempt a stale delivery | |
if (req.http.x-sie6-enabled && resp.status == 503) { | |
unset req.http.x-sie6-enabled; | |
set req.http.x-sie6-abandon = "true"; | |
return (restart); | |
} | |
} | |
# EOF |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment