From cab948887df756a9c6ae37821558742673cc03f9 Mon Sep 17 00:00:00 2001 From: Alfonso Acosta Date: Thu, 23 Jun 2016 10:44:43 +0000 Subject: [PATCH 1/2] Print DNS errors --- probe/appclient/resolver.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/probe/appclient/resolver.go b/probe/appclient/resolver.go index cd5031785..3eb13bb84 100644 --- a/probe/appclient/resolver.go +++ b/probe/appclient/resolver.go @@ -158,7 +158,7 @@ func (r staticResolver) resolveOne(t target) []string { var err error addrs, err = r.lookup(t.host) if err != nil { - log.Debugf("Error resolving %s: %v", t.host, err) + log.Errorf("Error resolving %s: %v", t.host, err) return []string{} } } From d33358ec630e9069191afa6494f3907fe454b0e1 Mon Sep 17 00:00:00 2001 From: Alfonso Acosta Date: Mon, 27 Jun 2016 16:59:42 +0000 Subject: [PATCH 2/2] Review feedback --- probe/appclient/resolver.go | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/probe/appclient/resolver.go b/probe/appclient/resolver.go index 3eb13bb84..f65907254 100644 --- a/probe/appclient/resolver.go +++ b/probe/appclient/resolver.go @@ -49,10 +49,11 @@ type Resolver interface { } type staticResolver struct { - setters []setter - targets []target - quit chan struct{} - lookup LookupIP + setters []setter + targets []target + failedResolutions map[string]struct{} + quit chan struct{} + lookup LookupIP } // LookupIP type is used for looking up IPs. @@ -67,10 +68,11 @@ func (t target) String() string { return net.JoinHostPort(t.host, t.port) } // resolve to multiple IPs. It uses the supplied DNS server name. func NewResolver(targets []string, lookup LookupIP, setters ...setter) Resolver { r := staticResolver{ - targets: prepare(targets), - setters: setters, - quit: make(chan struct{}), - lookup: lookup, + targets: prepare(targets), + setters: setters, + failedResolutions: map[string]struct{}{}, + quit: make(chan struct{}), + lookup: lookup, } go r.loop() return r @@ -158,9 +160,15 @@ func (r staticResolver) resolveOne(t target) []string { var err error addrs, err = r.lookup(t.host) if err != nil { - log.Errorf("Error resolving %s: %v", t.host, err) + if _, ok := r.failedResolutions[t.host]; !ok { + log.Warnf("Cannot resolve %s: %v", t.host, err) + // Only log the error once + r.failedResolutions[t.host] = struct{}{} + } return []string{} } + // Allow logging errors in future resolutions + delete(r.failedResolutions, t.host) } endpoints := make([]string, 0, len(addrs)) for _, addr := range addrs {