fix: 3个bug修复 - flush/append_log/plan_id兜底 #1476
Reference in New Issue
Block a user
Delete Branch "fix/three-bugs-flush-log-planid"
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?
Bug 1 (P0): replace_all_clips_transactional 缺 db.flush()
文件:
apps/api/app/services/edit_plan_service.py问题:
db.add(model)新建的 clip 未 flush 到数据库,紧接着查询status=="pending"查不到这些新记录,ready 标记永远不生效。修复: 在查询
pending_with_asset之前加db.flush(),让新建 clip 先写入事务(未 commit),查询才能找到并标记 ready。Bug 2 (P1): generation.py 失败日志 append_log 参数重复
文件:
apps/worker/worker_app/tasks/generation.py问题:
append_log("任务失败", str(error), stage="render")— "任务失败" 作为第一个位置参数已赋给stage,又传关键字stage="render"→ TypeError。修复: 改为
append_log("render", str(error), level="ERROR", error_type=...)。排查其他调用点无同样问题。Bug 3 (P0): 正式生成缺少 plan_id 兜底关联
文件:
apps/api/app/api/routes/generation_tasks.py问题: 预览 API 有兜底逻辑(前端未传 source_edit_plan_id 时通过 template_id + user_id 查找 plan),但正式生成 API 没有,导致 Worker 拿不到 plan_id 无法走 DB 渲染路径。
修复: 任务创建并入队后,若
source_edit_plan_id为空且template_id存在,通过SQLAlchemyEditPlanRepository.list_by_template查找该用户最新的 plan 关联。测试
新增 7 个回归测试(
test_three_bugs_fix.py),127 个相关测试全过。Bug 1 (P0): edit_plan_service.replace_all_clips_transactional - db.add(model)后加db.flush(),让新建clip写入事务 - 后续查询status=='pending'才能找到新记录并标记ready - 根因:未flush的记录对SQLAlchemy query不可见 Bug 2 (P1): generation.py 失败日志append_log参数重复 - 原代码: append_log('任务失败', str(error), stage='render') - '任务失败'作为第一个位置参数已赋给stage,又传stage='render' → TypeError - 修复: append_log('render', str(error), level='ERROR', error_type=...) - 排查其他调用点无同样问题 Bug 3 (P0): 正式生成API缺少plan_id兜底关联 - 预览API有兜底:前端未传source_edit_plan_id时通过template_id+user_id查找plan - 正式生成API没有此逻辑,导致Worker拿不到plan_id无法走DB渲染路径 - 修复:任务创建并入队后,若source_edit_plan_id为空且template_id存在, 通过SQLAlchemyEditPlanRepository.list_by_template查找该用户最新的plan关联 新增7个回归测试,127个相关测试全过🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
无
💡 改进建议(不阻塞合并)
[apps/api/app/api/routes/generation_tasks.py] 异常捕获范围过宽
except Exception来捕获数据库查询异常。虽然注释说明了“不影响主流程”,但捕获Exception会掩盖如KeyboardInterrupt或MemoryError等系统级错误。建议改为捕获具体的数据库异常(如sqlalchemy.exc.SQLAlchemyError)。[apps/api/app/api/routes/generation_tasks.py] 模块导入位置
from packages.adapters.sqlalchemy_impl.models import EditPlanModel放在了函数内部。虽然 Python 有模块缓存机制,但在函数内部导入通常不符合 PEP8 规范,也不利于静态分析工具检查。建议将其移至文件顶部。[coverage.xml] 提交了非源码文件
coverage.xml是代码覆盖率测试生成的报告文件,属于构建产物,不应提交到版本控制系统。建议将其添加到.gitignore中,避免污染代码历史。✅ 良好实践
apps/api/app/services/edit_plan_service.py中,正确使用了db.flush()来确保在同一事务内新创建的数据对后续查询可见,修复了潜在的数据一致性问题。apps/api/app/api/routes/generation_tasks.py中,新增的自动关联编辑计划逻辑包含了完善的异常处理和降级策略,确保了辅助功能的失败不会阻断核心业务流程。apps/worker/worker_app/tasks/generation.py中,调整了日志记录的参数结构,将阶段信息前置,有助于日志解析和检索。🤖 由 AI 代码审查机器人自动生成 | 2026-08-24 03:15:06 | 模型:
🗑️ 预览环境已清理
PR #1476 已关闭或合并,对应的预览环境已被清理。