fix: 批量任务明细写完再排队(CREATING 状态)
`create_job` 先把任务行以 QUEUED 入库(引擎立刻可见),再逐条登记明细(扫描 媒体库时 500+ 条要数秒);引擎轮询到的快照可能还没包含剩余明细,收尾时"无未结束 明细"检查也看不到它们,于是把任务误标 COMPLETED,剩余视频永远不再被处理。 - 任务行改以 `CREATING` 入库,明细全部登记完才置 QUEUED(引擎只取 QUEUED, 看不到半成品);登记中途异常置 FAILED 并把异常交给路由层。 - 启动时把上一进程遗留的 CREATING 统一置 FAILED(`fail_creating_batch_jobs`), 避免明细写一半被热重载/强杀后留下看不见的残留任务。 - 回归测试:明细每写一条就问一次引擎队列(写入过程中取不到任务);中途失败记 FAILED;启动清理遗留 CREATING。
This commit is contained in:
@@ -590,6 +590,20 @@ class Database:
|
||||
conn.execute(f"UPDATE batch_jobs SET {assignments} WHERE id = ?", values)
|
||||
|
||||
|
||||
def fail_creating_batch_jobs(self, reason: str) -> int:
|
||||
"""把停留在 CREATING 的批量任务置 FAILED,返回处理条数。
|
||||
|
||||
CREATING 只存在于 create_job 逐条登记明细期间;进程被杀或热重载后没有任何
|
||||
线程会推进它(引擎只取 QUEUED),启动时统一收尾成可见的失败记录。
|
||||
"""
|
||||
with self._connect() as conn:
|
||||
cursor = conn.execute(
|
||||
"UPDATE batch_jobs SET status = 'FAILED', error = ?, updated_at = ? "
|
||||
"WHERE status = 'CREATING'",
|
||||
(reason, _now_iso()),
|
||||
)
|
||||
return int(cursor.rowcount or 0)
|
||||
|
||||
def sync_batch_job_progress(self, job_id: str) -> None:
|
||||
"""按视频明细实时对齐任务的 total/done/failed 汇总并落库。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user