@balena/pinejs 23.2.8-build-renovate-major-24-node-22ee3f2e06d4dcd6939d5be3ec696b2e57f976fd-1 → 23.2.8-build-tasks-handlers-map-f8e3bc91c79b9644ec81f640e89cda9699ff7925-1
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/.versionbot/CHANGELOG.yml +5 -6
- package/CHANGELOG.md +1 -1
- package/out/tasks/index.js +4 -4
- package/out/tasks/index.js.map +1 -1
- package/out/tasks/worker.d.ts +1 -1
- package/out/tasks/worker.js +9 -9
- package/out/tasks/worker.js.map +1 -1
- package/package.json +3 -3
- package/src/tasks/index.ts +4 -4
- package/src/tasks/worker.ts +9 -12
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
- commits:
|
|
2
|
-
- subject:
|
|
3
|
-
hash:
|
|
4
|
-
body:
|
|
5
|
-
Update @types/node from 20.19.24 to 24.9.2
|
|
2
|
+
- subject: "Tasks: switch to using a `Map` for storing task handlers"
|
|
3
|
+
hash: f8e3bc91c79b9644ec81f640e89cda9699ff7925
|
|
4
|
+
body: ""
|
|
6
5
|
footer:
|
|
7
6
|
Change-type: patch
|
|
8
7
|
change-type: patch
|
|
9
|
-
author:
|
|
8
|
+
author: Pagan Gazzard
|
|
10
9
|
nested: []
|
|
11
10
|
version: 23.2.8
|
|
12
11
|
title: ""
|
|
13
|
-
date: 2025-11-05T14:
|
|
12
|
+
date: 2025-11-05T14:26:48.208Z
|
|
14
13
|
- commits:
|
|
15
14
|
- subject: Avoid deep cloning tables when creating translated models
|
|
16
15
|
hash: 22caee0573cf4d1c0fe65ac827d22ef68fee2a49
|
package/CHANGELOG.md
CHANGED
|
@@ -7,7 +7,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
|
7
7
|
# v23.2.8
|
|
8
8
|
## (2025-11-05)
|
|
9
9
|
|
|
10
|
-
*
|
|
10
|
+
* Tasks: switch to using a `Map` for storing task handlers [Pagan Gazzard]
|
|
11
11
|
|
|
12
12
|
# v23.2.7
|
|
13
13
|
## (2025-11-05)
|
package/out/tasks/index.js
CHANGED
|
@@ -91,7 +91,7 @@ export function setup() {
|
|
|
91
91
|
if (handlerName == null) {
|
|
92
92
|
throw new Error(`Must specify a task handler to execute`);
|
|
93
93
|
}
|
|
94
|
-
const handler = worker?.handlers
|
|
94
|
+
const handler = worker?.handlers.get(handlerName);
|
|
95
95
|
if (handler == null) {
|
|
96
96
|
throw new Error(`No task handler with name '${handlerName}' registered`);
|
|
97
97
|
}
|
|
@@ -108,13 +108,13 @@ export function addTaskHandler(name, fn, schema) {
|
|
|
108
108
|
if (worker == null) {
|
|
109
109
|
throw new Error('Database does not support tasks');
|
|
110
110
|
}
|
|
111
|
-
if (worker.handlers
|
|
111
|
+
if (worker.handlers.has(name)) {
|
|
112
112
|
throw new Error(`Task handler with name '${name}' already registered`);
|
|
113
113
|
}
|
|
114
|
-
worker.handlers
|
|
114
|
+
worker.handlers.set(name, {
|
|
115
115
|
name,
|
|
116
116
|
fn,
|
|
117
117
|
validate: schema != null ? ajv.compile(schema) : undefined,
|
|
118
|
-
};
|
|
118
|
+
});
|
|
119
119
|
}
|
|
120
120
|
//# sourceMappingURL=index.js.map
|
package/out/tasks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tasks/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tasks/index.ts"],"names":[],"mappings":"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"}
|
package/out/tasks/worker.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export interface TaskHandler<T = AnyObject> {
|
|
|
19
19
|
}
|
|
20
20
|
export declare class Worker {
|
|
21
21
|
private readonly client;
|
|
22
|
-
handlers:
|
|
22
|
+
handlers: Map<string, TaskHandler<AnyObject>>;
|
|
23
23
|
private readonly concurrency;
|
|
24
24
|
private readonly interval;
|
|
25
25
|
private running;
|
package/out/tasks/worker.js
CHANGED
|
@@ -17,7 +17,7 @@ const selectColumns = Object.entries({
|
|
|
17
17
|
.join(', ');
|
|
18
18
|
export class Worker {
|
|
19
19
|
client;
|
|
20
|
-
handlers =
|
|
20
|
+
handlers = new Map();
|
|
21
21
|
concurrency;
|
|
22
22
|
interval;
|
|
23
23
|
running = false;
|
|
@@ -28,12 +28,12 @@ export class Worker {
|
|
|
28
28
|
this.interval = tasksEnv.queueIntervalMS;
|
|
29
29
|
}
|
|
30
30
|
canExecute() {
|
|
31
|
-
return
|
|
31
|
+
return this.executing < this.concurrency && this.handlers.size > 0;
|
|
32
32
|
}
|
|
33
33
|
async execute(task, tx) {
|
|
34
34
|
this.executing++;
|
|
35
35
|
try {
|
|
36
|
-
const handler = this.handlers
|
|
36
|
+
const handler = this.handlers.get(task.is_executed_by__handler);
|
|
37
37
|
const startedOnTime = new Date();
|
|
38
38
|
if (handler == null) {
|
|
39
39
|
await this.update(tx, task, startedOnTime, 'failed', 'Matching task handler not found, this should never happen!');
|
|
@@ -122,8 +122,7 @@ export class Worker {
|
|
|
122
122
|
if (!this.canExecute()) {
|
|
123
123
|
return;
|
|
124
124
|
}
|
|
125
|
-
|
|
126
|
-
if (handlerNames.length === 0) {
|
|
125
|
+
if (this.handlers.size === 0) {
|
|
127
126
|
return;
|
|
128
127
|
}
|
|
129
128
|
await sbvrUtils.db.transaction(async (tx) => {
|
|
@@ -140,7 +139,7 @@ export class Worker {
|
|
|
140
139
|
ORDER BY
|
|
141
140
|
t."is scheduled to execute on-time" ASC,
|
|
142
141
|
t."id" ASC
|
|
143
|
-
LIMIT 1 FOR UPDATE SKIP LOCKED`, [
|
|
142
|
+
LIMIT 1 FOR UPDATE SKIP LOCKED`, [Array.from(this.handlers.keys()), Math.ceil(this.interval / 1000)]);
|
|
144
143
|
if (result.rows.length > 0) {
|
|
145
144
|
await this.execute(result.rows[0], tx);
|
|
146
145
|
executed = true;
|
|
@@ -168,7 +167,6 @@ export class Worker {
|
|
|
168
167
|
if (sbvrUtils.db.engine !== 'postgres') {
|
|
169
168
|
throw new Error('Database does not support tasks, giving up on starting worker');
|
|
170
169
|
}
|
|
171
|
-
const handlerNames = Object.keys(this.handlers);
|
|
172
170
|
const tasksWithUnknownHandlers = await this.client.get({
|
|
173
171
|
resource: 'task',
|
|
174
172
|
passthrough: {
|
|
@@ -177,9 +175,11 @@ export class Worker {
|
|
|
177
175
|
options: {
|
|
178
176
|
$filter: {
|
|
179
177
|
status: 'queued',
|
|
180
|
-
...(
|
|
178
|
+
...(this.handlers.size > 0 && {
|
|
181
179
|
$not: {
|
|
182
|
-
is_executed_by__handler: {
|
|
180
|
+
is_executed_by__handler: {
|
|
181
|
+
$in: Array.from(this.handlers.keys()),
|
|
182
|
+
},
|
|
183
183
|
},
|
|
184
184
|
}),
|
|
185
185
|
},
|
package/out/tasks/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/tasks/worker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,KAAK,WAAW,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAiClC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;IACpC,EAAE,EAAE,IAAI;IACR,wBAAwB,EAAE,yBAAyB;IACnD,gCAAgC,EAAE,iCAAiC;IACnE,mCAAmC,EAAE,oCAAoC;IACzE,eAAe,EAAE,eAAe;IAChC,eAAe,EAAE,eAAe;IAChC,qBAAqB,EAAE,sBAAsB;CACA,CAAC;KAC7C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,GAAG,SAAS,KAAK,GAAG,CAAC;KACjD,IAAI,CAAC,IAAI,CAAC,CAAC;AAKb,MAAM,OAAO,MAAM;IAOW;IANtB,QAAQ,
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/tasks/worker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@balena/pinejs",
|
|
3
|
-
"version": "23.2.8-build-
|
|
3
|
+
"version": "23.2.8-build-tasks-handlers-map-f8e3bc91c79b9644ec81f640e89cda9699ff7925-1",
|
|
4
4
|
"main": "out/server-glue/module.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": "git@github.com:balena-io/pinejs.git",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"@types/memoizee": "^0.4.12",
|
|
46
46
|
"@types/method-override": "^3.0.0",
|
|
47
47
|
"@types/mysql": "^2.15.27",
|
|
48
|
-
"@types/node": "^
|
|
48
|
+
"@types/node": "^20.19.21",
|
|
49
49
|
"@types/passport": "^1.0.17",
|
|
50
50
|
"@types/passport-local": "^1.0.38",
|
|
51
51
|
"@types/passport-strategy": "^0.2.38",
|
|
@@ -149,6 +149,6 @@
|
|
|
149
149
|
"recursive": true
|
|
150
150
|
},
|
|
151
151
|
"versionist": {
|
|
152
|
-
"publishedAt": "2025-11-05T14:
|
|
152
|
+
"publishedAt": "2025-11-05T14:26:49.231Z"
|
|
153
153
|
}
|
|
154
154
|
}
|
package/src/tasks/index.ts
CHANGED
|
@@ -137,7 +137,7 @@ export function setup(): void {
|
|
|
137
137
|
if (handlerName == null) {
|
|
138
138
|
throw new Error(`Must specify a task handler to execute`);
|
|
139
139
|
}
|
|
140
|
-
const handler = worker?.handlers
|
|
140
|
+
const handler = worker?.handlers.get(handlerName);
|
|
141
141
|
if (handler == null) {
|
|
142
142
|
throw new Error(
|
|
143
143
|
`No task handler with name '${handlerName}' registered`,
|
|
@@ -182,12 +182,12 @@ export function addTaskHandler<T extends Schema>(
|
|
|
182
182
|
throw new Error('Database does not support tasks');
|
|
183
183
|
}
|
|
184
184
|
|
|
185
|
-
if (worker.handlers
|
|
185
|
+
if (worker.handlers.has(name)) {
|
|
186
186
|
throw new Error(`Task handler with name '${name}' already registered`);
|
|
187
187
|
}
|
|
188
|
-
worker.handlers
|
|
188
|
+
worker.handlers.set(name, {
|
|
189
189
|
name,
|
|
190
190
|
fn,
|
|
191
191
|
validate: schema != null ? ajv.compile(schema) : undefined,
|
|
192
|
-
};
|
|
192
|
+
});
|
|
193
193
|
}
|
package/src/tasks/worker.ts
CHANGED
|
@@ -55,7 +55,7 @@ const selectColumns = Object.entries({
|
|
|
55
55
|
// It polls the database for tasks to execute. It will execute
|
|
56
56
|
// tasks in parallel up to a certain concurrency limit.
|
|
57
57
|
export class Worker {
|
|
58
|
-
public handlers
|
|
58
|
+
public handlers = new Map<string, TaskHandler>();
|
|
59
59
|
private readonly concurrency: number;
|
|
60
60
|
private readonly interval: number;
|
|
61
61
|
private running = false;
|
|
@@ -68,16 +68,14 @@ export class Worker {
|
|
|
68
68
|
|
|
69
69
|
// Check if instance can execute more tasks
|
|
70
70
|
private canExecute(): boolean {
|
|
71
|
-
return
|
|
72
|
-
this.executing < this.concurrency && Object.keys(this.handlers).length > 0
|
|
73
|
-
);
|
|
71
|
+
return this.executing < this.concurrency && this.handlers.size > 0;
|
|
74
72
|
}
|
|
75
73
|
|
|
76
74
|
private async execute(task: PartialTask, tx: Db.Tx): Promise<void> {
|
|
77
75
|
this.executing++;
|
|
78
76
|
try {
|
|
79
77
|
// Get specified handler
|
|
80
|
-
const handler = this.handlers
|
|
78
|
+
const handler = this.handlers.get(task.is_executed_by__handler);
|
|
81
79
|
const startedOnTime = new Date();
|
|
82
80
|
|
|
83
81
|
// This should never actually happen
|
|
@@ -215,8 +213,7 @@ export class Worker {
|
|
|
215
213
|
if (!this.canExecute()) {
|
|
216
214
|
return;
|
|
217
215
|
}
|
|
218
|
-
|
|
219
|
-
if (handlerNames.length === 0) {
|
|
216
|
+
if (this.handlers.size === 0) {
|
|
220
217
|
// No handlers currently added so just wait for next poll in case one is added in the meantime
|
|
221
218
|
return;
|
|
222
219
|
}
|
|
@@ -236,7 +233,7 @@ export class Worker {
|
|
|
236
233
|
t."is scheduled to execute on-time" ASC,
|
|
237
234
|
t."id" ASC
|
|
238
235
|
LIMIT 1 FOR UPDATE SKIP LOCKED`,
|
|
239
|
-
[
|
|
236
|
+
[Array.from(this.handlers.keys()), Math.ceil(this.interval / 1000)],
|
|
240
237
|
);
|
|
241
238
|
|
|
242
239
|
// Execute task if one was found
|
|
@@ -274,8 +271,6 @@ export class Worker {
|
|
|
274
271
|
);
|
|
275
272
|
}
|
|
276
273
|
|
|
277
|
-
const handlerNames = Object.keys(this.handlers);
|
|
278
|
-
|
|
279
274
|
// Check for any pending tasks with unknown handlers
|
|
280
275
|
const tasksWithUnknownHandlers = await this.client.get({
|
|
281
276
|
resource: 'task',
|
|
@@ -285,9 +280,11 @@ export class Worker {
|
|
|
285
280
|
options: {
|
|
286
281
|
$filter: {
|
|
287
282
|
status: 'queued',
|
|
288
|
-
...(
|
|
283
|
+
...(this.handlers.size > 0 && {
|
|
289
284
|
$not: {
|
|
290
|
-
is_executed_by__handler: {
|
|
285
|
+
is_executed_by__handler: {
|
|
286
|
+
$in: Array.from(this.handlers.keys()),
|
|
287
|
+
},
|
|
291
288
|
},
|
|
292
289
|
}),
|
|
293
290
|
},
|