aboutsummaryrefslogtreecommitdiff
path: root/plugin/cache/setup.go
diff options
context:
space:
mode:
authorGravatar Antoine Tollenaere <atollena@gmail.com> 2022-05-02 19:16:33 +0200
committerGravatar GitHub <noreply@github.com> 2022-05-02 13:16:33 -0400
commit66f2ac7568ccb0178cc9ce6dbd7320bcd3428d64 (patch)
tree0eb7a1a25907a398f1d3d647c4895749b4908803 /plugin/cache/setup.go
parentc3572fdb30446b6e625113ee0329cc80810afd6a (diff)
downloadcoredns-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.go12
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()
}