mirror of
https://github.com/weaveworks/scope.git
synced 2026-02-14 18:09:59 +00:00
Merge pull request #451 from weaveworks/reverse-resolver-fix
Small improvements to reverse resolver
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package endpoint
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -14,6 +15,8 @@ const (
|
||||
rAddrCacheExpiration = 30 * time.Minute
|
||||
)
|
||||
|
||||
var errNotFound = fmt.Errorf("Not found")
|
||||
|
||||
type revResFunc func(addr string) (names []string, err error)
|
||||
|
||||
// ReverseResolver is a caching, reverse resolver.
|
||||
@@ -42,8 +45,11 @@ func NewReverseResolver() *ReverseResolver {
|
||||
// possible names that can be obtained for that IP.
|
||||
func (r *ReverseResolver) Get(address string) (string, error) {
|
||||
val, err := r.cache.Get(address)
|
||||
if err == nil {
|
||||
return val.(string), nil
|
||||
if hostname, ok := val.(string); err == nil && ok {
|
||||
return hostname, nil
|
||||
}
|
||||
if _, ok := val.(struct{}); err == nil && ok {
|
||||
return "", errNotFound
|
||||
}
|
||||
if err == gcache.NotFoundKeyError {
|
||||
// We trigger a asynchronous reverse resolution when not cached
|
||||
@@ -52,20 +58,22 @@ func (r *ReverseResolver) Get(address string) (string, error) {
|
||||
default:
|
||||
}
|
||||
}
|
||||
return "", err
|
||||
return "", errNotFound
|
||||
}
|
||||
|
||||
func (r *ReverseResolver) loop() {
|
||||
for request := range r.addresses {
|
||||
<-r.Throttle // rate limit our DNS resolutions
|
||||
// and check if the answer is already in the cache
|
||||
// check if the answer is already in the cache
|
||||
if _, err := r.cache.Get(request); err == nil {
|
||||
continue
|
||||
}
|
||||
<-r.Throttle // rate limit our DNS resolutions
|
||||
names, err := r.Resolver(request)
|
||||
if err == nil && len(names) > 0 {
|
||||
name := strings.TrimRight(names[0], ".")
|
||||
r.cache.Set(request, name)
|
||||
} else {
|
||||
r.cache.Set(request, struct{}{})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user