From 1fbd396ffa3fedf1217947963df8a4634c721b4c Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Mon, 13 Jan 2025 18:35:55 +0100 Subject: [PATCH] chore(scanner): don't warn about cancelled scan (#9920) We expect a context cancellation when a folder is restarted during a scan. --- lib/scanner/walk.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/scanner/walk.go b/lib/scanner/walk.go index e76ce9651..a0bb03503 100644 --- a/lib/scanner/walk.go +++ b/lib/scanner/walk.go @@ -243,7 +243,7 @@ const walkFailureEventDesc = "Unexpected error while walking the filesystem duri func (w *walker) scan(ctx context.Context, toHashChan chan<- protocol.FileInfo, finishedChan chan<- ScanResult) { hashFiles := w.walkAndHashFiles(ctx, toHashChan, finishedChan) if len(w.Subs) == 0 { - if err := w.Filesystem.Walk(".", hashFiles); err != nil && !errors.Is(err, fs.SkipDir) { + if err := w.Filesystem.Walk(".", hashFiles); isWarnableError(err) { w.EventLogger.Log(events.Failure, walkFailureEventDesc) l.Warnf("Aborted scan due to an unexpected error: %v", err) } @@ -253,7 +253,7 @@ func (w *walker) scan(ctx context.Context, toHashChan chan<- protocol.FileInfo, l.Debugf("%v: Skip walking %v as it is below a symlink", w, sub) continue } - if err := w.Filesystem.Walk(sub, hashFiles); err != nil && !errors.Is(err, fs.SkipDir) { + if err := w.Filesystem.Walk(sub, hashFiles); isWarnableError(err) { w.EventLogger.Log(events.Failure, walkFailureEventDesc) l.Warnf("Aborted scan of path '%v' due to an unexpected error: %v", sub, err) } @@ -262,6 +262,14 @@ func (w *walker) scan(ctx context.Context, toHashChan chan<- protocol.FileInfo, close(toHashChan) } +// isWarnableError returns true if err is a kind of error we should warn +// about receiving from the folder walk. +func isWarnableError(err error) bool { + return err != nil && + !errors.Is(err, fs.SkipDir) && // intentional skip + !errors.Is(err, context.Canceled) // folder restarting +} + func (w *walker) walkAndHashFiles(ctx context.Context, toHashChan chan<- protocol.FileInfo, finishedChan chan<- ScanResult) fs.WalkFunc { now := time.Now() ignoredParent := ""