[Bug] Windows 下 Catalog 扫描提交状态时 EPERM 文件锁导致失败:0.1.3 表现为静默卡死,0.1.5 可捕获但仍无法完成扫描
概述 (Summary)
在 DSH Desktop(Windows)上发起 Catalog scan(全库 scope 与单 schema scope 均可复现),观察到两类表现:
- 0.1.3:数据采集完成、观察记录成功落盘后,run 状态永远停留在 running,无日志、无超时、无进度,只有进程重启才能标记 interrupted(静默卡死);
- 0.1.5:采集可以完整跑完(本次 1h24m、6,023 条观察),但提交最终状态时持久化失败,error 字段直接给出根因:
EPERM: operation not permitted, rename '...data_agent_catalog.json.<tmp>' -> '...data_agent_catalog.json'
—— 即 Catalog 存储的「写临时文件 + 原子改名」在 Windows 上遇到文件锁竞争。
结论:两版根因一致 ——Windows 下 data_agent_catalog.json 的原子提交(tmp+rename)与并发读取 / 占用冲突。0.1.3 因主 catch 不记录错误而表现为假死;0.1.5 的 .catch 兜底日志修复了 "无痕失败",但提交本身的 EPERM 未处理,扫描依然无法完成。
环境 (Environment)
项 | 值
-- | --
DSH Desktop | 2.0.9(Electron)
插件 | @yejiming/dsh-data-agent:desktop profile 0.1.3 → 0.1.5(2026-09-12 升级),详见文末 "版本核查"
OS | Windows(DSH Desktop 用户数据目录,含 logs\host\ 日志)
数据源 | StarRocks(MySQL 协议)[内部地址]:9030,database=ods(跨境慢链路)
网络 | 跨境慢链路(TCP 握手实测约 13.6s;30s 查询超时会触发失败,见下)
Catalog 存储 | ~/.dsh/storages/data_agent_catalog.json(约 32–40MB,实时写入,tmp+rename 原子提交)
逐行对比 0.1.3 与 0.1.5 的 catalog-D0SV_6Jv.js:
- executeRun 状态机、setRun、scan 调用、主 catch 逻辑完全一致;
- 0.1.5 唯一相关改动:executeRun(...).catch() 调用处新增 options.logger?.warn("Catalog run %s failed unexpectedly")(约 L1185)——修复了 "异常 reject 无日志",实测 run.error 可持久化、状态可正确标记 failed;
- EPERM 提交失败无重试,0.1.5 未修复扫描无法完成的根因。
- 如需更多信息(完整日志、catalog 文件片段、代码行号定位),我可以提供脱敏后的附件。
[Bug] Windows 下 Catalog 扫描提交状态时 EPERM 文件锁导致失败:0.1.3 表现为静默卡死,0.1.5 可捕获但仍无法完成扫描
概述 (Summary)
环境 (Environment)