Delete correctly redundancy files

pull/1189/head
Chocobozzz 2018-10-03 16:43:57 +02:00
parent be691a57c5
commit 25378bc866
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
6 changed files with 48 additions and 12 deletions

View File

@ -4,8 +4,8 @@
"private": true,
"licence": "GPLv3",
"author": {
"name": "Florian Bigard",
"email": "me@florianbigard.com",
"name": "Chocobozzz",
"email": "chocobozzz@cpy.re",
"url": "http://github.com/Chocobozzz"
},
"repository": {

View File

@ -11,8 +11,8 @@
"peertube": "dist/server/tools/peertube.js"
},
"author": {
"name": "Florian Bigard",
"email": "florian.bigard@gmail.com",
"name": "Chocobozzz",
"email": "chocobozzz@cpy.re",
"url": "http://github.com/Chocobozzz"
},
"repository": {

View File

@ -1,6 +1,6 @@
import {
AfterDestroy,
AllowNull,
BeforeDestroy,
BelongsTo,
Column,
CreatedAt,
@ -115,14 +115,16 @@ export class VideoRedundancyModel extends Model<VideoRedundancyModel> {
})
Actor: ActorModel
@AfterDestroy
static removeFile (instance: VideoRedundancyModel) {
@BeforeDestroy
static async removeFile (instance: VideoRedundancyModel) {
// Not us
if (!instance.strategy) return
logger.info('Removing duplicated video file %s-%s.', instance.VideoFile.Video.uuid, instance.VideoFile.resolution)
const videoFile = await VideoFileModel.loadWithVideo(instance.videoFileId)
return instance.VideoFile.Video.removeFile(instance.VideoFile)
logger.info('Removing duplicated video file %s-%s.', videoFile.Video.uuid, videoFile.resolution)
return videoFile.Video.removeFile(videoFile)
}
static async loadLocalByFileId (videoFileId: number) {

View File

@ -107,6 +107,19 @@ export class VideoFileModel extends Model<VideoFileModel> {
})
}
static loadWithVideo (id: number) {
const options = {
include: [
{
model: VideoModel.unscoped(),
required: true
}
]
}
return VideoFileModel.findById(id, options)
}
hasSameUniqueKeysThan (other: VideoFileModel) {
return this.fps === other.fps &&
this.resolution === other.resolution &&

View File

@ -16,7 +16,8 @@ import {
uploadVideo,
viewVideo,
wait,
waitUntilLog
waitUntilLog,
checkVideoFilesWereRemoved, removeVideo
} from '../../utils'
import { waitJobs } from '../../utils/server/jobs'
import * as magnetUtil from 'magnet-uri'
@ -242,6 +243,8 @@ describe('Test videos redundancy', function () {
await wait(5000)
await check1WebSeed(strategy)
await checkVideoFilesWereRemoved(video1Server2UUID, servers[0].serverNumber, [ 'videos' ])
})
after(function () {
@ -287,6 +290,8 @@ describe('Test videos redundancy', function () {
await wait(5000)
await check1WebSeed(strategy)
await checkVideoFilesWereRemoved(video1Server2UUID, servers[0].serverNumber, [ 'videos' ])
})
after(function () {
@ -344,6 +349,18 @@ describe('Test videos redundancy', function () {
await checkStatsWith2Webseed(strategy)
})
it('Should remove the video and the redundancy files', async function () {
this.timeout(20000)
await removeVideo(servers[1].url, servers[1].accessToken, video1Server2UUID)
await waitJobs(servers)
for (const server of servers) {
await checkVideoFilesWereRemoved(video1Server2UUID, server.serverNumber)
}
})
after(function () {
return cleanServers()
})

View File

@ -267,10 +267,14 @@ function removeVideo (url: string, token: string, id: number | string, expectedS
.expect(expectedStatus)
}
async function checkVideoFilesWereRemoved (videoUUID: string, serverNumber: number) {
async function checkVideoFilesWereRemoved (
videoUUID: string,
serverNumber: number,
directories = [ 'videos', 'thumbnails', 'torrents', 'previews', 'captions' ]
) {
const testDirectory = 'test' + serverNumber
for (const directory of [ 'videos', 'thumbnails', 'torrents', 'previews', 'captions' ]) {
for (const directory of directories) {
const directoryPath = join(root(), testDirectory, directory)
const directoryExists = existsSync(directoryPath)