diff --git a/cmd/syncthing/main_test.go b/cmd/syncthing/main_test.go index 13a69a2f..b609285a 100644 --- a/cmd/syncthing/main_test.go +++ b/cmd/syncthing/main_test.go @@ -39,7 +39,7 @@ func TestSanityCheck(t *testing.T) { // Case 1 - new folder, directory and marker created - m := model.NewModel(cfg, "device", "syncthing", "dev", ldb) + m := model.NewModel(cfg, protocol.LocalDeviceID, "device", "syncthing", "dev", ldb) sanityCheckFolders(cfg, m) if cfg.Folders()["folder"].Invalid != "" { @@ -66,7 +66,7 @@ func TestSanityCheck(t *testing.T) { Folders: []config.FolderConfiguration{fcfg}, }) - m = model.NewModel(cfg, "device", "syncthing", "dev", ldb) + m = model.NewModel(cfg, protocol.LocalDeviceID, "device", "syncthing", "dev", ldb) sanityCheckFolders(cfg, m) if cfg.Folders()["folder"].Invalid != "" { @@ -87,7 +87,7 @@ func TestSanityCheck(t *testing.T) { {Name: "dummyfile"}, }) - m = model.NewModel(cfg, "device", "syncthing", "dev", ldb) + m = model.NewModel(cfg, protocol.LocalDeviceID, "device", "syncthing", "dev", ldb) sanityCheckFolders(cfg, m) if cfg.Folders()["folder"].Invalid != "folder marker missing" { @@ -101,7 +101,7 @@ func TestSanityCheck(t *testing.T) { Folders: []config.FolderConfiguration{fcfg}, }) - m = model.NewModel(cfg, "device", "syncthing", "dev", ldb) + m = model.NewModel(cfg, protocol.LocalDeviceID, "device", "syncthing", "dev", ldb) sanityCheckFolders(cfg, m) if cfg.Folders()["folder"].Invalid != "folder path missing" { diff --git a/internal/db/set_test.go b/internal/db/set_test.go index a9f7a112..f9166672 100644 --- a/internal/db/set_test.go +++ b/internal/db/set_test.go @@ -15,7 +15,6 @@ import ( "github.com/syncthing/protocol" "github.com/syncthing/syncthing/internal/db" - "github.com/syncthing/syncthing/internal/lamport" "github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb/storage" ) @@ -27,6 +26,8 @@ func init() { remoteDevice1, _ = protocol.DeviceIDFromString("I6KAH76-66SLLLB-5PFXSOA-UFJCDZC-YAOMLEK-CP2GB32-BV5RQST-3PSROAU") } +const myID = 1 + func genBlocks(n int) []protocol.BlockInfo { b := make([]protocol.BlockInfo, n) for i := range b { @@ -95,7 +96,6 @@ func (l fileList) String() string { } func TestGlobalSet(t *testing.T) { - lamport.Default = lamport.Clock{} ldb, err := leveldb.Open(storage.NewMemStorage(), nil) if err != nil { @@ -105,34 +105,34 @@ func TestGlobalSet(t *testing.T) { m := db.NewFileSet("test", ldb) local0 := fileList{ - protocol.FileInfo{Name: "a", Version: 1000, Blocks: genBlocks(1)}, - protocol.FileInfo{Name: "b", Version: 1000, Blocks: genBlocks(2)}, - protocol.FileInfo{Name: "c", Version: 1000, Blocks: genBlocks(3)}, - protocol.FileInfo{Name: "d", Version: 1000, Blocks: genBlocks(4)}, - protocol.FileInfo{Name: "z", Version: 1000, Blocks: genBlocks(8)}, + protocol.FileInfo{Name: "a", Version: protocol.Vector{{ID: myID, Value: 1000}}, Blocks: genBlocks(1)}, + protocol.FileInfo{Name: "b", Version: protocol.Vector{{ID: myID, Value: 1000}}, Blocks: genBlocks(2)}, + protocol.FileInfo{Name: "c", Version: protocol.Vector{{ID: myID, Value: 1000}}, Blocks: genBlocks(3)}, + protocol.FileInfo{Name: "d", Version: protocol.Vector{{ID: myID, Value: 1000}}, Blocks: genBlocks(4)}, + protocol.FileInfo{Name: "z", Version: protocol.Vector{{ID: myID, Value: 1000}}, Blocks: genBlocks(8)}, } local1 := fileList{ - protocol.FileInfo{Name: "a", Version: 1000, Blocks: genBlocks(1)}, - protocol.FileInfo{Name: "b", Version: 1000, Blocks: genBlocks(2)}, - protocol.FileInfo{Name: "c", Version: 1000, Blocks: genBlocks(3)}, - protocol.FileInfo{Name: "d", Version: 1000, Blocks: genBlocks(4)}, + protocol.FileInfo{Name: "a", Version: protocol.Vector{{ID: myID, Value: 1000}}, Blocks: genBlocks(1)}, + protocol.FileInfo{Name: "b", Version: protocol.Vector{{ID: myID, Value: 1000}}, Blocks: genBlocks(2)}, + protocol.FileInfo{Name: "c", Version: protocol.Vector{{ID: myID, Value: 1000}}, Blocks: genBlocks(3)}, + protocol.FileInfo{Name: "d", Version: protocol.Vector{{ID: myID, Value: 1000}}, Blocks: genBlocks(4)}, } localTot := fileList{ local0[0], local0[1], local0[2], local0[3], - protocol.FileInfo{Name: "z", Version: 1001, Flags: protocol.FlagDeleted}, + protocol.FileInfo{Name: "z", Version: protocol.Vector{{ID: myID, Value: 1001}}, Flags: protocol.FlagDeleted}, } remote0 := fileList{ - protocol.FileInfo{Name: "a", Version: 1000, Blocks: genBlocks(1)}, - protocol.FileInfo{Name: "b", Version: 1000, Blocks: genBlocks(2)}, - protocol.FileInfo{Name: "c", Version: 1002, Blocks: genBlocks(5)}, + protocol.FileInfo{Name: "a", Version: protocol.Vector{{ID: myID, Value: 1000}}, Blocks: genBlocks(1)}, + protocol.FileInfo{Name: "b", Version: protocol.Vector{{ID: myID, Value: 1000}}, Blocks: genBlocks(2)}, + protocol.FileInfo{Name: "c", Version: protocol.Vector{{ID: myID, Value: 1001}}, Blocks: genBlocks(5)}, } remote1 := fileList{ - protocol.FileInfo{Name: "b", Version: 1001, Blocks: genBlocks(6)}, - protocol.FileInfo{Name: "e", Version: 1000, Blocks: genBlocks(7)}, + protocol.FileInfo{Name: "b", Version: protocol.Vector{{ID: myID, Value: 1001}}, Blocks: genBlocks(6)}, + protocol.FileInfo{Name: "e", Version: protocol.Vector{{ID: myID, Value: 1000}}, Blocks: genBlocks(7)}, } remoteTot := fileList{ remote0[0], @@ -160,8 +160,8 @@ func TestGlobalSet(t *testing.T) { local0[3], } - m.ReplaceWithDelete(protocol.LocalDeviceID, local0) - m.ReplaceWithDelete(protocol.LocalDeviceID, local1) + m.ReplaceWithDelete(protocol.LocalDeviceID, local0, myID) + m.ReplaceWithDelete(protocol.LocalDeviceID, local1, myID) m.Replace(remoteDevice0, remote0) m.Update(remoteDevice0, remote1) @@ -256,8 +256,6 @@ func TestGlobalSet(t *testing.T) { } func TestNeedWithInvalid(t *testing.T) { - lamport.Default = lamport.Clock{} - ldb, err := leveldb.Open(storage.NewMemStorage(), nil) if err != nil { t.Fatal(err) @@ -266,26 +264,26 @@ func TestNeedWithInvalid(t *testing.T) { s := db.NewFileSet("test", ldb) localHave := fileList{ - protocol.FileInfo{Name: "a", Version: 1000, Blocks: genBlocks(1)}, + protocol.FileInfo{Name: "a", Version: protocol.Vector{{ID: myID, Value: 1000}}, Blocks: genBlocks(1)}, } remote0Have := fileList{ - protocol.FileInfo{Name: "b", Version: 1001, Blocks: genBlocks(2)}, - protocol.FileInfo{Name: "c", Version: 1002, Blocks: genBlocks(5), Flags: protocol.FlagInvalid}, - protocol.FileInfo{Name: "d", Version: 1003, Blocks: genBlocks(7)}, + protocol.FileInfo{Name: "b", Version: protocol.Vector{{ID: myID, Value: 1001}}, Blocks: genBlocks(2)}, + protocol.FileInfo{Name: "c", Version: protocol.Vector{{ID: myID, Value: 1002}}, Blocks: genBlocks(5), Flags: protocol.FlagInvalid}, + protocol.FileInfo{Name: "d", Version: protocol.Vector{{ID: myID, Value: 1003}}, Blocks: genBlocks(7)}, } remote1Have := fileList{ - protocol.FileInfo{Name: "c", Version: 1002, Blocks: genBlocks(7)}, - protocol.FileInfo{Name: "d", Version: 1003, Blocks: genBlocks(5), Flags: protocol.FlagInvalid}, - protocol.FileInfo{Name: "e", Version: 1004, Blocks: genBlocks(5), Flags: protocol.FlagInvalid}, + protocol.FileInfo{Name: "c", Version: protocol.Vector{{ID: myID, Value: 1002}}, Blocks: genBlocks(7)}, + protocol.FileInfo{Name: "d", Version: protocol.Vector{{ID: myID, Value: 1003}}, Blocks: genBlocks(5), Flags: protocol.FlagInvalid}, + protocol.FileInfo{Name: "e", Version: protocol.Vector{{ID: myID, Value: 1004}}, Blocks: genBlocks(5), Flags: protocol.FlagInvalid}, } expectedNeed := fileList{ - protocol.FileInfo{Name: "b", Version: 1001, Blocks: genBlocks(2)}, - protocol.FileInfo{Name: "c", Version: 1002, Blocks: genBlocks(7)}, - protocol.FileInfo{Name: "d", Version: 1003, Blocks: genBlocks(7)}, + protocol.FileInfo{Name: "b", Version: protocol.Vector{{ID: myID, Value: 1001}}, Blocks: genBlocks(2)}, + protocol.FileInfo{Name: "c", Version: protocol.Vector{{ID: myID, Value: 1002}}, Blocks: genBlocks(7)}, + protocol.FileInfo{Name: "d", Version: protocol.Vector{{ID: myID, Value: 1003}}, Blocks: genBlocks(7)}, } - s.ReplaceWithDelete(protocol.LocalDeviceID, localHave) + s.ReplaceWithDelete(protocol.LocalDeviceID, localHave, myID) s.Replace(remoteDevice0, remote0Have) s.Replace(remoteDevice1, remote1Have) @@ -298,8 +296,6 @@ func TestNeedWithInvalid(t *testing.T) { } func TestUpdateToInvalid(t *testing.T) { - lamport.Default = lamport.Clock{} - ldb, err := leveldb.Open(storage.NewMemStorage(), nil) if err != nil { t.Fatal(err) @@ -308,13 +304,13 @@ func TestUpdateToInvalid(t *testing.T) { s := db.NewFileSet("test", ldb) localHave := fileList{ - protocol.FileInfo{Name: "a", Version: 1000, Blocks: genBlocks(1)}, - protocol.FileInfo{Name: "b", Version: 1001, Blocks: genBlocks(2)}, - protocol.FileInfo{Name: "c", Version: 1002, Blocks: genBlocks(5), Flags: protocol.FlagInvalid}, - protocol.FileInfo{Name: "d", Version: 1003, Blocks: genBlocks(7)}, + protocol.FileInfo{Name: "a", Version: protocol.Vector{{ID: myID, Value: 1000}}, Blocks: genBlocks(1)}, + protocol.FileInfo{Name: "b", Version: protocol.Vector{{ID: myID, Value: 1001}}, Blocks: genBlocks(2)}, + protocol.FileInfo{Name: "c", Version: protocol.Vector{{ID: myID, Value: 1002}}, Blocks: genBlocks(5), Flags: protocol.FlagInvalid}, + protocol.FileInfo{Name: "d", Version: protocol.Vector{{ID: myID, Value: 1003}}, Blocks: genBlocks(7)}, } - s.ReplaceWithDelete(protocol.LocalDeviceID, localHave) + s.ReplaceWithDelete(protocol.LocalDeviceID, localHave, myID) have := fileList(haveList(s, protocol.LocalDeviceID)) sort.Sort(have) @@ -323,7 +319,7 @@ func TestUpdateToInvalid(t *testing.T) { t.Errorf("Have incorrect before invalidation;\n A: %v !=\n E: %v", have, localHave) } - localHave[1] = protocol.FileInfo{Name: "b", Version: 1001, Flags: protocol.FlagInvalid} + localHave[1] = protocol.FileInfo{Name: "b", Version: protocol.Vector{{ID: myID, Value: 1001}}, Flags: protocol.FlagInvalid} s.Update(protocol.LocalDeviceID, localHave[1:2]) have = fileList(haveList(s, protocol.LocalDeviceID)) @@ -335,8 +331,6 @@ func TestUpdateToInvalid(t *testing.T) { } func TestInvalidAvailability(t *testing.T) { - lamport.Default = lamport.Clock{} - ldb, err := leveldb.Open(storage.NewMemStorage(), nil) if err != nil { t.Fatal(err) @@ -345,16 +339,16 @@ func TestInvalidAvailability(t *testing.T) { s := db.NewFileSet("test", ldb) remote0Have := fileList{ - protocol.FileInfo{Name: "both", Version: 1001, Blocks: genBlocks(2)}, - protocol.FileInfo{Name: "r1only", Version: 1002, Blocks: genBlocks(5), Flags: protocol.FlagInvalid}, - protocol.FileInfo{Name: "r0only", Version: 1003, Blocks: genBlocks(7)}, - protocol.FileInfo{Name: "none", Version: 1004, Blocks: genBlocks(5), Flags: protocol.FlagInvalid}, + protocol.FileInfo{Name: "both", Version: protocol.Vector{{ID: myID, Value: 1001}}, Blocks: genBlocks(2)}, + protocol.FileInfo{Name: "r1only", Version: protocol.Vector{{ID: myID, Value: 1002}}, Blocks: genBlocks(5), Flags: protocol.FlagInvalid}, + protocol.FileInfo{Name: "r0only", Version: protocol.Vector{{ID: myID, Value: 1003}}, Blocks: genBlocks(7)}, + protocol.FileInfo{Name: "none", Version: protocol.Vector{{ID: myID, Value: 1004}}, Blocks: genBlocks(5), Flags: protocol.FlagInvalid}, } remote1Have := fileList{ - protocol.FileInfo{Name: "both", Version: 1001, Blocks: genBlocks(2)}, - protocol.FileInfo{Name: "r1only", Version: 1002, Blocks: genBlocks(7)}, - protocol.FileInfo{Name: "r0only", Version: 1003, Blocks: genBlocks(5), Flags: protocol.FlagInvalid}, - protocol.FileInfo{Name: "none", Version: 1004, Blocks: genBlocks(5), Flags: protocol.FlagInvalid}, + protocol.FileInfo{Name: "both", Version: protocol.Vector{{ID: myID, Value: 1001}}, Blocks: genBlocks(2)}, + protocol.FileInfo{Name: "r1only", Version: protocol.Vector{{ID: myID, Value: 1002}}, Blocks: genBlocks(7)}, + protocol.FileInfo{Name: "r0only", Version: protocol.Vector{{ID: myID, Value: 1003}}, Blocks: genBlocks(5), Flags: protocol.FlagInvalid}, + protocol.FileInfo{Name: "none", Version: protocol.Vector{{ID: myID, Value: 1004}}, Blocks: genBlocks(5), Flags: protocol.FlagInvalid}, } s.Replace(remoteDevice0, remote0Have) @@ -383,17 +377,16 @@ func TestLocalDeleted(t *testing.T) { t.Fatal(err) } m := db.NewFileSet("test", ldb) - lamport.Default = lamport.Clock{} local1 := []protocol.FileInfo{ - {Name: "a", Version: 1000}, - {Name: "b", Version: 1000}, - {Name: "c", Version: 1000}, - {Name: "d", Version: 1000}, - {Name: "z", Version: 1000, Flags: protocol.FlagDirectory}, + {Name: "a", Version: protocol.Vector{{ID: myID, Value: 1000}}}, + {Name: "b", Version: protocol.Vector{{ID: myID, Value: 1000}}}, + {Name: "c", Version: protocol.Vector{{ID: myID, Value: 1000}}}, + {Name: "d", Version: protocol.Vector{{ID: myID, Value: 1000}}}, + {Name: "z", Version: protocol.Vector{{ID: myID, Value: 1000}}, Flags: protocol.FlagDirectory}, } - m.ReplaceWithDelete(protocol.LocalDeviceID, local1) + m.ReplaceWithDelete(protocol.LocalDeviceID, local1, myID) m.ReplaceWithDelete(protocol.LocalDeviceID, []protocol.FileInfo{ local1[0], @@ -401,25 +394,25 @@ func TestLocalDeleted(t *testing.T) { local1[2], local1[3], local1[4], - }) + }, myID) m.ReplaceWithDelete(protocol.LocalDeviceID, []protocol.FileInfo{ local1[0], local1[2], // [3] removed local1[4], - }) + }, myID) m.ReplaceWithDelete(protocol.LocalDeviceID, []protocol.FileInfo{ local1[0], local1[2], // [4] removed - }) + }, myID) expectedGlobal1 := []protocol.FileInfo{ local1[0], - {Name: "b", Version: 1001, Flags: protocol.FlagDeleted}, + {Name: "b", Version: protocol.Vector{{ID: myID, Value: 1001}}, Flags: protocol.FlagDeleted}, local1[2], - {Name: "d", Version: 1002, Flags: protocol.FlagDeleted}, - {Name: "z", Version: 1003, Flags: protocol.FlagDeleted | protocol.FlagDirectory}, + {Name: "d", Version: protocol.Vector{{ID: myID, Value: 1001}}, Flags: protocol.FlagDeleted}, + {Name: "z", Version: protocol.Vector{{ID: myID, Value: 1001}}, Flags: protocol.FlagDeleted | protocol.FlagDirectory}, } g := globalList(m) @@ -433,14 +426,14 @@ func TestLocalDeleted(t *testing.T) { m.ReplaceWithDelete(protocol.LocalDeviceID, []protocol.FileInfo{ local1[0], // [2] removed - }) + }, myID) expectedGlobal2 := []protocol.FileInfo{ local1[0], - {Name: "b", Version: 1001, Flags: protocol.FlagDeleted}, - {Name: "c", Version: 1004, Flags: protocol.FlagDeleted}, - {Name: "d", Version: 1002, Flags: protocol.FlagDeleted}, - {Name: "z", Version: 1003, Flags: protocol.FlagDeleted | protocol.FlagDirectory}, + {Name: "b", Version: protocol.Vector{{ID: myID, Value: 1001}}, Flags: protocol.FlagDeleted}, + {Name: "c", Version: protocol.Vector{{ID: myID, Value: 1001}}, Flags: protocol.FlagDeleted}, + {Name: "d", Version: protocol.Vector{{ID: myID, Value: 1001}}, Flags: protocol.FlagDeleted}, + {Name: "z", Version: protocol.Vector{{ID: myID, Value: 1001}}, Flags: protocol.FlagDeleted | protocol.FlagDirectory}, } g = globalList(m) @@ -460,20 +453,20 @@ func Benchmark10kReplace(b *testing.B) { var local []protocol.FileInfo for i := 0; i < 10000; i++ { - local = append(local, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: 1000}) + local = append(local, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: protocol.Vector{{ID: myID, Value: 1000}}}) } b.ResetTimer() for i := 0; i < b.N; i++ { m := db.NewFileSet("test", ldb) - m.ReplaceWithDelete(protocol.LocalDeviceID, local) + m.ReplaceWithDelete(protocol.LocalDeviceID, local, myID) } } func Benchmark10kUpdateChg(b *testing.B) { var remote []protocol.FileInfo for i := 0; i < 10000; i++ { - remote = append(remote, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: 1000}) + remote = append(remote, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: protocol.Vector{{ID: myID, Value: 1000}}}) } ldb, err := leveldb.Open(storage.NewMemStorage(), nil) @@ -486,16 +479,16 @@ func Benchmark10kUpdateChg(b *testing.B) { var local []protocol.FileInfo for i := 0; i < 10000; i++ { - local = append(local, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: 1000}) + local = append(local, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: protocol.Vector{{ID: myID, Value: 1000}}}) } - m.ReplaceWithDelete(protocol.LocalDeviceID, local) + m.ReplaceWithDelete(protocol.LocalDeviceID, local, myID) b.ResetTimer() for i := 0; i < b.N; i++ { b.StopTimer() for j := range local { - local[j].Version++ + local[j].Version = local[j].Version.Update(myID) } b.StartTimer() m.Update(protocol.LocalDeviceID, local) @@ -505,7 +498,7 @@ func Benchmark10kUpdateChg(b *testing.B) { func Benchmark10kUpdateSme(b *testing.B) { var remote []protocol.FileInfo for i := 0; i < 10000; i++ { - remote = append(remote, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: 1000}) + remote = append(remote, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: protocol.Vector{{ID: myID, Value: 1000}}}) } ldb, err := leveldb.Open(storage.NewMemStorage(), nil) @@ -517,10 +510,10 @@ func Benchmark10kUpdateSme(b *testing.B) { var local []protocol.FileInfo for i := 0; i < 10000; i++ { - local = append(local, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: 1000}) + local = append(local, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: protocol.Vector{{ID: myID, Value: 1000}}}) } - m.ReplaceWithDelete(protocol.LocalDeviceID, local) + m.ReplaceWithDelete(protocol.LocalDeviceID, local, myID) b.ResetTimer() for i := 0; i < b.N; i++ { @@ -531,7 +524,7 @@ func Benchmark10kUpdateSme(b *testing.B) { func Benchmark10kNeed2k(b *testing.B) { var remote []protocol.FileInfo for i := 0; i < 10000; i++ { - remote = append(remote, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: 1000}) + remote = append(remote, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: protocol.Vector{{ID: myID, Value: 1000}}}) } ldb, err := leveldb.Open(storage.NewMemStorage(), nil) @@ -544,13 +537,13 @@ func Benchmark10kNeed2k(b *testing.B) { var local []protocol.FileInfo for i := 0; i < 8000; i++ { - local = append(local, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: 1000}) + local = append(local, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: protocol.Vector{{ID: myID, Value: 1000}}}) } for i := 8000; i < 10000; i++ { - local = append(local, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: 980}) + local = append(local, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: protocol.Vector{{1, 980}}}) } - m.ReplaceWithDelete(protocol.LocalDeviceID, local) + m.ReplaceWithDelete(protocol.LocalDeviceID, local, myID) b.ResetTimer() for i := 0; i < b.N; i++ { @@ -564,7 +557,7 @@ func Benchmark10kNeed2k(b *testing.B) { func Benchmark10kHaveFullList(b *testing.B) { var remote []protocol.FileInfo for i := 0; i < 10000; i++ { - remote = append(remote, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: 1000}) + remote = append(remote, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: protocol.Vector{{ID: myID, Value: 1000}}}) } ldb, err := leveldb.Open(storage.NewMemStorage(), nil) @@ -577,13 +570,13 @@ func Benchmark10kHaveFullList(b *testing.B) { var local []protocol.FileInfo for i := 0; i < 2000; i++ { - local = append(local, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: 1000}) + local = append(local, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: protocol.Vector{{ID: myID, Value: 1000}}}) } for i := 2000; i < 10000; i++ { - local = append(local, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: 980}) + local = append(local, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: protocol.Vector{{1, 980}}}) } - m.ReplaceWithDelete(protocol.LocalDeviceID, local) + m.ReplaceWithDelete(protocol.LocalDeviceID, local, myID) b.ResetTimer() for i := 0; i < b.N; i++ { @@ -597,7 +590,7 @@ func Benchmark10kHaveFullList(b *testing.B) { func Benchmark10kGlobal(b *testing.B) { var remote []protocol.FileInfo for i := 0; i < 10000; i++ { - remote = append(remote, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: 1000}) + remote = append(remote, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: protocol.Vector{{ID: myID, Value: 1000}}}) } ldb, err := leveldb.Open(storage.NewMemStorage(), nil) @@ -610,13 +603,13 @@ func Benchmark10kGlobal(b *testing.B) { var local []protocol.FileInfo for i := 0; i < 2000; i++ { - local = append(local, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: 1000}) + local = append(local, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: protocol.Vector{{ID: myID, Value: 1000}}}) } for i := 2000; i < 10000; i++ { - local = append(local, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: 980}) + local = append(local, protocol.FileInfo{Name: fmt.Sprintf("file%d", i), Version: protocol.Vector{{1, 980}}}) } - m.ReplaceWithDelete(protocol.LocalDeviceID, local) + m.ReplaceWithDelete(protocol.LocalDeviceID, local, myID) b.ResetTimer() for i := 0; i < b.N; i++ { @@ -636,20 +629,20 @@ func TestGlobalReset(t *testing.T) { m := db.NewFileSet("test", ldb) local := []protocol.FileInfo{ - {Name: "a", Version: 1000}, - {Name: "b", Version: 1000}, - {Name: "c", Version: 1000}, - {Name: "d", Version: 1000}, + {Name: "a", Version: protocol.Vector{{ID: myID, Value: 1000}}}, + {Name: "b", Version: protocol.Vector{{ID: myID, Value: 1000}}}, + {Name: "c", Version: protocol.Vector{{ID: myID, Value: 1000}}}, + {Name: "d", Version: protocol.Vector{{ID: myID, Value: 1000}}}, } remote := []protocol.FileInfo{ - {Name: "a", Version: 1000}, - {Name: "b", Version: 1001}, - {Name: "c", Version: 1002}, - {Name: "e", Version: 1000}, + {Name: "a", Version: protocol.Vector{{ID: myID, Value: 1000}}}, + {Name: "b", Version: protocol.Vector{{ID: myID, Value: 1001}}}, + {Name: "c", Version: protocol.Vector{{ID: myID, Value: 1002}}}, + {Name: "e", Version: protocol.Vector{{ID: myID, Value: 1000}}}, } - m.ReplaceWithDelete(protocol.LocalDeviceID, local) + m.ReplaceWithDelete(protocol.LocalDeviceID, local, myID) g := globalList(m) sort.Sort(fileList(g)) @@ -677,26 +670,26 @@ func TestNeed(t *testing.T) { m := db.NewFileSet("test", ldb) local := []protocol.FileInfo{ - {Name: "a", Version: 1000}, - {Name: "b", Version: 1000}, - {Name: "c", Version: 1000}, - {Name: "d", Version: 1000}, + {Name: "a", Version: protocol.Vector{{ID: myID, Value: 1000}}}, + {Name: "b", Version: protocol.Vector{{ID: myID, Value: 1000}}}, + {Name: "c", Version: protocol.Vector{{ID: myID, Value: 1000}}}, + {Name: "d", Version: protocol.Vector{{ID: myID, Value: 1000}}}, } remote := []protocol.FileInfo{ - {Name: "a", Version: 1000}, - {Name: "b", Version: 1001}, - {Name: "c", Version: 1002}, - {Name: "e", Version: 1000}, + {Name: "a", Version: protocol.Vector{{ID: myID, Value: 1000}}}, + {Name: "b", Version: protocol.Vector{{ID: myID, Value: 1001}}}, + {Name: "c", Version: protocol.Vector{{ID: myID, Value: 1002}}}, + {Name: "e", Version: protocol.Vector{{ID: myID, Value: 1000}}}, } shouldNeed := []protocol.FileInfo{ - {Name: "b", Version: 1001}, - {Name: "c", Version: 1002}, - {Name: "e", Version: 1000}, + {Name: "b", Version: protocol.Vector{{ID: myID, Value: 1001}}}, + {Name: "c", Version: protocol.Vector{{ID: myID, Value: 1002}}}, + {Name: "e", Version: protocol.Vector{{ID: myID, Value: 1000}}}, } - m.ReplaceWithDelete(protocol.LocalDeviceID, local) + m.ReplaceWithDelete(protocol.LocalDeviceID, local, myID) m.Replace(remoteDevice0, remote) need := needList(m, protocol.LocalDeviceID) @@ -718,30 +711,30 @@ func TestLocalVersion(t *testing.T) { m := db.NewFileSet("test", ldb) local1 := []protocol.FileInfo{ - {Name: "a", Version: 1000}, - {Name: "b", Version: 1000}, - {Name: "c", Version: 1000}, - {Name: "d", Version: 1000}, + {Name: "a", Version: protocol.Vector{{ID: myID, Value: 1000}}}, + {Name: "b", Version: protocol.Vector{{ID: myID, Value: 1000}}}, + {Name: "c", Version: protocol.Vector{{ID: myID, Value: 1000}}}, + {Name: "d", Version: protocol.Vector{{ID: myID, Value: 1000}}}, } local2 := []protocol.FileInfo{ local1[0], // [1] deleted local1[2], - {Name: "d", Version: 1002}, - {Name: "e", Version: 1000}, + {Name: "d", Version: protocol.Vector{{ID: myID, Value: 1002}}}, + {Name: "e", Version: protocol.Vector{{ID: myID, Value: 1000}}}, } - m.ReplaceWithDelete(protocol.LocalDeviceID, local1) + m.ReplaceWithDelete(protocol.LocalDeviceID, local1, myID) c0 := m.LocalVersion(protocol.LocalDeviceID) - m.ReplaceWithDelete(protocol.LocalDeviceID, local2) + m.ReplaceWithDelete(protocol.LocalDeviceID, local2, myID) c1 := m.LocalVersion(protocol.LocalDeviceID) if !(c1 > c0) { t.Fatal("Local version number should have incremented") } - m.ReplaceWithDelete(protocol.LocalDeviceID, local2) + m.ReplaceWithDelete(protocol.LocalDeviceID, local2, myID) c2 := m.LocalVersion(protocol.LocalDeviceID) if c2 != c1 { t.Fatal("Local version number should be unchanged") @@ -756,17 +749,17 @@ func TestListDropFolder(t *testing.T) { s0 := db.NewFileSet("test0", ldb) local1 := []protocol.FileInfo{ - {Name: "a", Version: 1000}, - {Name: "b", Version: 1000}, - {Name: "c", Version: 1000}, + {Name: "a", Version: protocol.Vector{{ID: myID, Value: 1000}}}, + {Name: "b", Version: protocol.Vector{{ID: myID, Value: 1000}}}, + {Name: "c", Version: protocol.Vector{{ID: myID, Value: 1000}}}, } s0.Replace(protocol.LocalDeviceID, local1) s1 := db.NewFileSet("test1", ldb) local2 := []protocol.FileInfo{ - {Name: "d", Version: 1002}, - {Name: "e", Version: 1002}, - {Name: "f", Version: 1002}, + {Name: "d", Version: protocol.Vector{{ID: myID, Value: 1002}}}, + {Name: "e", Version: protocol.Vector{{ID: myID, Value: 1002}}}, + {Name: "f", Version: protocol.Vector{{ID: myID, Value: 1002}}}, } s1.Replace(remoteDevice0, local2) @@ -808,24 +801,24 @@ func TestGlobalNeedWithInvalid(t *testing.T) { s := db.NewFileSet("test1", ldb) rem0 := fileList{ - protocol.FileInfo{Name: "a", Version: 1002, Blocks: genBlocks(4)}, - protocol.FileInfo{Name: "b", Version: 1002, Flags: protocol.FlagInvalid}, - protocol.FileInfo{Name: "c", Version: 1002, Blocks: genBlocks(4)}, + protocol.FileInfo{Name: "a", Version: protocol.Vector{{ID: myID, Value: 1002}}, Blocks: genBlocks(4)}, + protocol.FileInfo{Name: "b", Version: protocol.Vector{{ID: myID, Value: 1002}}, Flags: protocol.FlagInvalid}, + protocol.FileInfo{Name: "c", Version: protocol.Vector{{ID: myID, Value: 1002}}, Blocks: genBlocks(4)}, } s.Replace(remoteDevice0, rem0) rem1 := fileList{ - protocol.FileInfo{Name: "a", Version: 1002, Blocks: genBlocks(4)}, - protocol.FileInfo{Name: "b", Version: 1002, Blocks: genBlocks(4)}, - protocol.FileInfo{Name: "c", Version: 1002, Flags: protocol.FlagInvalid}, + protocol.FileInfo{Name: "a", Version: protocol.Vector{{ID: myID, Value: 1002}}, Blocks: genBlocks(4)}, + protocol.FileInfo{Name: "b", Version: protocol.Vector{{ID: myID, Value: 1002}}, Blocks: genBlocks(4)}, + protocol.FileInfo{Name: "c", Version: protocol.Vector{{ID: myID, Value: 1002}}, Flags: protocol.FlagInvalid}, } s.Replace(remoteDevice1, rem1) total := fileList{ // There's a valid copy of each file, so it should be merged - protocol.FileInfo{Name: "a", Version: 1002, Blocks: genBlocks(4)}, - protocol.FileInfo{Name: "b", Version: 1002, Blocks: genBlocks(4)}, - protocol.FileInfo{Name: "c", Version: 1002, Blocks: genBlocks(4)}, + protocol.FileInfo{Name: "a", Version: protocol.Vector{{ID: myID, Value: 1002}}, Blocks: genBlocks(4)}, + protocol.FileInfo{Name: "b", Version: protocol.Vector{{ID: myID, Value: 1002}}, Blocks: genBlocks(4)}, + protocol.FileInfo{Name: "c", Version: protocol.Vector{{ID: myID, Value: 1002}}, Blocks: genBlocks(4)}, } need := fileList(needList(s, protocol.LocalDeviceID)) @@ -854,10 +847,10 @@ func TestLongPath(t *testing.T) { name := b.String() // 5000 characters local := []protocol.FileInfo{ - {Name: string(name), Version: 1000}, + {Name: string(name), Version: protocol.Vector{{ID: myID, Value: 1000}}}, } - s.ReplaceWithDelete(protocol.LocalDeviceID, local) + s.ReplaceWithDelete(protocol.LocalDeviceID, local, myID) gf := globalList(s) if l := len(gf); l != 1 { diff --git a/internal/model/model_test.go b/internal/model/model_test.go index f2c28cad..46562b66 100644 --- a/internal/model/model_test.go +++ b/internal/model/model_test.go @@ -86,7 +86,7 @@ func init() { func TestRequest(t *testing.T) { db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) // device1 shares default, but device2 doesn't m.AddFolder(defaultFolderConfig) @@ -173,7 +173,7 @@ func genFiles(n int) []protocol.FileInfo { func BenchmarkIndex10000(b *testing.B) { db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) m.ScanFolder("default") files := genFiles(10000) @@ -186,7 +186,7 @@ func BenchmarkIndex10000(b *testing.B) { func BenchmarkIndex00100(b *testing.B) { db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) m.ScanFolder("default") files := genFiles(100) @@ -199,7 +199,7 @@ func BenchmarkIndex00100(b *testing.B) { func BenchmarkIndexUpdate10000f10000(b *testing.B) { db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) m.ScanFolder("default") files := genFiles(10000) @@ -213,7 +213,7 @@ func BenchmarkIndexUpdate10000f10000(b *testing.B) { func BenchmarkIndexUpdate10000f00100(b *testing.B) { db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) m.ScanFolder("default") files := genFiles(10000) @@ -228,7 +228,7 @@ func BenchmarkIndexUpdate10000f00100(b *testing.B) { func BenchmarkIndexUpdate10000f00001(b *testing.B) { db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) m.ScanFolder("default") files := genFiles(10000) @@ -286,7 +286,7 @@ func (FakeConnection) Statistics() protocol.Statistics { func BenchmarkRequest(b *testing.B) { db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) m.ScanFolder("default") @@ -336,7 +336,7 @@ func TestDeviceRename(t *testing.T) { } db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(config.Wrap("tmpconfig.xml", cfg), "device", "syncthing", "dev", db) + m := NewModel(config.Wrap("tmpconfig.xml", cfg), protocol.LocalDeviceID, "device", "syncthing", "dev", db) if cfg.Devices[0].Name != "" { t.Errorf("Device already has a name") } @@ -403,7 +403,7 @@ func TestClusterConfig(t *testing.T) { db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(config.Wrap("/tmp/test", cfg), "device", "syncthing", "dev", db) + m := NewModel(config.Wrap("/tmp/test", cfg), protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(cfg.Folders[0]) m.AddFolder(cfg.Folders[1]) @@ -469,7 +469,7 @@ func TestIgnores(t *testing.T) { } db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) m.StartFolderRO("default") @@ -543,7 +543,7 @@ func TestIgnores(t *testing.T) { func TestRefuseUnknownBits(t *testing.T) { db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) m.ScanFolder("default") @@ -580,7 +580,7 @@ func TestRefuseUnknownBits(t *testing.T) { func TestGlobalDirectoryTree(t *testing.T) { db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) b := func(isfile bool, path ...string) protocol.FileInfo { @@ -830,7 +830,7 @@ func TestGlobalDirectoryTree(t *testing.T) { func TestGlobalDirectorySelfFixing(t *testing.T) { db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) b := func(isfile bool, path ...string) protocol.FileInfo { @@ -991,7 +991,7 @@ func genDeepFiles(n, d int) []protocol.FileInfo { func BenchmarkTree_10000_50(b *testing.B) { db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) m.ScanFolder("default") files := genDeepFiles(10000, 50) @@ -1006,7 +1006,7 @@ func BenchmarkTree_10000_50(b *testing.B) { func BenchmarkTree_10000_10(b *testing.B) { db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) m.ScanFolder("default") files := genDeepFiles(10000, 10) @@ -1021,7 +1021,7 @@ func BenchmarkTree_10000_10(b *testing.B) { func BenchmarkTree_00100_50(b *testing.B) { db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) m.ScanFolder("default") files := genDeepFiles(100, 50) @@ -1036,7 +1036,7 @@ func BenchmarkTree_00100_50(b *testing.B) { func BenchmarkTree_00100_10(b *testing.B) { db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) m.ScanFolder("default") files := genDeepFiles(100, 10) diff --git a/internal/model/rwfolder_test.go b/internal/model/rwfolder_test.go index 179a2e56..71e21f9c 100644 --- a/internal/model/rwfolder_test.go +++ b/internal/model/rwfolder_test.go @@ -67,7 +67,7 @@ func TestHandleFile(t *testing.T) { requiredFile.Blocks = blocks[1:] db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) // Update index m.updateLocal("default", existingFile) @@ -121,7 +121,7 @@ func TestHandleFileWithTemp(t *testing.T) { requiredFile.Blocks = blocks[1:] db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) // Update index m.updateLocal("default", existingFile) @@ -181,7 +181,7 @@ func TestCopierFinder(t *testing.T) { requiredFile.Name = "file2" db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) // Update index m.updateLocal("default", existingFile) @@ -256,7 +256,7 @@ func TestCopierCleanup(t *testing.T) { } db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) // Create a file @@ -275,7 +275,7 @@ func TestCopierCleanup(t *testing.T) { } file.Blocks = []protocol.BlockInfo{blocks[1]} - file.Version++ + file.Version = file.Version.Update(protocol.LocalDeviceID.Short()) // Update index (removing old blocks) m.updateLocal("default", file) @@ -288,7 +288,7 @@ func TestCopierCleanup(t *testing.T) { } file.Blocks = []protocol.BlockInfo{blocks[0]} - file.Version++ + file.Version = file.Version.Update(protocol.LocalDeviceID.Short()) // Update index (removing old blocks) m.updateLocal("default", file) @@ -305,7 +305,7 @@ func TestCopierCleanup(t *testing.T) { // if it fails to find the block. func TestLastResortPulling(t *testing.T) { db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) // Add a file to index (with the incorrect block representation, as content @@ -378,7 +378,7 @@ func TestDeregisterOnFailInCopy(t *testing.T) { db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) emitter := NewProgressEmitter(defaultConfig) @@ -465,7 +465,7 @@ func TestDeregisterOnFailInPull(t *testing.T) { defer os.Remove("testdata/" + defTempNamer.TempName("filex")) db, _ := leveldb.Open(storage.NewMemStorage(), nil) - m := NewModel(defaultConfig, "device", "syncthing", "dev", db) + m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", db) m.AddFolder(defaultFolderConfig) emitter := NewProgressEmitter(defaultConfig)