Type.extra (#1538)

* Revert "pkg/typify: empty messages are OtherError (#1531)"

This reverts commit fc1d73ffa9.

* plugin/cache: add failsafeTTL

If we can not see what TTL we should put on a message to be cached, use
5 seconds as minimal TTL. We used to apply the maximum TTL to these
  messages.
This commit is contained in:
Miek Gieben 2018-02-17 19:45:52 +01:00 committed by GitHub
parent 9719a47c1b
commit 8cce06cba1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 9 additions and 37 deletions

View file

@ -171,7 +171,7 @@ func (w *ResponseWriter) set(m *dns.Msg, key int, mt response.Type, duration tim
case response.OtherError:
// don't cache these
default:
log.Printf("[WARNING] Caching called with unknown typification: %d", mt)
log.Printf("[WARNING] Caching called with unknown classification: %d", mt)
}
}
@ -186,8 +186,9 @@ func (w *ResponseWriter) Write(buf []byte) (int, error) {
}
const (
maxTTL = 1 * time.Hour
maxNTTL = 30 * time.Minute
maxTTL = 1 * time.Hour
maxNTTL = 30 * time.Minute
failSafeTTL = 5 * time.Second
defaultCap = 10000 // default capacity of the cache.

View file

@ -22,7 +22,6 @@ type cacheTestCase struct {
Authoritative bool
RecursionAvailable bool
Truncated bool
Response bool
shouldCache bool
}
@ -112,15 +111,6 @@ var cacheTestCases = []cacheTestCase{
},
shouldCache: false,
},
{
// Response with only something in the additional, this should not be cached.
Response: true,
in: test.Case{
Qname: "example.org.", Qtype: dns.TypeMX,
Extra: []dns.RR{test.MX("example.org. 1800 IN MX 1 mx.example.org.")},
},
shouldCache: false,
},
{
RecursionAvailable: true, Authoritative: true,
Case: test.Case{
@ -150,7 +140,6 @@ func cacheMsg(m *dns.Msg, tc cacheTestCase) *dns.Msg {
m.AuthenticatedData = tc.AuthenticatedData
m.Authoritative = tc.Authoritative
m.Rcode = tc.Rcode
m.Response = tc.Response
m.Truncated = tc.Truncated
m.Answer = tc.in.Answer
m.Ns = tc.in.Ns

View file

@ -95,6 +95,11 @@ func minMsgTTL(m *dns.Msg, mt response.Type) time.Duration {
return 0
}
// No data to examine, return a short ttl as a fail safe.
if len(m.Answer)+len(m.Ns) == 0 {
return failSafeTTL
}
minTTL := maxTTL
for _, r := range append(m.Answer, m.Ns...) {
switch mt {