fix: 批量任务残留PENDING仍误标COMPLETED——置完成前校验无残留+崩溃恢复批量任务
事故(batch_969fabe74b83 等 3 个任务实测):批量引擎串行处理到 9.9GB 大视频时中断,_run_job 无条件收尾把任务置 COMPLETED,留下"N 个 PENDING 待处理却已完成"的僵尸状态——3 个任务遗留的 PENDING 完全相同(kiwvr-887/ mdvr-413/savr-1077 共 10 个大视频),且均卡在大文件前从未被真正处理。 - batch.py: _run_job 置 COMPLETED 前校验全部非 SKIPPED 视频已结束 (无 PENDING/PAUSED 残留),否则保持 RUNNING 交引擎下一轮续跑 - db.py/main.py: 新增 recover_interrupted_batch_jobs,重启时把 RUNNING 批量任务恢复 QUEUED(否则停在 RUNNING 永远不会被再次拾起) - tests: 新增 2 条 TDD 回归(残留 PENDING 不置 COMPLETED、批量崩溃恢复) - scripts/fix_zombie_batch_jobs.py: 历史僵尸数据修复脚本(置回 QUEUED 续跑) - AGENTS.md: 补充完成任务判定与崩溃恢复约定
This commit is contained in:
@@ -42,7 +42,11 @@ async def lifespan(app: FastAPI):
|
||||
seed_default_workflows(db)
|
||||
# 重启恢复:上次进程被杀时遗留的 RUNNING 任务恢复为 QUEUED,
|
||||
# 调度器会从产物表断点续跑(不重复已完成节点);PAUSED 保持等待显式 resume。
|
||||
# 批量任务同样恢复:RUNNING 的批量 job 置回 QUEUED,其关联 run 由
|
||||
# recover_interrupted_runs 恢复,批量引擎重新拾起后从断点续跑剩余 PENDING
|
||||
# (不恢复则批量任务停在 RUNNING 永远不会被再次驱动,未处理视频永久残留)。
|
||||
db.recover_interrupted_runs(datetime.now(timezone.utc).isoformat())
|
||||
db.recover_interrupted_batch_jobs(datetime.now(timezone.utc).isoformat())
|
||||
scheduler = WorkflowScheduler(db, STORAGE_DIR)
|
||||
# 调度器默认开启,处理排队中的任务;测试可关闭后手动执行。
|
||||
if os.getenv("WOV_SCHEDULER_ENABLED", "1") == "1":
|
||||
|
||||
Reference in New Issue
Block a user