lib/cache: add PutErr to put a value with an error into the cache

This commit is contained in:
Nick Craig-Wood 2024-01-19 10:33:24 +00:00
parent 6ff1b6c505
commit e3f6f68885
2 changed files with 24 additions and 2 deletions

10
lib/cache/cache.go vendored
View File

@ -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()

View File

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