X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fschedulers%2Fvideos-redundancy-scheduler.ts;h=c49a8c89ad0496bd1ce93a9ec873b379aa9c60ed;hb=2fbe7f1933f4bd5de96e6428234e56965616120e;hp=432bade1f5300f73aa946c699055cf24f71387d1;hpb=cf9166cf2fb7b51a1137a259eed9338798c73500;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/schedulers/videos-redundancy-scheduler.ts b/server/lib/schedulers/videos-redundancy-scheduler.ts index 432bade1f..c49a8c89a 100644 --- a/server/lib/schedulers/videos-redundancy-scheduler.ts +++ b/server/lib/schedulers/videos-redundancy-scheduler.ts @@ -70,14 +70,28 @@ export class VideosRedundancyScheduler extends AbstractScheduler { for (const redundancyModel of expired) { try { - const redundancy = CONFIG.REDUNDANCY.VIDEOS.STRATEGIES.find(s => s.strategy === redundancyModel.strategy) - await this.extendsExpirationOf(redundancyModel, redundancy.minLifetime) + await this.extendsOrDeleteRedundancy(redundancyModel) } catch (err) { logger.error('Cannot extend expiration of %s video from our redundancy system.', this.buildEntryLogId(redundancyModel)) } } } + private async extendsOrDeleteRedundancy (redundancyModel: VideoRedundancyModel) { + // Refresh the video, maybe it was deleted + const video = await this.loadAndRefreshVideo(redundancyModel.VideoFile.Video.url) + + if (!video) { + logger.info('Destroying existing redundancy %s, because the associated video does not exist anymore.', redundancyModel.url) + + await redundancyModel.destroy() + return + } + + const redundancy = CONFIG.REDUNDANCY.VIDEOS.STRATEGIES.find(s => s.strategy === redundancyModel.strategy) + await this.extendsExpirationOf(redundancyModel, redundancy.minLifetime) + } + private async purgeRemoteExpired () { const expired = await VideoRedundancyModel.listRemoteExpired() @@ -109,23 +123,11 @@ export class VideosRedundancyScheduler extends AbstractScheduler { const serverActor = await getServerActor() for (const file of filesToDuplicate) { - // We need more attributes and check if the video still exists - const getVideoOptions = { - videoObject: file.Video.url, - syncParam: { likes: false, dislikes: false, shares: false, comments: false, thumbnail: false, refreshVideo: true }, - fetchType: 'only-video' as 'only-video' - } - const { video } = await getOrCreateVideoAndAccountAndChannel(getVideoOptions) + const video = await this.loadAndRefreshVideo(file.Video.url) - const existing = await VideoRedundancyModel.loadLocalByFileId(file.id) - if (existing) { - if (video) { - await this.extendsExpirationOf(existing, redundancy.minLifetime) - } else { - logger.info('Destroying existing redundancy %s, because the associated video does not exist anymore.', existing.url) - - await existing.destroy() - } + const existingRedundancy = await VideoRedundancyModel.loadLocalByFileId(file.id) + if (existingRedundancy) { + await this.extendsOrDeleteRedundancy(existingRedundancy) continue } @@ -157,6 +159,8 @@ export class VideosRedundancyScheduler extends AbstractScheduler { createdModel.VideoFile = file await sendCreateCacheFile(serverActor, createdModel) + + logger.info('Duplicated %s - %d -> %s.', video.url, file.resolution, createdModel.url) } } @@ -201,4 +205,16 @@ export class VideosRedundancyScheduler extends AbstractScheduler { return files.reduce(fileReducer, 0) } + + private async loadAndRefreshVideo (videoUrl: string) { + // We need more attributes and check if the video still exists + const getVideoOptions = { + videoObject: videoUrl, + syncParam: { likes: false, dislikes: false, shares: false, comments: false, thumbnail: false, refreshVideo: true }, + fetchType: 'all' as 'all' + } + const { video } = await getOrCreateVideoAndAccountAndChannel(getVideoOptions) + + return video + } }