From c0694b002d4bacea9addea2101396a5bd4772f55 Mon Sep 17 00:00:00 2001 From: Jeremy Rand Date: Mon, 8 Feb 2021 18:16:15 +0000 Subject: [PATCH] Fix name field of cached TLSA records --- backend/backend.go | 44 +++++++++++++++++++------------------------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/backend/backend.go b/backend/backend.go index c92a499..21a4275 100644 --- a/backend/backend.go +++ b/backend/backend.go @@ -296,22 +296,7 @@ type domain struct { ncv *ncdomain.Value } -func (b *Backend) getNamecoinEntry(name, streamIsolationID string) (*domain, error) { - d := b.getNamecoinEntryCache(name, streamIsolationID) - if d != nil { - return d, nil - } - - d, err := b.getNamecoinEntryLL(name, streamIsolationID) - if err != nil { - return nil, err - } - - b.addNamecoinEntryToCache(name, d, streamIsolationID) - return d, nil -} - -func (b *Backend) getNamecoinEntryCache(name, streamIsolationID string) *domain { +func (b *Backend) resolveNameCache(name, streamIsolationID string) *string { b.cacheMutex.Lock() defer b.cacheMutex.Unlock() @@ -321,14 +306,14 @@ func (b *Backend) getNamecoinEntryCache(name, streamIsolationID string) *domain } if dd, ok := cache.Get(name); ok { - d := dd.(*domain) - return d + v := dd.(*string) + return v } return nil } -func (b *Backend) addNamecoinEntryToCache(name string, d *domain, streamIsolationID string) { +func (b *Backend) addNamecoinJSONToCache(name string, jsonValue *string, streamIsolationID string) { b.cacheMutex.Lock() defer b.cacheMutex.Unlock() @@ -340,16 +325,25 @@ func (b *Backend) addNamecoinEntryToCache(name string, d *domain, streamIsolatio cache = b.caches[streamIsolationID] } - cache.Add(name, d) + cache.Add(name, jsonValue) } -func (b *Backend) getNamecoinEntryLL(name, streamIsolationID string) (*domain, error) { - v, err := b.resolveName(name, streamIsolationID) - if err != nil { - return nil, err +func (b *Backend) getNamecoinEntry(name, streamIsolationID string) (*domain, error) { + // Try the cache first + v := b.resolveNameCache(name, streamIsolationID) + + // If the cache misses, resolve it via namecoind + if v == nil { + vv, err := b.resolveName(name, streamIsolationID) + if err != nil { + return nil, err + } + + v = &vv + b.addNamecoinJSONToCache(name, v, streamIsolationID) } - d, err := b.jsonToDomain(name, v, streamIsolationID) + d, err := b.jsonToDomain(name, *v, streamIsolationID) if err != nil { return nil, err }