diff options
author | Chocobozzz <me@florianbigard.com> | 2021-12-03 14:40:29 +0100 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2021-12-03 14:40:29 +0100 |
commit | 025d858e7997d6b9895fa6b7beaf23bf5ff814af (patch) | |
tree | aaf56b415d1e31f681a14a67a235b5af3a960ef1 | |
parent | 453537426a4e172967320cfac4bb1f53c28d94f5 (diff) | |
download | PeerTube-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.ts | 27 | ||||
-rw-r--r-- | server/models/video/video-job-info.ts | 6 |
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 | |||
76 | export { | ||
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 | ||
125 | async function handleWebTorrentOptimizeJob (job: Job, payload: OptimizeTranscodingPayload, video: MVideoFullLight, user: MUserId) { | 134 | async 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 | ||
162 | async function onVideoFileOptimizer ( | 171 | async 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 | |||
214 | async function createHlsJobIfEnabled (user: MUserId, payload: { | 225 | async 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 | |||
246 | export { | ||
247 | processVideoTranscoding, | ||
248 | createHlsJobIfEnabled, | ||
249 | onNewWebTorrentFileResolution | ||
250 | } | ||
251 | |||
252 | // --------------------------------------------------------------------------- | ||
253 | |||
254 | async function createLowerResolutionsJobs (options: { | 255 | async 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 | |||
3 | import { AttributesOnly } from '@shared/core-utils' | 3 | import { AttributesOnly } from '@shared/core-utils' |
4 | import { VideoModel } from './video' | 4 | import { VideoModel } from './video' |
5 | 5 | ||
6 | export 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 }>(` |