Skip to content

[Bug] Catalog scan fails with EPERM file-lock on Windows when committing final state: 0.1.3 froze silently, 0.1.5 logs it but scan still cannot complet #21

Description

@chaopaoo12

[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 文件片段、代码行号定位),我可以提供脱敏后的附件。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions