fix(p0): finalize 400(extra_meta漏传)+ 查重失效(fingerprint_chunks漏存) #2068
Reference in New Issue
Block a user
Delete Branch "fix/p0-finalize-extra-meta-fingerprint"
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?
P0:finalize 400 + 查重失效双修复
Bug 1:finalize 报 400(rendered_output.file_url 为空)
根因:
SQLAlchemyGenerationTaskRepository的_to_domain()、create()、update()三个方法都漏传/漏写了extra_meta字段。Worker 渲染完成后把 rendered_output 写入了
GenerationTask.metadata列,但 API 进程读出来的task.extra_meta永远是{},导致 finalize 时读不到rendered_output.file_url,抛 ValueError 映射成 HTTP 400。修复:
_to_domain()补extra_meta=dict(model.extra_meta) if model.extra_meta else {}create()初始化 model 时补extra_meta=...update()flush 时补model.extra_meta = dict(task.extra_meta) if task.extra_meta else {}Bug 2:查重失效(fingerprint_chunks 恒为 None)
根因:两处字段名/路径不一致:
_precompute_render_metadata返回fingerprint_dict(VideoFingerprint.to_dict(),含嵌套chunks、md5)和顶层fingerprint_chunks、is_duplicate等。meta["rendered_output"]时手写字段白名单,漏写了fingerprint_chunks/is_duplicate/duplicate_of/duplicate_rate/match_count/visual_similarity/video_fingerprint_md5,最终 DB 里只存了fingerprint_dict一个字段。RenderedOutput.from_dict()只读顶层fingerprint_chunks(已被丢弃),导致分片指纹永远为空,finalize 无法写入VideoFingerprintChunk,查重历史比对失效。修复:
{**rendered_output, file_url, file_size, duration}展开,彻底消除字段白名单漏传问题(顺手清理冗余代码)。RenderedOutput.from_dict()兼容两种历史数据格式:fingerprint_chunks(正常路径,compute_render 返回直存)fingerprint_dict["chunks"](兜底,老数据 / 直接用 fp.to_dict() 路径)video_fingerprint_md5同样从fingerprint_dict["md5"]兜底。影响
🚀 预览环境已部署
🗑️ 预览环境已清理
PR #2068 已关闭或合并,对应的预览环境已被清理。