fix: 批量任务明细写完再排队(CREATING 状态)
`create_job` 先把任务行以 QUEUED 入库(引擎立刻可见),再逐条登记明细(扫描 媒体库时 500+ 条要数秒);引擎轮询到的快照可能还没包含剩余明细,收尾时"无未结束 明细"检查也看不到它们,于是把任务误标 COMPLETED,剩余视频永远不再被处理。 - 任务行改以 `CREATING` 入库,明细全部登记完才置 QUEUED(引擎只取 QUEUED, 看不到半成品);登记中途异常置 FAILED 并把异常交给路由层。 - 启动时把上一进程遗留的 CREATING 统一置 FAILED(`fail_creating_batch_jobs`), 避免明细写一半被热重载/强杀后留下看不见的残留任务。 - 回归测试:明细每写一条就问一次引擎队列(写入过程中取不到任务);中途失败记 FAILED;启动清理遗留 CREATING。
This commit is contained in:
@@ -71,6 +71,20 @@
|
||||
并用半透明填充 + 半透明描边降低遮挡感。
|
||||
- **调研全文**:[VR双目字幕景深与遮挡调查报告.md](./VR双目字幕景深与遮挡调查报告.md)。
|
||||
|
||||
## 批量任务先写明细再排队(CREATING 状态)
|
||||
|
||||
- **现象**:新建批量任务后偶发任务被标 COMPLETED、`done=0/N`,剩余视频永远不再
|
||||
被处理(例:`batch_ac585c5458de` 唯一明细还 PENDING 而任务已 COMPLETED)。
|
||||
- **根因**:`create_job` 先把任务行以 QUEUED 入库(此时引擎就看得见),再逐条登记
|
||||
明细(扫描媒体库时 500+ 条要数秒);引擎轮询到的快照可能没包含剩余明细,收尾时
|
||||
“无未结束明细”检查也看不到它们,于是把任务标 COMPLETED。
|
||||
- **结论**:任务行改以 `CREATING` 入库,明细全部登记完才置 QUEUED(引擎只取
|
||||
QUEUED);登记中途异常置 FAILED 并抛给路由;启动时把上一进程遗留的 CREATING
|
||||
统一置 FAILED(`fail_creating_batch_jobs`),避免静默残留。
|
||||
- **旧数据修复**:`scripts/fix_zombie_batch_jobs.py` 仍用于处理历史
|
||||
“COMPLETED 但仍有未结束明细”的脏数据。回归测试见 `test_batch.py` 的
|
||||
`test_job_hidden_from_engine_until_details_written`。
|
||||
|
||||
## 相关文档
|
||||
|
||||
- 当前生效的参数与协议:[node-protocol.md](./node-protocol.md)
|
||||
|
||||
+4
-1
@@ -64,7 +64,10 @@
|
||||
空列表不报 500)。只暴露目录名,不返回文件内容。
|
||||
- **创建任务时一次性定位(2026-09 起)**:`POST /api/batch/jobs {folder,
|
||||
workflow_id, recursive}` 只扫描一次文件夹并把每个视频登记为 `batch_videos`
|
||||
明细(PENDING/RUNNING/PAUSED/COMPLETED/FAILED/SKIPPED)。**视频所在目录
|
||||
明细(PENDING/RUNNING/PAUSED/COMPLETED/FAILED/SKIPPED)。任务行先以
|
||||
`CREATING` 入库、**明细全部登记完才置 QUEUED**:否则引擎会在明细写一半时拾起
|
||||
任务、收尾把任务误标 COMPLETED(理由见
|
||||
[decisions.md](./decisions.md#批量任务先写明细再排队creating-状态))。**视频所在目录
|
||||
(视频旁)若已存在文件名含视频名的字幕文件**(`.srt/.ass/.ssa/.vtt`,
|
||||
`list_sidecar_subtitles` 判定,如 `movie.CN.srt`、`movie.CN_dual_eye.ass`),
|
||||
说明该视频已有字幕,创建即记 **SKIPPED**——不为它触发任何流水线。运行时
|
||||
|
||||
Reference in New Issue
Block a user