Commit 5f98e981 authored by Miek Gieben's avatar Miek Gieben Committed by GitHub

plugin/proxy: return client error (#1646)

Return the client error if there was one instead of the generic
"no healthy upstream or error"
parent 2338120f
...@@ -65,6 +65,7 @@ func (f *Forward) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg ...@@ -65,6 +65,7 @@ func (f *Forward) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg
fails := 0 fails := 0
var span, child ot.Span var span, child ot.Span
var upstreamErr error
span = ot.SpanFromContext(ctx) span = ot.SpanFromContext(ctx)
for _, proxy := range f.list() { for _, proxy := range f.list() {
...@@ -93,6 +94,7 @@ func (f *Forward) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg ...@@ -93,6 +94,7 @@ func (f *Forward) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg
} }
ret, err = truncated(ret, err) ret, err = truncated(ret, err)
upstreamErr = err
if err != nil { if err != nil {
// Kick off health check to see if *our* upstream is broken. // 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 ...@@ -124,6 +126,10 @@ func (f *Forward) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg
return 0, nil return 0, nil
} }
if upstreamErr != nil {
return dns.RcodeServerFailure, upstreamErr
}
return dns.RcodeServerFailure, errNoHealthy return dns.RcodeServerFailure, errNoHealthy
} }
...@@ -155,7 +161,7 @@ func (f *Forward) list() []*Proxy { return f.p.List(f.proxies) } ...@@ -155,7 +161,7 @@ func (f *Forward) list() []*Proxy { return f.p.List(f.proxies) }
var ( var (
errInvalidDomain = errors.New("invalid domain for forward") 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") errNoForward = errors.New("no forwarder defined")
) )
......
...@@ -19,6 +19,7 @@ func (f *Forward) Forward(state request.Request) (*dns.Msg, error) { ...@@ -19,6 +19,7 @@ func (f *Forward) Forward(state request.Request) (*dns.Msg, error) {
} }
fails := 0 fails := 0
var upstreamErr error
for _, proxy := range f.list() { for _, proxy := range f.list() {
if proxy.Down(f.maxfails) { if proxy.Down(f.maxfails) {
fails++ fails++
...@@ -33,6 +34,7 @@ func (f *Forward) Forward(state request.Request) (*dns.Msg, error) { ...@@ -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 := proxy.connect(context.Background(), state, f.forceTCP, true)
ret, err = truncated(ret, err) ret, err = truncated(ret, err)
upstreamErr = err
if err != nil { if err != nil {
if fails < len(f.proxies) { if fails < len(f.proxies) {
...@@ -48,6 +50,11 @@ func (f *Forward) Forward(state request.Request) (*dns.Msg, error) { ...@@ -48,6 +50,11 @@ func (f *Forward) Forward(state request.Request) (*dns.Msg, error) {
return ret, err return ret, err
} }
if upstreamErr != nil {
return nil, upstreamErr
}
return nil, errNoHealthy return nil, errNoHealthy
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment