Skip to content

Commit

Permalink
perf: reducing the lock strength of the soa cache entry (#2285)
Browse files Browse the repository at this point in the history
Co-authored-by: icpd <35096485+icpd@users.noreply.github.com>
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
  • Loading branch information
3 people authored Oct 3, 2024
1 parent d81507c commit a83482c
Showing 1 changed file with 10 additions and 13 deletions.
23 changes: 10 additions & 13 deletions challenge/dns01/nameserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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()

This comment has been minimized.

Copy link
@drakkan

drakkan Oct 6, 2024

Contributor

Clear() was added in Go 1.23, please update go.mod or use API compatible with Go 1.22. Thank you

}

func AddDNSTimeout(timeout time.Duration) ChallengeOption {
Expand Down Expand Up @@ -153,20 +148,22 @@ 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)
if err != nil {
return nil, err
}

fqdnSoaCache[fqdn] = ent
fqdnSoaCache.Store(fqdn, ent)

return ent, nil
}

Expand Down

0 comments on commit a83482c

Please sign in to comment.