summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakob Borg <jakob@kastelo.net>2019-11-24 09:33:58 +0100
committerJakob Borg <jakob@kastelo.net>2019-11-24 09:33:58 +0100
commit45a711570e0019ed532266f712271e8f6749f145 (patch)
treece70258accc042957d5272afe21ee72b618c5a53
parent6d27cf6563b3a1ca6a9a8bcfe437291b1a705a34 (diff)
Revert "lib/model: Add folders on start in model (#6135)"v1.3.2-rc.3v1.3.2
-rw-r--r--lib/api/mocked_model_test.go7
-rw-r--r--lib/model/folder_recvonly_test.go8
-rw-r--r--lib/model/folder_sendrecv_test.go2
-rw-r--r--lib/model/model.go34
-rw-r--r--lib/model/model_test.go38
-rw-r--r--lib/model/requests_test.go12
-rw-r--r--lib/model/testutils_test.go4
-rw-r--r--lib/syncthing/syncthing.go10
8 files changed, 61 insertions, 54 deletions
diff --git a/lib/api/mocked_model_test.go b/lib/api/mocked_model_test.go
index 1b4dab1a8..c3224a5dc 100644
--- a/lib/api/mocked_model_test.go
+++ b/lib/api/mocked_model_test.go
@@ -10,6 +10,7 @@ import (
"net"
"time"
+ "github.com/syncthing/syncthing/lib/config"
"github.com/syncthing/syncthing/lib/connections"
"github.com/syncthing/syncthing/lib/db"
"github.com/syncthing/syncthing/lib/model"
@@ -179,4 +180,10 @@ func (m *mockedModel) GetHello(protocol.DeviceID) protocol.HelloIntf {
return nil
}
+func (m *mockedModel) AddFolder(cfg config.FolderConfiguration) {}
+
+func (m *mockedModel) RestartFolder(from, to config.FolderConfiguration) {}
+
+func (m *mockedModel) StartFolder(folder string) {}
+
func (m *mockedModel) StartDeadlockDetector(timeout time.Duration) {}
diff --git a/lib/model/folder_recvonly_test.go b/lib/model/folder_recvonly_test.go
index cb6403665..02cf2caa7 100644
--- a/lib/model/folder_recvonly_test.go
+++ b/lib/model/folder_recvonly_test.go
@@ -54,7 +54,7 @@ func TestRecvOnlyRevertDeletes(t *testing.T) {
// Start the folder. This will cause a scan, should discover the other stuff in the folder
- m.startFolder("ro")
+ m.StartFolder("ro")
m.ScanFolder("ro")
// We should now have two files and two directories.
@@ -125,7 +125,7 @@ func TestRecvOnlyRevertNeeds(t *testing.T) {
// Start the folder. This will cause a scan.
- m.startFolder("ro")
+ m.StartFolder("ro")
m.ScanFolder("ro")
// Everything should be in sync.
@@ -221,7 +221,7 @@ func TestRecvOnlyUndoChanges(t *testing.T) {
// Start the folder. This will cause a scan.
- m.startFolder("ro")
+ m.StartFolder("ro")
m.ScanFolder("ro")
// Everything should be in sync.
@@ -317,7 +317,7 @@ func setupROFolder() (*model, *sendOnlyFolder) {
w.SetFolder(fcfg)
m := newModel(w, myID, "syncthing", "dev", db.OpenMemory(), nil)
- m.addFolder(fcfg)
+ m.AddFolder(fcfg)
f := &sendOnlyFolder{
folder: folder{
diff --git a/lib/model/folder_sendrecv_test.go b/lib/model/folder_sendrecv_test.go
index a8f08f4f6..b00278342 100644
--- a/lib/model/folder_sendrecv_test.go
+++ b/lib/model/folder_sendrecv_test.go
@@ -93,7 +93,7 @@ func setupSendReceiveFolder(files ...protocol.FileInfo) (*model, *sendReceiveFol
w := createTmpWrapper(defaultCfg)
model := newModel(w, myID, "syncthing", "dev", db.OpenMemory(), nil)
fcfg := testFolderConfigTmp()
- model.addFolder(fcfg)
+ model.AddFolder(fcfg)
f := &sendReceiveFolder{
folder: folder{
diff --git a/lib/model/model.go b/lib/model/model.go
index d505f4d4c..99142789b 100644
--- a/lib/model/model.go
+++ b/lib/model/model.go
@@ -72,6 +72,9 @@ type Model interface {
connections.Model
+ AddFolder(cfg config.FolderConfiguration)
+ RestartFolder(from, to config.FolderConfiguration)
+ StartFolder(folder string)
ResetFolder(folder string)
DelayScan(folder string, next time.Duration)
ScanFolder(folder string) error
@@ -217,19 +220,6 @@ func NewModel(cfg config.Wrapper, id protocol.DeviceID, clientName, clientVersio
return m
}
-func (m *model) Serve() {
- // Add and start folders
- for _, folderCfg := range m.cfg.Folders() {
- if folderCfg.Paused {
- folderCfg.CreateRoot()
- continue
- }
- m.addFolder(folderCfg)
- m.startFolder(folderCfg.ID)
- }
- m.Supervisor.Serve()
-}
-
func (m *model) Stop() {
m.Supervisor.Stop()
devs := m.cfg.Devices()
@@ -251,8 +241,8 @@ func (m *model) StartDeadlockDetector(timeout time.Duration) {
detector.Watch("pmut", m.pmut)
}
-// startFolder constructs the folder service and starts it.
-func (m *model) startFolder(folder string) {
+// StartFolder constructs the folder service and starts it.
+func (m *model) StartFolder(folder string) {
m.fmut.Lock()
defer m.fmut.Unlock()
folderCfg := m.folderCfgs[folder]
@@ -369,7 +359,7 @@ func (m *model) warnAboutOverwritingProtectedFiles(folder string) {
}
}
-func (m *model) addFolder(cfg config.FolderConfiguration) {
+func (m *model) AddFolder(cfg config.FolderConfiguration) {
if len(cfg.ID) == 0 {
panic("cannot add empty folder id")
}
@@ -398,7 +388,7 @@ func (m *model) addFolderLocked(cfg config.FolderConfiguration, fset *db.FileSet
m.folderIgnores[cfg.ID] = ignores
}
-func (m *model) removeFolder(cfg config.FolderConfiguration) {
+func (m *model) RemoveFolder(cfg config.FolderConfiguration) {
m.fmut.Lock()
defer m.fmut.Unlock()
@@ -450,7 +440,7 @@ func (m *model) tearDownFolderLocked(cfg config.FolderConfiguration, err error)
delete(m.folderRunnerTokens, cfg.ID)
}
-func (m *model) restartFolder(from, to config.FolderConfiguration) {
+func (m *model) RestartFolder(from, to config.FolderConfiguration) {
if len(to.ID) == 0 {
panic("bug: cannot restart empty folder ID")
}
@@ -2523,8 +2513,8 @@ func (m *model) CommitConfiguration(from, to config.Configuration) bool {
l.Infoln("Paused folder", cfg.Description())
} else {
l.Infoln("Adding folder", cfg.Description())
- m.addFolder(cfg)
- m.startFolder(folderID)
+ m.AddFolder(cfg)
+ m.StartFolder(folderID)
}
}
}
@@ -2533,7 +2523,7 @@ func (m *model) CommitConfiguration(from, to config.Configuration) bool {
toCfg, ok := toFolders[folderID]
if !ok {
// The folder was removed.
- m.removeFolder(fromCfg)
+ m.RemoveFolder(fromCfg)
continue
}
@@ -2544,7 +2534,7 @@ func (m *model) CommitConfiguration(from, to config.Configuration) bool {
// This folder exists on both sides. Settings might have changed.
// Check if anything differs that requires a restart.
if !reflect.DeepEqual(fromCfg.RequiresRestartOnly(), toCfg.RequiresRestartOnly()) {
- m.restartFolder(fromCfg, toCfg)
+ m.RestartFolder(fromCfg, toCfg)
}
// Emit the folder pause/resume event
diff --git a/lib/model/model_test.go b/lib/model/model_test.go
index 76002aa20..1fedcb7b6 100644
--- a/lib/model/model_test.go
+++ b/lib/model/model_test.go
@@ -405,8 +405,8 @@ func TestClusterConfig(t *testing.T) {
wrapper := createTmpWrapper(cfg)
m := newModel(wrapper, myID, "syncthing", "dev", db, nil)
- m.addFolder(cfg.Folders[0])
- m.addFolder(cfg.Folders[1])
+ m.AddFolder(cfg.Folders[0])
+ m.AddFolder(cfg.Folders[1])
m.ServeBackground()
defer cleanupModel(m)
@@ -1454,8 +1454,8 @@ func TestIgnores(t *testing.T) {
m := setupModel(defaultCfgWrapper)
defer cleanupModel(m)
- m.removeFolder(defaultFolderConfig)
- m.addFolder(defaultFolderConfig)
+ m.RemoveFolder(defaultFolderConfig)
+ m.AddFolder(defaultFolderConfig)
// Reach in and update the ignore matcher to one that always does
// reloads when asked to, instead of checking file mtimes. This is
// because we will be changing the files on disk often enough that the
@@ -1463,7 +1463,7 @@ func TestIgnores(t *testing.T) {
m.fmut.Lock()
m.folderIgnores["default"] = ignore.New(defaultFs, ignore.WithCache(true), ignore.WithChangeDetector(newAlwaysChanged()))
m.fmut.Unlock()
- m.startFolder("default")
+ m.StartFolder("default")
// Make sure the initial scan has finished (ScanFolders is blocking)
m.ScanFolders()
@@ -1486,7 +1486,7 @@ func TestIgnores(t *testing.T) {
}
// Invalid path, marker should be missing, hence returns an error.
- m.addFolder(config.FolderConfiguration{ID: "fresh", Path: "XXX"})
+ m.AddFolder(config.FolderConfiguration{ID: "fresh", Path: "XXX"})
_, _, err = m.GetIgnores("fresh")
if err == nil {
t.Error("No error")
@@ -1496,7 +1496,7 @@ func TestIgnores(t *testing.T) {
pausedDefaultFolderConfig := defaultFolderConfig
pausedDefaultFolderConfig.Paused = true
- m.restartFolder(defaultFolderConfig, pausedDefaultFolderConfig)
+ m.RestartFolder(defaultFolderConfig, pausedDefaultFolderConfig)
// Here folder initialization is not an issue as a paused folder isn't
// added to the model and thus there is no initial scan happening.
@@ -1555,8 +1555,8 @@ func TestROScanRecovery(t *testing.T) {
testOs.RemoveAll(fcfg.Path)
m := newModel(cfg, myID, "syncthing", "dev", ldb, nil)
- m.addFolder(fcfg)
- m.startFolder("default")
+ m.AddFolder(fcfg)
+ m.StartFolder("default")
m.ServeBackground()
defer cleanupModel(m)
@@ -1608,8 +1608,8 @@ func TestRWScanRecovery(t *testing.T) {
testOs.RemoveAll(fcfg.Path)
m := newModel(cfg, myID, "syncthing", "dev", ldb, nil)
- m.addFolder(fcfg)
- m.startFolder("default")
+ m.AddFolder(fcfg)
+ m.StartFolder("default")
m.ServeBackground()
defer cleanupModel(m)
@@ -1636,7 +1636,7 @@ func TestRWScanRecovery(t *testing.T) {
func TestGlobalDirectoryTree(t *testing.T) {
db := db.OpenMemory()
m := newModel(defaultCfgWrapper, myID, "syncthing", "dev", db, nil)
- m.addFolder(defaultFolderConfig)
+ m.AddFolder(defaultFolderConfig)
m.ServeBackground()
defer cleanupModel(m)
@@ -1888,7 +1888,7 @@ func TestGlobalDirectoryTree(t *testing.T) {
func TestGlobalDirectorySelfFixing(t *testing.T) {
db := db.OpenMemory()
m := newModel(defaultCfgWrapper, myID, "syncthing", "dev", db, nil)
- m.addFolder(defaultFolderConfig)
+ m.AddFolder(defaultFolderConfig)
m.ServeBackground()
defer cleanupModel(m)
@@ -2064,7 +2064,7 @@ func BenchmarkTree_100_10(b *testing.B) {
func benchmarkTree(b *testing.B, n1, n2 int) {
db := db.OpenMemory()
m := newModel(defaultCfgWrapper, myID, "syncthing", "dev", db, nil)
- m.addFolder(defaultFolderConfig)
+ m.AddFolder(defaultFolderConfig)
m.ServeBackground()
defer cleanupModel(m)
@@ -2262,8 +2262,8 @@ func TestIndexesForUnknownDevicesDropped(t *testing.T) {
}
m := newModel(defaultCfgWrapper, myID, "syncthing", "dev", dbi, nil)
- m.addFolder(defaultFolderConfig)
- m.startFolder("default")
+ m.AddFolder(defaultFolderConfig)
+ m.StartFolder("default")
defer cleanupModel(m)
// Remote sequence is cached, hence need to recreated.
@@ -2701,8 +2701,8 @@ func TestCustomMarkerName(t *testing.T) {
defer testOs.RemoveAll(fcfg.Path)
m := newModel(cfg, myID, "syncthing", "dev", ldb, nil)
- m.addFolder(fcfg)
- m.startFolder("default")
+ m.AddFolder(fcfg)
+ m.StartFolder("default")
m.ServeBackground()
defer cleanupModel(m)
@@ -3290,7 +3290,7 @@ func TestConnCloseOnRestart(t *testing.T) {
newFcfg.Paused = true
done := make(chan struct{})
go func() {
- m.restartFolder(fcfg, newFcfg)
+ m.RestartFolder(fcfg, newFcfg)
close(done)
}()
select {
diff --git a/lib/model/requests_test.go b/lib/model/requests_test.go
index f83650620..8a9219851 100644
--- a/lib/model/requests_test.go
+++ b/lib/model/requests_test.go
@@ -301,8 +301,8 @@ func pullInvalidIgnored(t *testing.T, ft config.FolderType) {
m := setupModel(w)
defer cleanupModelAndRemoveDir(m, fss.URI())
- m.removeFolder(fcfg)
- m.addFolder(fcfg)
+ m.RemoveFolder(fcfg)
+ m.AddFolder(fcfg)
// Reach in and update the ignore matcher to one that always does
// reloads when asked to, instead of checking file mtimes. This is
// because we might be changing the files on disk often enough that the
@@ -310,7 +310,7 @@ func pullInvalidIgnored(t *testing.T, ft config.FolderType) {
m.fmut.Lock()
m.folderIgnores["default"] = ignore.New(fss, ignore.WithChangeDetector(newAlwaysChanged()))
m.fmut.Unlock()
- m.startFolder(fcfg.ID)
+ m.StartFolder(fcfg.ID)
fc := addFakeConn(m, device1)
fc.folder = "default"
@@ -1038,8 +1038,8 @@ func TestIgnoreDeleteUnignore(t *testing.T) {
tmpDir := fss.URI()
defer cleanupModelAndRemoveDir(m, tmpDir)
- m.removeFolder(fcfg)
- m.addFolder(fcfg)
+ m.RemoveFolder(fcfg)
+ m.AddFolder(fcfg)
// Reach in and update the ignore matcher to one that always does
// reloads when asked to, instead of checking file mtimes. This is
// because we might be changing the files on disk often enough that the
@@ -1047,7 +1047,7 @@ func TestIgnoreDeleteUnignore(t *testing.T) {
m.fmut.Lock()
m.folderIgnores["default"] = ignore.New(fss, ignore.WithChangeDetector(newAlwaysChanged()))
m.fmut.Unlock()
- m.startFolder(fcfg.ID)
+ m.StartFolder(fcfg.ID)
fc := addFakeConn(m, device1)
fc.folder = "default"
diff --git a/lib/model/testutils_test.go b/lib/model/testutils_test.go
index 896fc81ef..49e128dfc 100644
--- a/lib/model/testutils_test.go
+++ b/lib/model/testutils_test.go
@@ -107,8 +107,8 @@ func setupModel(w config.Wrapper) *model {
m.ServeBackground()
for id, cfg := range w.Folders() {
if !cfg.Paused {
- m.addFolder(cfg)
- m.startFolder(id)
+ m.AddFolder(cfg)
+ m.StartFolder(id)
}
}
diff --git a/lib/syncthing/syncthing.go b/lib/syncthing/syncthing.go
index e0b93500e..0bd19ea1a 100644
--- a/lib/syncthing/syncthing.go
+++ b/lib/syncthing/syncthing.go
@@ -239,6 +239,16 @@ func (a *App) startup() error {
m.StartDeadlockDetector(20 * time.Minute)
}
+ // Add and start folders
+ for _, folderCfg := range a.cfg.Folders() {
+ if folderCfg.Paused {
+ folderCfg.CreateRoot()
+ continue
+ }
+ m.AddFolder(folderCfg)
+ m.StartFolder(folderCfg.ID)
+ }
+
a.mainService.Add(m)
// Start discovery