internal/clientinfo: use ptr cache when listing clients

This commit is contained in:
Cuong Manh Le
2023-07-27 20:39:40 +00:00
committed by Cuong Manh Le
parent 39a2cab051
commit 6e27f877ff
3 changed files with 16 additions and 1 deletions

View File

@@ -20,7 +20,7 @@ func newControlClient(addr string) *controlClient {
return d.DialContext(ctx, "unix", addr)
},
},
Timeout: time.Second * 5,
Timeout: time.Second * 30,
}}
}

View File

@@ -229,6 +229,14 @@ func (t *Table) lookupHostnameAll(ip, mac string) []*hostnameEntry {
var res []*hostnameEntry
for _, r := range t.hostnameResolvers {
src := r.String()
// For ptrDiscover, lookup hostname may block due to server unavailable,
// so only lookup from cache to prevent timeout reached.
if ptrResolver, ok := r.(*ptrDiscover); ok {
if name := ptrResolver.lookupHostnameFromCache(ip); name != "" {
res = append(res, &hostnameEntry{name: name, src: src})
}
continue
}
if name := r.LookupHostnameByIP(ip); name != "" {
res = append(res, &hostnameEntry{name: name, src: src})
continue

View File

@@ -40,6 +40,13 @@ func (p *ptrDiscover) String() string {
return "ptr"
}
func (p *ptrDiscover) lookupHostnameFromCache(ip string) string {
if val, ok := p.hostname.Load(ip); ok {
return val.(string)
}
return ""
}
func (p *ptrDiscover) lookupHostname(ip string) string {
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()