#3059·spacedrive

空间项目删除不会通过同步传播,导致重复和恢复

作者: jamiepine创建于 2026年4月18日更新于 2026年4月18日

□ 总结

当两个设备通过同步共享一个库时,默认的空间项目(Overview, News, Favorites, File Kinds, Source, Redundancy) 每次同步 复制. 每个设备最终都会得到每个默认侧边栏项目的两个副本. 删除复制没有帮助——它们在下个同步循环上复活.

两个不同的bug相互作用:

  1. ** 重复** — 两种设备都通过`create default space' 独立种子默认项目,同步回填发送端点副本到顶端。 尽管有确定性的UUUID和上调,但是在同步后,这些物品仍然会加倍.
  2. Resurrection — 删除动作从不写入同步日志,所以删除纯粹是本地的,在下个回填时会被端点仍然存在的拷贝所覆盖.

^ Bug 1: 设备同步时重复的默认项目

发生了什么事?

当设备B加入一个设备A已经拥有的库时:

  1. Device A创建了库 → `创建 default space' 运行 → 6个默认项目在 DB 中被种子(决定性的 UUID, 没有对等日志条目)
  2. Device B 加入 `create default space' 本地运行 相同6个项目,以相同的UUID种子(upserts,没有对等日志条目)
  3. ** 同步回填**-get full shared state ()'(core/src/ service/ sync/peer.rs:2746')通过“Syncable::query for sync'扫描设备A'的DB,并将所有“space item”记录发送给B。
  4. ** 成果**:重复的项目出现在边栏

• 为何决定性UUID + 上升应防止这种情况,但不要

`core/src/library/manager.rs:1260')通过下列方式生成UUUID:

zz
请检查access-date=中的日期值 (帮助) 项目 uuid=确定性 library default uuid(library-id,"space  item",项目-名称);

以及“ 创建 默认 空间” 和“ 应用 共享 更改” 两种关于 UUID 冲突的内容: [Rust] 实体: 插入( 活动) 有关冲突( C) 关于冲突:栏(栏:Uuid) .update columns ([Column: GroupId, 列: 项目类型, 列: 命令]) .to owned (,), (中文(简体) ). (中文(简体) ). 执行(db) 等待吗?


** 应倒塌重复。 ** 事实并不说明其中之一:

- 两个路径之间的UUID表示不匹配(直接插入路径上的SeaORM Uuid BLOB存储与同步路径上的JSON-deserialized Uuid——不同的二进制表示会绕过UNIQUE限制)
- “创建-默认 空间”和“应用-共享-变化”两个赛事都运行INSERT的比赛条件。
- 本地种子和同步接收副本的“ space  id” FK整数不同, 导致上升值在UUID上匹配, 但留下了陈旧的引用
- `创建 default space ' 运行多次(例如,在每个打开的库上,而不仅仅是创建)

** 需要调查**:将 " space items " 表格倒入受影响的设备上,以检查重复行是否有相同的UUID(二进制比较问题)或不同的UUID(种子问题)。

+++ 额外的重复向量:手动添加+ 确定种子

即使决定性上升
. . . . . . .

内容来源: spacedriveapp/spacedrive