Fix integrity with transcoding jobs
authorChocobozzz <florian.bigard@gmail.com>
Thu, 26 Oct 2017 12:22:37 +0000 (14:22 +0200)
committerChocobozzz <florian.bigard@gmail.com>
Thu, 26 Oct 2017 12:22:37 +0000 (14:22 +0200)
server/lib/jobs/handlers/video-file-optimizer.ts
server/lib/jobs/handlers/video-file-transcoder.ts

index 799ba8b01ee88002b48ca4de4034512ee4670f4e..ccded4721de67e2c10258f451bf551432e97e1c7 100644 (file)
@@ -29,17 +29,22 @@ async function onSuccess (jobId: number, video: VideoInstance) {
 
   logger.info('Job %d is a success.', jobId)
 
-  const remoteVideo = await video.toAddRemoteJSON()
+  // Maybe the video changed in database, refresh it
+  const videoDatabase = await db.Video.loadByUUIDAndPopulateAuthorAndPodAndTags(video.uuid)
+  // Video does not exist anymore
+  if (!videoDatabase) return undefined
+
+  const remoteVideo = await videoDatabase.toAddRemoteJSON()
 
   // Now we'll add the video's meta data to our friends
   await addVideoToFriends(remoteVideo, null)
 
-  const originalFileHeight = await video.getOriginalFileHeight()
+  const originalFileHeight = await videoDatabase.getOriginalFileHeight()
   // Create transcoding jobs if there are enabled resolutions
 
   const resolutionsEnabled = computeResolutionsToTranscode(originalFileHeight)
   logger.info(
-    'Resolutions computed for video %s and origin file height of %d.', video.uuid, originalFileHeight,
+    'Resolutions computed for video %s and origin file height of %d.', videoDatabase.uuid, originalFileHeight,
     { resolutions: resolutionsEnabled }
   )
 
@@ -50,7 +55,7 @@ async function onSuccess (jobId: number, video: VideoInstance) {
 
         for (const resolution of resolutionsEnabled) {
           const dataInput = {
-            videoUUID: video.uuid,
+            videoUUID: videoDatabase.uuid,
             resolution
           }
 
@@ -61,7 +66,7 @@ async function onSuccess (jobId: number, video: VideoInstance) {
         await Promise.all(tasks)
       })
 
-      logger.info('Transcoding jobs created for uuid %s.', video.uuid, { resolutionsEnabled })
+      logger.info('Transcoding jobs created for uuid %s.', videoDatabase.uuid, { resolutionsEnabled })
     } catch (err) {
       logger.warn('Cannot transcode the video.', err)
     }
index b240ff58af52def8faa5aaa4ae9b28f2d4ce68cc..a8d80ed4570411badc5ef02e5d4bd8a10a5cdeba 100644 (file)
@@ -22,15 +22,22 @@ function onError (err: Error, jobId: number) {
   return Promise.resolve()
 }
 
-function onSuccess (jobId: number, video: VideoInstance) {
+async function onSuccess (jobId: number, video: VideoInstance) {
   if (video === undefined) return undefined
 
   logger.info('Job %d is a success.', jobId)
 
-  const remoteVideo = video.toUpdateRemoteJSON()
+  // Maybe the video changed in database, refresh it
+  const videoDatabase = await db.Video.loadByUUIDAndPopulateAuthorAndPodAndTags(video.uuid)
+  // Video does not exist anymore
+  if (!videoDatabase) return undefined
+
+  const remoteVideo = videoDatabase.toUpdateRemoteJSON()
 
   // Now we'll add the video's meta data to our friends
-  return updateVideoToFriends(remoteVideo, null)
+  await updateVideoToFriends(remoteVideo, null)
+
+  return
 }
 
 // ---------------------------------------------------------------------------