fix(worker): P1 修复任务状态覆盖 + 封面metadata属性名错误 #1471
Reference in New Issue
Block a user
Delete Branch "fix/p1-task-status-cover-metadata"
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?
P1 紧急修复
Bug 1: 任务状态被过期内存对象覆盖回 pending
gen_task 在任务开头加载(status=pending),中间 _update_task_status 用独立 session 把 DB 改成 running,但内存对象仍为 pending。保存 asset_analyses 时 _repo.update(gen_task) 整体写回,把 status 覆盖回 pending → mark_completed 报非法状态转换 pending→completed。
修复:独立 session 查询最新模型,只更新 extra_meta 字段,删除 _repo.update(gen_task)。
Bug 2: 封面候选帧误用 SQLAlchemy 保留属性 .metadata
GenerationTaskModel 的 ORM 属性名是 extra_meta(DB 列名为 metadata)。代码两处写 _cover_model.metadata 实际赋值给 SQLAlchemy 声明基类保留的 MetaData 对象,持久化完全无效,封面候选帧丢失。
修复:两处 .metadata 全部改为 .extra_meta。
测试
🚀 预览环境已部署
代码审查结果 - PR #1471
⚠️ 问题(0个需要修改)
(无)
💡 建议(2个可选)
_m命名含义不明确,建议重命名为task_model或db_task以提高代码可读性。GenerationTaskModel的 import 放在函数内部是否为了规避循环依赖。如果没有循环依赖问题,建议移至文件顶部统一管理,以减少函数调用时的开销。✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能无隐患
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
无
💡 改进建议(不阻塞合并)
[apps/worker/worker_app/tasks/generation.py:1686] 变量命名可读性
_m作为查询出的模型对象变量名,语义不明。建议改为更具描述性的名称,如current_task或task_model,以便后续维护者快速理解其用途。[apps/worker/worker_app/tasks/generation.py:1683-1685] Import 位置优化
GenerationTaskModel的导入语句位于函数内部。虽然这可以解决某些循环依赖问题,但会增加每次函数调用的开销。如果并非必须放在此处,建议移至模块顶部。✅ 良好实践
_meta_session) 重新查询并更新extra_meta,有效避免了使用内存中过期的gen_task对象覆盖数据库最新状态(如 status)的严重 Bug。_cover_model.metadata修正为_cover_model.extra_meta,正确区分了 SQLAlchemy 保留属性与业务自定义字段,防止了潜在的数据写入错误。try...finally结构确保 session 正确关闭,避免了连接泄漏风险。🤖 由 AI 代码审查机器人自动生成 | 2026-08-23 11:01:17 | 模型:
CI全绿,自动审批通过。
CI全绿,自动审批通过。
🗑️ 预览环境已清理
PR #1471 已关闭或合并,对应的预览环境已被清理。