aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2020-01-19 18:44:45 +0100
committerMartin Polden <mpolden@mpolden.no>2020-01-19 18:44:45 +0100
commitac5ac8dfb47ddedd829501af4ce9d190b7e959ad (patch)
tree6db082f04bc9d9938e9672d88e9a1ac6d2aeddbb
parent4bf8430aecfe0adb062e6a1042a15374e5c507a4 (diff)
Remove unnecessary defaultBackend type
-rw-r--r--cache/cache.go32
-rw-r--r--cache/cache_test.go4
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)