@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.
Files changed (38) hide show
  1. package/dist/schemas/system_db_schema.d.ts +13 -0
  2. package/dist/schemas/system_db_schema.d.ts.map +1 -1
  3. package/dist/schemas/system_db_schema.js.map +1 -1
  4. package/dist/src/adminserver.d.ts.map +1 -1
  5. package/dist/src/adminserver.js +23 -3
  6. package/dist/src/adminserver.js.map +1 -1
  7. package/dist/src/client.d.ts +14 -0
  8. package/dist/src/client.d.ts.map +1 -1
  9. package/dist/src/client.js +40 -0
  10. package/dist/src/client.js.map +1 -1
  11. package/dist/src/conductor/conductor.d.ts.map +1 -1
  12. package/dist/src/conductor/conductor.js +47 -0
  13. package/dist/src/conductor/conductor.js.map +1 -1
  14. package/dist/src/conductor/protocol.d.ts +32 -1
  15. package/dist/src/conductor/protocol.d.ts.map +1 -1
  16. package/dist/src/conductor/protocol.js +37 -1
  17. package/dist/src/conductor/protocol.js.map +1 -1
  18. package/dist/src/dbos-executor.d.ts +16 -3
  19. package/dist/src/dbos-executor.d.ts.map +1 -1
  20. package/dist/src/dbos-executor.js +8 -5
  21. package/dist/src/dbos-executor.js.map +1 -1
  22. package/dist/src/dbos.d.ts +18 -0
  23. package/dist/src/dbos.d.ts.map +1 -1
  24. package/dist/src/dbos.js +79 -9
  25. package/dist/src/dbos.js.map +1 -1
  26. package/dist/src/sysdb_migrations/internal/migrations.d.ts.map +1 -1
  27. package/dist/src/sysdb_migrations/internal/migrations.js +17 -0
  28. package/dist/src/sysdb_migrations/internal/migrations.js.map +1 -1
  29. package/dist/src/system_database.d.ts +20 -0
  30. package/dist/src/system_database.d.ts.map +1 -1
  31. package/dist/src/system_database.js +100 -0
  32. package/dist/src/system_database.js.map +1 -1
  33. package/dist/src/wfqueue.d.ts +88 -10
  34. package/dist/src/wfqueue.d.ts.map +1 -1
  35. package/dist/src/wfqueue.js +367 -35
  36. package/dist/src/wfqueue.js.map +1 -1
  37. package/dist/tsconfig.tsbuildinfo +1 -1
  38. package/package.json +1 -1
@@ -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(`Workflow queue '${name}' is being created after DBOS initialization and will not be considered for dequeue.`);
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
- // Handle the case where the second argument is QueueParameters
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
- // Handle the case where the second argument is a number
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
- listenQueuesArg = null;
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(() => this.activeLoops.delete(loop));
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.listenQueuesArg = listenQueuesArg;
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
- let listenQueues;
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
- listenQueues = [...listenQueuesArg, this.wfQueuesByName.get(utils_1.INTERNAL_QUEUE_NAME)];
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
- listenQueues = Array.from(this.wfQueuesByName.values());
324
+ inMemoryToLaunch = Array.from(this.wfQueuesByName.values()).filter((q) => q.name !== utils_1.INTERNAL_QUEUE_NAME);
88
325
  }
89
- // Start one loop per queue
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
- async runQueue(exec, queue) {
98
- const minPollingMs = queue.minPollingIntervalMs ?? WFQueueRunner.defaultMinPollingIntervalMs;
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 = minPollingMs;
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
@@ -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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"}