@nexrender/worker 1.60.1 → 1.60.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -4
- package/src/instance.js +37 -6
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nexrender/worker",
|
|
3
|
-
"version": "1.60.
|
|
3
|
+
"version": "1.60.3",
|
|
4
4
|
"author": "inlife",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"homepage": "https://www.nexrender.com",
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
]
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@nexrender/api": "^1.
|
|
23
|
-
"@nexrender/core": "^1.60.
|
|
22
|
+
"@nexrender/api": "^1.60.2",
|
|
23
|
+
"@nexrender/core": "^1.60.3",
|
|
24
24
|
"@nexrender/types": "^1.45.6",
|
|
25
25
|
"arg": "^4.1.0",
|
|
26
26
|
"chalk": "^2.4.2",
|
|
@@ -29,5 +29,5 @@
|
|
|
29
29
|
"publishConfig": {
|
|
30
30
|
"access": "public"
|
|
31
31
|
},
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "8bbcd822b8823438b4956bffbcf0237e760c52a7"
|
|
33
33
|
}
|
package/src/instance.js
CHANGED
|
@@ -5,9 +5,27 @@ const pkg = require('../package.json')
|
|
|
5
5
|
|
|
6
6
|
const NEXRENDER_API_POLLING = process.env.NEXRENDER_API_POLLING || 30 * 1000;
|
|
7
7
|
const NEXRENDER_TOLERATE_EMPTY_QUEUES = process.env.NEXRENDER_TOLERATE_EMPTY_QUEUES;
|
|
8
|
+
const NEXRENDER_PICKUP_TIMEOUT = process.env.NEXRENDER_PICKUP_TIMEOUT || 60 * 1000; // 60 second timeout by default
|
|
8
9
|
|
|
9
10
|
const delay = amount => new Promise(resolve => setTimeout(resolve, amount))
|
|
10
11
|
|
|
12
|
+
// Helper function to add timeout to promises
|
|
13
|
+
const withTimeout = (promise, timeoutMs, errorMsg) => {
|
|
14
|
+
let timeoutHandle;
|
|
15
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
16
|
+
timeoutHandle = setTimeout(() => {
|
|
17
|
+
reject(new Error(errorMsg));
|
|
18
|
+
}, timeoutMs);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
return Promise.race([
|
|
22
|
+
promise,
|
|
23
|
+
timeoutPromise,
|
|
24
|
+
]).finally(() => {
|
|
25
|
+
clearTimeout(timeoutHandle);
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
|
|
11
29
|
const createWorker = () => {
|
|
12
30
|
let emptyReturns = 0;
|
|
13
31
|
let active = false;
|
|
@@ -41,9 +59,14 @@ const createWorker = () => {
|
|
|
41
59
|
return null
|
|
42
60
|
}
|
|
43
61
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
62
|
+
settings.logger.log(`[worker] checking for new jobs...`);
|
|
63
|
+
|
|
64
|
+
let job = await withTimeout(
|
|
65
|
+
settings.tagSelector ?
|
|
66
|
+
client.pickupJob(settings.tagSelector) :
|
|
67
|
+
client.pickupJob(),
|
|
68
|
+
NEXRENDER_PICKUP_TIMEOUT,
|
|
69
|
+
'Job pickup request timed out'
|
|
47
70
|
);
|
|
48
71
|
|
|
49
72
|
if (job && job.uid) {
|
|
@@ -52,20 +75,28 @@ const createWorker = () => {
|
|
|
52
75
|
} else {
|
|
53
76
|
// no job was returned by the server. If enough checks have passed, and the exit option is set, deactivate the worker
|
|
54
77
|
emptyReturns++;
|
|
55
|
-
|
|
78
|
+
settings.logger.log(`[worker] no jobs available (attempt ${emptyReturns}${settings.tolerateEmptyQueues ? ` of ${settings.tolerateEmptyQueues}` : ''})`)
|
|
79
|
+
if (settings.exitOnEmptyQueue && emptyReturns > settings.tolerateEmptyQueues) {
|
|
80
|
+
settings.logger.log(`[worker] max empty queue attempts reached, deactivating worker`)
|
|
81
|
+
active = false;
|
|
82
|
+
}
|
|
56
83
|
}
|
|
57
84
|
|
|
58
85
|
} catch (err) {
|
|
86
|
+
settings.logger.error(`[worker] error checking for jobs: ${err.message}`);
|
|
59
87
|
if (settings.stopOnError) {
|
|
60
88
|
throw err;
|
|
61
89
|
} else {
|
|
62
90
|
console.error(err)
|
|
63
|
-
console.error("render
|
|
91
|
+
console.error("render process stopped with error...")
|
|
64
92
|
console.error("continue listening next job...")
|
|
65
93
|
}
|
|
66
94
|
}
|
|
67
95
|
|
|
68
|
-
if (active)
|
|
96
|
+
if (active) {
|
|
97
|
+
settings.logger.log(`[worker] waiting ${settings.polling || NEXRENDER_API_POLLING}ms before next check...`);
|
|
98
|
+
await delay(settings.polling || NEXRENDER_API_POLLING)
|
|
99
|
+
}
|
|
69
100
|
} while (active)
|
|
70
101
|
}
|
|
71
102
|
|