|
|
|
@ -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
|
|
|
|
|
}
|
|
|
|
|