mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-30 17:53:21 -04:00 
			
		
		
		
	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:
		
							
								
								
									
										3
									
								
								plugin/cache/cache.go
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								plugin/cache/cache.go
									
									
									
									
										vendored
									
									
								
							| @@ -171,7 +171,7 @@ func (w *ResponseWriter) set(m *dns.Msg, key int, mt response.Type, duration tim | |||||||
| 	case response.OtherError: | 	case response.OtherError: | ||||||
| 		// don't cache these | 		// don't cache these | ||||||
| 	default: | 	default: | ||||||
| 		log.Printf("[WARNING] Caching called with unknown typification: %d", mt) | 		log.Printf("[WARNING] Caching called with unknown classification: %d", mt) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -188,6 +188,7 @@ func (w *ResponseWriter) Write(buf []byte) (int, error) { | |||||||
| const ( | const ( | ||||||
| 	maxTTL      = 1 * time.Hour | 	maxTTL      = 1 * time.Hour | ||||||
| 	maxNTTL     = 30 * time.Minute | 	maxNTTL     = 30 * time.Minute | ||||||
|  | 	failSafeTTL = 5 * time.Second | ||||||
|  |  | ||||||
| 	defaultCap = 10000 // default capacity of the cache. | 	defaultCap = 10000 // default capacity of the cache. | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								plugin/cache/cache_test.go
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								plugin/cache/cache_test.go
									
									
									
									
										vendored
									
									
								
							| @@ -22,7 +22,6 @@ type cacheTestCase struct { | |||||||
| 	Authoritative      bool | 	Authoritative      bool | ||||||
| 	RecursionAvailable bool | 	RecursionAvailable bool | ||||||
| 	Truncated          bool | 	Truncated          bool | ||||||
| 	Response           bool |  | ||||||
| 	shouldCache        bool | 	shouldCache        bool | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -112,15 +111,6 @@ var cacheTestCases = []cacheTestCase{ | |||||||
| 		}, | 		}, | ||||||
| 		shouldCache: false, | 		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, | 		RecursionAvailable: true, Authoritative: true, | ||||||
| 		Case: test.Case{ | 		Case: test.Case{ | ||||||
| @@ -150,7 +140,6 @@ func cacheMsg(m *dns.Msg, tc cacheTestCase) *dns.Msg { | |||||||
| 	m.AuthenticatedData = tc.AuthenticatedData | 	m.AuthenticatedData = tc.AuthenticatedData | ||||||
| 	m.Authoritative = tc.Authoritative | 	m.Authoritative = tc.Authoritative | ||||||
| 	m.Rcode = tc.Rcode | 	m.Rcode = tc.Rcode | ||||||
| 	m.Response = tc.Response |  | ||||||
| 	m.Truncated = tc.Truncated | 	m.Truncated = tc.Truncated | ||||||
| 	m.Answer = tc.in.Answer | 	m.Answer = tc.in.Answer | ||||||
| 	m.Ns = tc.in.Ns | 	m.Ns = tc.in.Ns | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								plugin/cache/item.go
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								plugin/cache/item.go
									
									
									
									
										vendored
									
									
								
							| @@ -95,6 +95,11 @@ func minMsgTTL(m *dns.Msg, mt response.Type) time.Duration { | |||||||
| 		return 0 | 		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 | 	minTTL := maxTTL | ||||||
| 	for _, r := range append(m.Answer, m.Ns...) { | 	for _, r := range append(m.Answer, m.Ns...) { | ||||||
| 		switch mt { | 		switch mt { | ||||||
|   | |||||||
| @@ -55,7 +55,6 @@ func Typify(m *dns.Msg, t time.Time) (Type, *dns.OPT) { | |||||||
| 	if m == nil { | 	if m == nil { | ||||||
| 		return OtherError, nil | 		return OtherError, nil | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	opt := m.IsEdns0() | 	opt := m.IsEdns0() | ||||||
| 	do := false | 	do := false | ||||||
| 	if opt != nil { | 	if opt != nil { | ||||||
| @@ -77,11 +76,6 @@ func Typify(m *dns.Msg, t time.Time) (Type, *dns.OPT) { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if m.Response && len(m.Answer) == 0 && len(m.Ns) == 0 { |  | ||||||
| 		// Response with nothing in it, maybe stuff in the additional section, this is not useful. |  | ||||||
| 		return OtherError, opt |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// If our message contains any expired sigs and we care about that, we should return expired | 	// If our message contains any expired sigs and we care about that, we should return expired | ||||||
| 	if do { | 	if do { | ||||||
| 		if expired := typifyExpired(m, t); expired { | 		if expired := typifyExpired(m, t); expired { | ||||||
|   | |||||||
| @@ -26,23 +26,6 @@ func TestTypifyDelegation(t *testing.T) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| func TestTypifyEmptyMessage(t *testing.T) { |  | ||||||
| 	m := new(dns.Msg) |  | ||||||
|  |  | ||||||
| 	// Normal question, with response = false |  | ||||||
| 	m.SetQuestion("example.org.", dns.TypeAAAA) |  | ||||||
| 	mt, _ := Typify(m, time.Now().UTC()) |  | ||||||
| 	if mt != NoError { |  | ||||||
| 		t.Errorf("message is wrongly typified, expected NoError, got %s", mt) |  | ||||||
| 	} |  | ||||||
| 	// In case of a Reponse = true, this weird. |  | ||||||
| 	m.Response = true |  | ||||||
| 	mt, _ = Typify(m, time.Now().UTC()) |  | ||||||
| 	if mt != OtherError { |  | ||||||
| 		t.Errorf("message is wrongly typified, expected OtherError, got %s", mt) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func TestTypifyRRSIG(t *testing.T) { | func TestTypifyRRSIG(t *testing.T) { | ||||||
| 	now, _ := time.Parse(time.UnixDate, "Fri Apr 21 10:51:21 BST 2017") | 	now, _ := time.Parse(time.UnixDate, "Fri Apr 21 10:51:21 BST 2017") | ||||||
| 	utc := now.UTC() | 	utc := now.UTC() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user