diff options
author | 2017-06-08 16:06:14 +0100 | |
---|---|---|
committer | 2017-06-08 16:06:14 +0100 | |
commit | 1c45e262f5cf20aaa950f8e8d86248cbce6ae120 (patch) | |
tree | 5158206d338586a8780e5d4c4949f99e54da0f2b /middleware/proxy/upstream.go | |
parent | 36396e94ab738439aa9cfc0fe9ed5db2fca883d3 (diff) | |
download | coredns-1c45e262f5cf20aaa950f8e8d86248cbce6ae120.tar.gz coredns-1c45e262f5cf20aaa950f8e8d86248cbce6ae120.tar.zst coredns-1c45e262f5cf20aaa950f8e8d86248cbce6ae120.zip |
middleware/proxy: remove singleinflight from dns (#717)
Singleinflight interferes with the health checking of upstream. If an
upstream would fail, singleinflight would mirror that error to to other
proxy *iff* multple identical queries would be inflight. This would lead
to marking *all* upstreams as bad, essentially collapsing multiple
upstreams into a SPOF. Clearly not what we want.
Singleinflight does have some nice properties, but I've opted to rip it
out entirely. Caching should almost (but not quite) as good.
Added a test case in test that uses 3 CoreDNS instances to reflect the
setup from #715.
Found another bug as well, where (when the policy would be nil), we
would always Spray even though we've found a healthy host.
Diffstat (limited to 'middleware/proxy/upstream.go')
-rw-r--r-- | middleware/proxy/upstream.go | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/middleware/proxy/upstream.go b/middleware/proxy/upstream.go index 8bc3e5306..76dd70348 100644 --- a/middleware/proxy/upstream.go +++ b/middleware/proxy/upstream.go @@ -328,6 +328,9 @@ func (u *staticUpstream) Select() *UpstreamHost { if u.Policy == nil { h := (&Random{}).Select(pool) + if h != nil { + return h + } if h == nil && u.Spray == nil { return nil } |