plugin/proxy: return client error (#1646)
Return the client error if there was one instead of the generic "no healthy upstream or error"
This commit is contained in:
parent
2338120f5b
commit
5f98e98107
2 changed files with 14 additions and 1 deletions
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
||||||
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) }
|
||||||
|
|
||||||
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) {
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
||||||
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) {
|
||||||
|
|
||||||
return ret, err
|
return ret, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if upstreamErr != nil {
|
||||||
|
return nil, upstreamErr
|
||||||
|
}
|
||||||
|
|
||||||
return nil, errNoHealthy
|
return nil, errNoHealthy
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue