我看那个时间点,应该是断过一次网。
不知道为什么,断网之后,为什么出现了很多同名文件,ID 不一样了。
我看那个时间点,应该是断过一次网。
不知道为什么,断网之后,为什么出现了很多同名文件,ID 不一样了。
同步过程中断网或者其他意外情况不会造成数据重复或者损坏的。
重复的文档应该是因为生成了冲突文件,请参考 用户指南 - 数据安全 - 数据可用性保障 - 云端同步 章节。
1 月 31 号 19:32 校验索引时发现了 221 个 ID 重复的文档:
W 2024/01/31 19:32:36 index_fix.go:128: exist more than one tree duplicated [221], reindex it
往前看可以找到是从 Android 端同步过来的:
I 2024/01/31 19:13:39 siyuan.go:138: downloaded object [siyuan/1642173161657/repo/siyuan-note-wei/indexes/2b2524e142b3371892a71743d9f824a018d675a3] I 2024/01/31 19:13:39 sync.go:1592: got cloud latest [device=ec69xd57s31n/android, id=2b2524e142b3371892a71743d9f824a018d675a3, files=8662, size=1.6 GB, created=2024-01-31 18:40:09]
Android 端的这个快照 2b2524e
有 8662 个文件。以 ID 重复的 20240110112136-hmzri1c.sy
为例,可以看到在本地的路径是:/20240110224850-mj5s0a2/20240111162221-s1f6o2h/20240110112136-hmzri1c.sy
,但是 Android 端的路径是 /20240110224850-mj5s0a2/20240110112136-hmzri1c.sy
,中间少了一层,这种情况下文件路径不同,所以不会自动合并,而是将 Android 的文件下载到本地,导致本地存在了两个一样 ID 的文档。
继续往前追溯 Android 端同步,可以找到 1 月 30 号的同步:
I 2024/01/30 09:35:00 sync.go:1592: got cloud latest [device=ec69xd57s31n/android, id=8638d653e54c7863c2a04ab62e4564b2faf74591, files=8412, size=1.6 GB, created=2024-01-30 09:34:58]
这时候 Android 端快照 8638d65
文件数量是 8412,也就是说这段时间内 Android 端增加了 250 个文件,这些文件是其他端同步过去的还是如何新增的,需要 Android 端的日志才能进一步分析了,可能就是这些文件重复导致的问题,请上传 Android 端的日志,谢谢。
移动端的这份日志中可以找到快照 2b2524e
生成的时候已经有重复文件了:
I 2024/01/31 18:40:09 repo.go:595: walk data [files=8662] cost [894.393749ms] I 2024/01/31 18:40:09 ref.go:50: got local latest [device=ec69xd57s31n/android, id=8f878d82797dac8e978e35833d6e51067f83bbb7, files=8412, size=1.6 GB, created=2024-01-31 18:39:20] I 2024/01/31 18:40:09 ref.go:64: updated local latest to [device=ec69xd57s31n/android, id=2b2524e142b3371892a71743d9f824a018d675a3, files=8662, size=1.6 GB, created=2024-01-31 18:40:09]
往前看可以找到文件 /20240110224850-mj5s0a2/20240111162221-s1f6o2h/20240110112136-hmzri1c.sy
是从云端同步下来的,但是此时本地同时也存在了文件 /20240110224850-mj5s0a2/20240110112136-hmzri1c.sy
,所以这两个文件不存在冲突(虽然文件内容一样但是路径不同),也就会被作为不同的两个文件对待:
I 2024/01/31 18:40:08 sync.go:308: sync merge upsert [7d95d3f1adae4694dadffa6539b88e8e9456bb7f, /20240110224850-mj5s0a2/20240111162221-s1f6o2h/20240110112136-hmzri1c.sy, 2024-01-10 11:22:07] .... I 2024/01/31 18:40:09 sync.go:419: merge index add [7d95d3f1adae4694dadffa6539b88e8e9456bb7f, /20240110224850-mj5s0a2/20240111162221-s1f6o2h/20240110112136-hmzri1c.sy, 2024-01-10 11:22:07] .... I 2024/01/31 18:40:09 sync.go:1336: upsert file [598049fc72fdf7c8d2955b47bd4512c05f676902, /20240110224850-mj5s0a2/20240110112136-hmzri1c.sy, 2024-01-10 11:22:07] chunk [9670d894d23a470a0eb384536cb3b690d2650dc0]
最终结果就是产生了重复文档。
你那边是否手动操作过文件系统(比如复制文件)?另外是否还有其他参与同步的设备,如果有的话请一并提供日志文件。我们得再找找重现步骤,这个问题之前没有人反馈过,请帮助我们尽量跟踪定位到问题,谢谢。
这个日志看看有吗?不是很确定。
回答:1,没有手动操作过文件系统的。
疑惑:能否解惑,“中间少了一层,这种情况下文件路径不同,所以不会自动合并"这个逻辑是为了哪种场景。id 相同为啥不能认定为同一个文件嘞,增加判断路径是为了场中场景
这份 macOS 端的日志 1 月 30 号 12 点进行了一次全量下载,文件没有重复,也没有其他异常。
文件路径不同的话肯定就是不同的文件了。
我又在 PC 端日志中搜索了下,发现 /20240110224850-mj5s0a2/20240111162221-s1f6o2h/20240110112136-hmzri1c.sy
文件第一次出现是在 1 月 31 号 15 点 16 分:
I 2024/01/31 15:16:54 sync.go:1336: upsert file [7d95d3f1adae4694dadffa6539b88e8e9456bb7f, /20240110224850-mj5s0a2/20240111162221-s1f6o2h/20240110112136-hmzri1c.sy, 2024-01-10 11:22:07] chunk [9670d894d23a470a0eb384536cb3b690d2650dc0]
这个文件最后的更新时间是 2024-01-10 11:22:07,后面也也只没有变动过,只是云端一直都存在 /20240110224850-mj5s0a2/20240110112136-hmzri1c.sy
,所以文件就重复了。
找到问题了,是因为移动端下午 16:50 同步时索引校验程序错误修订了重复 ID(这时候同步还未完成,不应该订正数据)
W 2024/03/26 16:50:50 index_fix.go:242: exist more than one tree with the same id [/storage/emulated/0/Android/data/org.b3log.siyuan/files/siyuan/data/20240110224850-mj5s0a2/20231119192606-jxpmujz.sy], reset it
这个问题下个版本解决 Issue #10761 · siyuan-note/siyuan 感谢反馈!
C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。
Latke 是一款以 JSON 为主的 Java Web 框架。
程序员是从事程序开发、程序维护的专业人员。
MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。
Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。
Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。
面试造航母,上班拧螺丝。多面试,少加班。
钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。
Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。
Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。
京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。
TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。
各种网址链接、内容导航。
小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。
由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!
智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。
WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。
AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。
Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。
MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。
我来 wolai:不仅仅是未来的云端笔记!
Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网
Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于