@balena/pinejs 17.1.0-build-joshbwlng-tasks-61ce10e444abec6afea3fec43e9a5c37c7cedea6-1 → 17.1.0-build-joshbwlng-tasks-9f3f42ef1bf62714507bacc7842e99841b116d94-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/.pinejs-cache.json +1 -1
- package/.versionbot/CHANGELOG.yml +17 -1
- package/CHANGELOG.md +2 -0
- package/out/tasks/index.js +0 -2
- package/out/tasks/index.js.map +1 -1
- package/out/tasks/tasks.sbvr +0 -5
- package/out/tasks/types.d.ts +1 -2
- package/out/tasks/worker.js +9 -11
- package/out/tasks/worker.js.map +1 -1
- package/package.json +2 -2
- package/src/tasks/index.ts +0 -3
- package/src/tasks/tasks.sbvr +0 -5
- package/src/tasks/types.ts +0 -2
- package/src/tasks/worker.ts +9 -11
@@ -1,4 +1,20 @@
|
|
1
1
|
- commits:
|
2
|
+
- subject: Remove task priority support
|
3
|
+
hash: 9f3f42ef1bf62714507bacc7842e99841b116d94
|
4
|
+
body: ""
|
5
|
+
footer:
|
6
|
+
Change-type: patch
|
7
|
+
change-type: patch
|
8
|
+
author: Josh Bowling
|
9
|
+
nested: []
|
10
|
+
- subject: Bind more variables in poll query
|
11
|
+
hash: 27c1848791cef43d3a72b169a46b938a52aea0f7
|
12
|
+
body: ""
|
13
|
+
footer:
|
14
|
+
Change-type: patch
|
15
|
+
change-type: patch
|
16
|
+
author: Josh Bowling
|
17
|
+
nested: []
|
2
18
|
- subject: Add async tasks
|
3
19
|
hash: 61ce10e444abec6afea3fec43e9a5c37c7cedea6
|
4
20
|
body: ""
|
@@ -9,7 +25,7 @@
|
|
9
25
|
nested: []
|
10
26
|
version: 17.1.0
|
11
27
|
title: ""
|
12
|
-
date: 2024-06-
|
28
|
+
date: 2024-06-19T06:39:07.325Z
|
13
29
|
- commits:
|
14
30
|
- subject: Improve `result` typing for `POSTRUN`/`PRERESPOND` hooks
|
15
31
|
hash: adec8e6cfb12d75109627a582c948d6f950d0989
|
package/CHANGELOG.md
CHANGED
package/out/tasks/index.js
CHANGED
@@ -53,7 +53,6 @@ EXECUTE FUNCTION notify_task_insert();
|
|
53
53
|
CREATE INDEX IF NOT EXISTS idx_task_poll ON task USING btree (
|
54
54
|
"is executed by-handler",
|
55
55
|
"is scheduled to execute on-time" ASC,
|
56
|
-
"priority" DESC,
|
57
56
|
"id" ASC
|
58
57
|
) WHERE status = 'queued';
|
59
58
|
`;
|
@@ -86,7 +85,6 @@ async function setup(db) {
|
|
86
85
|
request.values.status = 'queued';
|
87
86
|
request.values.attempt_count = 0;
|
88
87
|
request.values.attempt_limit ??= 1;
|
89
|
-
request.values.priority ??= 1;
|
90
88
|
if (request.values.is_scheduled_with__cron_expression != null &&
|
91
89
|
request.values.is_scheduled_to_execute_on__time == null) {
|
92
90
|
try {
|
package/out/tasks/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tasks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,wDAA0C;AAC1C,8CAAyD;AAEzD,+CAAqD;AACrD,6CAAgD;AAChD,kEAAoD;AAEpD,qCAAiD;AAEjD,qCAAkC;AAElC,0CAAwB;AAGxB,MAAM,SAAS,GAAW,OAAO,CAAC,cAAc,CAAC,CAAC;AAIlD,MAAM,OAAO,GAAG;;;;sBAIM,gBAAO
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tasks/index.ts"],"names":[],"mappings":"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"}
|
package/out/tasks/tasks.sbvr
CHANGED
@@ -18,8 +18,6 @@ Term: key
|
|
18
18
|
Concept Type: Short Text (Type)
|
19
19
|
Term: parameter set
|
20
20
|
Concept Type: JSON (Type)
|
21
|
-
Term: priority
|
22
|
-
Concept Type: Integer (Type)
|
23
21
|
Term: status
|
24
22
|
Concept Type: Short Text (Type)
|
25
23
|
Term: time
|
@@ -36,9 +34,6 @@ Fact type: task is executed by handler
|
|
36
34
|
Necessity: each task is executed by exactly one handler
|
37
35
|
Fact type: task is executed with parameter set
|
38
36
|
Necessity: each task is executed with at most one parameter set
|
39
|
-
Fact type: task has priority
|
40
|
-
Necessity: each task has exactly one priority
|
41
|
-
Necessity: each task has a priority that is greater than or equal to 0
|
42
37
|
Fact type: task is scheduled with cron expression
|
43
38
|
Necessity: each task is scheduled with at most one cron expression
|
44
39
|
Fact type: task is scheduled to execute on time
|
package/out/tasks/types.d.ts
CHANGED
@@ -13,7 +13,6 @@ export interface Task {
|
|
13
13
|
is_executed_with__parameter_set: object | null;
|
14
14
|
is_scheduled_with__cron_expression: string | null;
|
15
15
|
is_scheduled_to_execute_on__time: Date | null;
|
16
|
-
priority: number;
|
17
16
|
status: TaskStatus;
|
18
17
|
started_on__time: Date | null;
|
19
18
|
ended_on__time: Date | null;
|
@@ -21,7 +20,7 @@ export interface Task {
|
|
21
20
|
attempt_count: number;
|
22
21
|
attempt_limit: number;
|
23
22
|
}
|
24
|
-
export type PartialTask = Pick<Task, 'id' | 'is_created_by__actor' | 'is_executed_by__handler' | 'is_executed_with__parameter_set' | 'is_scheduled_with__cron_expression' | '
|
23
|
+
export type PartialTask = Pick<Task, 'id' | 'is_created_by__actor' | 'is_executed_by__handler' | 'is_executed_with__parameter_set' | 'is_scheduled_with__cron_expression' | 'attempt_count' | 'attempt_limit'>;
|
25
24
|
export interface TaskArgs {
|
26
25
|
api: PinejsClient;
|
27
26
|
params: AnyObject;
|
package/out/tasks/worker.js
CHANGED
@@ -38,7 +38,6 @@ const selectColumns = Object.entries({
|
|
38
38
|
'is scheduled with-cron expression': 'is_scheduled_with__cron_expression',
|
39
39
|
'attempt count': 'attempt_count',
|
40
40
|
'attempt limit': 'attempt_limit',
|
41
|
-
priority: 'priority',
|
42
41
|
'is created by-actor': 'is_created_by__actor',
|
43
42
|
})
|
44
43
|
.map(([key, value]) => `t."${key}" AS "${value}"`)
|
@@ -148,7 +147,6 @@ class Worker {
|
|
148
147
|
is_executed_by__handler: task.is_executed_by__handler,
|
149
148
|
is_executed_with__parameter_set: task.is_executed_with__parameter_set,
|
150
149
|
is_scheduled_with__cron_expression: task.is_scheduled_with__cron_expression,
|
151
|
-
priority: task.priority,
|
152
150
|
},
|
153
151
|
});
|
154
152
|
}
|
@@ -161,30 +159,30 @@ class Worker {
|
|
161
159
|
let executed = false;
|
162
160
|
void (async () => {
|
163
161
|
try {
|
164
|
-
const handlerNames = Object.keys(this.handlers);
|
165
|
-
const binds = handlerNames
|
166
|
-
.map((_, index) => `$${index + 1}`)
|
167
|
-
.join(', ');
|
168
162
|
if (!this.canExecute()) {
|
169
163
|
return;
|
170
164
|
}
|
165
|
+
const handlerNames = Object.keys(this.handlers);
|
171
166
|
await module_1.sbvrUtils.db.transaction(async (tx) => {
|
172
167
|
const result = await tx.executeSql(`SELECT ${selectColumns}
|
173
168
|
FROM task AS t
|
174
169
|
WHERE
|
175
|
-
t."is executed by-handler" IN (${
|
170
|
+
t."is executed by-handler" IN (${handlerNames.map((_, index) => `$${index + 1}`).join(', ')}) AND
|
176
171
|
t."status" = 'queued' AND
|
177
172
|
t."attempt count" <= t."attempt limit" AND
|
178
173
|
(
|
179
174
|
t."is scheduled to execute on-time" IS NULL OR
|
180
|
-
t."is scheduled to execute on-time" <= CURRENT_TIMESTAMP +
|
175
|
+
t."is scheduled to execute on-time" <= CURRENT_TIMESTAMP + $${handlerNames.length + 1} * INTERVAL '1 SECOND'
|
181
176
|
)
|
182
177
|
ORDER BY
|
183
178
|
t."is scheduled to execute on-time" ASC,
|
184
|
-
t."priority" DESC,
|
185
179
|
t."id" ASC
|
186
|
-
LIMIT
|
187
|
-
FOR UPDATE SKIP LOCKED`,
|
180
|
+
LIMIT $${handlerNames.length + 2}
|
181
|
+
FOR UPDATE SKIP LOCKED`, [
|
182
|
+
...handlerNames,
|
183
|
+
Math.ceil(this.interval / 1000),
|
184
|
+
Math.max(this.concurrency - this.executing, 0),
|
185
|
+
]);
|
188
186
|
if (result.rows.length === 0) {
|
189
187
|
return;
|
190
188
|
}
|
package/out/tasks/worker.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/tasks/worker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAkD;AAElD,8CAAyD;AAEzD,6CAA8D;AAC9D,qEAAuD;AACvD,uDAAsD;AACtD,kDAAkD;AAClD,qCAAwC;AAIxC,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,
|
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": "17.1.0-build-joshbwlng-tasks-
|
3
|
+
"version": "17.1.0-build-joshbwlng-tasks-9f3f42ef1bf62714507bacc7842e99841b116d94-1",
|
4
4
|
"main": "out/server-glue/module",
|
5
5
|
"type": "commonjs",
|
6
6
|
"repository": "git@github.com:balena-io/pinejs.git",
|
@@ -147,6 +147,6 @@
|
|
147
147
|
"recursive": true
|
148
148
|
},
|
149
149
|
"versionist": {
|
150
|
-
"publishedAt": "2024-06-
|
150
|
+
"publishedAt": "2024-06-19T06:39:08.056Z"
|
151
151
|
}
|
152
152
|
}
|
package/src/tasks/index.ts
CHANGED
@@ -34,7 +34,6 @@ EXECUTE FUNCTION notify_task_insert();
|
|
34
34
|
CREATE INDEX IF NOT EXISTS idx_task_poll ON task USING btree (
|
35
35
|
"is executed by-handler",
|
36
36
|
"is scheduled to execute on-time" ASC,
|
37
|
-
"priority" DESC,
|
38
37
|
"id" ASC
|
39
38
|
) WHERE status = 'queued';
|
40
39
|
`;
|
@@ -78,8 +77,6 @@ export async function setup(db: Db.Database): Promise<void> {
|
|
78
77
|
request.values.status = 'queued';
|
79
78
|
request.values.attempt_count = 0;
|
80
79
|
request.values.attempt_limit ??= 1;
|
81
|
-
// TODO: Implement a balancer to better enqueue tasks based on actor usage
|
82
|
-
request.values.priority ??= 1;
|
83
80
|
|
84
81
|
// Set scheduled start time using cron expression if provided
|
85
82
|
if (
|
package/src/tasks/tasks.sbvr
CHANGED
@@ -18,8 +18,6 @@ Term: key
|
|
18
18
|
Concept Type: Short Text (Type)
|
19
19
|
Term: parameter set
|
20
20
|
Concept Type: JSON (Type)
|
21
|
-
Term: priority
|
22
|
-
Concept Type: Integer (Type)
|
23
21
|
Term: status
|
24
22
|
Concept Type: Short Text (Type)
|
25
23
|
Term: time
|
@@ -36,9 +34,6 @@ Fact type: task is executed by handler
|
|
36
34
|
Necessity: each task is executed by exactly one handler
|
37
35
|
Fact type: task is executed with parameter set
|
38
36
|
Necessity: each task is executed with at most one parameter set
|
39
|
-
Fact type: task has priority
|
40
|
-
Necessity: each task has exactly one priority
|
41
|
-
Necessity: each task has a priority that is greater than or equal to 0
|
42
37
|
Fact type: task is scheduled with cron expression
|
43
38
|
Necessity: each task is scheduled with at most one cron expression
|
44
39
|
Fact type: task is scheduled to execute on time
|
package/src/tasks/types.ts
CHANGED
@@ -19,7 +19,6 @@ export interface Task {
|
|
19
19
|
is_executed_with__parameter_set: object | null;
|
20
20
|
is_scheduled_with__cron_expression: string | null;
|
21
21
|
is_scheduled_to_execute_on__time: Date | null;
|
22
|
-
priority: number;
|
23
22
|
status: TaskStatus;
|
24
23
|
started_on__time: Date | null;
|
25
24
|
ended_on__time: Date | null;
|
@@ -35,7 +34,6 @@ export type PartialTask = Pick<
|
|
35
34
|
| 'is_executed_by__handler'
|
36
35
|
| 'is_executed_with__parameter_set'
|
37
36
|
| 'is_scheduled_with__cron_expression'
|
38
|
-
| 'priority'
|
39
37
|
| 'attempt_count'
|
40
38
|
| 'attempt_limit'
|
41
39
|
>;
|
package/src/tasks/worker.ts
CHANGED
@@ -17,7 +17,6 @@ const selectColumns = Object.entries({
|
|
17
17
|
'is scheduled with-cron expression': 'is_scheduled_with__cron_expression',
|
18
18
|
'attempt count': 'attempt_count',
|
19
19
|
'attempt limit': 'attempt_limit',
|
20
|
-
priority: 'priority',
|
21
20
|
'is created by-actor': 'is_created_by__actor',
|
22
21
|
})
|
23
22
|
.map(([key, value]) => `t."${key}" AS "${value}"`)
|
@@ -179,7 +178,6 @@ export class Worker {
|
|
179
178
|
is_executed_with__parameter_set: task.is_executed_with__parameter_set,
|
180
179
|
is_scheduled_with__cron_expression:
|
181
180
|
task.is_scheduled_with__cron_expression,
|
182
|
-
priority: task.priority,
|
183
181
|
},
|
184
182
|
});
|
185
183
|
}
|
@@ -196,32 +194,32 @@ export class Worker {
|
|
196
194
|
let executed = false;
|
197
195
|
void (async () => {
|
198
196
|
try {
|
199
|
-
const handlerNames = Object.keys(this.handlers);
|
200
|
-
const binds = handlerNames
|
201
|
-
.map((_, index) => `$${index + 1}`)
|
202
|
-
.join(', ');
|
203
197
|
if (!this.canExecute()) {
|
204
198
|
return;
|
205
199
|
}
|
200
|
+
const handlerNames = Object.keys(this.handlers);
|
206
201
|
await sbvrUtils.db.transaction(async (tx) => {
|
207
202
|
const result = await tx.executeSql(
|
208
203
|
`SELECT ${selectColumns}
|
209
204
|
FROM task AS t
|
210
205
|
WHERE
|
211
|
-
t."is executed by-handler" IN (${
|
206
|
+
t."is executed by-handler" IN (${handlerNames.map((_, index) => `$${index + 1}`).join(', ')}) AND
|
212
207
|
t."status" = 'queued' AND
|
213
208
|
t."attempt count" <= t."attempt limit" AND
|
214
209
|
(
|
215
210
|
t."is scheduled to execute on-time" IS NULL OR
|
216
|
-
t."is scheduled to execute on-time" <= CURRENT_TIMESTAMP +
|
211
|
+
t."is scheduled to execute on-time" <= CURRENT_TIMESTAMP + $${handlerNames.length + 1} * INTERVAL '1 SECOND'
|
217
212
|
)
|
218
213
|
ORDER BY
|
219
214
|
t."is scheduled to execute on-time" ASC,
|
220
|
-
t."priority" DESC,
|
221
215
|
t."id" ASC
|
222
|
-
LIMIT
|
216
|
+
LIMIT $${handlerNames.length + 2}
|
223
217
|
FOR UPDATE SKIP LOCKED`,
|
224
|
-
|
218
|
+
[
|
219
|
+
...handlerNames,
|
220
|
+
Math.ceil(this.interval / 1000),
|
221
|
+
Math.max(this.concurrency - this.executing, 0),
|
222
|
+
],
|
225
223
|
);
|
226
224
|
if (result.rows.length === 0) {
|
227
225
|
return;
|