diff --git a/lib/cache/cache.go b/lib/cache/cache.go index cbcf78796..fc73eab68 100644 --- a/lib/cache/cache.go +++ b/lib/cache/cache.go @@ -124,8 +124,8 @@ func (c *Cache) Unpin(key string) { c.addPin(key, -1) } -// Put puts a value named key into the cache -func (c *Cache) Put(key string, value interface{}) { +// PutErr puts a value named key with err into the cache +func (c *Cache) PutErr(key string, value interface{}, err error) { c.mu.Lock() defer c.mu.Unlock() if c.noCache() { @@ -134,11 +134,17 @@ func (c *Cache) Put(key string, value interface{}) { entry := &cacheEntry{ value: value, key: key, + err: err, } c.used(entry) c.cache[key] = entry } +// Put puts a value named key into the cache +func (c *Cache) Put(key string, value interface{}) { + c.PutErr(key, value, nil) +} + // GetMaybe returns the key and true if found, nil and false if not func (c *Cache) GetMaybe(key string) (value interface{}, found bool) { c.mu.Lock() diff --git a/lib/cache/cache_test.go b/lib/cache/cache_test.go index 71e1a4dbb..b98dabb54 100644 --- a/lib/cache/cache_test.go +++ b/lib/cache/cache_test.go @@ -81,6 +81,22 @@ func TestGetError(t *testing.T) { assert.Equal(t, 0, len(c.cache)) } +func TestPutErr(t *testing.T) { + c, create := setup(t) + + assert.Equal(t, 0, len(c.cache)) + + c.PutErr("/alien", "slime", errSentinel) + + assert.Equal(t, 1, len(c.cache)) + + fNew, err := c.Get("/alien", create) + require.Equal(t, errSentinel, err) + require.Equal(t, "slime", fNew) + + assert.Equal(t, 1, len(c.cache)) +} + func TestPut(t *testing.T) { c, create := setup(t)