diff options
Diffstat (limited to 'server/lib/runners/job-handlers/abstract-vod-transcoding-job-handler.ts')
-rw-r--r-- | server/lib/runners/job-handlers/abstract-vod-transcoding-job-handler.ts | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/server/lib/runners/job-handlers/abstract-vod-transcoding-job-handler.ts b/server/lib/runners/job-handlers/abstract-vod-transcoding-job-handler.ts new file mode 100644 index 000000000..517645848 --- /dev/null +++ b/server/lib/runners/job-handlers/abstract-vod-transcoding-job-handler.ts | |||
@@ -0,0 +1,71 @@ | |||
1 | |||
2 | import { retryTransactionWrapper } from '@server/helpers/database-utils' | ||
3 | import { logger } from '@server/helpers/logger' | ||
4 | import { moveToFailedTranscodingState, moveToNextState } from '@server/lib/video-state' | ||
5 | import { VideoJobInfoModel } from '@server/models/video/video-job-info' | ||
6 | import { MRunnerJob } from '@server/types/models/runners' | ||
7 | import { | ||
8 | LiveRTMPHLSTranscodingUpdatePayload, | ||
9 | RunnerJobSuccessPayload, | ||
10 | RunnerJobUpdatePayload, | ||
11 | RunnerJobVODPrivatePayload | ||
12 | } from '@shared/models' | ||
13 | import { AbstractJobHandler } from './abstract-job-handler' | ||
14 | import { loadTranscodingRunnerVideo } from './shared' | ||
15 | |||
16 | // eslint-disable-next-line max-len | ||
17 | export abstract class AbstractVODTranscodingJobHandler <C, U extends RunnerJobUpdatePayload, S extends RunnerJobSuccessPayload> extends AbstractJobHandler<C, U, S> { | ||
18 | |||
19 | // --------------------------------------------------------------------------- | ||
20 | |||
21 | protected isAbortSupported () { | ||
22 | return true | ||
23 | } | ||
24 | |||
25 | protected specificUpdate (_options: { | ||
26 | runnerJob: MRunnerJob | ||
27 | updatePayload?: LiveRTMPHLSTranscodingUpdatePayload | ||
28 | }) { | ||
29 | // empty | ||
30 | } | ||
31 | |||
32 | protected specificAbort (_options: { | ||
33 | runnerJob: MRunnerJob | ||
34 | }) { | ||
35 | // empty | ||
36 | } | ||
37 | |||
38 | protected async specificError (options: { | ||
39 | runnerJob: MRunnerJob | ||
40 | }) { | ||
41 | const video = await loadTranscodingRunnerVideo(options.runnerJob, this.lTags) | ||
42 | if (!video) return | ||
43 | |||
44 | await moveToFailedTranscodingState(video) | ||
45 | |||
46 | await VideoJobInfoModel.decrease(video.uuid, 'pendingTranscode') | ||
47 | } | ||
48 | |||
49 | protected async specificCancel (options: { | ||
50 | runnerJob: MRunnerJob | ||
51 | }) { | ||
52 | const { runnerJob } = options | ||
53 | |||
54 | const video = await loadTranscodingRunnerVideo(options.runnerJob, this.lTags) | ||
55 | if (!video) return | ||
56 | |||
57 | const pending = await VideoJobInfoModel.decrease(video.uuid, 'pendingTranscode') | ||
58 | |||
59 | logger.debug(`Pending transcode decreased to ${pending} after cancel`, this.lTags(video.uuid)) | ||
60 | |||
61 | if (pending === 0) { | ||
62 | logger.info( | ||
63 | `All transcoding jobs of ${video.uuid} have been processed or canceled, moving it to its next state`, | ||
64 | this.lTags(video.uuid) | ||
65 | ) | ||
66 | |||
67 | const privatePayload = runnerJob.privatePayload as RunnerJobVODPrivatePayload | ||
68 | await retryTransactionWrapper(moveToNextState, { video, isNewVideo: privatePayload.isNewVideo }) | ||
69 | } | ||
70 | } | ||
71 | } | ||