# 转码 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`。