[P1-11] 🟡 DELETE /schedules 级联清理 node/edge/run/log #10

Closed
opened 2026-08-20 14:27:24 +08:00 by tao.chen · 0 comments
Owner

背景

backend/schedules.py:739 delete_schedule 当前只删 Schedules 表行,ScheduleNodes / ScheduleEdges / ScheduleRuns / ScheduleNodeRuns 全部残留。
残留数据会让:

  1. 列表查询"已删除的方案节点"概率出现(workspace_id 维度过滤不全时)
  2. 孤儿 ScheduleRuns 仍挂在 apscheduler_jobs / outbox,scheduler 试图推进时炸
  3. 磁盘空间 + 索引膨胀,且无 UI 入口清理

修复

  • delete_schedule 显式按外键顺序删: node_runsrunsedgesnodesschedule
  • 或在 ScheduleNodes / ScheduleEdges 模型加 ondelete="CASCADE" + Alembic 迁移(MySQL 注意:不用 IF EXISTS,见 CLAUDE.md)
  • 同步清理 apscheduler_jobs 里 cron job(scheduler.remove_job)与 outbox 未派发事件
  • 403/404 路径不要 half-delete:全部成功或全部回滚

验收

  • 删一个含 100 节点 + 50 runs 的方案,DB 残留行数 = 0
  • 并发删除 + 触发新 run 不死锁(SERIALIZABLE? 当前 RR 够不够)
  • GC 不会留下孤儿 ScheduleNodeRuns(可在测试里用 select count 验证)

引用

backend/schedules.py:739 delete_schedule / common/db/models/schedules.py 全部外键


Task: ndmzimvj22zupzw3aylewadd

## 背景 `backend/schedules.py:739` `delete_schedule` 当前只删 `Schedules` 表行,`ScheduleNodes` / `ScheduleEdges` / `ScheduleRuns` / `ScheduleNodeRuns` 全部残留。 残留数据会让: 1. 列表查询"已删除的方案节点"概率出现(workspace_id 维度过滤不全时) 2. 孤儿 ScheduleRuns 仍挂在 `apscheduler_jobs` / outbox,scheduler 试图推进时炸 3. 磁盘空间 + 索引膨胀,且无 UI 入口清理 ## 修复 - [ ] `delete_schedule` 显式按外键顺序删: `node_runs` → `runs` → `edges` → `nodes` → `schedule` - [ ] 或在 `ScheduleNodes` / `ScheduleEdges` 模型加 `ondelete="CASCADE"` + Alembic 迁移(MySQL 注意:不用 IF EXISTS,见 CLAUDE.md) - [ ] 同步清理 `apscheduler_jobs` 里 cron job(`scheduler.remove_job`)与 outbox 未派发事件 - [ ] 403/404 路径不要 half-delete:全部成功或全部回滚 ## 验收 - [ ] 删一个含 100 节点 + 50 runs 的方案,DB 残留行数 = 0 - [ ] 并发删除 + 触发新 run 不死锁(SERIALIZABLE? 当前 RR 够不够) - [ ] GC 不会留下孤儿 `ScheduleNodeRuns`(可在测试里用 select count 验证) ## 引用 `backend/schedules.py:739 delete_schedule` / `common/db/models/schedules.py` 全部外键 --- <sub>Task: ndmzimvj22zupzw3aylewadd</sub>
tao.chen added the priority:highstatus:to-do labels 2026-08-20 14:27:26 +08:00
tao.chen added status:in-review and removed status:to-do labels 2026-08-25 19:17:11 +08:00
tao.chen added status:done and removed status:in-review labels 2026-08-27 18:54:08 +08:00
Sign in to join this conversation.