-import { retryTransactionWrapper } from '@server/helpers/database-utils'
+import { throttle } from 'lodash'
+import { retryTransactionWrapper, saveInTransactionWithRetries } from '@server/helpers/database-utils'
import { logger, loggerTagsFactory } from '@server/helpers/logger'
import { RUNNER_JOBS } from '@server/initializers/constants'
import { sequelizeTypescript } from '@server/initializers/database'
RunnerJobLiveRTMPHLSTranscodingPayload,
RunnerJobLiveRTMPHLSTranscodingPrivatePayload,
RunnerJobState,
+ RunnerJobStudioTranscodingPayload,
RunnerJobSuccessPayload,
RunnerJobType,
RunnerJobUpdatePayload,
+ RunnerJobVideoStudioTranscodingPrivatePayload,
RunnerJobVODAudioMergeTranscodingPayload,
RunnerJobVODAudioMergeTranscodingPrivatePayload,
RunnerJobVODHLSTranscodingPayload,
RunnerJobVODWebVideoTranscodingPayload,
RunnerJobVODWebVideoTranscodingPrivatePayload
} from '@shared/models'
-import { throttle } from 'lodash'
type CreateRunnerJobArg =
{
type: Extract<RunnerJobType, 'live-rtmp-hls-transcoding'>
payload: RunnerJobLiveRTMPHLSTranscodingPayload
privatePayload: RunnerJobLiveRTMPHLSTranscodingPrivatePayload
+ } |
+ {
+ type: Extract<RunnerJobType, 'video-studio-transcoding'>
+ payload: RunnerJobStudioTranscodingPayload
+ privatePayload: RunnerJobVideoStudioTranscodingPrivatePayload
}
export abstract class AbstractJobHandler <C, U extends RunnerJobUpdatePayload, S extends RunnerJobSuccessPayload> {
}): Promise<MRunnerJob> {
const { priority, dependsOnRunnerJob } = options
+ logger.debug('Creating runner job', { options, ...this.lTags(options.type) })
+
const runnerJob = new RunnerJobModel({
...pick(options, [ 'type', 'payload', 'privatePayload' ]),
}) {
const { runnerJob } = options
+ runnerJob.state = RunnerJobState.COMPLETING
+ await saveInTransactionWithRetries(runnerJob)
+
try {
await this.specificComplete(options)
runnerJob.progress = null
runnerJob.finishedAt = new Date()
- await retryTransactionWrapper(() => {
- return sequelizeTypescript.transaction(async transaction => {
- await runnerJob.save({ transaction })
- })
- })
+ await saveInTransactionWithRetries(runnerJob)
const [ affectedCount ] = await RunnerJobModel.updateDependantJobsOf(runnerJob)