mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-30 09:43:17 -04:00 
			
		
		
		
	Improve gRPC Plugin when backend is not available (#3966)
* Improve gRPC Plugin when backend is not available Signed-off-by: Ricardo Pchevuzinske Katz <ricardo.katz@serpro.gov.br> * Improve gRPC Plugin when backend is not available Signed-off-by: Ricardo Pchevuzinske Katz <ricardo.katz@serpro.gov.br>
This commit is contained in:
		| @@ -3,6 +3,7 @@ package grpc | ||||
| import ( | ||||
| 	"context" | ||||
| 	"crypto/tls" | ||||
| 	"errors" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/coredns/coredns/plugin" | ||||
| @@ -36,10 +37,10 @@ func (g *GRPC) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) ( | ||||
| 	} | ||||
|  | ||||
| 	var ( | ||||
| 		span, child ot.Span | ||||
| 		ret         *dns.Msg | ||||
| 		err         error | ||||
| 		i           int | ||||
| 		span, child      ot.Span | ||||
| 		ret              *dns.Msg | ||||
| 		upstreamErr, err error | ||||
| 		i                int | ||||
| 	) | ||||
| 	span = ot.SpanFromContext(ctx) | ||||
| 	list := g.list() | ||||
| @@ -73,6 +74,8 @@ func (g *GRPC) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) ( | ||||
| 			child.Finish() | ||||
| 		} | ||||
|  | ||||
| 		upstreamErr = err | ||||
|  | ||||
| 		// Check if the reply is correct; if not return FormErr. | ||||
| 		if !state.Match(ret) { | ||||
| 			debug.Hexdumpf(ret, "Wrong reply for id: %d, %s %d", ret.Id, state.QName(), state.QType()) | ||||
| @@ -87,7 +90,11 @@ func (g *GRPC) 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 | ||||
| } | ||||
|  | ||||
| // NewGRPC returns a new GRPC. | ||||
| @@ -129,3 +136,8 @@ func (g *GRPC) isAllowedDomain(name string) bool { | ||||
| func (g *GRPC) list() []*Proxy { return g.p.List(g.proxies) } | ||||
|  | ||||
| const defaultTimeout = 5 * time.Second | ||||
|  | ||||
| var ( | ||||
| 	// ErrNoHealthy means no healthy proxies left. | ||||
| 	ErrNoHealthy = errors.New("no healthy gRPC proxies") | ||||
| ) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user