Files
FruitServer/docs/plans/2026-10-22-transcode-rendition-upsert.md
T

974 B

转码 rendition 幂等与失败落库

根因

  • 成功事务只按 media_asset_id 删除旧 rendition。
  • 同一分集替换视频后 media_asset_id 改变、episode_id 不变, 旧行未被删除,触发 uk_rendition(episode_id, quality, format)。
  • rendition 插入异常后任务未被可靠置为 FAILED。

修复

  1. 成功事务删除条件分组为: media_asset_id = 本次媒体 OR (episode_id > 0 AND episode_id = 本次分集)。
  2. 缩略图登记按 episode_id 删除旧行后重新插入。
  3. 主流程异常调用 failFinal,直接写 FAILED、错误、finished_at,保留 progress。
  4. failFinal 自身异常在 worker 中 catch 并打印 ERROR,不静默。
  5. error 截断同时保留头部与尾部,长度仍 <= 500。

验证

  • 不同 media_asset_id、同 episode_id 的重复转码清理条件。
  • thumbnail 旧行替换。
  • 失败落库字段与尾段错误保留。
  • mvn -q -DskipTests=false test -pl ... -am。