mirror of
				https://github.com/coredns/coredns.git
				synced 2025-11-03 18:53:13 -05:00 
			
		
		
		
	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:
		@@ -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")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user