mirror of
https://github.com/rclone/rclone.git
synced 2024-11-25 09:54:44 +01:00
lib/cache: add PutErr to put a value with an error into the cache
This commit is contained in:
parent
6ff1b6c505
commit
e3f6f68885
10
lib/cache/cache.go
vendored
10
lib/cache/cache.go
vendored
@ -124,8 +124,8 @@ func (c *Cache) Unpin(key string) {
|
|||||||
c.addPin(key, -1)
|
c.addPin(key, -1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Put puts a value named key into the cache
|
// PutErr puts a value named key with err into the cache
|
||||||
func (c *Cache) Put(key string, value interface{}) {
|
func (c *Cache) PutErr(key string, value interface{}, err error) {
|
||||||
c.mu.Lock()
|
c.mu.Lock()
|
||||||
defer c.mu.Unlock()
|
defer c.mu.Unlock()
|
||||||
if c.noCache() {
|
if c.noCache() {
|
||||||
@ -134,11 +134,17 @@ func (c *Cache) Put(key string, value interface{}) {
|
|||||||
entry := &cacheEntry{
|
entry := &cacheEntry{
|
||||||
value: value,
|
value: value,
|
||||||
key: key,
|
key: key,
|
||||||
|
err: err,
|
||||||
}
|
}
|
||||||
c.used(entry)
|
c.used(entry)
|
||||||
c.cache[key] = 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
|
// GetMaybe returns the key and true if found, nil and false if not
|
||||||
func (c *Cache) GetMaybe(key string) (value interface{}, found bool) {
|
func (c *Cache) GetMaybe(key string) (value interface{}, found bool) {
|
||||||
c.mu.Lock()
|
c.mu.Lock()
|
||||||
|
16
lib/cache/cache_test.go
vendored
16
lib/cache/cache_test.go
vendored
@ -81,6 +81,22 @@ func TestGetError(t *testing.T) {
|
|||||||
assert.Equal(t, 0, len(c.cache))
|
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) {
|
func TestPut(t *testing.T) {
|
||||||
c, create := setup(t)
|
c, create := setup(t)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user