aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2018-04-01 14:23:40 +0100
committerGravatar GitHub <noreply@github.com> 2018-04-01 14:23:40 +0100
commit5f98e98107e90f518f2e8d0ccdd2df7ab2497b7a (patch)
treed1c3904dedb031250ef1092cedced40d7c57c58f
parent2338120f5b8987abdeff12018473c7cef14eebf1 (diff)
downloadcoredns-5f98e98107e90f518f2e8d0ccdd2df7ab2497b7a.tar.gz
coredns-5f98e98107e90f518f2e8d0ccdd2df7ab2497b7a.tar.zst
coredns-5f98e98107e90f518f2e8d0ccdd2df7ab2497b7a.zip
plugin/proxy: return client error (#1646)
Return the client error if there was one instead of the generic "no healthy upstream or error"
-rw-r--r--plugin/forward/forward.go8
-rw-r--r--plugin/forward/lookup.go7
2 files changed, 14 insertions, 1 deletions
diff --git a/plugin/forward/forward.go b/plugin/forward/forward.go
index 34864d4a3..96b7e4c24 100644
--- a/plugin/forward/forward.go
+++ b/plugin/forward/forward.go
@@ -65,6 +65,7 @@ func (f *Forward) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg
fails := 0
var span, child ot.Span
+ var upstreamErr error
span = ot.SpanFromContext(ctx)
for _, proxy := range f.list() {
@@ -93,6 +94,7 @@ func (f *Forward) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg
}
ret, err = truncated(ret, err)
+ upstreamErr = err
if err != nil {
// Kick off health check to see if *our* upstream is broken.
@@ -124,6 +126,10 @@ func (f *Forward) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg
return 0, nil
}
+ if upstreamErr != nil {
+ return dns.RcodeServerFailure, upstreamErr
+ }
+
return dns.RcodeServerFailure, errNoHealthy
}
@@ -155,7 +161,7 @@ func (f *Forward) list() []*Proxy { return f.p.List(f.proxies) }
var (
errInvalidDomain = errors.New("invalid domain for forward")
- errNoHealthy = errors.New("no healthy proxies or upstream error")
+ errNoHealthy = errors.New("no healthy proxies")
errNoForward = errors.New("no forwarder defined")
)
diff --git a/plugin/forward/lookup.go b/plugin/forward/lookup.go
index b5a6b43d9..77df9b8a7 100644
--- a/plugin/forward/lookup.go
+++ b/plugin/forward/lookup.go
@@ -19,6 +19,7 @@ func (f *Forward) Forward(state request.Request) (*dns.Msg, error) {
}
fails := 0
+ var upstreamErr error
for _, proxy := range f.list() {
if proxy.Down(f.maxfails) {
fails++
@@ -33,6 +34,7 @@ func (f *Forward) Forward(state request.Request) (*dns.Msg, error) {
ret, err := proxy.connect(context.Background(), state, f.forceTCP, true)
ret, err = truncated(ret, err)
+ upstreamErr = err
if err != nil {
if fails < len(f.proxies) {
@@ -48,6 +50,11 @@ func (f *Forward) Forward(state request.Request) (*dns.Msg, error) {
return ret, err
}
+
+ if upstreamErr != nil {
+ return nil, upstreamErr
+ }
+
return nil, errNoHealthy
}