perf(sync): 通过写入日志恢复流式传输持久载荷

This commit is contained in:
2026-09-09 06:05:10 +08:00
parent 6e261aa7e1
commit b15e7a10a2
4 changed files with 321 additions and 30 deletions
@@ -594,3 +594,14 @@ Core 的独立数据目录目前不等于已授权 Vault。Python 旧笔记写
- 新增生成式 100 MiB 读取测试,检查每次请求不超过 64 KiB;增长输入精确在声明长度加 1 字节时拒绝,截断、同长度内容损坏均拒绝,空对象正常。另用实际文件检查返回句柄从头读取与同长度内容修改被拒绝。两项通过,日志 `.build/sync-spool-bounded-tests.log`;生成流测试不是操作系统 RSS 基准。
- 尚有 sync_apply_pending、Workspace journal 恢复/应用、冲突保留和外部变更扫描等路径读取整块内容;因此大附件端到端固定内存目标仍未完成,接下来仍需将已有持久化日志/操作回执/CAS 语义保持不变地接到流式 payload 应用路径。
- desktop 全目标累计 131 通过、12 ignored(库 116、Host 8、其他集成 7),包含真实 Sync 服务有序推送/重复提交及故障恢复集成,日志 `.build/sync-spool-bounded-full.log`desktop 全目标 Clippy -D warnings 通过,日志 `.build/sync-spool-bounded-clippy.log`。本轮未将这组结果视为大附件端到端 RSS 或完整生产化验收通过。
## 增量:持久化 payload 的流式日志应用与恢复
- 新增 WritePayload 的内联字节/既有 spool 两种输入,write_source 保留现有操作 fingerprint、CAS、授权复核、持久化 intent 和回执事务;普通内联写入仍先持久化 payload,远端 sync_apply_pending 则直接引用已下载的摘要/长度,不再读取整个附件 Vec。
- apply_stored_journal 从 payloads 引用打开并校验同一文件句柄,将内容以固定 64 KiB 缓冲复制到目标旁的临时文件;复制期间再次核对长度和摘要,成功后 fsync 与原子替换,再执行既有 files/sync_observed/outbox/operations/journal 事务。普通写入日志的 recover 直接走该路径,不再把 spool 读入 Vec。旧 inline journal 保持迁移兼容,先建立 payload 引用再按同一路径应用。
- 结构化记录仍按 1 MiB 上限读取和校验,不将 JSON 规则放宽为任意文件流;文件上限保留 100 MiB。用于新写入 CAS、日志应用 CAS 及远端应用本地摘要的读取也改为有界 hash_file。路径安全仍依赖现有 resolve,未声称已解决校验与替换之间的所有文件系统竞争。
- 真实 100 MiB 文件测试由 64 KiB 块创建 spool:验证远端身份、无远端回声 outbox、重复调用回执、同 operation 不同 payload 冲突;分别模拟目标尚未替换、目标已替换但数据库未提交两个日志恢复状态,重开后摘要正确、revision=1、每个本地 operation 只有一条 outbox,再次重开仍不重复。测试通过,日志 `.build/sync-stream-journal-large.log`,耗时 1.52 秒;这不是完整进程强杀矩阵或 RSS 基准。
- 新增实际文件在 open_verified 后被同长度修改的复制测试,要求 copy_verified 返回 SYNC_SPOOL_CORRUPT,调用者仅在复制校验成功时发布临时文件。该证据针对复制内容校验,不代表所有重解析点/目录替换攻击均已覆盖。
- rename/delete 的 file_ops payload 恢复、冲突保留/解决、外部变更扫描及部分 API 仍有整块读取;因此完整大附件低内存与全崩溃边界验收继续未完成。
- 最终 desktop 全目标 133 通过、12 ignored(库 118、Host 8、其余集成 7),包括真实 Sync 服务有序推送/重复提交及故障恢复集成;日志 `.build/sync-stream-journal-full.log`。desktop 全目标 Clippy -D warnings 通过,日志 `.build/sync-stream-journal-clippy.log`。ignored 长时沙箱验收本轮未重跑,完整生产化目标保持未完成。