aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2021-12-03 14:40:29 +0100
committerChocobozzz <me@florianbigard.com>2021-12-03 14:40:29 +0100
commit025d858e7997d6b9895fa6b7beaf23bf5ff814af (patch)
treeaaf56b415d1e31f681a14a67a235b5af3a960ef1
parent453537426a4e172967320cfac4bb1f53c28d94f5 (diff)
downloadPeerTube-025d858e7997d6b9895fa6b7beaf23bf5ff814af.tar.gz
PeerTube-025d858e7997d6b9895fa6b7beaf23bf5ff814af.tar.zst
PeerTube-025d858e7997d6b9895fa6b7beaf23bf5ff814af.zip
Fix pending transcoding with failed job
-rw-r--r--server/lib/job-queue/handlers/video-transcoding.ts27
-rw-r--r--server/models/video/video-job-info.ts6
2 files changed, 18 insertions, 15 deletions
diff --git a/server/lib/job-queue/handlers/video-transcoding.ts b/server/lib/job-queue/handlers/video-transcoding.ts
index 0d80eb6c5..0edcdcba3 100644
--- a/server/lib/job-queue/handlers/video-transcoding.ts
+++ b/server/lib/job-queue/handlers/video-transcoding.ts
@@ -53,6 +53,7 @@ async function processVideoTranscoding (job: Job) {
53 53
54 if (!handler) { 54 if (!handler) {
55 await moveToFailedTranscodingState(video) 55 await moveToFailedTranscodingState(video)
56 await VideoJobInfoModel.decrease(video.uuid, 'pendingTranscode')
56 57
57 throw new Error('Cannot find transcoding handler for ' + payload.type) 58 throw new Error('Cannot find transcoding handler for ' + payload.type)
58 } 59 }
@@ -62,6 +63,8 @@ async function processVideoTranscoding (job: Job) {
62 } catch (error) { 63 } catch (error) {
63 await moveToFailedTranscodingState(video) 64 await moveToFailedTranscodingState(video)
64 65
66 await VideoJobInfoModel.decrease(video.uuid, 'pendingTranscode')
67
65 throw error 68 throw error
66 } 69 }
67 70
@@ -69,6 +72,12 @@ async function processVideoTranscoding (job: Job) {
69} 72}
70 73
71// --------------------------------------------------------------------------- 74// ---------------------------------------------------------------------------
75
76export {
77 processVideoTranscoding
78}
79
80// ---------------------------------------------------------------------------
72// Job handlers 81// Job handlers
73// --------------------------------------------------------------------------- 82// ---------------------------------------------------------------------------
74 83
@@ -119,7 +128,7 @@ async function handleWebTorrentMergeAudioJob (job: Job, payload: MergeAudioTrans
119 128
120 logger.info('Merge audio transcoding job for %s ended.', video.uuid, lTags(video.uuid)) 129 logger.info('Merge audio transcoding job for %s ended.', video.uuid, lTags(video.uuid))
121 130
122 await onVideoFileOptimizer(video, payload, 'video', user) 131 await onVideoFirstWebTorrentTranscoding(video, payload, 'video', user)
123} 132}
124 133
125async function handleWebTorrentOptimizeJob (job: Job, payload: OptimizeTranscodingPayload, video: MVideoFullLight, user: MUserId) { 134async function handleWebTorrentOptimizeJob (job: Job, payload: OptimizeTranscodingPayload, video: MVideoFullLight, user: MUserId) {
@@ -129,7 +138,7 @@ async function handleWebTorrentOptimizeJob (job: Job, payload: OptimizeTranscodi
129 138
130 logger.info('Optimize transcoding job for %s ended.', video.uuid, lTags(video.uuid)) 139 logger.info('Optimize transcoding job for %s ended.', video.uuid, lTags(video.uuid))
131 140
132 await onVideoFileOptimizer(video, payload, transcodeType, user) 141 await onVideoFirstWebTorrentTranscoding(video, payload, transcodeType, user)
133} 142}
134 143
135// --------------------------------------------------------------------------- 144// ---------------------------------------------------------------------------
@@ -159,7 +168,7 @@ async function onHlsPlaylistGeneration (video: MVideoFullLight, user: MUser, pay
159 await retryTransactionWrapper(moveToNextState, video, payload.isNewVideo) 168 await retryTransactionWrapper(moveToNextState, video, payload.isNewVideo)
160} 169}
161 170
162async function onVideoFileOptimizer ( 171async function onVideoFirstWebTorrentTranscoding (
163 videoArg: MVideoWithFile, 172 videoArg: MVideoWithFile,
164 payload: OptimizeTranscodingPayload | MergeAudioTranscodingPayload, 173 payload: OptimizeTranscodingPayload | MergeAudioTranscodingPayload,
165 transcodeType: TranscodeOptionsType, 174 transcodeType: TranscodeOptionsType,
@@ -211,6 +220,8 @@ async function onNewWebTorrentFileResolution (
211 await retryTransactionWrapper(moveToNextState, video, payload.isNewVideo) 220 await retryTransactionWrapper(moveToNextState, video, payload.isNewVideo)
212} 221}
213 222
223// ---------------------------------------------------------------------------
224
214async function createHlsJobIfEnabled (user: MUserId, payload: { 225async function createHlsJobIfEnabled (user: MUserId, payload: {
215 videoUUID: string 226 videoUUID: string
216 resolution: number 227 resolution: number
@@ -241,16 +252,6 @@ async function createHlsJobIfEnabled (user: MUserId, payload: {
241 return true 252 return true
242} 253}
243 254
244// ---------------------------------------------------------------------------
245
246export {
247 processVideoTranscoding,
248 createHlsJobIfEnabled,
249 onNewWebTorrentFileResolution
250}
251
252// ---------------------------------------------------------------------------
253
254async function createLowerResolutionsJobs (options: { 255async function createLowerResolutionsJobs (options: {
255 video: MVideoFullLight 256 video: MVideoFullLight
256 user: MUserId 257 user: MUserId
diff --git a/server/models/video/video-job-info.ts b/server/models/video/video-job-info.ts
index cb1f3f2f0..7da5128d7 100644
--- a/server/models/video/video-job-info.ts
+++ b/server/models/video/video-job-info.ts
@@ -3,6 +3,8 @@ import { AllowNull, BelongsTo, Column, CreatedAt, Default, ForeignKey, IsInt, Mo
3import { AttributesOnly } from '@shared/core-utils' 3import { AttributesOnly } from '@shared/core-utils'
4import { VideoModel } from './video' 4import { VideoModel } from './video'
5 5
6export type VideoJobInfoColumnType = 'pendingMove' | 'pendingTranscode'
7
6@Table({ 8@Table({
7 tableName: 'videoJobInfo', 9 tableName: 'videoJobInfo',
8 indexes: [ 10 indexes: [
@@ -57,7 +59,7 @@ export class VideoJobInfoModel extends Model<Partial<AttributesOnly<VideoJobInfo
57 return VideoJobInfoModel.findOne({ where, transaction }) 59 return VideoJobInfoModel.findOne({ where, transaction })
58 } 60 }
59 61
60 static async increaseOrCreate (videoUUID: string, column: 'pendingMove' | 'pendingTranscode'): Promise<number> { 62 static async increaseOrCreate (videoUUID: string, column: VideoJobInfoColumnType): Promise<number> {
61 const options = { type: QueryTypes.SELECT as QueryTypes.SELECT, bind: { videoUUID } } 63 const options = { type: QueryTypes.SELECT as QueryTypes.SELECT, bind: { videoUUID } }
62 64
63 const [ { pendingMove } ] = await VideoJobInfoModel.sequelize.query<{ pendingMove: number }>(` 65 const [ { pendingMove } ] = await VideoJobInfoModel.sequelize.query<{ pendingMove: number }>(`
@@ -79,7 +81,7 @@ export class VideoJobInfoModel extends Model<Partial<AttributesOnly<VideoJobInfo
79 return pendingMove 81 return pendingMove
80 } 82 }
81 83
82 static async decrease (videoUUID: string, column: 'pendingMove' | 'pendingTranscode'): Promise<number> { 84 static async decrease (videoUUID: string, column: VideoJobInfoColumnType): Promise<number> {
83 const options = { type: QueryTypes.SELECT as QueryTypes.SELECT, bind: { videoUUID } } 85 const options = { type: QueryTypes.SELECT as QueryTypes.SELECT, bind: { videoUUID } }
84 86
85 const [ { pendingMove } ] = await VideoJobInfoModel.sequelize.query<{ pendingMove: number }>(` 87 const [ { pendingMove } ] = await VideoJobInfoModel.sequelize.query<{ pendingMove: number }>(`