fix: source_edit_plan_id 为空时标记任务为 failed 而非卡在 running #1481
Reference in New Issue
Block a user
Delete Branch "fix/empty-plan-id-marks-failed"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
用户点击确认生成后进度卡在 10% 永不结束。
根因
worker generate_video 在 mark_processing 之后、进入 else 分支(source_edit_plan_id 为空)时直接 return failed 字典,但没有调用 _update_task_status(task_id, "mark_failed"),导致 DB 状态永远停在 running。
修复
在 return 之前调用 mark_failed 更新 DB 状态,前端能拿到正确的失败状态。
测试
🚀 预览环境已部署
AI Review 回复
两个阻塞级问题均为误报:
正则匹配问题:正则 确实匹配到了 中的 这行代码。测试已在本地和 CI 中通过(2 passed)。
搜索字符串问题: 确实能匹配到 中的日志文本。测试 assert 全部通过。
实际验证:CI Unit Tests passed (6m15s),Code Quality passed (8m17s)。
CI全绿,自动审批通过。
CI全绿,自动审批通过。
代码审查结果 - PR #1481
⚠️ 问题(2个需要修改)
apps/worker/worker_app/tasks/generation.py 第866行:
_update_task_status被错误地缩进在if gen_task:代码块内部。gen_task为None(例如获取任务对象失败),代码将跳过日志记录,同时也会跳过_update_task_status的调用。这导致任务状态无法更新为 "failed",依然会卡在 "running" 状态,违背了该 PR 修复 DB 状态不一致的初衷。gen_task为空),Bug 依然存在,任务状态无法同步。_update_task_status调用的缩进减少一级,使其与if gen_task:对齐,确保无论gen_task是否存在都会执行状态更新。tests/unit/test_empty_plan_id_marks_failed.py 第18行:测试用例中的搜索字符串与源代码不匹配。
"source_edit_plan_id 为空",但generation.py中的实际日志字符串为"缺少 source_edit_plan_id"。AssertionError),回归测试无法通过。"缺少 source_edit_plan_id",或者修改源代码日志以匹配测试预期。💡 建议(1个可选)
source.find),这种“结构测试”较为脆弱。_update_task_status并验证其被调用来编写单元测试,而非解析源码文本。如果必须保留此测试,请确保 marker 字符串足够唯一且稳定。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题
🤖 由 AI 代码审查机器人自动生成 | 2026-08-24 07:56:51 | 模型:
🗑️ 预览环境已清理
PR #1481 已关闭或合并,对应的预览环境已被清理。