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

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

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

  • 思源笔记

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

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

    18829 引用 • 70482 回帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 结合两份日志分析出原因了,需要再往前看一点。

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

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

  • 其他回帖
  • 辛苦 D 大,这是安卓端日志:systemlog2.zip

    1 回复
  • 你好,从日志上看是 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
索性去不顾一切,肆意赴未知明天

推荐标签 标签

  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    34 引用 • 37 回帖 • 498 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 689 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    90 引用 • 383 回帖
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖
  • Typecho

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

    12 引用 • 60 回帖 • 461 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    51 引用 • 37 回帖 • 1 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    25 引用 • 217 回帖 • 159 关注
  • 国际化

    i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。

    7 引用 • 26 回帖 • 5 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 7 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 319 关注
  • Sandbox

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

    370 引用 • 1215 回帖 • 583 关注
  • ngrok

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

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

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    77 引用 • 1741 回帖 • 1 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    198 引用 • 120 回帖
  • 导航

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

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

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    284 引用 • 4481 回帖 • 656 关注
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    57 引用 • 22 回帖 • 2 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 109 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖 • 2 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 25 关注
  • 新人

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

    51 引用 • 226 回帖
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    138 引用 • 268 回帖 • 191 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    19 引用 • 31 回帖 • 4 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 390 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 55 关注
  • GitHub

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

    207 引用 • 2031 回帖