]>
Commit | Line | Data |
---|---|---|
9c6327f8 | 1 | |
842a1573 | 2 | import { expect } from 'chai' |
c55e3d72 | 3 | import { wait } from '@shared/core-utils' |
51353d9a | 4 | import { JobState, JobType } from '../../models' |
254d3579 | 5 | import { PeerTubeServer } from './server' |
5cd80545 | 6 | |
0305db28 | 7 | async function waitJobs (serversArg: PeerTubeServer[] | PeerTubeServer, skipDelayed = false) { |
fae6e4da C |
8 | const pendingJobWait = process.env.NODE_PENDING_JOB_WAIT |
9 | ? parseInt(process.env.NODE_PENDING_JOB_WAIT, 10) | |
4b91bc15 | 10 | : 250 |
fae6e4da | 11 | |
254d3579 | 12 | let servers: PeerTubeServer[] |
3cd0734f | 13 | |
254d3579 C |
14 | if (Array.isArray(serversArg) === false) servers = [ serversArg as PeerTubeServer ] |
15 | else servers = serversArg as PeerTubeServer[] | |
3cd0734f | 16 | |
0305db28 JB |
17 | const states: JobState[] = [ 'waiting', 'active' ] |
18 | if (!skipDelayed) states.push('delayed') | |
19 | ||
51353d9a | 20 | const repeatableJobs: JobType[] = [ 'videos-views-stats', 'activitypub-cleaner' ] |
bfbd9128 | 21 | let pendingRequests: boolean |
3cd0734f | 22 | |
cef534ed C |
23 | function tasksBuilder () { |
24 | const tasks: Promise<any>[] = [] | |
3cd0734f C |
25 | |
26 | // Check if each server has pending request | |
27 | for (const server of servers) { | |
28 | for (const state of states) { | |
851675c5 | 29 | const p = server.jobs.list({ |
9c6327f8 | 30 | state, |
1061c73f C |
31 | start: 0, |
32 | count: 10, | |
33 | sort: '-createdAt' | |
9c6327f8 C |
34 | }).then(body => body.data) |
35 | .then(jobs => jobs.filter(j => !repeatableJobs.includes(j.type))) | |
6b616860 | 36 | .then(jobs => { |
2284f202 C |
37 | if (jobs.length !== 0) { |
38 | pendingRequests = true | |
39 | } | |
3cd0734f | 40 | }) |
fae6e4da | 41 | |
3cd0734f C |
42 | tasks.push(p) |
43 | } | |
fae6e4da | 44 | |
89d241a7 | 45 | const p = server.debug.getDebug() |
883a9019 | 46 | .then(obj => { |
fae6e4da C |
47 | if (obj.activityPubMessagesWaiting !== 0) { |
48 | pendingRequests = true | |
49 | } | |
50 | }) | |
51 | ||
52 | tasks.push(p) | |
3cd0734f C |
53 | } |
54 | ||
cef534ed C |
55 | return tasks |
56 | } | |
57 | ||
58 | do { | |
bfbd9128 | 59 | pendingRequests = false |
cef534ed | 60 | await Promise.all(tasksBuilder()) |
3cd0734f C |
61 | |
62 | // Retry, in case of new jobs were created | |
63 | if (pendingRequests === false) { | |
2f1548fd | 64 | await wait(pendingJobWait) |
cef534ed | 65 | await Promise.all(tasksBuilder()) |
3cd0734f C |
66 | } |
67 | ||
68 | if (pendingRequests) { | |
4b91bc15 | 69 | await wait(pendingJobWait) |
3cd0734f C |
70 | } |
71 | } while (pendingRequests) | |
72 | } | |
73 | ||
842a1573 C |
74 | async function expectNoFailedTranscodingJob (server: PeerTubeServer) { |
75 | const { data } = await server.jobs.listFailed({ jobType: 'video-transcoding' }) | |
76 | expect(data).to.have.lengthOf(0) | |
77 | } | |
78 | ||
5cd80545 C |
79 | // --------------------------------------------------------------------------- |
80 | ||
81 | export { | |
842a1573 C |
82 | waitJobs, |
83 | expectNoFailedTranscodingJob | |
5cd80545 | 84 | } |