cache: fix race condition in cache cleanup

Fix multiple restic processes executing concurrently and racing to remove obsolete snapshots.

Co-authored-by: Michael Eischer <michael.eischer@fau.de>
This commit is contained in:
Damien ClarkandMichael Eischer authored and Michael Eischer committed 2024-09-14 18:07:46 +02:00
1 parent c1532179d4
commit 4795143d6d
2 files changed
+11

No files matched your search

+4
View File
@@ -210,6 +210,10 @@ func (c *Cache) list(t restic.FileType) (restic.IDSet, error) {
dir := filepath.Join(c.path, cacheLayoutPaths[t])
err := filepath.Walk(dir, func(name string, fi os.FileInfo, err error) error {
if err != nil {
// ignore ErrNotExist to gracefully handle multiple processes clearing the cache
if errors.Is(err, os.ErrNotExist) {
return nil
}
return errors.Wrap(err, "Walk")
}