From 54d1e4398999ac75a5b75ee41dbcf6fecfb34122 Mon Sep 17 00:00:00 2001 From: ilfarpro Date: Tue, 14 Oct 2025 21:15:37 +0300 Subject: [PATCH] handle deleted jobs and move on --- .../src/server/process/shared/common.ts | 20 ++++- .../process/shared/process-storyboard.ts | 23 ++++- .../server/process/shared/process-studio.ts | 28 ++++++- .../process/shared/process-transcription.ts | 28 ++++++- .../src/server/process/shared/process-vod.ts | 84 +++++++++++++++++-- 5 files changed, 172 insertions(+), 11 deletions(-) diff --git a/apps/peertube-runner/src/server/process/shared/common.ts b/apps/peertube-runner/src/server/process/shared/common.ts index 45d6b586653..c72f4f187b0 100644 --- a/apps/peertube-runner/src/server/process/shared/common.ts +++ b/apps/peertube-runner/src/server/process/shared/common.ts @@ -60,14 +60,19 @@ export function scheduleTranscodingProgress (options: { runnerToken: string job: JobWithToken progressGetter: () => number + onAbort?: () => void }) { - const { job, server, progressGetter, runnerToken } = options + const { job, server, progressGetter, runnerToken, onAbort } = options const updateInterval = ConfigManager.Instance.isTestInstance() ? 500 : 60000 + let aborted = false + const update = () => { + if (aborted) return + job.progress = progressGetter() || 0 server.runnerJobs.update({ @@ -75,7 +80,18 @@ export function scheduleTranscodingProgress (options: { jobUUID: job.uuid, runnerToken, progress: job.progress - }).catch(err => logger.error({ err }, 'Cannot send job progress')) + }).catch(err => { + // Job was deleted on the server, gracefully abort processing + if (err.res?.status === 404) { + logger.info({ jobUUID: job.uuid }, 'Job was deleted on the server, aborting processing') + aborted = true + clearInterval(interval) + if (onAbort) onAbort() + return + } + + logger.error({ err }, 'Cannot send job progress') + }) } const interval = setInterval(() => { diff --git a/apps/peertube-runner/src/server/process/shared/process-storyboard.ts b/apps/peertube-runner/src/server/process/shared/process-storyboard.ts index fdd48a972ab..5bea5ac7cab 100644 --- a/apps/peertube-runner/src/server/process/shared/process-storyboard.ts +++ b/apps/peertube-runner/src/server/process/shared/process-storyboard.ts @@ -13,6 +13,7 @@ export async function processGenerateStoryboard (options: ProcessOptions ffmpegProgress + progressGetter: () => ffmpegProgress, + onAbort: () => { + jobAborted = true + } }) try { @@ -28,6 +32,11 @@ export async function processGenerateStoryboard (options: ProcessOptions tasksProgress + progressGetter: () => tasksProgress, + onAbort: () => { + jobAborted = true + } }) try { @@ -50,12 +54,22 @@ export async function processStudioTranscoding (options: ProcessOptions undefined + progressGetter: () => undefined, + onAbort: () => { + jobAborted = true + } }) const outputPath = join(ConfigManager.Instance.getTranscriptionDirectory(), buildSUUID()) @@ -38,6 +42,11 @@ export async function processVideoTranscription (options: ProcessOptions ffmpegProgress + progressGetter: () => ffmpegProgress, + onAbort: () => { + jobAborted = true + } }) try { @@ -50,9 +56,14 @@ export async function processWebVideoTranscoding (options: ProcessOptions { ffmpegProgress = progress } @@ -72,6 +83,11 @@ export async function processWebVideoTranscoding (options: ProcessOptions ffmpegProgress + progressGetter: () => ffmpegProgress, + onAbort: () => { + jobAborted = true + } }) try { @@ -117,6 +145,11 @@ export async function processHLSTranscoding (options: ProcessOptions { ffmpegProgress = progress } @@ -153,6 +191,11 @@ export async function processHLSTranscoding (options: ProcessOptions ffmpegProgress + progressGetter: () => ffmpegProgress, + onAbort: () => { + jobAborted = true + } }) try { @@ -200,12 +255,17 @@ export async function processAudioMergeTranscoding (options: ProcessOptions { ffmpegProgress = progress } @@ -225,6 +285,11 @@ export async function processAudioMergeTranscoding (options: ProcessOptions