Fix redundancy exceeding the limit

This commit is contained in:
Chocobozzz 2019-08-12 08:46:46 +02:00
parent e2600d8b26
commit 0b353d1d8a
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
4 changed files with 40 additions and 13 deletions

View File

@ -15,6 +15,10 @@
"target": "http://localhost:9000",
"secure": false
},
"/lazy-static": {
"target": "http://localhost:9000",
"secure": false
},
"/socket.io": {
"target": "ws://localhost:9000",
"secure": false,

View File

@ -105,7 +105,10 @@ export class VideosRedundancyScheduler extends AbstractScheduler {
private async extendsRedundancy (redundancyModel: VideoRedundancyModel) {
const redundancy = CONFIG.REDUNDANCY.VIDEOS.STRATEGIES.find(s => s.strategy === redundancyModel.strategy)
// Redundancy strategy disabled, remove our redundancy instead of extending expiration
if (!redundancy) await removeVideoRedundancy(redundancyModel)
if (!redundancy) {
await removeVideoRedundancy(redundancyModel)
return
}
await this.extendsExpirationOf(redundancyModel, redundancy.minLifetime)
}

View File

@ -325,23 +325,45 @@ export class VideoRedundancyModel extends Model<VideoRedundancyModel> {
static async getTotalDuplicated (strategy: VideoRedundancyStrategy) {
const actor = await getServerActor()
const redundancyInclude = {
attributes: [],
model: VideoRedundancyModel,
required: true,
where: {
actorId: actor.id,
strategy
}
}
const query: FindOptions = {
const queryFiles: FindOptions = {
include: [ redundancyInclude ]
}
const queryStreamingPlaylists: FindOptions = {
include: [
{
attributes: [],
model: VideoRedundancyModel,
model: VideoModel.unscoped(),
required: true,
where: {
actorId: actor.id,
strategy
}
include: [
{
attributes: [],
model: VideoStreamingPlaylistModel.unscoped(),
include: [
redundancyInclude
]
}
]
}
]
}
return VideoFileModel.aggregate('size', 'SUM', query)
.then(result => parseAggregateResult(result))
return Promise.all([
VideoFileModel.aggregate('size', 'SUM', queryFiles),
VideoFileModel.aggregate('size', 'SUM', queryStreamingPlaylists)
]).then(([ r1, r2 ]) => {
return parseAggregateResult(r1) + parseAggregateResult(r2)
})
}
static async listLocalExpired () {

View File

@ -508,10 +508,8 @@ describe('Test multiple servers', function () {
await wait(1000)
await Promise.all([
viewVideo(servers[2].url, localVideosServer3[0]),
viewVideo(servers[2].url, localVideosServer3[0])
])
await viewVideo(servers[2].url, localVideosServer3[0])
await viewVideo(servers[2].url, localVideosServer3[0])
await waitJobs(servers)