|
|
@@ -26,11 +26,11 @@ type sendOnlyFolder struct {
|
|
|
func newSendOnlyFolder(model *Model, cfg config.FolderConfiguration, _ versioner.Versioner, _ *fs.MtimeFS) service {
|
|
|
return &sendOnlyFolder{
|
|
|
folder: folder{
|
|
|
- stateTracker: newStateTracker(cfg.ID),
|
|
|
- scan: newFolderScanner(cfg),
|
|
|
- stop: make(chan struct{}),
|
|
|
- model: model,
|
|
|
- initialScanCompleted: make(chan struct{}),
|
|
|
+ stateTracker: newStateTracker(cfg.ID),
|
|
|
+ scan: newFolderScanner(cfg),
|
|
|
+ stop: make(chan struct{}),
|
|
|
+ model: model,
|
|
|
+ initialScanFinished: make(chan struct{}),
|
|
|
},
|
|
|
FolderConfiguration: cfg,
|
|
|
}
|
|
|
@@ -50,29 +50,18 @@ func (f *sendOnlyFolder) Serve() {
|
|
|
return
|
|
|
|
|
|
case <-f.scan.timer.C:
|
|
|
- if err := f.model.CheckFolderHealth(f.folderID); err != nil {
|
|
|
- l.Infoln("Skipping scan of", f.Description(), "due to folder error:", err)
|
|
|
- f.scan.Reschedule()
|
|
|
- continue
|
|
|
- }
|
|
|
-
|
|
|
- l.Debugln(f, "rescan")
|
|
|
-
|
|
|
- if err := f.model.internalScanFolderSubdirs(f.folderID, nil); err != nil {
|
|
|
- // Potentially sets the error twice, once in the scanner just
|
|
|
- // by doing a check, and once here, if the error returned is
|
|
|
- // the same one as returned by CheckFolderHealth, though
|
|
|
- // duplicate set is handled by setError.
|
|
|
- f.setError(err)
|
|
|
- f.scan.Reschedule()
|
|
|
- continue
|
|
|
- }
|
|
|
+ l.Debugln(f, "Scanning subdirectories")
|
|
|
+ err := f.scanSubdirs(nil)
|
|
|
|
|
|
select {
|
|
|
- case <-f.initialScanCompleted:
|
|
|
+ case <-f.initialScanFinished:
|
|
|
default:
|
|
|
- l.Infoln("Completed initial scan (ro) of", f.Description())
|
|
|
- close(f.initialScanCompleted)
|
|
|
+ status := "Completed"
|
|
|
+ if err != nil {
|
|
|
+ status = "Failed"
|
|
|
+ }
|
|
|
+ l.Infoln(status, "initial scan (ro) of", f.Description())
|
|
|
+ close(f.initialScanFinished)
|
|
|
}
|
|
|
|
|
|
if f.scan.HasNoInterval() {
|
|
|
@@ -82,7 +71,7 @@ func (f *sendOnlyFolder) Serve() {
|
|
|
f.scan.Reschedule()
|
|
|
|
|
|
case req := <-f.scan.now:
|
|
|
- req.err <- f.scanSubdirsIfHealthy(req.subdirs)
|
|
|
+ req.err <- f.scanSubdirs(req.subdirs)
|
|
|
|
|
|
case next := <-f.scan.delay:
|
|
|
f.scan.timer.Reset(next)
|