文件监听静默丢事件一个月:一次 agent 日志竞态 bug 的完整复盘
ClaudeCdGuy · reddit · 2026-09-22
作者复盘自己 agent 观察系统里潜伏一个月的静默丢日志 bug:agent 写 JSONL 转录文件,hub 按字节偏移 tail 并把事件流给查看器。CI 每周都有一条间歇性失败(总是出现在最忙的矩阵分支上),作者两次当 flaky test 关掉——他在测试注释里写下「只是时序预算太紧」,自称这是最昂贵的错误。
根因机制:文件监听器是异步武装的,从「发起监听」到「取基线」之间有窗口。轮询模式下基线是一次 stat——追加写在 stat 之后 2ms 落入基线,文件相对基线「从未变化」,数据永久丢失。失败输出暴露了这一点:26 轮扫描、零字节、无报错——慢最终会到,而丢永远不会。
为何不自愈:丢失本可被兜底扫描救回,但作者的 500ms 重扫只扫子 agent 目录、活跃会话扫描提前返回,唯一兜底只在 watcher ready 时触发一次,而写入恰好发生在 ready 之后。除主转录文件外每个文件都有兜底。
修复:重扫与子 agent 同 tick 重读主转录(offset 已在文件尾时开销只是一次 statSync);回归测试把轮询压到每分钟一次,无修复时确定性失败。可偷走的两条经验:把 watcher 当尽力而为,给每个被 tail 的文件加周期性重读兜底;只在最忙机器上出现的间歇失败是竞态的描述,不是按重试的理由。
「编程与Agent」频道最新
- 「2030 年所有主流软件都将被形式化验证」引发激辩:遗留债务是最大障碍 — luislamb · 2026-09-22
- 开源电脑协手 OpenMuse:一次性 Linux 桌面里替你浏览操作网页 — aniketmaurya · 2026-09-22
- 实测 16/16 vs 9/16:作者提醒警惕 benchmark,用自己数据测 — tobowers · 2026-09-22
- 接入新 LLM 供应商前要检查哪些项?工程师团队的经验清单 — Rama_Surasani_ · 2026-09-22
- 开发者亲历:AI 写产品开发快到让人难以置信 — omnivaughn · 2026-09-22
- OpenAI 案例:V7 用 Context Graph 给企业 Agent 装上长期记忆 — xiaohu · 2026-09-22