perf: reducing the lock strength of the soa cache entry (#2285)

Co-authored-by: icpd <35096485+icpd@users.noreply.github.com>
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
This commit is contained in:
djx30103 2024-10-03 11:20:57 +08:00 committed by GitHub
parent d81507c126
commit a83482cac4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -16,10 +16,7 @@ import (
const defaultResolvConf = "/etc/resolv.conf"
var (
fqdnSoaCache = map[string]*soaCacheEntry{}
muFqdnSoaCache sync.Mutex
)
var fqdnSoaCache = &sync.Map{}
var defaultNameservers = []string{
"google-public-dns-a.google.com:53",
@ -51,9 +48,7 @@ func (cache *soaCacheEntry) isExpired() bool {
// ClearFqdnCache clears the cache of fqdn to zone mappings. Primarily used in testing.
func ClearFqdnCache() {
muFqdnSoaCache.Lock()
fqdnSoaCache = map[string]*soaCacheEntry{}
muFqdnSoaCache.Unlock()
fqdnSoaCache.Clear()
}
func AddDNSTimeout(timeout time.Duration) ChallengeOption {
@ -153,12 +148,13 @@ func FindZoneByFqdnCustom(fqdn string, nameservers []string) (string, error) {
}
func lookupSoaByFqdn(fqdn string, nameservers []string) (*soaCacheEntry, error) {
muFqdnSoaCache.Lock()
defer muFqdnSoaCache.Unlock()
// Do we have it cached and is it still fresh?
if ent := fqdnSoaCache[fqdn]; ent != nil && !ent.isExpired() {
return ent, nil
entAny, ok := fqdnSoaCache.Load(fqdn)
if ok && entAny != nil {
ent, ok1 := entAny.(*soaCacheEntry)
if ok1 && !ent.isExpired() {
return ent, nil
}
}
ent, err := fetchSoaByFqdn(fqdn, nameservers)
@ -166,7 +162,8 @@ func lookupSoaByFqdn(fqdn string, nameservers []string) (*soaCacheEntry, error)
return nil, err
}
fqdnSoaCache[fqdn] = ent
fqdnSoaCache.Store(fqdn, ent)
return ent, nil
}