]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/lib/transcoding/shared/job-builders/transcoding-job-queue-builder.ts
Reload the video after waiting for the files lock
[github/Chocobozzz/PeerTube.git] / server / lib / transcoding / shared / job-builders / transcoding-job-queue-builder.ts
index 7c892718b9a06ab92dfbbd6ec6fecf5bcf260ef3..fa2ac70bf1d1646c978e657fdb6fe438d464d001 100644 (file)
@@ -16,6 +16,7 @@ import {
   OptimizeTranscodingPayload,
   VideoTranscodingPayload
 } from '@shared/models'
+import { getTranscodingJobPriority } from '../../transcoding-priority'
 import { canDoQuickTranscode } from '../../transcoding-quick-transcode'
 import { computeResolutionsToTranscode } from '../../transcoding-resolutions'
 import { AbstractJobBuilder } from './abstract-job-builder'
@@ -27,15 +28,21 @@ export class TranscodingJobQueueBuilder extends AbstractJobBuilder {
     videoFile: MVideoFile
     isNewVideo: boolean
     user: MUserId
+    videoFileAlreadyLocked: boolean
   }) {
-    const { video, videoFile, isNewVideo, user } = options
+    const { video, videoFile, isNewVideo, user, videoFileAlreadyLocked } = options
 
     let mergeOrOptimizePayload: MergeAudioTranscodingPayload | OptimizeTranscodingPayload
     let nextTranscodingSequentialJobPayloads: (NewWebTorrentResolutionTranscodingPayload | HLSTranscodingPayload)[][] = []
 
-    const mutexReleaser = await VideoPathManager.Instance.lockFiles(video.uuid)
+    const mutexReleaser = videoFileAlreadyLocked
+      ? () => {}
+      : await VideoPathManager.Instance.lockFiles(video.uuid)
 
     try {
+      await video.reload()
+      await videoFile.reload()
+
       await VideoPathManager.Instance.makeAvailableVideoFile(videoFile.withVideoOrPlaylist(video), async videoFilePath => {
         const probe = await ffprobePromise(videoFilePath)
 
@@ -76,9 +83,10 @@ export class TranscodingJobQueueBuilder extends AbstractJobBuilder {
 
         nextTranscodingSequentialJobPayloads = [ ...nextTranscodingSequentialJobPayloads, ...lowerResolutionJobPayloads ]
 
+        const hasChildren = nextTranscodingSequentialJobPayloads.length !== 0
         mergeOrOptimizePayload = videoFile.isAudio()
-          ? this.buildMergeAudioPayload({ videoUUID: video.uuid, isNewVideo })
-          : this.buildOptimizePayload({ videoUUID: video.uuid, isNewVideo, quickTranscode })
+          ? this.buildMergeAudioPayload({ videoUUID: video.uuid, isNewVideo, hasChildren })
+          : this.buildOptimizePayload({ videoUUID: video.uuid, isNewVideo, quickTranscode, hasChildren })
       })
     } finally {
       mutexReleaser()
@@ -100,7 +108,9 @@ export class TranscodingJobQueueBuilder extends AbstractJobBuilder {
 
     const mergeOrOptimizeJob = await this.buildTranscodingJob({ payload: mergeOrOptimizePayload, user })
 
-    return JobQueue.Instance.createSequentialJobFlow(...[ mergeOrOptimizeJob, transcodingJobBuilderJob ])
+    await JobQueue.Instance.createSequentialJobFlow(...[ mergeOrOptimizeJob, transcodingJobBuilderJob ])
+
+    await VideoJobInfoModel.increaseOrCreate(video.uuid, 'pendingTranscode')
   }
 
   // ---------------------------------------------------------------------------
@@ -172,7 +182,7 @@ export class TranscodingJobQueueBuilder extends AbstractJobBuilder {
 
     return {
       type: 'video-transcoding' as 'video-transcoding',
-      priority: await this.getTranscodingJobPriority({ user, fallback: undefined }),
+      priority: await getTranscodingJobPriority({ user, type: 'vod', fallback: undefined }),
       payload
     }
   }
@@ -279,15 +289,17 @@ export class TranscodingJobQueueBuilder extends AbstractJobBuilder {
   private buildMergeAudioPayload (options: {
     videoUUID: string
     isNewVideo: boolean
+    hasChildren: boolean
   }): MergeAudioTranscodingPayload {
-    const { videoUUID, isNewVideo } = options
+    const { videoUUID, isNewVideo, hasChildren } = options
 
     return {
       type: 'merge-audio-to-webtorrent',
       resolution: DEFAULT_AUDIO_RESOLUTION,
       fps: VIDEO_TRANSCODING_FPS.AUDIO_MERGE,
       videoUUID,
-      isNewVideo
+      isNewVideo,
+      hasChildren
     }
   }
 
@@ -295,13 +307,15 @@ export class TranscodingJobQueueBuilder extends AbstractJobBuilder {
     videoUUID: string
     quickTranscode: boolean
     isNewVideo: boolean
+    hasChildren: boolean
   }): OptimizeTranscodingPayload {
-    const { videoUUID, quickTranscode, isNewVideo } = options
+    const { videoUUID, quickTranscode, isNewVideo, hasChildren } = options
 
     return {
       type: 'optimize-to-webtorrent',
       videoUUID,
       isNewVideo,
+      hasChildren,
       quickTranscode
     }
   }