aboutsummaryrefslogtreecommitdiffhomepage
path: root/server
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2021-05-05 09:25:11 +0200
committerChocobozzz <me@florianbigard.com>2021-05-05 09:32:20 +0200
commita6e37eebfbef9aef91e35173ed799afb6c4a288b (patch)
treefacc792949953f70453f7c59af5c6fde97d4a45c /server
parent494e60804d15dfe1675d0390c8a7317911fd643f (diff)
downloadPeerTube-a6e37eebfbef9aef91e35173ed799afb6c4a288b.tar.gz
PeerTube-a6e37eebfbef9aef91e35173ed799afb6c4a288b.tar.zst
PeerTube-a6e37eebfbef9aef91e35173ed799afb6c4a288b.zip
Fix transcoding job priority
New resolution jobs are also important if waiting for transcoding is enabled since we publish the video after the first resolution generation
Diffstat (limited to 'server')
-rw-r--r--server/initializers/constants.ts5
-rw-r--r--server/lib/job-queue/handlers/video-transcoding.ts6
-rw-r--r--server/lib/video.ts8
-rw-r--r--server/tests/api/videos/video-transcoder.ts7
4 files changed, 9 insertions, 17 deletions
diff --git a/server/initializers/constants.ts b/server/initializers/constants.ts
index 37a963760..d390fd95e 100644
--- a/server/initializers/constants.ts
+++ b/server/initializers/constants.ts
@@ -188,10 +188,7 @@ const REPEAT_JOBS: { [ id: string ]: EveryRepeatOptions | CronRepeatOptions } =
188 } 188 }
189} 189}
190const JOB_PRIORITY = { 190const JOB_PRIORITY = {
191 TRANSCODING: { 191 TRANSCODING: 100
192 OPTIMIZER: 10,
193 NEW_RESOLUTION: 100
194 }
195} 192}
196 193
197const BROADCAST_CONCURRENCY = 30 // How many requests in parallel we do in activitypub-http-broadcast job 194const BROADCAST_CONCURRENCY = 30 // How many requests in parallel we do in activitypub-http-broadcast job
diff --git a/server/lib/job-queue/handlers/video-transcoding.ts b/server/lib/job-queue/handlers/video-transcoding.ts
index 4ee2b2df2..dbf412fbb 100644
--- a/server/lib/job-queue/handlers/video-transcoding.ts
+++ b/server/lib/job-queue/handlers/video-transcoding.ts
@@ -1,7 +1,7 @@
1import * as Bull from 'bull' 1import * as Bull from 'bull'
2import { TranscodeOptionsType } from '@server/helpers/ffmpeg-utils' 2import { TranscodeOptionsType } from '@server/helpers/ffmpeg-utils'
3import { JOB_PRIORITY } from '@server/initializers/constants' 3import { JOB_PRIORITY } from '@server/initializers/constants'
4import { getJobTranscodingPriorityMalus, publishAndFederateIfNeeded } from '@server/lib/video' 4import { getTranscodingJobPriority, publishAndFederateIfNeeded } from '@server/lib/video'
5import { getVideoFilePath } from '@server/lib/video-paths' 5import { getVideoFilePath } from '@server/lib/video-paths'
6import { UserModel } from '@server/models/account/user' 6import { UserModel } from '@server/models/account/user'
7import { MUser, MUserId, MVideoFullLight, MVideoUUID, MVideoWithFile } from '@server/types/models' 7import { MUser, MUserId, MVideoFullLight, MVideoUUID, MVideoWithFile } from '@server/types/models'
@@ -215,7 +215,7 @@ async function createHlsJobIfEnabled (user: MUserId, payload: {
215 if (!payload || CONFIG.TRANSCODING.HLS.ENABLED !== true) return false 215 if (!payload || CONFIG.TRANSCODING.HLS.ENABLED !== true) return false
216 216
217 const jobOptions = { 217 const jobOptions = {
218 priority: JOB_PRIORITY.TRANSCODING.NEW_RESOLUTION + await getJobTranscodingPriorityMalus(user) 218 priority: await getTranscodingJobPriority(user)
219 } 219 }
220 220
221 const hlsTranscodingPayload: HLSTranscodingPayload = { 221 const hlsTranscodingPayload: HLSTranscodingPayload = {
@@ -272,7 +272,7 @@ async function createLowerResolutionsJobs (
272 resolutionCreated.push(resolution) 272 resolutionCreated.push(resolution)
273 273
274 const jobOptions = { 274 const jobOptions = {
275 priority: JOB_PRIORITY.TRANSCODING.NEW_RESOLUTION + await getJobTranscodingPriorityMalus(user) 275 priority: await getTranscodingJobPriority(user)
276 } 276 }
277 277
278 JobQueue.Instance.createJob({ type: 'video-transcoding', payload: dataInput }, jobOptions) 278 JobQueue.Instance.createJob({ type: 'video-transcoding', payload: dataInput }, jobOptions)
diff --git a/server/lib/video.ts b/server/lib/video.ts
index e381e0a69..9469b8178 100644
--- a/server/lib/video.ts
+++ b/server/lib/video.ts
@@ -121,19 +121,19 @@ async function addOptimizeOrMergeAudioJob (video: MVideo, videoFile: MVideoFile,
121 } 121 }
122 122
123 const jobOptions = { 123 const jobOptions = {
124 priority: JOB_PRIORITY.TRANSCODING.OPTIMIZER + await getJobTranscodingPriorityMalus(user) 124 priority: await getTranscodingJobPriority(user)
125 } 125 }
126 126
127 return JobQueue.Instance.createJobWithPromise({ type: 'video-transcoding', payload: dataInput }, jobOptions) 127 return JobQueue.Instance.createJobWithPromise({ type: 'video-transcoding', payload: dataInput }, jobOptions)
128} 128}
129 129
130async function getJobTranscodingPriorityMalus (user: MUserId) { 130async function getTranscodingJobPriority (user: MUserId) {
131 const now = new Date() 131 const now = new Date()
132 const lastWeek = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 7) 132 const lastWeek = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 7)
133 133
134 const videoUploadedByUser = await VideoModel.countVideosUploadedByUserSince(user.id, lastWeek) 134 const videoUploadedByUser = await VideoModel.countVideosUploadedByUserSince(user.id, lastWeek)
135 135
136 return videoUploadedByUser 136 return JOB_PRIORITY.TRANSCODING + videoUploadedByUser
137} 137}
138 138
139// --------------------------------------------------------------------------- 139// ---------------------------------------------------------------------------
@@ -144,5 +144,5 @@ export {
144 buildVideoThumbnailsFromReq, 144 buildVideoThumbnailsFromReq,
145 setVideoTags, 145 setVideoTags,
146 addOptimizeOrMergeAudioJob, 146 addOptimizeOrMergeAudioJob,
147 getJobTranscodingPriorityMalus 147 getTranscodingJobPriority
148} 148}
diff --git a/server/tests/api/videos/video-transcoder.ts b/server/tests/api/videos/video-transcoder.ts
index 1058baaa3..1c99f26df 100644
--- a/server/tests/api/videos/video-transcoder.ts
+++ b/server/tests/api/videos/video-transcoder.ts
@@ -721,12 +721,7 @@ describe('Test video transcoding', function () {
721 expect(webtorrentJobs).to.have.lengthOf(6) 721 expect(webtorrentJobs).to.have.lengthOf(6)
722 expect(optimizeJobs).to.have.lengthOf(1) 722 expect(optimizeJobs).to.have.lengthOf(1)
723 723
724 for (const j of optimizeJobs) { 724 for (const j of optimizeJobs.concat(hlsJobs.concat(webtorrentJobs))) {
725 expect(j.priority).to.be.greaterThan(11)
726 expect(j.priority).to.be.lessThan(50)
727 }
728
729 for (const j of hlsJobs.concat(webtorrentJobs)) {
730 expect(j.priority).to.be.greaterThan(100) 725 expect(j.priority).to.be.greaterThan(100)
731 expect(j.priority).to.be.lessThan(150) 726 expect(j.priority).to.be.lessThan(150)
732 } 727 }