fix(media): 转码错误信息截断并上报进度
This commit is contained in:
1 parent
f9bc6eee6d
commit
660afaf66d
18 files changed
+469
-34
No files matched your search
@@ -25549,3 +25549,79 @@ $ mvn -pl fruitshorts-admin-api -am test
|
||||
|
||||
解读:精度字符串、空态、video_url 反查命中、文件存在补登记及原有转码链全部通过。
|
||||
|
||||
## 2026-10-22 转码错误截断与进度上报
|
||||
|
||||
- 分支:`feature/transcode-progress-fix`
|
||||
- 基线:`develop` / `origin/develop` = `f9bc6ee`
|
||||
- 计划:`docs/plans/2026-10-22-transcode-progress-fix.md`
|
||||
|
||||
现场根因已确认:ffmpeg 错误信息超过 error_msg varchar(500),回写失败使任务
|
||||
停留在 RUNNING/0;同时现有 runner 未解析 ffmpeg progress,缺少 RUNNING 超时自愈。
|
||||
|
||||
### TDD 红测
|
||||
|
||||
```text
|
||||
$ mvn -pl fruitshorts-transcode-worker -am \
|
||||
-Dtest=TranscodeServiceTriggerTest,TranscodeWorkerTest,FfmpegTranscodeRunnerSmokeTest \
|
||||
-Dsurefire.failIfNoSpecifiedTests=false test
|
||||
[ERROR] TranscodeRequest 找不到 progressListener
|
||||
[ERROR] 找不到符号: 方法 updateProgress(Long,int)
|
||||
[ERROR] 找不到符号: 方法 recoverStaleRunningTasks()
|
||||
[INFO] BUILD FAILURE
|
||||
```
|
||||
|
||||
解读:红测先锁定进度回调、进度落库和僵尸自愈接口,生产代码尚未实现。
|
||||
|
||||
### 实现
|
||||
|
||||
- error_msg 写库前统一截断为最多 500 字符,附 `truncated,total=...`;
|
||||
即使数据库补丁尚未执行,也不会超过旧 varchar(500)。
|
||||
- ffmpeg 使用临时 `-progress` 文件,每 500ms 解析 out_time,
|
||||
worker 最多每秒写一次 transcode_task.progress;只更新 RUNNING 状态。
|
||||
- rendition 阶段映射 0-90%,封面/缩略图 90-99%,成功事务置 100;
|
||||
失败保留最后进度。
|
||||
- RUNNING 且 updated_at 超过 10 分钟未变化时自动标记 FAILED。
|
||||
- 手动重转复用最新任务,SUCCESS/FAILED/CANCELED 均原任务重置为 QUEUED、progress=0。
|
||||
- 成功写 rendition 前删除同媒资旧产物,避免重复重转唯一键冲突。
|
||||
- 聚合 VO 和任务 VO 增加 updatedAt,供前端展示最近更新时间。
|
||||
|
||||
### SQL 补丁
|
||||
|
||||
文件:`sql/patch-2026-10-22-transcode-error-msg.sql`
|
||||
|
||||
PM 按项目现有 patch 方式执行(本任务未执行数据库变更),例如使用项目当前
|
||||
PostgreSQL 连接串:
|
||||
|
||||
```text
|
||||
$ psql "$DB_URL" -f sql/patch-2026-10-22-transcode-error-msg.sql
|
||||
```
|
||||
|
||||
脚本只将 `transcode_task.error_msg` 与 `media_thumbnail.error_msg`
|
||||
改为 TEXT,可重复执行。
|
||||
|
||||
### 定向测试
|
||||
|
||||
```text
|
||||
$ mvn -pl fruitshorts-transcode-worker -am \
|
||||
-Dtest=TranscodeServiceTriggerTest,TranscodeWorkerTest,FfmpegTranscodeRunnerSmokeTest \
|
||||
-Dsurefire.failIfNoSpecifiedTests=false test
|
||||
[INFO] Tests run: 16, Failures: 0, Errors: 0, Skipped: 0
|
||||
[INFO] BUILD SUCCESS
|
||||
```
|
||||
|
||||
### 最终门禁
|
||||
|
||||
```text
|
||||
$ mvn -pl fruitshorts-module-media,fruitshorts-transcode-worker test
|
||||
[INFO] Tests run: 8, Failures: 0, Errors: 0, Skipped: 0
|
||||
[INFO] Tests run: 39, Failures: 0, Errors: 0, Skipped: 0
|
||||
[INFO] BUILD SUCCESS
|
||||
|
||||
$ mvn -pl fruitshorts-admin-api -am test
|
||||
[INFO] Tests run: 53, Failures: 0, Errors: 0, Skipped: 0
|
||||
[INFO] BUILD SUCCESS
|
||||
```
|
||||
|
||||
解读:真实 ffmpeg smoke 已有进度回调且达到 90% 阶段点;长错误截断、
|
||||
进度更新、僵尸任务收口、重复触发复用均通过。
|
||||
|
||||
Reference in new issue
Block a user