@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.
Files changed (2) hide show
  1. package/package.json +4 -4
  2. 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.1",
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.50.1",
23
- "@nexrender/core": "^1.60.1",
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": "407a0715e62ce79b6a3b7781ce223a208f91f248"
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
- let job = await (settings.tagSelector ?
45
- await client.pickupJob(settings.tagSelector) :
46
- await client.pickupJob()
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
- if (settings.exitOnEmptyQueue && emptyReturns > settings.tolerateEmptyQueues) active = false;
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 proccess stopped with error...")
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) await delay(settings.polling || NEXRENDER_API_POLLING)
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