@dbos-inc/dbos-sdk 4.16.7 → 4.17.4-preview
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/dist/schemas/system_db_schema.d.ts +13 -0
- package/dist/schemas/system_db_schema.d.ts.map +1 -1
- package/dist/schemas/system_db_schema.js.map +1 -1
- package/dist/src/adminserver.d.ts.map +1 -1
- package/dist/src/adminserver.js +23 -3
- package/dist/src/adminserver.js.map +1 -1
- package/dist/src/client.d.ts +14 -0
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/client.js +40 -0
- package/dist/src/client.js.map +1 -1
- package/dist/src/conductor/conductor.d.ts.map +1 -1
- package/dist/src/conductor/conductor.js +47 -0
- package/dist/src/conductor/conductor.js.map +1 -1
- package/dist/src/conductor/protocol.d.ts +32 -1
- package/dist/src/conductor/protocol.d.ts.map +1 -1
- package/dist/src/conductor/protocol.js +37 -1
- package/dist/src/conductor/protocol.js.map +1 -1
- package/dist/src/dbos-executor.d.ts +16 -3
- package/dist/src/dbos-executor.d.ts.map +1 -1
- package/dist/src/dbos-executor.js +8 -5
- package/dist/src/dbos-executor.js.map +1 -1
- package/dist/src/dbos.d.ts +18 -0
- package/dist/src/dbos.d.ts.map +1 -1
- package/dist/src/dbos.js +79 -9
- package/dist/src/dbos.js.map +1 -1
- package/dist/src/sysdb_migrations/internal/migrations.d.ts.map +1 -1
- package/dist/src/sysdb_migrations/internal/migrations.js +17 -0
- package/dist/src/sysdb_migrations/internal/migrations.js.map +1 -1
- package/dist/src/system_database.d.ts +20 -0
- package/dist/src/system_database.d.ts.map +1 -1
- package/dist/src/system_database.js +100 -0
- package/dist/src/system_database.js.map +1 -1
- package/dist/src/wfqueue.d.ts +88 -10
- package/dist/src/wfqueue.d.ts.map +1 -1
- package/dist/src/wfqueue.js +367 -35
- package/dist/src/wfqueue.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/dist/src/wfqueue.js
CHANGED
|
@@ -1,9 +1,76 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.wfQueueRunner = exports.WorkflowQueue = void 0;
|
|
3
|
+
exports.wfQueueRunner = exports.WorkflowQueue = exports.logQueue = void 0;
|
|
4
|
+
const dbos_executor_1 = require("./dbos-executor");
|
|
4
5
|
const dbos_1 = require("./dbos");
|
|
5
6
|
const debugpoint_1 = require("./debugpoint");
|
|
6
7
|
const utils_1 = require("./utils");
|
|
8
|
+
/**
|
|
9
|
+
* Log a single queue's name and its set parameters. Unset parameters are
|
|
10
|
+
* omitted, matching `Queue: <name> (concurrency=…, worker_concurrency=…,
|
|
11
|
+
* limit=N/Ts, priority, partitioned)`.
|
|
12
|
+
*/
|
|
13
|
+
function logQueue(logger, q) {
|
|
14
|
+
const opts = [];
|
|
15
|
+
if (q.concurrency !== undefined)
|
|
16
|
+
opts.push(`concurrency=${q.concurrency}`);
|
|
17
|
+
if (q.workerConcurrency !== undefined)
|
|
18
|
+
opts.push(`worker_concurrency=${q.workerConcurrency}`);
|
|
19
|
+
if (q.rateLimit !== undefined)
|
|
20
|
+
opts.push(`limit=${q.rateLimit.limitPerPeriod}/${q.rateLimit.periodSec}s`);
|
|
21
|
+
if (q.priorityEnabled)
|
|
22
|
+
opts.push('priority');
|
|
23
|
+
if (q.partitionQueue)
|
|
24
|
+
opts.push('partitioned');
|
|
25
|
+
const optsStr = opts.length > 0 ? ` (${opts.join(', ')})` : '';
|
|
26
|
+
logger.info(`Queue: ${q.name}${optsStr}`);
|
|
27
|
+
}
|
|
28
|
+
exports.logQueue = logQueue;
|
|
29
|
+
/**
|
|
30
|
+
* Per-instance association of a client-bound queue to its `SystemDatabase`.
|
|
31
|
+
* Stored off-class because any class member — including TS `private` — gives
|
|
32
|
+
* the class a nominal brand, so the type-only members below all live as
|
|
33
|
+
* module-level helpers to keep `WorkflowQueue` structurally compatible across
|
|
34
|
+
* separate compiled copies of this package.
|
|
35
|
+
*/
|
|
36
|
+
const clientSystemDatabases = new WeakMap();
|
|
37
|
+
function requireDatabaseBacked(q) {
|
|
38
|
+
if (!q.databaseBacked) {
|
|
39
|
+
throw new Error(`Cannot configure queue ${q.name}: dynamic configuration is only supported for queues registered via DBOS.registerQueue.`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function sysDBFor(q) {
|
|
43
|
+
const clientDb = clientSystemDatabases.get(q);
|
|
44
|
+
if (clientDb)
|
|
45
|
+
return clientDb;
|
|
46
|
+
const exec = dbos_executor_1.DBOSExecutor.globalInstance;
|
|
47
|
+
if (!exec) {
|
|
48
|
+
throw new Error(`Cannot access system database for queue ${q.name}: DBOS has not been launched.`);
|
|
49
|
+
}
|
|
50
|
+
return exec.systemDatabase;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Re-read the queue's row from the database and update the cached fields on
|
|
54
|
+
* `q` in place. No-op for in-memory queues. Throws if the row has been
|
|
55
|
+
* deleted.
|
|
56
|
+
*/
|
|
57
|
+
async function refreshFromDb(q) {
|
|
58
|
+
if (!q.databaseBacked)
|
|
59
|
+
return;
|
|
60
|
+
const record = await sysDBFor(q).getQueue(q.name);
|
|
61
|
+
if (record === null) {
|
|
62
|
+
throw new Error(`Queue '${q.name}' was not found in the database.`);
|
|
63
|
+
}
|
|
64
|
+
q.concurrency = record.concurrency ?? undefined;
|
|
65
|
+
q.workerConcurrency = record.workerConcurrency ?? undefined;
|
|
66
|
+
q.rateLimit =
|
|
67
|
+
record.rateLimitMax !== null && record.rateLimitPeriodSec !== null
|
|
68
|
+
? { limitPerPeriod: record.rateLimitMax, periodSec: record.rateLimitPeriodSec }
|
|
69
|
+
: undefined;
|
|
70
|
+
q.priorityEnabled = record.priorityEnabled;
|
|
71
|
+
q.partitionQueue = record.partitionQueue;
|
|
72
|
+
q.minPollingIntervalMs = record.pollingIntervalSec * 1000;
|
|
73
|
+
}
|
|
7
74
|
/**
|
|
8
75
|
* Settings structure for a named workflow queue.
|
|
9
76
|
* Workflow queues limit the rate and concurrency at which DBOS executes workflows.
|
|
@@ -12,36 +79,177 @@ const utils_1 = require("./utils");
|
|
|
12
79
|
*/
|
|
13
80
|
class WorkflowQueue {
|
|
14
81
|
name;
|
|
82
|
+
/**
|
|
83
|
+
* Last-known cached values. May be stale for database-backed queues if
|
|
84
|
+
* another process has modified the row. Use getters instead.
|
|
85
|
+
*/
|
|
15
86
|
concurrency;
|
|
16
87
|
rateLimit;
|
|
17
88
|
workerConcurrency;
|
|
18
89
|
priorityEnabled = false;
|
|
19
90
|
partitionQueue = false;
|
|
20
91
|
minPollingIntervalMs;
|
|
92
|
+
/**
|
|
93
|
+
* When true, this queue's configuration is persisted in the `queues` system
|
|
94
|
+
* table and may be mutated at runtime via the `setX` methods. When false,
|
|
95
|
+
* the queue's configuration is fixed at construction and lives only in
|
|
96
|
+
* process memory.
|
|
97
|
+
*/
|
|
98
|
+
databaseBacked = false;
|
|
99
|
+
/**
|
|
100
|
+
* True when configuration reads/writes target a `DBOSClient`-supplied
|
|
101
|
+
* SystemDatabase rather than the global executor's. The actual handle is
|
|
102
|
+
* kept off this class's public type — see the module-level WeakMap below —
|
|
103
|
+
* so that `WorkflowQueue` does not transitively depend on `SystemDatabase`.
|
|
104
|
+
*/
|
|
105
|
+
clientBound = false;
|
|
21
106
|
constructor(name, arg2, rateLimit) {
|
|
22
107
|
this.name = name;
|
|
23
108
|
if (dbos_1.DBOS.isInitialized()) {
|
|
24
|
-
dbos_1.DBOS.logger.warn(`
|
|
109
|
+
dbos_1.DBOS.logger.warn(`In-memory workflow queue '${name}' was created after DBOS initialization and will not be picked up by the queue dispatcher. ` +
|
|
110
|
+
`Use DBOS.registerQueue to register a database-backed queue at runtime.`);
|
|
25
111
|
}
|
|
112
|
+
let params;
|
|
26
113
|
if (typeof arg2 === 'object' && arg2 !== null) {
|
|
27
|
-
|
|
28
|
-
this.concurrency = arg2.concurrency;
|
|
29
|
-
this.rateLimit = arg2.rateLimit;
|
|
30
|
-
this.workerConcurrency = arg2.workerConcurrency;
|
|
31
|
-
this.priorityEnabled = arg2.priorityEnabled ?? false;
|
|
32
|
-
this.partitionQueue = arg2.partitionQueue ?? false;
|
|
33
|
-
this.minPollingIntervalMs = arg2.minPollingIntervalMs;
|
|
114
|
+
params = arg2;
|
|
34
115
|
}
|
|
35
116
|
else {
|
|
36
|
-
|
|
37
|
-
this.concurrency = arg2;
|
|
38
|
-
this.rateLimit = rateLimit;
|
|
117
|
+
params = { concurrency: arg2, rateLimit };
|
|
39
118
|
}
|
|
119
|
+
WorkflowQueue.validateQueueParams(params);
|
|
120
|
+
this.concurrency = params.concurrency;
|
|
121
|
+
this.rateLimit = params.rateLimit;
|
|
122
|
+
this.workerConcurrency = params.workerConcurrency;
|
|
123
|
+
this.priorityEnabled = params.priorityEnabled ?? false;
|
|
124
|
+
this.partitionQueue = params.partitionQueue ?? false;
|
|
125
|
+
this.minPollingIntervalMs = params.minPollingIntervalMs;
|
|
40
126
|
if (exports.wfQueueRunner.wfQueuesByName.has(name)) {
|
|
41
127
|
throw Error(`Workflow Queue '${name}' defined multiple times`);
|
|
42
128
|
}
|
|
43
129
|
exports.wfQueueRunner.wfQueuesByName.set(name, this);
|
|
44
130
|
}
|
|
131
|
+
/** Throws if any combination of queue parameters is invalid. */
|
|
132
|
+
static validateQueueParams(params) {
|
|
133
|
+
const { concurrency, workerConcurrency, rateLimit, minPollingIntervalMs } = params;
|
|
134
|
+
if (workerConcurrency !== undefined && concurrency !== undefined && workerConcurrency > concurrency) {
|
|
135
|
+
throw new Error('concurrency must be greater than or equal to workerConcurrency');
|
|
136
|
+
}
|
|
137
|
+
if (minPollingIntervalMs !== undefined && minPollingIntervalMs <= 0) {
|
|
138
|
+
throw new Error('minPollingIntervalMs must be positive');
|
|
139
|
+
}
|
|
140
|
+
if (rateLimit !== undefined && (rateLimit.limitPerPeriod === undefined || rateLimit.periodSec === undefined)) {
|
|
141
|
+
throw new Error('rateLimit must specify both limitPerPeriod and periodSec');
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/** Build a persistable record from user-supplied registration parameters. */
|
|
145
|
+
static recordFromParams(name, params) {
|
|
146
|
+
return {
|
|
147
|
+
name,
|
|
148
|
+
concurrency: params.concurrency ?? null,
|
|
149
|
+
workerConcurrency: params.workerConcurrency ?? null,
|
|
150
|
+
rateLimitMax: params.rateLimit ? params.rateLimit.limitPerPeriod : null,
|
|
151
|
+
rateLimitPeriodSec: params.rateLimit ? params.rateLimit.periodSec : null,
|
|
152
|
+
priorityEnabled: params.priorityEnabled ?? false,
|
|
153
|
+
partitionQueue: params.partitionQueue ?? false,
|
|
154
|
+
pollingIntervalSec: (params.minPollingIntervalMs ?? 1000) / 1000,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Construct a database-backed queue from a persisted record. Bypasses the
|
|
159
|
+
* legacy constructor so the instance is not added to the global registry —
|
|
160
|
+
* the queues table is the source of truth.
|
|
161
|
+
* @internal
|
|
162
|
+
*/
|
|
163
|
+
static _fromRecord(record, clientSystemDatabase) {
|
|
164
|
+
// Allocate without invoking the constructor (which would auto-register
|
|
165
|
+
// in `wfQueuesByName`) and strip `readonly` so we can set the fields here.
|
|
166
|
+
const q = Object.create(WorkflowQueue.prototype);
|
|
167
|
+
q.name = record.name;
|
|
168
|
+
q.concurrency = record.concurrency ?? undefined;
|
|
169
|
+
q.workerConcurrency = record.workerConcurrency ?? undefined;
|
|
170
|
+
q.rateLimit =
|
|
171
|
+
record.rateLimitMax !== null && record.rateLimitPeriodSec !== null
|
|
172
|
+
? { limitPerPeriod: record.rateLimitMax, periodSec: record.rateLimitPeriodSec }
|
|
173
|
+
: undefined;
|
|
174
|
+
q.priorityEnabled = record.priorityEnabled;
|
|
175
|
+
q.partitionQueue = record.partitionQueue;
|
|
176
|
+
q.minPollingIntervalMs = record.pollingIntervalSec * 1000;
|
|
177
|
+
q.databaseBacked = true;
|
|
178
|
+
q.clientBound = clientSystemDatabase !== undefined;
|
|
179
|
+
if (clientSystemDatabase !== undefined) {
|
|
180
|
+
clientSystemDatabases.set(q, clientSystemDatabase);
|
|
181
|
+
}
|
|
182
|
+
return q;
|
|
183
|
+
}
|
|
184
|
+
async setConcurrency(value) {
|
|
185
|
+
requireDatabaseBacked(this);
|
|
186
|
+
if (value !== undefined && this.workerConcurrency !== undefined && this.workerConcurrency > value) {
|
|
187
|
+
throw new Error('workerConcurrency must be less than or equal to concurrency');
|
|
188
|
+
}
|
|
189
|
+
await sysDBFor(this).updateQueue(this.name, { concurrency: value ?? null });
|
|
190
|
+
this.concurrency = value;
|
|
191
|
+
}
|
|
192
|
+
async setWorkerConcurrency(value) {
|
|
193
|
+
requireDatabaseBacked(this);
|
|
194
|
+
if (value !== undefined && this.concurrency !== undefined && value > this.concurrency) {
|
|
195
|
+
throw new Error('workerConcurrency must be less than or equal to concurrency');
|
|
196
|
+
}
|
|
197
|
+
await sysDBFor(this).updateQueue(this.name, { workerConcurrency: value ?? null });
|
|
198
|
+
this.workerConcurrency = value;
|
|
199
|
+
}
|
|
200
|
+
async setRateLimit(value) {
|
|
201
|
+
requireDatabaseBacked(this);
|
|
202
|
+
if (value !== undefined && (value.limitPerPeriod === undefined || value.periodSec === undefined)) {
|
|
203
|
+
throw new Error('rateLimit must specify both limitPerPeriod and periodSec');
|
|
204
|
+
}
|
|
205
|
+
await sysDBFor(this).updateQueue(this.name, {
|
|
206
|
+
rateLimitMax: value ? value.limitPerPeriod : null,
|
|
207
|
+
rateLimitPeriodSec: value ? value.periodSec : null,
|
|
208
|
+
});
|
|
209
|
+
this.rateLimit = value;
|
|
210
|
+
}
|
|
211
|
+
async setPriorityEnabled(value) {
|
|
212
|
+
requireDatabaseBacked(this);
|
|
213
|
+
await sysDBFor(this).updateQueue(this.name, { priorityEnabled: value });
|
|
214
|
+
this.priorityEnabled = value;
|
|
215
|
+
}
|
|
216
|
+
async setPartitionQueue(value) {
|
|
217
|
+
requireDatabaseBacked(this);
|
|
218
|
+
await sysDBFor(this).updateQueue(this.name, { partitionQueue: value });
|
|
219
|
+
this.partitionQueue = value;
|
|
220
|
+
}
|
|
221
|
+
async setMinPollingIntervalMs(value) {
|
|
222
|
+
requireDatabaseBacked(this);
|
|
223
|
+
if (value <= 0) {
|
|
224
|
+
throw new Error('minPollingIntervalMs must be positive');
|
|
225
|
+
}
|
|
226
|
+
await sysDBFor(this).updateQueue(this.name, { pollingIntervalSec: value / 1000 });
|
|
227
|
+
this.minPollingIntervalMs = value;
|
|
228
|
+
}
|
|
229
|
+
async getConcurrency() {
|
|
230
|
+
await refreshFromDb(this);
|
|
231
|
+
return this.concurrency;
|
|
232
|
+
}
|
|
233
|
+
async getWorkerConcurrency() {
|
|
234
|
+
await refreshFromDb(this);
|
|
235
|
+
return this.workerConcurrency;
|
|
236
|
+
}
|
|
237
|
+
async getRateLimit() {
|
|
238
|
+
await refreshFromDb(this);
|
|
239
|
+
return this.rateLimit;
|
|
240
|
+
}
|
|
241
|
+
async getPriorityEnabled() {
|
|
242
|
+
await refreshFromDb(this);
|
|
243
|
+
return this.priorityEnabled;
|
|
244
|
+
}
|
|
245
|
+
async getPartitionQueue() {
|
|
246
|
+
await refreshFromDb(this);
|
|
247
|
+
return this.partitionQueue;
|
|
248
|
+
}
|
|
249
|
+
async getMinPollingIntervalMs() {
|
|
250
|
+
await refreshFromDb(this);
|
|
251
|
+
return this.minPollingIntervalMs;
|
|
252
|
+
}
|
|
45
253
|
}
|
|
46
254
|
exports.WorkflowQueue = WorkflowQueue;
|
|
47
255
|
class WFQueueRunner {
|
|
@@ -50,10 +258,12 @@ class WFQueueRunner {
|
|
|
50
258
|
stopResolve;
|
|
51
259
|
stopPromise;
|
|
52
260
|
exec;
|
|
53
|
-
|
|
261
|
+
listenQueueNames = null;
|
|
54
262
|
activeLoops = new Set();
|
|
263
|
+
runningQueueNames = new Set();
|
|
55
264
|
static defaultMinPollingIntervalMs = 1000;
|
|
56
265
|
static defaultMaxPollingIntervalMs = 120000;
|
|
266
|
+
static supervisorIntervalMs = 1000;
|
|
57
267
|
backoffFactor = 2.0;
|
|
58
268
|
scalebackFactor = 0.9;
|
|
59
269
|
jitterMin = 0.95;
|
|
@@ -68,37 +278,171 @@ class WFQueueRunner {
|
|
|
68
278
|
this.wfQueuesByName.clear();
|
|
69
279
|
}
|
|
70
280
|
launchQueueLoop(queue) {
|
|
281
|
+
if (this.runningQueueNames.has(queue.name))
|
|
282
|
+
return;
|
|
283
|
+
this.runningQueueNames.add(queue.name);
|
|
71
284
|
const loop = this.runQueue(this.exec, queue);
|
|
72
285
|
this.activeLoops.add(loop);
|
|
73
|
-
void loop.finally(() =>
|
|
286
|
+
void loop.finally(() => {
|
|
287
|
+
this.activeLoops.delete(loop);
|
|
288
|
+
this.runningQueueNames.delete(queue.name);
|
|
289
|
+
});
|
|
74
290
|
}
|
|
75
291
|
async dispatchLoop(exec, listenQueuesArg) {
|
|
76
292
|
this.isRunning = true;
|
|
77
293
|
this.exec = exec;
|
|
78
|
-
this.
|
|
294
|
+
this.listenQueueNames = listenQueuesArg
|
|
295
|
+
? new Set(listenQueuesArg.map((entry) => (typeof entry === 'string' ? entry : entry.name)))
|
|
296
|
+
: null;
|
|
79
297
|
this.stopPromise = new Promise((resolve) => {
|
|
80
298
|
this.stopResolve = resolve;
|
|
81
299
|
});
|
|
82
|
-
|
|
300
|
+
// Always run the internal queue worker — it is process-private and not
|
|
301
|
+
// subject to the user's listenQueues filter.
|
|
302
|
+
const internal = this.wfQueuesByName.get(utils_1.INTERNAL_QUEUE_NAME);
|
|
303
|
+
if (internal)
|
|
304
|
+
this.launchQueueLoop(internal);
|
|
305
|
+
// Resolve the user-supplied listen list against the in-memory registry.
|
|
306
|
+
// String entries that don't match an in-memory queue are deferred — a
|
|
307
|
+
// database-backed queue with that name will be picked up by the
|
|
308
|
+
// supervisor below.
|
|
309
|
+
let inMemoryToLaunch;
|
|
83
310
|
if (listenQueuesArg !== null) {
|
|
84
|
-
|
|
311
|
+
inMemoryToLaunch = [];
|
|
312
|
+
for (const entry of listenQueuesArg) {
|
|
313
|
+
if (typeof entry === 'string') {
|
|
314
|
+
const q = this.wfQueuesByName.get(entry);
|
|
315
|
+
if (q)
|
|
316
|
+
inMemoryToLaunch.push(q);
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
inMemoryToLaunch.push(entry);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
85
322
|
}
|
|
86
323
|
else {
|
|
87
|
-
|
|
324
|
+
inMemoryToLaunch = Array.from(this.wfQueuesByName.values()).filter((q) => q.name !== utils_1.INTERNAL_QUEUE_NAME);
|
|
88
325
|
}
|
|
89
|
-
|
|
90
|
-
for (const q of listenQueues) {
|
|
326
|
+
for (const q of inMemoryToLaunch) {
|
|
91
327
|
this.launchQueueLoop(q);
|
|
92
328
|
}
|
|
329
|
+
// Discover any database-backed queues registered before launch and start
|
|
330
|
+
// their workers synchronously so an immediate enqueue on a DB-backed
|
|
331
|
+
// queue does not race the first supervisor cycle.
|
|
332
|
+
await this.discoverAndLaunchDbQueues(exec);
|
|
333
|
+
// Log everything we're now dispatching for, before the supervisor starts.
|
|
334
|
+
await this.logRunningQueues(exec);
|
|
335
|
+
// Periodic supervisor: picks up queues registered after launch.
|
|
336
|
+
const supervisor = this.superviseLoop(exec);
|
|
337
|
+
this.activeLoops.add(supervisor);
|
|
338
|
+
void supervisor.finally(() => this.activeLoops.delete(supervisor));
|
|
93
339
|
// Wait until stop() is called, then wait for all loops to drain
|
|
94
340
|
await this.stopPromise;
|
|
95
341
|
await Promise.all(this.activeLoops);
|
|
96
342
|
}
|
|
97
|
-
|
|
98
|
-
|
|
343
|
+
/**
|
|
344
|
+
* Emit a single log block describing every queue this process will dispatch
|
|
345
|
+
* for. Called once at dispatcher startup, after discovery has completed.
|
|
346
|
+
*/
|
|
347
|
+
async logRunningQueues(exec) {
|
|
348
|
+
const logger = exec.logger;
|
|
349
|
+
const merged = new Map();
|
|
350
|
+
for (const [qn, q] of this.wfQueuesByName) {
|
|
351
|
+
merged.set(qn, q);
|
|
352
|
+
}
|
|
353
|
+
try {
|
|
354
|
+
const records = await exec.systemDatabase.listQueues();
|
|
355
|
+
for (const record of records) {
|
|
356
|
+
if (!merged.has(record.name)) {
|
|
357
|
+
merged.set(record.name, WorkflowQueue._fromRecord(record));
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
catch (e) {
|
|
362
|
+
logger.warn(`Exception listing database-backed queues: ${e.message}`);
|
|
363
|
+
}
|
|
364
|
+
if (this.listenQueueNames !== null) {
|
|
365
|
+
for (const name of Array.from(merged.keys())) {
|
|
366
|
+
if (!this.listenQueueNames.has(name))
|
|
367
|
+
merged.delete(name);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
merged.delete(utils_1.INTERNAL_QUEUE_NAME);
|
|
371
|
+
logger.info(`Listening to ${merged.size} queues:`);
|
|
372
|
+
for (const q of merged.values()) {
|
|
373
|
+
logQueue(logger, q);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* List the queues table and launch a worker for any database-backed queue
|
|
378
|
+
* that isn't already running. Skips names that collide with an in-memory
|
|
379
|
+
* queue (with a warn-once log) and respects the `listenQueues` filter.
|
|
380
|
+
*/
|
|
381
|
+
async discoverAndLaunchDbQueues(exec) {
|
|
382
|
+
let records;
|
|
383
|
+
try {
|
|
384
|
+
records = await exec.systemDatabase.listQueues();
|
|
385
|
+
}
|
|
386
|
+
catch (e) {
|
|
387
|
+
exec.logger.warn(`Error listing database-backed queues: ${e.message}`);
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
for (const record of records) {
|
|
391
|
+
if (record.name === utils_1.INTERNAL_QUEUE_NAME)
|
|
392
|
+
continue;
|
|
393
|
+
if (this.wfQueuesByName.has(record.name)) {
|
|
394
|
+
exec.logger.warn(`Database-backed queue '${record.name}' has the same name as an in-memory queue. ` +
|
|
395
|
+
`The in-memory queue's configuration is being used; the database-backed queue is ignored. ` +
|
|
396
|
+
`Rename one of them to resolve the conflict.`);
|
|
397
|
+
continue;
|
|
398
|
+
}
|
|
399
|
+
if (this.runningQueueNames.has(record.name))
|
|
400
|
+
continue;
|
|
401
|
+
if (this.listenQueueNames !== null && !this.listenQueueNames.has(record.name))
|
|
402
|
+
continue;
|
|
403
|
+
this.launchQueueLoop(WorkflowQueue._fromRecord(record));
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
async superviseLoop(exec) {
|
|
407
|
+
while (this.isRunning) {
|
|
408
|
+
let timer;
|
|
409
|
+
const timeoutPromise = new Promise((resolve) => {
|
|
410
|
+
timer = setTimeout(resolve, WFQueueRunner.supervisorIntervalMs);
|
|
411
|
+
});
|
|
412
|
+
await Promise.race([timeoutPromise, this.stopPromise]);
|
|
413
|
+
clearTimeout(timer);
|
|
414
|
+
if (!this.isRunning)
|
|
415
|
+
return;
|
|
416
|
+
await this.discoverAndLaunchDbQueues(exec);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
async runQueue(exec, initialQueue) {
|
|
420
|
+
let queue = initialQueue;
|
|
99
421
|
const maxPollingMs = WFQueueRunner.defaultMaxPollingIntervalMs;
|
|
100
|
-
let currentPollingMs =
|
|
422
|
+
let currentPollingMs = queue.minPollingIntervalMs ?? WFQueueRunner.defaultMinPollingIntervalMs;
|
|
101
423
|
while (this.isRunning) {
|
|
424
|
+
// For database-backed queues, refresh config from the row each
|
|
425
|
+
// iteration so changes to concurrency, polling interval, etc. take
|
|
426
|
+
// effect without a restart. If the row is gone, this worker exits.
|
|
427
|
+
if (queue.databaseBacked) {
|
|
428
|
+
try {
|
|
429
|
+
const record = await exec.systemDatabase.getQueue(queue.name);
|
|
430
|
+
if (record === null) {
|
|
431
|
+
exec.logger.info(`Queue '${queue.name}' has been deleted from the database; stopping its worker.`);
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
queue = WorkflowQueue._fromRecord(record);
|
|
435
|
+
}
|
|
436
|
+
catch (e) {
|
|
437
|
+
exec.logger.warn(`Error reloading queue '${queue.name}' from the database: ${e.message}`);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
// Recompute min/max each iteration so a setMinPollingIntervalMs takes
|
|
441
|
+
// effect on the very next tick. Clamp the running value into the new
|
|
442
|
+
// range to avoid sleeping longer than the configured maximum after a
|
|
443
|
+
// shrink, or shorter than the minimum after a grow.
|
|
444
|
+
const minPollingMs = queue.minPollingIntervalMs ?? WFQueueRunner.defaultMinPollingIntervalMs;
|
|
445
|
+
currentPollingMs = Math.max(minPollingMs, Math.min(currentPollingMs, maxPollingMs));
|
|
102
446
|
// Sleep with jitter, racing against the stop signal
|
|
103
447
|
const jitter = this.jitterMin + Math.random() * (this.jitterMax - this.jitterMin);
|
|
104
448
|
const sleepMs = currentPollingMs * jitter;
|
|
@@ -171,18 +515,6 @@ class WFQueueRunner {
|
|
|
171
515
|
}
|
|
172
516
|
}
|
|
173
517
|
}
|
|
174
|
-
logRegisteredEndpoints(exec) {
|
|
175
|
-
const logger = exec.logger;
|
|
176
|
-
logger.info('Workflow queues:');
|
|
177
|
-
for (const [qn, q] of this.wfQueuesByName) {
|
|
178
|
-
const conc = q.concurrency !== undefined ? `global concurrency limit: ${q.concurrency}` : 'No concurrency limit set';
|
|
179
|
-
logger.info(` ${qn}: ${conc}`);
|
|
180
|
-
const workerconc = q.workerConcurrency !== undefined
|
|
181
|
-
? `worker concurrency limit: ${q.workerConcurrency}`
|
|
182
|
-
: 'No worker concurrency limit set';
|
|
183
|
-
logger.info(` ${qn}: ${workerconc}`);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
518
|
}
|
|
187
519
|
exports.wfQueueRunner = new WFQueueRunner();
|
|
188
520
|
//# sourceMappingURL=wfqueue.js.map
|
package/dist/src/wfqueue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wfqueue.js","sourceRoot":"","sources":["../../src/wfqueue.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wfqueue.js","sourceRoot":"","sources":["../../src/wfqueue.ts"],"names":[],"mappings":"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"}
|