@@ -42,14 +42,11 @@ type ipLookupResolver interface {
4242type dnsSD struct {
4343 resolver ipLookupResolver
4444 logger log.Logger
45- // https://github.com/thanos-io/thanos/issues/3186
46- // This flag is used to prevent components from crashing if hosts are not found.
47- returnErrOnNotFound bool
4845}
4946
5047// NewResolver creates a resolver with given underlying resolver.
51- func NewResolver (resolver ipLookupResolver , logger log.Logger , returnErrOnNotFound bool ) Resolver {
52- return & dnsSD {resolver : resolver , logger : logger , returnErrOnNotFound : returnErrOnNotFound }
48+ func NewResolver (resolver ipLookupResolver , logger log.Logger ) Resolver {
49+ return & dnsSD {resolver : resolver , logger : logger }
5350}
5451
5552func (s * dnsSD ) Resolve (ctx context.Context , name string , qtype QType ) ([]string , error ) {
@@ -78,13 +75,15 @@ func (s *dnsSD) Resolve(ctx context.Context, name string, qtype QType) ([]string
7875 }
7976 ips , err := s .resolver .LookupIPAddr (ctx , host )
8077 if err != nil {
81- // https://github.com/thanos-io/thanos/issues/3186
82- // Default DNS resolver can make thanos components crash if DNS resolutions results in EAI_NONAME.
83- // the flag returnErrOnNotFound can be used to prevent such crash .
84- if dnsErr , ok := err .(* net.DNSError ); ! ok || ! dnsErr .IsNotFound || s . returnErrOnNotFound {
78+ // We exclude error from std Golang resolver for the case of the domain (e.g `NXDOMAIN`) not being found by DNS
79+ // server. Since `miekg` does not consider this as an error, when the host cannot be found, empty slice will be
80+ // returned .
81+ if dnsErr , ok := err .(* net.DNSError ); ! ok || ! dnsErr .IsNotFound {
8582 return nil , errors .Wrapf (err , "lookup IP addresses %q" , host )
8683 }
87- level .Error (s .logger ).Log ("msg" , "failed to lookup IP addresses" , "host" , host , "err" , err )
84+ if ips == nil {
85+ level .Error (s .logger ).Log ("msg" , "failed to lookup IP addresses" , "host" , host , "err" , err )
86+ }
8887 }
8988 for _ , ip := range ips {
9089 res = append (res , appendScheme (scheme , net .JoinHostPort (ip .String (), port )))
@@ -119,10 +118,8 @@ func (s *dnsSD) Resolve(ctx context.Context, name string, qtype QType) ([]string
119118 return nil , errors .Errorf ("invalid lookup scheme %q" , qtype )
120119 }
121120
122- // https://github.com/thanos-io/thanos/issues/3186
123- // This happens when miekg is used as resolver. When the host cannot be found, nothing is returned.
124121 if res == nil && err == nil {
125- level .Warn (s .logger ).Log ("msg" , "IP address lookup yielded no results nor errors " , "host" , host )
122+ level .Warn (s .logger ).Log ("msg" , "IP address lookup yielded no results. No host found or no addresses found " , "host" , host )
126123 }
127124
128125 return res , nil
0 commit comments