Check video exists before extending its expiration

pull/1189/head
Chocobozzz 2018-10-03 15:52:39 +02:00
parent 5bc8745ef9
commit be691a57c5
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
1 changed files with 32 additions and 18 deletions

View File

@ -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: 'all' as 'all'
}
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
}
@ -203,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
}
}