一个设备在同步开始前先获取云端文件锁: * 如果获取成功则继续同步,并每隔 30s 更新一次文件锁时间戳,完成同步以后释放删除云端文件锁 * 如果获取失败则根据已有的云端文件锁时间戳判断是否其他设备的同步过程超时(当前时间>锁时间+65s) * 如果超时则继续本次同步,同样也是每隔 30s 更新一次文件锁时间戳,完成以后释放云端文件锁 * 如果不超时则等待 5s 后继续尝试获取文件锁同步,尝试次数超过 3 次则放弃本次同步
Activity
mozhux commentedon Feb 3, 2023
这种情况下,启动思源就编辑的情况下会是如何? 同步没成功的情况下就新建日记或其他文档了又如何?
88250 commentedon Feb 3, 2023
启动时会进行一次同步,拉取变更列表以后锁定本地相关文件,但是新建文档不受影响,这些情况和以前一样。
mozhux commentedon Feb 3, 2023
@88250 新建日记这种就很危险啊,假设以前设备已经有过日记,然后本机在未同步完对应日记文档的情况下新建日记,那是不是就会出现同名文件重复了呢?
88250 commentedon Feb 3, 2023
不会同名的,文件 ID 不一样。
mozhux commentedon Feb 3, 2023
ID不一样,最终效果不一样,可能一台机器在文档A写,另外一个在文档B写。单独看不看文档树就以为同步丢数据了。是不是也可以未完成同步前搜新建文档或新建日记文档,并明确给出提示,同步未完成。
88250 commentedon Feb 3, 2023
未完成同步也可以创建文档我觉得是特性,这样可以不用等待就能记录了。
88250 commentedon Feb 3, 2023
@woniuxia 锁机制成功的话相当于已经解决多设备同步的问题了。
88250 commentedon Feb 3, 2023
思源的同步逻辑只可能发生 2,不可能发生 1。按照你后面的逻辑,就算放弃同步然后告诉用户潜在的冲突,那么后续如何处理?不可能让用户自己线下合并文件吧……
88250 commentedon Feb 3, 2023
数据仓库的设计是基于本地优先的策略,复杂一点的情况是多个离线设备上都有未同步数据,按照你的设想应该无法处理合并。
88250 commentedon Feb 3, 2023
本地没有相对的,云端就是云端,本地就是本地,因为云端不可能跑内核的,我指的是云端存储,比如 S3 或者 WebDAV。
这个锁机制就是为了减少问题发生的概率,网络情况每次同步前都会检查,数据未变动后 30s 自动执行一次同步、移动端在返回桌面时也会触发同步,我觉得频率已经很高了。
🎨 增加云端同步锁事件 siyuan-note/siyuan#7245
🎨 改进多设备同时同步数据的可靠性 siyuan-note/siyuan#7245
🎨 改进多设备同时同步数据的可靠性 siyuan-note/siyuan#7245
🎨 改进多设备同时同步数据的可靠性 #7245
Soltus commentedon Feb 3, 2023
版本不一致弹窗提示用户就很合适
pisceswb commentedon Feb 5, 2023
还没敢尝试该新同步方式,但有个疑问。
按照新方式,是不是在一个设备上手动点了同步后,在另一个设备上需要隔1分钟(当前时间>锁时间+65s)后点同步才有效?
88250 commentedon Feb 5, 2023
同时同步才会出现锁定情况,会自动等待,如果超时的话会报错告知用户。一个设备上同步完再另一个设备上点同步不会出现锁定情况。