diff options
author | 2022-05-02 19:16:33 +0200 | |
---|---|---|
committer | 2022-05-02 13:16:33 -0400 | |
commit | 66f2ac7568ccb0178cc9ce6dbd7320bcd3428d64 (patch) | |
tree | 0eb7a1a25907a398f1d3d647c4895749b4908803 /plugin/cache/setup.go | |
parent | c3572fdb30446b6e625113ee0329cc80810afd6a (diff) | |
download | coredns-66f2ac7568ccb0178cc9ce6dbd7320bcd3428d64.tar.gz coredns-66f2ac7568ccb0178cc9ce6dbd7320bcd3428d64.tar.zst coredns-66f2ac7568ccb0178cc9ce6dbd7320bcd3428d64.zip |
plugin/cache: Add refresh mode setting to serve_stale (#5131)
This PR adds an optional REFRESH_MODE parameter on the serve_stale configuration directive of the
cache plugin, which verifies that the upstream is still unavailable before returning stale entries.
Signed-off-by: Antoine Tollenaere <atollena@gmail.com>
Diffstat (limited to 'plugin/cache/setup.go')
-rw-r--r-- | plugin/cache/setup.go | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/plugin/cache/setup.go b/plugin/cache/setup.go index afbf361c5..e5258dc06 100644 --- a/plugin/cache/setup.go +++ b/plugin/cache/setup.go @@ -166,11 +166,11 @@ func cacheParse(c *caddy.Controller) (*Cache, error) { case "serve_stale": args := c.RemainingArgs() - if len(args) > 1 { + if len(args) > 2 { return nil, c.ArgErr() } ca.staleUpTo = 1 * time.Hour - if len(args) == 1 { + if len(args) > 0 { d, err := time.ParseDuration(args[0]) if err != nil { return nil, err @@ -180,6 +180,14 @@ func cacheParse(c *caddy.Controller) (*Cache, error) { } ca.staleUpTo = d } + ca.verifyStale = false + if len(args) > 1 { + mode := strings.ToLower(args[1]) + if mode != "immediate" && mode != "verify" { + return nil, fmt.Errorf("invalid value for serve_stale refresh mode: %s", mode) + } + ca.verifyStale = mode == "verify" + } default: return nil, c.ArgErr() } |