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:
parent
d371738149
commit
3ebb46320a
1 changed files with 17 additions and 5 deletions
|
@ -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")
|
||||
)
|
||||
|
|
Loading…
Add table
Reference in a new issue