diff options
author | Martin Polden <mpolden@mpolden.no> | 2020-01-19 18:44:45 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2020-01-19 18:44:45 +0100 |
commit | ac5ac8dfb47ddedd829501af4ce9d190b7e959ad (patch) | |
tree | 6db082f04bc9d9938e9672d88e9a1ac6d2aeddbb | |
parent | 4bf8430aecfe0adb062e6a1042a15374e5c507a4 (diff) |
Remove unnecessary defaultBackend type
-rw-r--r-- | cache/cache.go | 32 | ||||
-rw-r--r-- | cache/cache_test.go | 4 |
2 files changed, 20 insertions, 16 deletions
diff --git a/cache/cache.go b/cache/cache.go index 760cbd8..f26384d 100644 --- a/cache/cache.go +++ b/cache/cache.go @@ -22,13 +22,6 @@ type Backend interface { Reset() } -type defaultBackend struct{} - -func (b *defaultBackend) Set(uint32, Value) {} -func (b *defaultBackend) Evict(uint32) {} -func (b *defaultBackend) Read() []Value { return nil } -func (b *defaultBackend) Reset() {} - // Cache is a cache of DNS messages. type Cache struct { client *dnsutil.Client @@ -124,7 +117,7 @@ func Unpack(value string) (Value, error) { // - All cache write operations will be forward to the backend. // - The backed will be used to pre-populate the cache. func New(capacity int, client *dnsutil.Client) *Cache { - return NewWithBackend(capacity, client, &defaultBackend{}) + return NewWithBackend(capacity, client, nil) } // NewWithBackend creates a new cache that forwards entries to backend. @@ -138,14 +131,15 @@ func newCache(capacity int, client *dnsutil.Client, backend Backend, now func() } c := &Cache{ client: client, - backend: &defaultBackend{}, now: now, capacity: capacity, values: make(map[uint32]Value, capacity), keys: make([]uint32, 0, capacity), queue: make(chan func(), 1024), } - c.load(backend) + if backend != nil { + c.load(backend) + } go c.readQueue() return c } @@ -265,11 +259,15 @@ func (c *Cache) setValue(value Value) bool { evict := c.keys[0] delete(c.values, evict) c.keys = c.keys[1:] - c.backend.Evict(evict) + if c.hasBackend() { + c.backend.Evict(evict) + } } c.values[value.Key] = value c.appendKey(value.Key) - c.backend.Set(value.Key, value) + if c.hasBackend() { + c.backend.Set(value.Key, value) + } return true } @@ -279,11 +277,15 @@ func (c *Cache) Reset() { defer c.mu.Unlock() c.values = make(map[uint32]Value, cap(c.keys)) c.keys = make([]uint32, 0, cap(c.keys)) - c.backend.Reset() + if c.hasBackend() { + c.backend.Reset() + } } func (c *Cache) prefetch() bool { return c.client != nil } +func (c *Cache) hasBackend() bool { return c.backend != nil } + func (c *Cache) refresh(key uint32, old *dns.Msg) { q := old.Question[0] msg := dns.Msg{} @@ -308,7 +310,9 @@ func (c *Cache) evictWithLock(key uint32) { func (c *Cache) evict(key uint32) { delete(c.values, key) c.removeKey(key) - c.backend.Evict(key) + if c.hasBackend() { + c.backend.Evict(key) + } } func (c *Cache) appendKey(key uint32) { diff --git a/cache/cache_test.go b/cache/cache_test.go index c0135e0..1a25721 100644 --- a/cache/cache_test.go +++ b/cache/cache_test.go @@ -255,7 +255,7 @@ func TestCachePrefetch(t *testing.T) { exchanger := newTestExchanger() client := &dnsutil.Client{Exchanger: exchanger, Addresses: []string{"resolver"}} now := time.Now() - c := newCache(10, client, &defaultBackend{}, func() time.Time { return now }) + c := newCache(10, client, nil, func() time.Time { return now }) var tests = []struct { initialAnswer string refreshAnswer string @@ -311,7 +311,7 @@ func TestCacheEvictAndUpdate(t *testing.T) { exchanger := newTestExchanger() client := &dnsutil.Client{Exchanger: exchanger, Addresses: []string{"resolver"}} now := time.Now() - c := newCache(10, client, &defaultBackend{}, func() time.Time { return now }) + c := newCache(10, client, nil, func() time.Time { return now }) var key uint32 = 1 c.Set(key, testMsg) |