Kaynağa Gözat

lib/scanner, lib/model: Improve error handling when scanning (#6736)

Simon Frei 5 yıl önce
ebeveyn
işleme
a47546a1f1
2 değiştirilmiş dosya ile 6 ekleme ve 2 silme
  1. 6 1
      lib/model/folder.go
  2. 0 1
      lib/scanner/walk.go

+ 6 - 1
lib/model/folder.go

@@ -394,8 +394,12 @@ func (f *folder) scanSubdirs(subDirs []string) error {
 
 	f.setState(FolderScanning)
 
+	// If we return early e.g. due to a folder health error, the scan needs
+	// to be cancelled.
+	scanCtx, scanCancel := context.WithCancel(f.ctx)
+	defer scanCancel()
 	mtimefs := f.fset.MtimeFS()
-	fchan := scanner.Walk(f.ctx, scanner.Config{
+	fchan := scanner.Walk(scanCtx, scanner.Config{
 		Folder:                f.ID,
 		Subs:                  subDirs,
 		Matcher:               f.ignores,
@@ -885,6 +889,7 @@ func (f *folder) String() string {
 
 func (f *folder) newScanError(path string, err error) {
 	f.scanErrorsMut.Lock()
+	l.Infof("Scanner (folder %s, item %q): %v", f.Description(), path, err)
 	f.scanErrors = append(f.scanErrors, FileError{
 		Err:  err.Error(),
 		Path: path,

+ 0 - 1
lib/scanner/walk.go

@@ -531,7 +531,6 @@ func (w *walker) handleError(ctx context.Context, context, path string, err erro
 	if fs.IsNotExist(err) {
 		return
 	}
-	l.Infof("Scanner (folder %s, item %q): %s: %v", w.Folder, path, context, err)
 	select {
 	case finishedChan <- ScanResult{
 		Err:  fmt.Errorf("%s: %w", context, err),