mirror of
https://github.com/restic/restic.git
synced 2024-12-24 16:54:00 +00:00
Merge pull request #4761 from MichaelEischer/fix-cache-race
cache: ignore ErrNotExist during cleanup of old files
This commit is contained in:
commit
2e6c43c695
2 changed files with 10 additions and 1 deletions
8
changelog/unreleased/issue-4760
Normal file
8
changelog/unreleased/issue-4760
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
Bugfix: Fix possible error on concurrent cache cleanup
|
||||||
|
|
||||||
|
If multiple restic processes concurrently cleaned up no longer existing files
|
||||||
|
from the cache, this could cause some of the processes to fail with an `no such
|
||||||
|
file or directory` error. This has been fixed.
|
||||||
|
|
||||||
|
https://github.com/restic/restic/issues/4760
|
||||||
|
https://github.com/restic/restic/pull/4761
|
3
internal/cache/file.go
vendored
3
internal/cache/file.go
vendored
|
@ -165,7 +165,8 @@ func (c *Cache) Clear(t restic.FileType, valid restic.IDSet) error {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = fs.Remove(c.filename(backend.Handle{Type: t, Name: id.String()})); err != nil {
|
// ignore ErrNotExist to gracefully handle multiple processes running Clear() concurrently
|
||||||
|
if err = fs.Remove(c.filename(backend.Handle{Type: t, Name: id.String()})); err != nil && !errors.Is(err, os.ErrNotExist) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue