diff --git a/internal/cache/backend.go b/internal/cache/backend.go index 4078ed2fa..36349c067 100644 --- a/internal/cache/backend.go +++ b/internal/cache/backend.go @@ -160,19 +160,17 @@ func (b *Backend) Load(ctx context.Context, h restic.Handle, length int, offset debug.Log("downloading %v finished", h) } - if b.Cache.Has(h) { - debug.Log("Load(%v, %v, %v) from cache", h, length, offset) - rd, err := b.Cache.load(h, length, offset) - if err == nil { - err = consumer(rd) - if err != nil { - _ = rd.Close() // ignore secondary errors - return err - } - return rd.Close() + // try loading from cache without checking that the handle is actually cached + rd, err := b.Cache.load(h, length, offset) + if err == nil { + err = consumer(rd) + if err != nil { + _ = rd.Close() // ignore secondary errors + return err } - debug.Log("error loading %v from cache: %v", h, err) + return rd.Close() } + debug.Log("error loading %v from cache: %v", h, err) // if we don't automatically cache this file type, fall back to the backend if !autoCacheTypes(h) { @@ -181,7 +179,7 @@ func (b *Backend) Load(ctx context.Context, h restic.Handle, length int, offset } debug.Log("auto-store %v in the cache", h) - err := b.cacheFile(ctx, h) + err = b.cacheFile(ctx, h) if err == nil { return b.loadFromCacheOrDelegate(ctx, h, length, offset, consumer) } diff --git a/internal/cache/file.go b/internal/cache/file.go index 8ed4be77e..490b2b311 100644 --- a/internal/cache/file.go +++ b/internal/cache/file.go @@ -43,7 +43,7 @@ type readCloser struct { // given handle. rd must be closed after use. If an error is returned, the // ReadCloser is nil. func (c *Cache) load(h restic.Handle, length int, offset int64) (io.ReadCloser, error) { - debug.Log("Load from cache: %v", h) + debug.Log("Load(%v, %v, %v) from cache", h, length, offset) if !c.canBeCached(h.Type) { return nil, errors.New("cannot be cached") }