41 lines
1.4 KiB
Markdown
41 lines
1.4 KiB
Markdown
|
|
# Bug 巡查 — 监测槽增强(2026-06-12)
|
|||
|
|
|
|||
|
|
**范围**:工作区未提交的 watch 开关 / TTL / 探针修复
|
|||
|
|
**方法**:代码走读 + 单测 + 竞态分析
|
|||
|
|
|
|||
|
|
## 发现与处理
|
|||
|
|
|
|||
|
|
| # | 严重度 | 问题 | 状态 |
|
|||
|
|
|---|--------|------|------|
|
|||
|
|
| 1 | **P0** | TTL 到期后 ~5s 内槽位显示「空」,但 DB ghost pin 仍在;添加服务器 → 唯一约束冲突;点 X 移除 → 404「槽位为空」 | **已修** — API 读/写路径同步 `_finalize_due_pins` |
|
|||
|
|
| 2 | P2 | `onRemove` 无 try/catch,API 失败时未提示 | 未修(低概率,可跟进) |
|
|||
|
|
| 3 | P3 | 暂停态仍可通过 `get_processes` 拉取进程(数据可能过期) | 设计可接受 |
|
|||
|
|
| 4 | — | Gate 7 被并行 Agent 提示改动阻塞 | 非 watch bug |
|
|||
|
|
|
|||
|
|
## P0 根因
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
expires_at 已过
|
|||
|
|
→ list 查询 or_(paused, expires_at>now) 排除该行
|
|||
|
|
→ UI empty=true
|
|||
|
|
→ DB 仍有 monitoring_enabled=true 的行
|
|||
|
|
→ create_pin / pick 槽位 → IntegrityError
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
探针循环每 5s 才跑 `expire_due_pins`,此前无 API 侧兜底。
|
|||
|
|
|
|||
|
|
## 修复
|
|||
|
|
|
|||
|
|
`WatchService._finalize_due_pins()` 在 `list_slots` 及所有槽位变更 API 入口调用,与探针循环逻辑一致:暂停 pin、结束 session、无活跃监测时清 Redis。
|
|||
|
|
|
|||
|
|
## 测试
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
pytest tests/test_watch_pins.py → 7 passed
|
|||
|
|
pytest tests/test_watch_*.py → 21 passed
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 未部署
|
|||
|
|
|
|||
|
|
生产仍为旧版本;修复需部署后浏览器终验 TTL 归零场景。
|