aboutsummaryrefslogtreecommitdiff
path: root/middleware/cache/cache.go
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2016-11-07 16:27:50 +0000
committerGravatar GitHub <noreply@github.com> 2016-11-07 16:27:50 +0000
commite89c4b5c2863cdc889ac756185a15d1e959ddcdc (patch)
treec11d805316fdc54c1de4c8ee009180da9035a601 /middleware/cache/cache.go
parent4318dfbf02ca4248dab29fc4fb730e2515a05754 (diff)
downloadcoredns-e89c4b5c2863cdc889ac756185a15d1e959ddcdc.tar.gz
coredns-e89c4b5c2863cdc889ac756185a15d1e959ddcdc.tar.zst
coredns-e89c4b5c2863cdc889ac756185a15d1e959ddcdc.zip
middleware/cache: only cache query and responses (#397)
Extent typify to check the transfers, dynamic updates and notifies. Extend *cache* to not put these in the cache. Fixes #393
Diffstat (limited to 'middleware/cache/cache.go')
-rw-r--r--middleware/cache/cache.go10
1 files changed, 7 insertions, 3 deletions
diff --git a/middleware/cache/cache.go b/middleware/cache/cache.go
index d17253c38..a1db2039e 100644
--- a/middleware/cache/cache.go
+++ b/middleware/cache/cache.go
@@ -29,13 +29,16 @@ type Cache struct {
pttl time.Duration
}
-// Return key under which we store the item.
+// Return key under which we store the item. The empty string is returned
+// when we don't want to cache the message. Currently we do not cache Truncated, errors
+// zone transfers or dynamic update messages.
func key(m *dns.Msg, t response.Type, do bool) string {
+ // We don't store truncated responses.
if m.Truncated {
- // TODO(miek): wise to store truncated responses?
return ""
}
- if t == response.OtherError {
+ // Nor errors or Meta or Update
+ if t == response.OtherError || t == response.Meta || t == response.Update {
return ""
}
@@ -65,6 +68,7 @@ func (c *ResponseWriter) WriteMsg(res *dns.Msg) error {
do = opt.Do()
}
+ // key returns empty string for anything we don't want to cache.
key := key(res, mt, do)
duration := c.pttl