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

我刚才在编辑 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

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

  • 思源笔记

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

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

    18830 引用 • 70488 回帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 你好,从日志上看是 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 回复
  • 其他回帖
  • 辛苦 D 大,这是安卓端日志:systemlog2.zip

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

    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 端同步后拉取到了旧版本,和当前编辑版本尝试了冲突,所以生成了冲突文件

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

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

推荐标签 标签

  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 60 回帖 • 461 关注
  • Caddy

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

    10 引用 • 54 回帖 • 127 关注
  • 导航

    各种网址链接、内容导航。

    37 引用 • 168 回帖 • 1 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 13 关注
  • WebClipper

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

    3 引用 • 9 回帖 • 2 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 112 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 598 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 178 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 426 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 423 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    324 引用 • 1395 回帖
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 613 关注
  • Linux

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

    915 引用 • 931 回帖
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    314 引用 • 1667 回帖 • 2 关注
  • WebComponents

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

    1 引用 • 24 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    51 引用 • 226 回帖
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    123 引用 • 168 回帖
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    169 引用 • 799 回帖 • 3 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    126 引用 • 1699 回帖
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 521 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    131 引用 • 1114 回帖 • 148 关注
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 592 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    207 引用 • 2031 回帖
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    370 引用 • 1215 回帖 • 583 关注