v0.6.1 现场故障修复:OCR 批量提交 / 建索引进度全程可见 / 索引文件夹可见可改
真机现场故障修复
用户实测:选一个含 15,287 篇文本 + 14,906 张图片的目录建索引,暴露四个连带症状——根因是同一个:OCR 识别结果写回索引原来是每识别一张图就单独 commit 一次,15k 张图片对应 15k 次重量级 tantivy commit(每次都重写段元文件、可能触发合并),把磁盘 IO 打爆。
- 进程偶发崩溃 —— 高频建删文件撞上杀毒/EDR 软件的实时扫描(v0.6.0 的重试保护只包了全量重建入口,OCR 写回和增量更新两条写入端路径没有同等保护)。旧实现还有一个真实的数据丢失 bug:写入端一旦被判定"已死",无论提交成不成功都无条件把图片标记"已处理",后续所有图片的识别结果会被静默丢弃、且没有任何报错信号。
- 快捷键唤起窗口卡顿数秒 —— 系统级磁盘 IO 争用拖慢整机调度;呼出路径本身审计确认不含任何锁等待。
- 完成报告"另有 N 张图片在后台识别"的计数永远不动 —— 原来是重建完成那一刻的静态快照,从未订阅任何进度事件。
- 建索引期间搜索不出任何结果 —— 前端引导层状态判定跟建索引状态耦合过紧。
修复
- OCR 结果写回改为批量提交(32 张或 5 秒窗口,先到者触发),commit 次数从"每张一次"降两个数量级
- 把原本只保护全量重建的"杀软扫描瞬时冲突 → 重试 + 退避"机制扩展到增量更新和 OCR 写回两条写入端路径,统一共享同一套探测逻辑;写入端撞死后重开新 writer 整批重做(幂等安全)
- 修复"提交失败仍标记已处理"的数据丢失 bug——失败的批次现在会退回队列下次重试,不会再无声消失
- 建索引进度全程可见:文本阶段大号滚动计数 + 当前文件(中段省略长路径),OCR 回填阶段常驻"图片识别 N / M"进度条(不遮挡搜索结果),窗口隐藏后重新呼出自动续播当前进度,托盘图标 tooltip 同步显示
- 崩溃取证:进程 stdout/stderr 重定向到
%LOCALAPPDATA%\dowse\data\logs\dowse.log(按体积轮转,2 个文件封顶),叠加 panic hook 记录崩溃线程/位置/信息
索引文件夹可见可改
- 托盘新增"索引:
<目录>· N 篇"只读信息项和"更改索引文件夹…"菜单项(选完新目录即整次重建,重建期间两个动作项置灰防重入) - 浮窗空态补一行当前索引根路径;已有索引时额外提供"更改文件夹"链接级入口
其他
- 远程会话(RDP)不再无条件强制降级为纯色材质——新版 Windows 的 RDP 图形管线通常能正常渲染 Acrylic/Mica,一刀切预判反而误伤真实能渲染出来的场景
验证
本机压力复测:15,102 个文件(10,002 篇文本 + 5,100 张图片,5,100 张由官方基准语料的 100 张放大 51 倍构造)建索引,全程零崩溃,OCR 全量识别完成(pending: 0),OCR'd 图片内容与普通文本均可正常搜索命中。cargo test --workspace 全绿(含真实 OCR 引擎驱动的集成测试)。