文档同步时触发回滚并冲突

我刚才在编辑 2024-01-14 ID:20240414114409-phyv0q0 文档,切出思源笔记看了下其他东西,再切回来,发现刚刚编辑的内容不见了,查看文档树,生成了冲突文档 :2024-04-14 (Conflicted 2024-04-14 14:21:46) ID:20240414142146-razbv5w,好在冲突文档中存在 2024-01-14 丢失的内容。

image.png

下面是系统日志:systemlog.zip

我设置的文件历史间隔是 1 分钟,查看原文档的文件历史,2024-04-14 14:21:27 还存在着内容,

2024-04-14 14:22:27 就丢失了。冲突文档也刚好再这个区间内生成。接着看了下云端快照,手机端在这个时间范围内自动同步了一下,image.png

桌面端与手机端快照对比如下:image.png

手机端这段时间是完全没有编辑和查看任何文档的,出现这种情况我觉得还是同步算法有一些缺陷,希望可以再优化一下。

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    20156 引用 • 77717 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 88250

    结合两份日志分析出原因了,需要再往前看一点。

    PC 端 14:14:57 修改这个文件后同步,然后 Android 端 14:15:39 同步感知同步,但在这次同步中,Android 设备可能因为休眠或者某种原因导致同步很慢,在数据量不大的情况下同步处理了约 3 分钟,直到 14:19:48 时发现云端快照已经变更了(PC 端这 3 分钟时间内进行了同步,上传了新的云端快照):

    W 2024/04/14 14:19:48 sync.go:497: cloud latest changed [old=157a47e7abd8a2644dc3ef2a3908cfa98b27e9a5, new=fa80ce8a5bf918f671f34c80fdf05a8068a7439d]
    

    然后 14:21:30 Android 再次通过感知触发同步:

    I 2024/04/14 14:21:30 sync.go:785: sync websocket message: &{0  map[cmd:synced kernel:itgtxvl synced:1.713075691399e+12]}
    I 2024/04/14 14:21:30 repository.go:1274: syncing data repo [device=407mwqwmo6fz, kernel=xwua91w, provider=0, mode=a/false]
    

    这次同步中,这个文档的最新版已经是 PC 端 14:20:53 修改的最新版:

    I 2024/04/14 14:21:40 sync.go:239: cloud upsert [0d3b97e2bbe2926577d042b7b710743f8c780d1b, /20220902202745-qenctb8/20220902202751-ke13mrt/20240101035900-g5xihv6/20240401225214-cowjul5/20240414114409-phyv0q0.sy, 2024-04-14 14:20:53]
    

    但是因为前面那次 Android 端同步失败,所以这个文件在 Android 端仍然算作是本地更新但未同步:

    I 2024/04/14 14:21:40 sync.go:245: local upsert [cb5ac055e3b51b285f44740e8585ebfc08c01811, /20220902202745-qenctb8/20220902202751-ke13mrt/20240101035900-g5xihv6/20240401225214-cowjul5/20240414114409-phyv0q0.sy, 2024-04-14 14:14:57]
    

    所以最终 Android 端这次同步以后就被 14:14:57 的版本覆盖云端了:

    I 2024/04/14 14:21:44 sync.go:1325: upsert file [cb5ac055e3b51b285f44740e8585ebfc08c01811, /20220902202745-qenctb8/20220902202751-ke13mrt/20240101035900-g5xihv6/20240401225214-cowjul5/20240414114409-phyv0q0.sy, 2024-04-14 14:14:57] chunk [889faf3c10c476ae42c7ec7a4a8482bbe11b553b]
    

    最后 PC 端同步感知 14:21:50 拿到的最新快照就把数据更新到了 14:14:57 的旧版本。

    总结一下,主要原因是两个设备之间没有顺利执行交替同步:

    • Android 端因为休眠或者某种原因导致同步太慢导致同步锁超时(目前设置的是 1 分钟超时),PC 端在 Android 端同步的期间内获得了同步锁成功同步了新快照,导致 Android 端同步失败
    • 下次 Android 端同步时依旧会将将未同步的变更纳入到同步中,所以将旧的版本覆盖到了云端
    • PC 端在上面 Android 端同步后拉取到了旧版本,和当前编辑版本尝试了冲突,所以生成了冲突文件

    同步算法应该没有问题,主要问题是出在同一个文件没有交替同步造成了冲突,同步感知可以降低冲突概率(通过尽量即时地在多设备间同步),但是无法彻底避免冲突(同步失败,后续再同步时还是可能造成冲突)。

  • 其他回帖
  • 88250

    你好,从日志上看是 14:21:50 从 Android 端执行了一次同步,然后通过同步感知触发了 PC 端同步,在这次同步中,Android 端同步了在 14:14:57 修改的 20240414114409-phyv0q0 文件,此时 PC 上的修改时间是 14:20:53,所以产生了冲突文件:

    I 2024/04/14 14:21:51 diff.go:49: upsert [lID=cb5ac055e3b51b285f44740e8585ebfc08c01811, lPath=/20220902202745-qenctb8/20220902202751-ke13mrt/20240101035900-g5xihv6/20240401225214-cowjul5/20240414114409-phyv0q0.sy, lUpdated=2024-04-14 14:14:57, rID=0d3b97e2bbe2926577d042b7b710743f8c780d1b, rPath=/20220902202745-qenctb8/20220902202751-ke13mrt/20240101035900-g5xihv6/20240401225214-cowjul5/20240414114409-phyv0q0.sy, rUpdated=2024-04-14 14:20:53]
    

    进一步排查需要 Android 端日志才好分析出 14:14:57 修改的文件为什么到了 14:21:50 才进行同步,谢谢。

    1 回复
  • MisakaImouto

    辛苦 D 大,这是安卓端日志:systemlog2.zip

    1 回复
MisakaImouto
索性去不顾一切,肆意赴未知明天

推荐标签 标签

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    20156 引用 • 77717 回帖
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 82 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    21 引用 • 37 回帖 • 523 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 4 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    10 引用 • 54 回帖 • 140 关注
  • 音乐

    你听到信仰的声音了么?

    60 引用 • 510 回帖 • 1 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 353 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 624 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    163 引用 • 473 回帖
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    5 引用 • 62 回帖
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 3 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    180 引用 • 400 回帖
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 613 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    4 引用 • 16 回帖 • 1 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖
  • gRpc
    11 引用 • 9 回帖 • 49 关注
  • 创业

    你比 99% 的人都优秀么?

    83 引用 • 1398 回帖
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    75 引用 • 258 回帖 • 632 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    7017 引用 • 31714 回帖 • 220 关注
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 648 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    923 引用 • 936 回帖
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    186 引用 • 318 回帖 • 330 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 187 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    103 引用 • 294 回帖 • 1 关注