aboutsummaryrefslogtreecommitdiff
path: root/middleware/proxy/proxy.go
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2017-09-02 18:43:52 +0200
committerGravatar GitHub <noreply@github.com> 2017-09-02 18:43:52 +0200
commit9bcddc5c16f39a03408675b8c271138a757c94b6 (patch)
tree6a836a990924ede75cb23a72aaaba85535e49275 /middleware/proxy/proxy.go
parent3a96d1ab778417d2dc5384de8d3547674d77e6cc (diff)
downloadcoredns-9bcddc5c16f39a03408675b8c271138a757c94b6.tar.gz
coredns-9bcddc5c16f39a03408675b8c271138a757c94b6.tar.zst
coredns-9bcddc5c16f39a03408675b8c271138a757c94b6.zip
mw/proxy: simplify google code (#1019)
* mw/proxy: simplify google code Minimize bootstrap code a bit, and block on the first resolve of the google https endpont. Add more logging and include actual error in the returned errors. Also re-resolve every 120 seconds, instead of 300 (might eventually make this an option). * fix test
Diffstat (limited to 'middleware/proxy/proxy.go')
-rw-r--r--middleware/proxy/proxy.go12
1 files changed, 7 insertions, 5 deletions
diff --git a/middleware/proxy/proxy.go b/middleware/proxy/proxy.go
index cef58f658..2a3c8002d 100644
--- a/middleware/proxy/proxy.go
+++ b/middleware/proxy/proxy.go
@@ -3,6 +3,7 @@ package proxy
import (
"errors"
+ "fmt"
"sync/atomic"
"time"
@@ -70,6 +71,8 @@ func (p Proxy) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (
for {
start := time.Now()
+ reply := new(dns.Msg)
+ var backendErr error
// Since Select() should give us "up" hosts, keep retrying
// hosts until timeout (or until we get a nil host).
@@ -79,7 +82,7 @@ func (p Proxy) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (
RequestDuration.WithLabelValues(state.Proto(), upstream.Exchanger().Protocol(), upstream.From()).Observe(float64(time.Since(start) / time.Millisecond))
- return dns.RcodeServerFailure, errUnreachable
+ return dns.RcodeServerFailure, fmt.Errorf("%s: %s", errUnreachable, "no upstream host")
}
if span != nil {
@@ -90,7 +93,7 @@ func (p Proxy) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (
atomic.AddInt64(&host.Conns, 1)
queryEpoch := msg.Epoch()
- reply, backendErr := upstream.Exchanger().Exchange(ctx, host.Name, state)
+ reply, backendErr = upstream.Exchanger().Exchange(ctx, host.Name, state)
respEpoch := msg.Epoch()
atomic.AddInt64(&host.Conns, -1)
@@ -99,8 +102,7 @@ func (p Proxy) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (
child.Finish()
}
- taperr := toDnstap(ctx, host.Name, upstream.Exchanger(), state, reply,
- queryEpoch, respEpoch)
+ taperr := toDnstap(ctx, host.Name, upstream.Exchanger(), state, reply, queryEpoch, respEpoch)
if backendErr == nil {
w.WriteMsg(reply)
@@ -123,7 +125,7 @@ func (p Proxy) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (
RequestDuration.WithLabelValues(state.Proto(), upstream.Exchanger().Protocol(), upstream.From()).Observe(float64(time.Since(start) / time.Millisecond))
- return dns.RcodeServerFailure, errUnreachable
+ return dns.RcodeServerFailure, fmt.Errorf("%s: %s", errUnreachable, backendErr)
}
}