lib/model: Never send unpaused folder without index info (#7134)
This commit is contained in:
+7
-5
@@ -2187,13 +2187,15 @@ func (m *model) generateClusterConfig(device protocol.DeviceID) protocol.Cluster
|
|||||||
IgnorePermissions: folderCfg.IgnorePerms,
|
IgnorePermissions: folderCfg.IgnorePerms,
|
||||||
IgnoreDelete: folderCfg.IgnoreDelete,
|
IgnoreDelete: folderCfg.IgnoreDelete,
|
||||||
DisableTempIndexes: folderCfg.DisableTempIndexes,
|
DisableTempIndexes: folderCfg.DisableTempIndexes,
|
||||||
Paused: folderCfg.Paused,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var fs *db.FileSet
|
fs := m.folderFiles[folderCfg.ID]
|
||||||
if !folderCfg.Paused {
|
|
||||||
fs = m.folderFiles[folderCfg.ID]
|
// Even if we aren't paused, if we haven't started the folder yet
|
||||||
}
|
// pretend we are. Otherwise the remote might get confused about
|
||||||
|
// the missing index info (and drop all the info). We will send
|
||||||
|
// another cluster config once the folder is started.
|
||||||
|
protocolFolder.Paused = folderCfg.Paused || fs == nil
|
||||||
|
|
||||||
for _, device := range folderCfg.Devices {
|
for _, device := range folderCfg.Devices {
|
||||||
deviceCfg, _ := m.cfg.Device(device.DeviceID)
|
deviceCfg, _ := m.cfg.Device(device.DeviceID)
|
||||||
|
|||||||
@@ -4341,6 +4341,34 @@ func TestCcCheckEncryption(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCCFolderNotRunning(t *testing.T) {
|
||||||
|
// Create the folder, but don't start it.
|
||||||
|
w, fcfg := tmpDefaultWrapper()
|
||||||
|
tfs := fcfg.Filesystem()
|
||||||
|
m := newModel(w, myID, "syncthing", "dev", db.NewLowlevel(backend.OpenMemory()), nil)
|
||||||
|
defer cleanupModelAndRemoveDir(m, tfs.URI())
|
||||||
|
|
||||||
|
// A connection can happen before all the folders are started.
|
||||||
|
cc := m.generateClusterConfig(device1)
|
||||||
|
if l := len(cc.Folders); l != 1 {
|
||||||
|
t.Fatalf("Expected 1 folder in CC, got %v", l)
|
||||||
|
}
|
||||||
|
folder := cc.Folders[0]
|
||||||
|
if id := folder.ID; id != fcfg.ID {
|
||||||
|
t.Fatalf("Expected folder %v, got %v", fcfg.ID, id)
|
||||||
|
}
|
||||||
|
if l := len(folder.Devices); l != 2 {
|
||||||
|
t.Fatalf("Expected 2 devices in CC, got %v", l)
|
||||||
|
}
|
||||||
|
local := folder.Devices[1]
|
||||||
|
if local.ID != myID {
|
||||||
|
local = folder.Devices[0]
|
||||||
|
}
|
||||||
|
if !folder.Paused && local.IndexID == 0 {
|
||||||
|
t.Errorf("Folder isn't paused, but index-id is zero")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func equalStringsInAnyOrder(a, b []string) bool {
|
func equalStringsInAnyOrder(a, b []string) bool {
|
||||||
if len(a) != len(b) {
|
if len(a) != len(b) {
|
||||||
return false
|
return false
|
||||||
|
|||||||
Reference in New Issue
Block a user