Fix upload transaction retry
This commit is contained in:
parent
3eba4fca2a
commit
52b6d97250
|
@ -1,3 +1,4 @@
|
|||
import { buildAspectRatio } from '@peertube/peertube-core-utils'
|
||||
import { ffprobePromise } from '@peertube/peertube-ffmpeg'
|
||||
import {
|
||||
LiveVideoCreate,
|
||||
|
@ -9,31 +10,30 @@ import {
|
|||
VideoStateType
|
||||
} from '@peertube/peertube-models'
|
||||
import { buildUUID } from '@peertube/peertube-node-utils'
|
||||
import { retryTransactionWrapper } from '@server/helpers/database-utils.js'
|
||||
import { LoggerTagsFn, logger } from '@server/helpers/logger.js'
|
||||
import { CONFIG } from '@server/initializers/config.js'
|
||||
import { sequelizeTypescript } from '@server/initializers/database.js'
|
||||
import { ScheduleVideoUpdateModel } from '@server/models/video/schedule-video-update.js'
|
||||
import { VideoLiveReplaySettingModel } from '@server/models/video/video-live-replay-setting.js'
|
||||
import { VideoLiveModel } from '@server/models/video/video-live.js'
|
||||
import { VideoPasswordModel } from '@server/models/video/video-password.js'
|
||||
import { VideoSourceModel } from '@server/models/video/video-source.js'
|
||||
import { VideoModel } from '@server/models/video/video.js'
|
||||
import { MVideoFullLight, MThumbnail, MChannel, MChannelAccountLight, MVideoFile, MUser } from '@server/types/models/index.js'
|
||||
import { MChannel, MChannelAccountLight, MThumbnail, MUser, MVideoFile, MVideoFullLight } from '@server/types/models/index.js'
|
||||
import { FilteredModelAttributes } from '@server/types/sequelize.js'
|
||||
import Ffmpeg from 'fluent-ffmpeg'
|
||||
import { move } from 'fs-extra/esm'
|
||||
import { getLocalVideoActivityPubUrl } from './activitypub/url.js'
|
||||
import { federateVideoIfNeeded } from './activitypub/videos/federate.js'
|
||||
import { Hooks } from './plugins/hooks.js'
|
||||
import { generateLocalVideoMiniature, updateLocalVideoMiniatureFromExisting } from './thumbnail.js'
|
||||
import { autoBlacklistVideoIfNeeded } from './video-blacklist.js'
|
||||
import { replaceChapters, replaceChaptersFromDescriptionIfNeeded } from './video-chapters.js'
|
||||
import { buildNewFile } from './video-file.js'
|
||||
import { addVideoJobsAfterCreation } from './video-jobs.js'
|
||||
import { VideoPathManager } from './video-path-manager.js'
|
||||
import { setVideoTags } from './video.js'
|
||||
import { FilteredModelAttributes } from '@server/types/sequelize.js'
|
||||
import { CONFIG } from '@server/initializers/config.js'
|
||||
import { Hooks } from './plugins/hooks.js'
|
||||
import Ffmpeg from 'fluent-ffmpeg'
|
||||
import { ScheduleVideoUpdateModel } from '@server/models/video/schedule-video-update.js'
|
||||
import { replaceChapters, replaceChaptersFromDescriptionIfNeeded } from './video-chapters.js'
|
||||
import { LoggerTagsFn, logger } from '@server/helpers/logger.js'
|
||||
import { retryTransactionWrapper } from '@server/helpers/database-utils.js'
|
||||
import { federateVideoIfNeeded } from './activitypub/videos/federate.js'
|
||||
import { buildAspectRatio } from '@peertube/peertube-core-utils'
|
||||
|
||||
type VideoAttributes = Omit<VideoCreate, 'channelId'> & {
|
||||
duration: number
|
||||
|
@ -197,7 +197,6 @@ export class LocalVideoCreator {
|
|||
videoLive.videoId = this.video.id
|
||||
this.video.VideoLive = await videoLive.save({ transaction })
|
||||
}
|
||||
|
||||
if (this.videoFile) {
|
||||
transaction.afterCommit(() => {
|
||||
addVideoJobsAfterCreation({ video: this.video, videoFile: this.videoFile })
|
||||
|
@ -206,6 +205,16 @@ export class LocalVideoCreator {
|
|||
} else {
|
||||
await federateVideoIfNeeded(this.video, true, transaction)
|
||||
}
|
||||
}).catch(err => {
|
||||
// Reset elements to reinsert them in the database
|
||||
this.video.isNewRecord = true
|
||||
this.videoFile.isNewRecord = true
|
||||
|
||||
for (const t of thumbnails) {
|
||||
t.isNewRecord = true
|
||||
}
|
||||
|
||||
throw err
|
||||
})
|
||||
})
|
||||
|
||||
|
|
Loading…
Reference in New Issue