fd95511091
Before this change, bisync needed to build a full listing for Path1, then a full listing for Path2, then compare them -- and each of those tasks needed to finish before the next one could start. In addition to being slow and inefficient, it also caused real problems if a file changed between the time bisync checked it on Path1 and the time it checked the corresponding file on Path2. This change solves these problems by listing both paths concurrently, using the same March infrastructure that check and sync use to traverse two directories in lock-step, optimized by Go's robust concurrency support. Listings should now be much faster, and any given path is now checked nearly-instantaneously on both sides, minimizing room for error. Further discussion: https://forum.rclone.org/t/bisync-bugs-and-feature-requests/37636#:~:text=4.%20Listings%20should%20alternate%20between%20paths%20to%20minimize%20errors
94 lines
5.6 KiB
Text
94 lines
5.6 KiB
Text
[36m(01) :[0m [34mtest changes[0m
|
|
|
|
|
|
[36m(02) :[0m [34mtest initial bisync[0m
|
|
[36m(03) :[0m [34mbisync resync[0m
|
|
INFO : Synching Path1 "{path1/}" with Path2 "{path2/}"
|
|
INFO : Copying unique Path2 files to Path1
|
|
INFO : Resynching Path1 to Path2
|
|
INFO : Resync updating listings
|
|
INFO : [32mBisync successful[0m
|
|
|
|
[36m(04) :[0m [34mtest make modifications on both paths[0m
|
|
[36m(05) :[0m [34mtest new on path2 - file10[0m
|
|
[36m(06) :[0m [34mtouch-copy 2001-01-02 {datadir/}file10.txt {path2/}[0m
|
|
|
|
[36m(07) :[0m [34mtest newer on path2 - file1[0m
|
|
[36m(08) :[0m [34mtouch-copy 2001-01-02 {datadir/}file1.txt {path2/}[0m
|
|
|
|
[36m(09) :[0m [34mtest new on path1 - file11[0m
|
|
[36m(10) :[0m [34mtouch-copy 2001-01-02 {datadir/}file11.txt {path1/}[0m
|
|
|
|
[36m(11) :[0m [34mtest newer on path1 - file2[0m
|
|
[36m(12) :[0m [34mtouch-copy 2001-01-02 {datadir/}file2.txt {path1/}[0m
|
|
|
|
[36m(13) :[0m [34mtest deleted on path2 - file3[0m
|
|
[36m(14) :[0m [34mdelete-file {path2/}file3.txt[0m
|
|
|
|
[36m(15) :[0m [34mtest deleted on path1 - file4[0m
|
|
[36m(16) :[0m [34mdelete-file {path1/}file4.txt[0m
|
|
|
|
[36m(17) :[0m [34mtest deleted on both paths - file8[0m
|
|
[36m(18) :[0m [34mdelete-file {path1/}file8.txt[0m
|
|
[36m(19) :[0m [34mdelete-file {path2/}file8.txt[0m
|
|
|
|
[36m(20) :[0m [34mtest changed on both paths - file5 (file5R, file5L)[0m
|
|
[36m(21) :[0m [34mtouch-glob 2001-01-02 {datadir/} file5R.txt[0m
|
|
[36m(22) :[0m [34mcopy-as {datadir/}file5R.txt {path2/} file5.txt[0m
|
|
[36m(23) :[0m [34mtouch-glob 2001-03-04 {datadir/} file5L.txt[0m
|
|
[36m(24) :[0m [34mcopy-as {datadir/}file5L.txt {path1/} file5.txt[0m
|
|
|
|
[36m(25) :[0m [34mtest newer on path2 and deleted on path1 - file6[0m
|
|
[36m(26) :[0m [34mtouch-copy 2001-01-02 {datadir/}file6.txt {path2/}[0m
|
|
[36m(27) :[0m [34mdelete-file {path1/}file6.txt[0m
|
|
|
|
[36m(28) :[0m [34mtest newer on path1 and deleted on path2 - file7[0m
|
|
[36m(29) :[0m [34mtouch-copy 2001-01-02 {datadir/}file7.txt {path1/}[0m
|
|
[36m(30) :[0m [34mdelete-file {path2/}file7.txt[0m
|
|
|
|
[36m(31) :[0m [34mtest bisync run[0m
|
|
[36m(32) :[0m [34mbisync[0m
|
|
INFO : Synching Path1 "{path1/}" with Path2 "{path2/}"
|
|
INFO : Building Path1 and Path2 listings
|
|
INFO : Path1 checking for diffs
|
|
INFO : - [34mPath1[0m [35mFile is newer[0m - [36mfile2.txt[0m
|
|
INFO : - [34mPath1[0m [35mFile was deleted[0m - [36mfile4.txt[0m
|
|
INFO : - [34mPath1[0m [35mFile is newer[0m - [36mfile5.txt[0m
|
|
INFO : - [34mPath1[0m [35mFile was deleted[0m - [36mfile6.txt[0m
|
|
INFO : - [34mPath1[0m [35mFile is newer[0m - [36mfile7.txt[0m
|
|
INFO : - [34mPath1[0m [35mFile was deleted[0m - [36mfile8.txt[0m
|
|
INFO : - [34mPath1[0m [35mFile is new[0m - [36mfile11.txt[0m
|
|
INFO : Path1: 7 changes: 1 new, 3 newer, 0 older, 3 deleted
|
|
INFO : Path2 checking for diffs
|
|
INFO : - [34mPath2[0m [35mFile is newer[0m - [36mfile1.txt[0m
|
|
INFO : - [34mPath2[0m [35mFile was deleted[0m - [36mfile3.txt[0m
|
|
INFO : - [34mPath2[0m [35mFile is newer[0m - [36mfile5.txt[0m
|
|
INFO : - [34mPath2[0m [35mFile is newer[0m - [36mfile6.txt[0m
|
|
INFO : - [34mPath2[0m [35mFile was deleted[0m - [36mfile7.txt[0m
|
|
INFO : - [34mPath2[0m [35mFile was deleted[0m - [36mfile8.txt[0m
|
|
INFO : - [34mPath2[0m [35mFile is new[0m - [36mfile10.txt[0m
|
|
INFO : Path2: 7 changes: 1 new, 3 newer, 0 older, 3 deleted
|
|
INFO : Applying changes
|
|
INFO : Checking potential conflicts...
|
|
ERROR : file5.txt: md5 differ
|
|
NOTICE: Local file system at {path2}: 1 differences found
|
|
NOTICE: Local file system at {path2}: 1 errors while checking
|
|
INFO : Finished checking the potential conflicts. 1 differences found
|
|
INFO : - [34mPath1[0m [35mQueue copy to Path2[0m - [36m{path2/}file11.txt[0m
|
|
INFO : - [34mPath1[0m [35mQueue copy to Path2[0m - [36m{path2/}file2.txt[0m
|
|
INFO : - [34mPath2[0m [35mQueue delete[0m - [36m{path2/}file4.txt[0m
|
|
NOTICE: - [34mWARNING[0m [35mNew or changed in both paths[0m - [36mfile5.txt[0m
|
|
NOTICE: - [34mPath1[0m [35mRenaming Path1 copy[0m - [36m{path1/}file5.txt..path1[0m
|
|
NOTICE: - [34mPath1[0m [35mQueue copy to Path2[0m - [36m{path2/}file5.txt..path1[0m
|
|
NOTICE: - [34mPath2[0m [35mRenaming Path2 copy[0m - [36m{path2/}file5.txt..path2[0m
|
|
NOTICE: - [34mPath2[0m [35mQueue copy to Path1[0m - [36m{path1/}file5.txt..path2[0m
|
|
INFO : - [34mPath2[0m [35mQueue copy to Path1[0m - [36m{path1/}file6.txt[0m
|
|
INFO : - [34mPath1[0m [35mQueue copy to Path2[0m - [36m{path2/}file7.txt[0m
|
|
INFO : - [34mPath2[0m [35mQueue copy to Path1[0m - [36m{path1/}file1.txt[0m
|
|
INFO : - [34mPath2[0m [35mQueue copy to Path1[0m - [36m{path1/}file10.txt[0m
|
|
INFO : - [34mPath1[0m [35mQueue delete[0m - [36m{path1/}file3.txt[0m
|
|
INFO : - [34mPath2[0m [35mDo queued copies to[0m - [36mPath1[0m
|
|
INFO : - [34mPath1[0m [35mDo queued copies to[0m - [36mPath2[0m
|
|
INFO : Updating listings
|
|
INFO : Validating listings for Path1 "{path1/}" vs Path2 "{path2/}"
|
|
INFO : [32mBisync successful[0m
|