More robust move to object storage job failure

pull/5067/head
Chocobozzz 2022-06-16 14:29:53 +02:00
parent 0c9a835466
commit 3256771725
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
2 changed files with 23 additions and 5 deletions

View File

@ -48,15 +48,24 @@ export async function processMoveToObjectStorage (job: Job) {
await doAfterLastJob({ video, previousVideoState: payload.previousVideoState, isNewVideo: payload.isNewVideo })
}
} catch (err) {
logger.error('Cannot move video %s to object storage.', video.url, { err, ...lTags })
await moveToFailedMoveToObjectStorageState(video)
await VideoJobInfoModel.abortAllTasks(video.uuid, 'pendingMove')
await onMoveToObjectStorageFailure(job, err)
}
return payload.videoUUID
}
export async function onMoveToObjectStorageFailure (job: Job, err: any) {
const payload = job.data as MoveObjectStoragePayload
const video = await VideoModel.loadWithFiles(payload.videoUUID)
if (!video) return
logger.error('Cannot move video %s to object storage.', video.url, { err, ...lTagsBase(video.uuid, video.url) })
await moveToFailedMoveToObjectStorageState(video)
await VideoJobInfoModel.abortAllTasks(video.uuid, 'pendingMove')
}
// ---------------------------------------------------------------------------
async function moveWebTorrentFiles (video: MVideoWithAllFiles) {

View File

@ -33,7 +33,7 @@ import { refreshAPObject } from './handlers/activitypub-refresher'
import { processActorKeys } from './handlers/actor-keys'
import { processEmail } from './handlers/email'
import { processManageVideoTorrent } from './handlers/manage-video-torrent'
import { processMoveToObjectStorage } from './handlers/move-to-object-storage'
import { onMoveToObjectStorageFailure, processMoveToObjectStorage } from './handlers/move-to-object-storage'
import { processVideoFileImport } from './handlers/video-file-import'
import { processVideoImport } from './handlers/video-import'
import { processVideoLiveEnding } from './handlers/video-live-ending'
@ -86,6 +86,10 @@ const handlers: { [id in JobType]: (job: Job) => Promise<any> } = {
'video-studio-edition': processVideoStudioEdition
}
const errorHandlers: { [id in JobType]?: (job: Job, err: any) => Promise<any> } = {
'move-to-object-storage': onMoveToObjectStorageFailure
}
const jobTypes: JobType[] = [
'activitypub-follow',
'activitypub-http-broadcast',
@ -159,6 +163,11 @@ class JobQueue {
: 'error'
logger.log(logLevel, 'Cannot execute job %d in queue %s.', job.id, handlerName, { payload: job.data, err })
if (errorHandlers[job.name]) {
errorHandlers[job.name](job, err)
.catch(err => logger.error('Cannot run error handler for job failure %d in queue %s.', job.id, handlerName, { err }))
}
})
queue.on('error', err => {