Fix multiple bugs in intel

This commit is contained in:
Daniel
2018-10-23 15:22:57 +02:00
parent 6ab5305dd9
commit 7618562458
7 changed files with 66 additions and 34 deletions

View File

@@ -108,6 +108,7 @@ func Resolve(fqdn string, qtype dns.Type, securityLevel uint8) *RRCache {
}
if rrCache.TTL <= time.Now().Unix() {
log.Tracef("intel: serving cache, requesting new. TTL=%d, now=%d", rrCache.TTL, time.Now().Unix())
rrCache.requestingNew = true
go resolveAndCache(fqdn, qtype, securityLevel)
}
@@ -149,7 +150,7 @@ func resolveAndCache(fqdn string, qtype dns.Type, securityLevel uint8) (rrCache
}
defer func() {
dupReqLock.Lock()
delete(dupReqMap, fqdn)
delete(dupReqMap, dupKey)
dupReqLock.Unlock()
mutex.Unlock()
}()
@@ -331,25 +332,39 @@ func query(resolver *Resolver, fqdn string, qtype dns.Type) (*RRCache, error) {
var reply *dns.Msg
var err error
for i := 0; i < 5; i++ {
for i := 0; i < 3; i++ {
// log query time
// qStart := time.Now()
reply, _, err = resolver.clientManager.getDNSClient().Exchange(q, resolver.ServerAddress)
// log.Tracef("intel: query to %s took %s", resolver.Server, time.Now().Sub(qStart))
// error handling
if err != nil {
log.Tracef("intel: query to %s encountered error: %s", resolver.Server, err)
// TODO: handle special cases
// 1. connect: network is unreachable
// 2. timeout
// temporary error
if nerr, ok := err.(net.Error); ok && nerr.Timeout() {
log.Tracef("intel: retrying to resolve %s%s with %s, error was: %s", fqdn, qtype.String(), resolver.Server, err)
continue
}
// permanent error
break
}
// no error
break
}
if err != nil {
log.Warningf("resolving %s%s failed: %s", fqdn, qtype.String(), err)
return nil, fmt.Errorf("resolving %s%s failed: %s", fqdn, qtype.String(), err)
err = fmt.Errorf("resolving %s%s failed: %s", fqdn, qtype.String(), err)
log.Warning(err.Error())
return nil, err
}
new := &RRCache{