diff options
author | 2019-04-08 18:15:05 +0800 | |
---|---|---|
committer | 2019-04-08 11:15:05 +0100 | |
commit | be8b29cd4d428eb85fb8cd97b439b3af4d451beb (patch) | |
tree | c2bc5fe0ac3de782c03e94de5fe71ec945de68b8 /plugin/cache | |
parent | 58c703f5ef212e3c9efbe31fa4d9332eb268ff0d (diff) | |
download | coredns-be8b29cd4d428eb85fb8cd97b439b3af4d451beb.tar.gz coredns-be8b29cd4d428eb85fb8cd97b439b3af4d451beb.tar.zst coredns-be8b29cd4d428eb85fb8cd97b439b3af4d451beb.zip |
[plugin/cache] cache failures (#2720)
* cache failures
* use ServerError
Diffstat (limited to 'plugin/cache')
-rw-r--r-- | plugin/cache/cache.go | 5 | ||||
-rw-r--r-- | plugin/cache/cache_test.go | 28 |
2 files changed, 32 insertions, 1 deletions
diff --git a/plugin/cache/cache.go b/plugin/cache/cache.go index bc82bb604..69de55f17 100644 --- a/plugin/cache/cache.go +++ b/plugin/cache/cache.go @@ -163,6 +163,9 @@ func (w *ResponseWriter) WriteMsg(res *dns.Msg) error { var duration time.Duration if mt == response.NameError || mt == response.NoData { duration = computeTTL(msgTTL, w.minnttl, w.nttl) + } else if mt == response.ServerError { + // use default ttl which is 5s + duration = minTTL } else { duration = computeTTL(msgTTL, w.minpttl, w.pttl) } @@ -206,7 +209,7 @@ func (w *ResponseWriter) set(m *dns.Msg, key uint64, mt response.Type, duration i := newItem(m, w.now(), duration) w.pcache.Add(key, i) - case response.NameError, response.NoData: + case response.NameError, response.NoData, response.ServerError: i := newItem(m, w.now(), duration) w.ncache.Add(key, i) diff --git a/plugin/cache/cache_test.go b/plugin/cache/cache_test.go index 790dce7fb..7c65bca64 100644 --- a/plugin/cache/cache_test.go +++ b/plugin/cache/cache_test.go @@ -88,6 +88,34 @@ var cacheTestCases = []cacheTestCase{ shouldCache: true, }, { + RecursionAvailable: true, Authoritative: false, + Case: test.Case{ + Rcode: dns.RcodeServerFailure, + Qname: "example.org.", Qtype: dns.TypeA, + Ns: []dns.RR{}, + }, + in: test.Case{ + Rcode: dns.RcodeServerFailure, + Qname: "example.org.", Qtype: dns.TypeA, + Ns: []dns.RR{}, + }, + shouldCache: true, + }, + { + RecursionAvailable: true, Authoritative: false, + Case: test.Case{ + Rcode: dns.RcodeNotImplemented, + Qname: "example.org.", Qtype: dns.TypeA, + Ns: []dns.RR{}, + }, + in: test.Case{ + Rcode: dns.RcodeNotImplemented, + Qname: "example.org.", Qtype: dns.TypeA, + Ns: []dns.RR{}, + }, + shouldCache: true, + }, + { RecursionAvailable: true, Authoritative: true, Case: test.Case{ Qname: "miek.nl.", Qtype: dns.TypeMX, |