Remove HLS torrents
This commit is contained in:
parent
b40eed8b09
commit
ffc65cbd2a
|
@ -160,7 +160,7 @@ export class VideoRedundancyModel extends Model<VideoRedundancyModel> {
|
|||
const videoUUID = videoStreamingPlaylist.Video.uuid
|
||||
logger.info('Removing duplicated video streaming playlist %s.', videoUUID)
|
||||
|
||||
videoStreamingPlaylist.Video.removeStreamingPlaylist(true)
|
||||
videoStreamingPlaylist.Video.removeStreamingPlaylistFiles(videoStreamingPlaylist, true)
|
||||
.catch(err => logger.error('Cannot delete video streaming playlist files of %s.', videoUUID, { err }))
|
||||
}
|
||||
|
||||
|
|
|
@ -17,10 +17,12 @@ import { join } from 'path'
|
|||
import { sha1 } from '../../helpers/core-utils'
|
||||
import { isArrayOf } from '../../helpers/custom-validators/misc'
|
||||
import { Op, QueryTypes } from 'sequelize'
|
||||
import { MStreamingPlaylist, MVideoFile } from '@server/typings/models'
|
||||
import { MStreamingPlaylist, MStreamingPlaylistVideo, MVideoFile } from '@server/typings/models'
|
||||
import { VideoFileModel } from '@server/models/video/video-file'
|
||||
import { getTorrentFileName, getVideoFilename } from '@server/lib/video-paths'
|
||||
import { getTorrentFileName, getTorrentFilePath, getVideoFilename } from '@server/lib/video-paths'
|
||||
import * as memoizee from 'memoizee'
|
||||
import { remove } from 'fs-extra'
|
||||
import { logger } from '@server/helpers/logger'
|
||||
|
||||
@Table({
|
||||
tableName: 'videoStreamingPlaylist',
|
||||
|
@ -209,4 +211,10 @@ export class VideoStreamingPlaylistModel extends Model<VideoStreamingPlaylistMod
|
|||
return this.type === other.type &&
|
||||
this.videoId === other.videoId
|
||||
}
|
||||
|
||||
removeTorrent (this: MStreamingPlaylistVideo, videoFile: MVideoFile) {
|
||||
const torrentPath = getTorrentFilePath(this, videoFile)
|
||||
return remove(torrentPath)
|
||||
.catch(err => logger.warn('Cannot delete torrent %s.', torrentPath, { err }))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -136,7 +136,8 @@ import {
|
|||
MVideoThumbnailBlacklist,
|
||||
MVideoWithAllFiles,
|
||||
MVideoWithFile,
|
||||
MVideoWithRights
|
||||
MVideoWithRights,
|
||||
MStreamingPlaylistFiles
|
||||
} from '../../typings/models'
|
||||
import { MVideoFile, MVideoFileStreamingPlaylistVideo } from '../../typings/models/video/video-file'
|
||||
import { MThumbnail } from '../../typings/models/video/thumbnail'
|
||||
|
@ -1071,7 +1072,13 @@ export class VideoModel extends Model<VideoModel> {
|
|||
})
|
||||
|
||||
// Remove playlists file
|
||||
tasks.push(instance.removeStreamingPlaylist())
|
||||
if (!Array.isArray(instance.VideoStreamingPlaylists)) {
|
||||
instance.VideoStreamingPlaylists = await instance.$get('VideoStreamingPlaylists')
|
||||
}
|
||||
|
||||
for (const p of instance.VideoStreamingPlaylists) {
|
||||
tasks.push(instance.removeStreamingPlaylistFiles(p))
|
||||
}
|
||||
}
|
||||
|
||||
// Do not wait video deletion because we could be in a transaction
|
||||
|
@ -2001,11 +2008,24 @@ export class VideoModel extends Model<VideoModel> {
|
|||
.catch(err => logger.warn('Cannot delete torrent %s.', torrentPath, { err }))
|
||||
}
|
||||
|
||||
removeStreamingPlaylist (isRedundancy = false) {
|
||||
async removeStreamingPlaylistFiles (streamingPlaylist: MStreamingPlaylist, isRedundancy = false) {
|
||||
const directoryPath = getHLSDirectory(this, isRedundancy)
|
||||
|
||||
return remove(directoryPath)
|
||||
.catch(err => logger.warn('Cannot delete playlist directory %s.', directoryPath, { err }))
|
||||
await remove(directoryPath)
|
||||
|
||||
if (isRedundancy !== true) {
|
||||
let streamingPlaylistWithFiles = streamingPlaylist as MStreamingPlaylistFilesVideo
|
||||
streamingPlaylistWithFiles.Video = this
|
||||
|
||||
if (!Array.isArray(streamingPlaylistWithFiles.VideoFiles)) {
|
||||
streamingPlaylistWithFiles.VideoFiles = await streamingPlaylistWithFiles.$get('VideoFiles')
|
||||
}
|
||||
|
||||
// Remove physical files and torrents
|
||||
await Promise.all(
|
||||
streamingPlaylistWithFiles.VideoFiles.map(file => streamingPlaylistWithFiles.removeTorrent(file))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
isOutdated () {
|
||||
|
|
|
@ -318,7 +318,7 @@ describe('Test videos redundancy', function () {
|
|||
await check1WebSeed()
|
||||
await check0PlaylistRedundancies()
|
||||
|
||||
await checkVideoFilesWereRemoved(video1Server2UUID, servers[0].serverNumber, [ 'videos', join('playlists', 'hls') ])
|
||||
await checkVideoFilesWereRemoved(video1Server2UUID, servers[0].internalServerNumber, [ 'videos', join('playlists', 'hls') ])
|
||||
})
|
||||
|
||||
after(async function () {
|
||||
|
@ -368,7 +368,7 @@ describe('Test videos redundancy', function () {
|
|||
await check1WebSeed()
|
||||
await check0PlaylistRedundancies()
|
||||
|
||||
await checkVideoFilesWereRemoved(video1Server2UUID, servers[0].serverNumber, [ 'videos' ])
|
||||
await checkVideoFilesWereRemoved(video1Server2UUID, servers[0].internalServerNumber, [ 'videos' ])
|
||||
})
|
||||
|
||||
after(async function () {
|
||||
|
@ -437,7 +437,7 @@ describe('Test videos redundancy', function () {
|
|||
await waitJobs(servers)
|
||||
|
||||
for (const server of servers) {
|
||||
await checkVideoFilesWereRemoved(video1Server2UUID, server.serverNumber)
|
||||
await checkVideoFilesWereRemoved(video1Server2UUID, server.internalServerNumber)
|
||||
}
|
||||
})
|
||||
|
||||
|
@ -572,7 +572,7 @@ describe('Test videos redundancy', function () {
|
|||
|
||||
await waitJobs(servers)
|
||||
|
||||
await checkVideoFilesWereRemoved(video1Server2UUID, servers[0].serverNumber, [ join('redundancy', 'hls') ])
|
||||
await checkVideoFilesWereRemoved(video1Server2UUID, servers[0].internalServerNumber, [ join('redundancy', 'hls') ])
|
||||
})
|
||||
|
||||
after(async function () {
|
||||
|
|
|
@ -15,7 +15,6 @@ import {
|
|||
createUser,
|
||||
dateIsValid,
|
||||
doubleFollow,
|
||||
flushAndRunServer,
|
||||
flushAndRunMultipleServers,
|
||||
getLocalVideos,
|
||||
getVideo,
|
||||
|
@ -697,8 +696,8 @@ describe('Test multiple servers', function () {
|
|||
|
||||
it('Should not have files of videos 3 and 3-2 on each server', async function () {
|
||||
for (const server of servers) {
|
||||
await checkVideoFilesWereRemoved(toRemove[0].uuid, server.serverNumber)
|
||||
await checkVideoFilesWereRemoved(toRemove[1].uuid, server.serverNumber)
|
||||
await checkVideoFilesWereRemoved(toRemove[0].uuid, server.internalServerNumber)
|
||||
await checkVideoFilesWereRemoved(toRemove[1].uuid, server.internalServerNumber)
|
||||
}
|
||||
})
|
||||
|
||||
|
|
|
@ -465,7 +465,7 @@ function rateVideo (url: string, accessToken: string, id: number, rating: string
|
|||
function parseTorrentVideo (server: ServerInfo, videoUUID: string, resolution: number) {
|
||||
return new Promise<any>((res, rej) => {
|
||||
const torrentName = videoUUID + '-' + resolution + '.torrent'
|
||||
const torrentPath = join(root(), 'test' + server.serverNumber, 'torrents', torrentName)
|
||||
const torrentPath = join(root(), 'test' + server.internalServerNumber, 'torrents', torrentName)
|
||||
readFile(torrentPath, (err, data) => {
|
||||
if (err) return rej(err)
|
||||
|
||||
|
|
Loading…
Reference in New Issue