From d33358ec630e9069191afa6494f3907fe454b0e1 Mon Sep 17 00:00:00 2001 From: Alfonso Acosta Date: Mon, 27 Jun 2016 16:59:42 +0000 Subject: [PATCH] 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 {