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