@dbos-inc/dbos-sdk 2.8.18-preview → 2.8.41-preview.gb44af319d0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"system_database.d.ts","sourceRoot":"","sources":["../../src/system_database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system_database.d.ts","sourceRoot":"","sources":["../../src/system_database.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
3
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
4
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
4
  };
@@ -40,6 +39,37 @@ async function migrateSystemDatabase(systemPoolConfig, logger) {
40
39
  }
41
40
  }
42
41
  exports.migrateSystemDatabase = migrateSystemDatabase;
42
+ class NotificationMap {
43
+ map = new Map();
44
+ curCK = 0;
45
+ registerCallback(key, cb) {
46
+ if (!this.map.has(key)) {
47
+ this.map.set(key, new Map());
48
+ }
49
+ const ck = this.curCK++;
50
+ this.map.get(key).set(ck, cb);
51
+ return { key, ck };
52
+ }
53
+ deregisterCallback(k) {
54
+ if (!this.map.has(k.key))
55
+ return;
56
+ const sm = this.map.get(k.key);
57
+ if (!sm.has(k.ck))
58
+ return;
59
+ sm.delete(k.ck);
60
+ if (sm.size === 0) {
61
+ this.map.delete(k.key);
62
+ }
63
+ }
64
+ callCallbacks(key, event) {
65
+ if (!this.map.has(key))
66
+ return;
67
+ const sm = this.map.get(key);
68
+ for (const cb of sm.values()) {
69
+ cb(event);
70
+ }
71
+ }
72
+ }
43
73
  class PostgresSystemDatabase {
44
74
  pgPoolConfig;
45
75
  systemDatabaseName;
@@ -48,9 +78,33 @@ class PostgresSystemDatabase {
48
78
  pool;
49
79
  systemPoolConfig;
50
80
  knexDB;
81
+ /*
82
+ * Generally, notifications are asynchronous. One should:
83
+ * Subscribe to updates
84
+ * Read the database item in question
85
+ * In response to updates, re-read the database item
86
+ * Unsubscribe at the end
87
+ * The notification mechanism is reliable in the sense that it will eventually deliver updates
88
+ * or the DB connection will get dropped. The right thing to do if you lose connectivity to
89
+ * the system DB is to exit the process and go through recovery... system DB writes, notifications,
90
+ * etc may not have completed correctly, and recovery is the way to rebuild in-memory state.
91
+ *
92
+ * NOTE:
93
+ * PG Notifications are not fully reliable.
94
+ * Dropped connections are recoverable - you just need to restart and scan everything.
95
+ * (The whole VM being the logical choice, so workflows can recover from any write failures.)
96
+ * The real problem is, if the pipes out of the server are full... then notifications can be
97
+ * dropped, and only the PG server log may note it. For those reasons, we do occasional polling
98
+ */
51
99
  notificationsClient = null;
52
- notificationsMap = {};
53
- workflowEventsMap = {};
100
+ dbPollingIntervalMs = 10000;
101
+ shouldUseDBNotifications = true;
102
+ notificationsMap = new NotificationMap();
103
+ workflowEventsMap = new NotificationMap();
104
+ cancelWakeupMap = new NotificationMap();
105
+ workflowStatusMap = new NotificationMap();
106
+ runningWorkflowMap = new Map(); // Map from workflowID to workflow promise
107
+ workflowCancellationMap = new Map(); // Map from workflowID to its cancellation status.
54
108
  constructor(pgPoolConfig, systemDatabaseName, logger, sysDbPoolSize) {
55
109
  this.pgPoolConfig = pgPoolConfig;
56
110
  this.systemDatabaseName = systemDatabaseName;
@@ -99,7 +153,9 @@ class PostgresSystemDatabase {
99
153
  finally {
100
154
  await pgSystemClient.end();
101
155
  }
102
- await this.listenForNotifications();
156
+ if (this.shouldUseDBNotifications) {
157
+ await this.listenForNotifications();
158
+ }
103
159
  }
104
160
  async destroy() {
105
161
  await this.knexDB.destroy();
@@ -122,7 +178,7 @@ class PostgresSystemDatabase {
122
178
  await pgSystemClient.query(`DROP DATABASE IF EXISTS ${dbosConfig.system_database};`);
123
179
  await pgSystemClient.end();
124
180
  }
125
- async initWorkflowStatus(initStatus, args) {
181
+ async initWorkflowStatus(initStatus, serializedInputs) {
126
182
  const result = await this.pool.query(`INSERT INTO ${dbos_executor_1.DBOSExecutor.systemDBSchemaName}.workflow_status (
127
183
  workflow_uuid,
128
184
  status,
@@ -156,8 +212,8 @@ class PostgresSystemDatabase {
156
212
  initStatus.queueName,
157
213
  initStatus.authenticatedUser,
158
214
  initStatus.assumedRole,
159
- utils_1.DBOSJSON.stringify(initStatus.authenticatedRoles),
160
- utils_1.DBOSJSON.stringify(initStatus.request),
215
+ JSON.stringify(initStatus.authenticatedRoles),
216
+ JSON.stringify(initStatus.request),
161
217
  null,
162
218
  initStatus.executorId,
163
219
  initStatus.applicationVersion,
@@ -199,12 +255,11 @@ class PostgresSystemDatabase {
199
255
  }
200
256
  this.logger.debug(`Workflow ${initStatus.workflowUUID} attempt number: ${attempts}.`);
201
257
  const status = resRow.status;
202
- const serializedInputs = utils_1.DBOSJSON.stringify(args);
203
258
  const { rows } = await this.pool.query(`INSERT INTO ${dbos_executor_1.DBOSExecutor.systemDBSchemaName}.workflow_inputs (workflow_uuid, inputs) VALUES($1, $2) ON CONFLICT (workflow_uuid) DO UPDATE SET workflow_uuid = excluded.workflow_uuid RETURNING inputs`, [initStatus.workflowUUID, serializedInputs]);
204
259
  if (serializedInputs !== rows[0].inputs) {
205
260
  this.logger.warn(`Workflow inputs for ${initStatus.workflowUUID} changed since the first call! Use the original inputs.`);
206
261
  }
207
- return { args: utils_1.DBOSJSON.parse(rows[0].inputs), status };
262
+ return { serializedInputs: rows[0].inputs, status };
208
263
  }
209
264
  async recordWorkflowStatusChange(workflowID, status, update, client) {
210
265
  let rec = '';
@@ -217,7 +272,7 @@ class PostgresSystemDatabase {
217
272
  const wRes = await (client ?? this.pool).query(`UPDATE ${dbos_executor_1.DBOSExecutor.systemDBSchemaName}.workflow_status
218
273
  SET ${rec} status=$2, output=$3, error=$4, updated_at=$5 WHERE workflow_uuid=$1`, [workflowID, status, update.output, update.error, Date.now()]);
219
274
  if (wRes.rowCount !== 1) {
220
- throw new error_1.DBOSWorkflowConflictUUIDError(`Attempt to record transition of nonexistent workflow ${workflowID}`);
275
+ throw new error_1.DBOSWorkflowConflictError(`Attempt to record transition of nonexistent workflow ${workflowID}`);
221
276
  }
222
277
  }
223
278
  async recordWorkflowOutput(workflowID, status) {
@@ -238,9 +293,10 @@ class PostgresSystemDatabase {
238
293
  if (rows.length === 0) {
239
294
  return null;
240
295
  }
241
- return utils_1.DBOSJSON.parse(rows[0].inputs);
296
+ return rows[0].inputs;
242
297
  }
243
298
  async getOperationResult(workflowID, functionID, client) {
299
+ await this.checkIfCanceled(workflowID);
244
300
  const { rows } = await (client ?? this.pool).query(`SELECT output, error, child_workflow_id, function_name
245
301
  FROM ${dbos_executor_1.DBOSExecutor.systemDBSchemaName}.operation_outputs
246
302
  WHERE workflow_uuid=$1 AND function_id=$2`, [workflowID, functionID]);
@@ -281,7 +337,7 @@ class PostgresSystemDatabase {
281
337
  const err = error;
282
338
  if (err.code === '40001' || err.code === '23505') {
283
339
  // Serialization and primary key conflict (Postgres).
284
- throw new error_1.DBOSWorkflowConflictUUIDError(workflowID);
340
+ throw new error_1.DBOSWorkflowConflictError(workflowID);
285
341
  }
286
342
  else {
287
343
  throw err;
@@ -306,6 +362,30 @@ class PostgresSystemDatabase {
306
362
  return serialOutput;
307
363
  }
308
364
  async durableSleepms(workflowID, functionID, durationMS) {
365
+ let resolveNotification;
366
+ const cancelPromise = new Promise((resolve) => {
367
+ resolveNotification = resolve;
368
+ });
369
+ const cbr = this.cancelWakeupMap.registerCallback(workflowID, resolveNotification);
370
+ try {
371
+ let timeoutPromise = Promise.resolve();
372
+ const { promise, cancel: timeoutCancel } = await this.durableSleepmsInternal(workflowID, functionID, durationMS);
373
+ timeoutPromise = promise;
374
+ try {
375
+ await Promise.race([cancelPromise, timeoutPromise]);
376
+ }
377
+ finally {
378
+ timeoutCancel();
379
+ }
380
+ }
381
+ finally {
382
+ this.cancelWakeupMap.deregisterCallback(cbr);
383
+ }
384
+ await this.checkIfCanceled(workflowID);
385
+ }
386
+ async durableSleepmsInternal(workflowID, functionID, durationMS, maxSleepPerIteration) {
387
+ if (maxSleepPerIteration === undefined)
388
+ maxSleepPerIteration = durationMS;
309
389
  const curTime = Date.now();
310
390
  let endTimeMs = curTime + durationMS;
311
391
  const res = await this.getOperationResult(workflowID, functionID);
@@ -318,7 +398,10 @@ class PostgresSystemDatabase {
318
398
  else {
319
399
  await this.recordOperationResult(workflowID, functionID, { serialOutput: JSON.stringify(endTimeMs), functionName: exports.DBOS_FUNCNAME_SLEEP }, false);
320
400
  }
321
- return (0, utils_1.cancellableSleep)(Math.max(endTimeMs - curTime, 0));
401
+ return {
402
+ ...(0, utils_1.cancellableSleep)(Math.max(Math.min(maxSleepPerIteration, endTimeMs - curTime), 0)),
403
+ endTime: endTimeMs,
404
+ };
322
405
  }
323
406
  nullTopic = '__null__topic__';
324
407
  async send(workflowID, functionID, destinationID, message, topic) {
@@ -357,37 +440,56 @@ class PostgresSystemDatabase {
357
440
  }
358
441
  return res.res.res;
359
442
  }
360
- // Check if the key is already in the DB, then wait for the notification if it isn't.
361
- const initRecvRows = (await this.pool.query(`SELECT topic FROM ${dbos_executor_1.DBOSExecutor.systemDBSchemaName}.notifications WHERE destination_uuid=$1 AND topic=$2;`, [workflowID, topic])).rows;
362
- if (initRecvRows.length === 0) {
363
- // Then, register the key with the global notifications listener.
443
+ const timeoutms = timeoutSeconds !== undefined ? timeoutSeconds * 1000 : undefined;
444
+ let finishTime = timeoutms !== undefined ? Date.now() + timeoutms : undefined;
445
+ while (true) {
446
+ // register the key with the global notifications listener.
364
447
  let resolveNotification;
365
448
  const messagePromise = new Promise((resolve) => {
366
449
  resolveNotification = resolve;
367
450
  });
368
451
  const payload = `${workflowID}::${topic}`;
369
- this.notificationsMap[payload] = resolveNotification; // The resolver assignment in the Promise definition runs synchronously.
370
- let timeoutPromise = Promise.resolve();
371
- let timeoutCancel = () => { };
372
- try {
373
- const { promise, cancel } = await this.durableSleepms(workflowID, timeoutFunctionID, timeoutSeconds * 1000);
374
- timeoutPromise = promise;
375
- timeoutCancel = cancel;
376
- }
377
- catch (e) {
378
- this.logger.error(e);
379
- delete this.notificationsMap[payload];
380
- timeoutCancel();
381
- throw new Error('durable sleepms failed');
382
- }
452
+ const cbr = this.notificationsMap.registerCallback(payload, resolveNotification);
453
+ const crh = this.cancelWakeupMap.registerCallback(workflowID, (_res) => {
454
+ resolveNotification();
455
+ });
383
456
  try {
384
- await Promise.race([messagePromise, timeoutPromise]);
457
+ await this.checkIfCanceled(workflowID);
458
+ // Check if the key is already in the DB, then wait for the notification if it isn't.
459
+ const initRecvRows = (await this.pool.query(`SELECT topic FROM ${dbos_executor_1.DBOSExecutor.systemDBSchemaName}.notifications WHERE destination_uuid=$1 AND topic=$2;`, [workflowID, topic])).rows;
460
+ if (initRecvRows.length !== 0)
461
+ break;
462
+ const ct = Date.now();
463
+ if (finishTime && ct > finishTime)
464
+ break; // Time's up
465
+ let timeoutPromise = Promise.resolve();
466
+ let timeoutCancel = () => { };
467
+ if (timeoutms) {
468
+ const { promise, cancel, endTime } = await this.durableSleepmsInternal(workflowID, timeoutFunctionID, timeoutms, this.dbPollingIntervalMs);
469
+ timeoutPromise = promise;
470
+ timeoutCancel = cancel;
471
+ finishTime = endTime;
472
+ }
473
+ else {
474
+ let poll = finishTime ? finishTime - ct : this.dbPollingIntervalMs;
475
+ poll = Math.min(this.dbPollingIntervalMs, poll);
476
+ const { promise, cancel } = (0, utils_1.cancellableSleep)(poll);
477
+ timeoutPromise = promise;
478
+ timeoutCancel = cancel;
479
+ }
480
+ try {
481
+ await Promise.race([messagePromise, timeoutPromise]);
482
+ }
483
+ finally {
484
+ timeoutCancel();
485
+ }
385
486
  }
386
487
  finally {
387
- timeoutCancel();
388
- delete this.notificationsMap[payload];
488
+ this.notificationsMap.deregisterCallback(cbr);
489
+ this.cancelWakeupMap.deregisterCallback(crh);
389
490
  }
390
491
  }
492
+ await this.checkIfCanceled(workflowID);
391
493
  // Transactionally consume and return the message if it's in the DB, otherwise return null.
392
494
  let message = null;
393
495
  const client = await this.pool.connect();
@@ -461,40 +563,49 @@ class PostgresSystemDatabase {
461
563
  // Get the return the value. if it's in the DB, otherwise return null.
462
564
  let value = null;
463
565
  const payloadKey = `${workflowID}::${key}`;
566
+ const timeoutms = timeoutSeconds !== undefined ? timeoutSeconds * 1000 : undefined;
567
+ let finishTime = timeoutms !== undefined ? Date.now() + timeoutms : undefined;
464
568
  // Register the key with the global notifications listener first... we do not want to look in the DB first
465
569
  // or that would cause a timing hole.
466
- let resolveNotification;
467
- const valuePromise = new Promise((resolve) => {
468
- resolveNotification = resolve;
469
- });
470
- this.workflowEventsMap[payloadKey] = resolveNotification; // The resolver assignment in the Promise definition runs synchronously.
471
- try {
472
- // Check if the key is already in the DB, then wait for the notification if it isn't.
473
- const initRecvRows = (await this.pool.query(`
474
- SELECT key, value
475
- FROM ${dbos_executor_1.DBOSExecutor.systemDBSchemaName}.workflow_events
476
- WHERE workflow_uuid=$1 AND key=$2;`, [workflowID, key])).rows;
477
- if (initRecvRows.length > 0) {
478
- value = initRecvRows[0].value;
479
- }
480
- else {
570
+ while (true) {
571
+ let resolveNotification;
572
+ const valuePromise = new Promise((resolve) => {
573
+ resolveNotification = resolve;
574
+ });
575
+ const cbr = this.workflowEventsMap.registerCallback(payloadKey, resolveNotification);
576
+ const crh = callerWorkflow?.workflowID
577
+ ? this.cancelWakeupMap.registerCallback(callerWorkflow.workflowID, (_res) => {
578
+ resolveNotification();
579
+ })
580
+ : undefined;
581
+ try {
582
+ if (callerWorkflow?.workflowID)
583
+ await this.checkIfCanceled(callerWorkflow?.workflowID);
584
+ // Check if the key is already in the DB, then wait for the notification if it isn't.
585
+ const initRecvRows = (await this.pool.query(`
586
+ SELECT key, value
587
+ FROM ${dbos_executor_1.DBOSExecutor.systemDBSchemaName}.workflow_events
588
+ WHERE workflow_uuid=$1 AND key=$2;`, [workflowID, key])).rows;
589
+ if (initRecvRows.length > 0) {
590
+ value = initRecvRows[0].value;
591
+ break;
592
+ }
593
+ const ct = Date.now();
594
+ if (finishTime && ct > finishTime)
595
+ break; // Time's up
481
596
  // If we have a callerWorkflow, we want a durable sleep, otherwise, not
482
597
  let timeoutPromise = Promise.resolve();
483
598
  let timeoutCancel = () => { };
484
- if (callerWorkflow) {
485
- try {
486
- const { promise, cancel } = await this.durableSleepms(callerWorkflow.workflowID, callerWorkflow.timeoutFunctionID ?? -1, timeoutSeconds * 1000);
487
- timeoutPromise = promise;
488
- timeoutCancel = cancel;
489
- }
490
- catch (e) {
491
- this.logger.error(e);
492
- delete this.workflowEventsMap[payloadKey];
493
- throw new Error('durable sleepms failed');
494
- }
599
+ if (callerWorkflow && timeoutms) {
600
+ const { promise, cancel, endTime } = await this.durableSleepmsInternal(callerWorkflow.workflowID, callerWorkflow.timeoutFunctionID ?? -1, timeoutms, this.dbPollingIntervalMs);
601
+ timeoutPromise = promise;
602
+ timeoutCancel = cancel;
603
+ finishTime = endTime;
495
604
  }
496
605
  else {
497
- const { promise, cancel } = (0, utils_1.cancellableSleep)(timeoutSeconds * 1000);
606
+ let poll = finishTime ? finishTime - ct : this.dbPollingIntervalMs;
607
+ poll = Math.min(this.dbPollingIntervalMs, poll);
608
+ const { promise, cancel } = (0, utils_1.cancellableSleep)(poll);
498
609
  timeoutPromise = promise;
499
610
  timeoutCancel = cancel;
500
611
  }
@@ -504,17 +615,12 @@ class PostgresSystemDatabase {
504
615
  finally {
505
616
  timeoutCancel();
506
617
  }
507
- const finalRecvRows = (await this.pool.query(`
508
- SELECT value
509
- FROM ${dbos_executor_1.DBOSExecutor.systemDBSchemaName}.workflow_events
510
- WHERE workflow_uuid=$1 AND key=$2;`, [workflowID, key])).rows;
511
- if (finalRecvRows.length > 0) {
512
- value = finalRecvRows[0].value;
513
- }
514
618
  }
515
- }
516
- finally {
517
- delete this.workflowEventsMap[payloadKey];
619
+ finally {
620
+ this.workflowEventsMap.deregisterCallback(cbr);
621
+ if (crh)
622
+ this.cancelWakeupMap.deregisterCallback(crh);
623
+ }
518
624
  }
519
625
  // Record the output if it is inside a workflow.
520
626
  if (callerWorkflow) {
@@ -528,6 +634,17 @@ class PostgresSystemDatabase {
528
634
  async setWorkflowStatus(workflowID, status, resetRecoveryAttempts) {
529
635
  await this.recordWorkflowStatusChange(workflowID, status, { resetRecoveryAttempts });
530
636
  }
637
+ setWFCancelMap(workflowID) {
638
+ if (this.runningWorkflowMap.has(workflowID)) {
639
+ this.workflowCancellationMap.set(workflowID, true);
640
+ }
641
+ this.cancelWakeupMap.callCallbacks(workflowID);
642
+ }
643
+ clearWFCancelMap(workflowID) {
644
+ if (this.workflowCancellationMap.has(workflowID)) {
645
+ this.workflowCancellationMap.delete(workflowID);
646
+ }
647
+ }
531
648
  async cancelWorkflow(workflowID) {
532
649
  const client = await this.pool.connect();
533
650
  try {
@@ -546,6 +663,13 @@ class PostgresSystemDatabase {
546
663
  finally {
547
664
  client.release();
548
665
  }
666
+ this.setWFCancelMap(workflowID);
667
+ }
668
+ async checkIfCanceled(workflowID) {
669
+ if (this.workflowCancellationMap.get(workflowID) === true) {
670
+ throw new error_1.DBOSWorkflowCancelledError(workflowID);
671
+ }
672
+ return Promise.resolve();
549
673
  }
550
674
  async resumeWorkflow(workflowID) {
551
675
  const client = await this.pool.connect();
@@ -574,6 +698,38 @@ class PostgresSystemDatabase {
574
698
  finally {
575
699
  client.release();
576
700
  }
701
+ this.clearWFCancelMap(workflowID);
702
+ }
703
+ registerRunningWorkflow(workflowID, workflowPromise) {
704
+ // Need to await for the workflow and capture errors.
705
+ const awaitWorkflowPromise = workflowPromise
706
+ .catch((error) => {
707
+ this.logger.debug('Captured error in awaitWorkflowPromise: ' + error);
708
+ })
709
+ .finally(() => {
710
+ // Remove itself from pending workflow map.
711
+ this.runningWorkflowMap.delete(workflowID);
712
+ this.workflowCancellationMap.delete(workflowID);
713
+ });
714
+ this.runningWorkflowMap.set(workflowID, awaitWorkflowPromise);
715
+ }
716
+ async awaitRunningWorkflows() {
717
+ if (this.runningWorkflowMap.size > 0) {
718
+ this.logger.info('Waiting for pending workflows to finish.');
719
+ await Promise.allSettled(this.runningWorkflowMap.values());
720
+ }
721
+ if (this.workflowEventsMap.map.size > 0) {
722
+ this.logger.warn('Workflow events map is not empty - shutdown is not clean.');
723
+ //throw new Error('Workflow events map is not empty - shutdown is not clean.');
724
+ }
725
+ if (this.notificationsMap.map.size > 0) {
726
+ this.logger.warn('Message notification map is not empty - shutdown is not clean.');
727
+ //throw new Error('Message notification map is not empty - shutdown is not clean.');
728
+ }
729
+ if (this.workflowStatusMap.map.size > 0) {
730
+ this.logger.warn('Workflow status map is not empty - shutdown is not clean.');
731
+ //throw new Error('Workflow status map is not empty - shutdown is not clean.');
732
+ }
577
733
  }
578
734
  async getWorkflowStatus(workflowID, callerID, callerFN) {
579
735
  const internalStatus = await this.getWorkflowStatusInternal(workflowID, callerID, callerFN);
@@ -610,8 +766,8 @@ class PostgresSystemDatabase {
610
766
  queueName: rows[0].queue_name || undefined,
611
767
  authenticatedUser: rows[0].authenticated_user,
612
768
  assumedRole: rows[0].assumed_role,
613
- authenticatedRoles: utils_1.DBOSJSON.parse(rows[0].authenticated_roles),
614
- request: utils_1.DBOSJSON.parse(rows[0].request),
769
+ authenticatedRoles: JSON.parse(rows[0].authenticated_roles),
770
+ request: JSON.parse(rows[0].request),
615
771
  executorId: rows[0].executor_id,
616
772
  createdAt: Number(rows[0].created_at),
617
773
  updatedAt: Number(rows[0].updated_at),
@@ -625,34 +781,79 @@ class PostgresSystemDatabase {
625
781
  }, exports.DBOS_FUNCNAME_GETSTATUS, callerID, callerFN);
626
782
  return sv ? JSON.parse(sv) : null;
627
783
  }
628
- async awaitWorkflowResult(workflowID, timeoutms) {
629
- const pollingIntervalMs = 1000;
630
- const et = timeoutms !== undefined ? new Date().getTime() + timeoutms : undefined;
784
+ async awaitWorkflowResult(workflowID, timeoutSeconds, callerID, timerFuncID) {
785
+ const timeoutms = timeoutSeconds !== undefined ? timeoutSeconds * 1000 : undefined;
786
+ let finishTime = timeoutms !== undefined ? Date.now() + timeoutms : undefined;
631
787
  while (true) {
632
- const { rows } = await this.pool.query(`SELECT status, output, error FROM ${dbos_executor_1.DBOSExecutor.systemDBSchemaName}.workflow_status WHERE workflow_uuid=$1`, [workflowID]);
633
- if (rows.length > 0) {
634
- const status = rows[0].status;
635
- if (status === workflow_1.StatusString.SUCCESS) {
636
- return { res: rows[0].output };
788
+ let resolveNotification;
789
+ const statusPromise = new Promise((resolve) => {
790
+ resolveNotification = resolve;
791
+ });
792
+ const irh = this.workflowStatusMap.registerCallback(workflowID, (_res) => {
793
+ resolveNotification();
794
+ });
795
+ const crh = callerID
796
+ ? this.cancelWakeupMap.registerCallback(callerID, (_res) => {
797
+ resolveNotification();
798
+ })
799
+ : undefined;
800
+ try {
801
+ if (callerID)
802
+ await this.checkIfCanceled(callerID);
803
+ try {
804
+ const { rows } = await this.pool.query(`SELECT status, output, error FROM ${dbos_executor_1.DBOSExecutor.systemDBSchemaName}.workflow_status WHERE workflow_uuid=$1`, [workflowID]);
805
+ if (rows.length > 0) {
806
+ const status = rows[0].status;
807
+ if (status === workflow_1.StatusString.SUCCESS) {
808
+ return { res: rows[0].output };
809
+ }
810
+ else if (status === workflow_1.StatusString.ERROR) {
811
+ return { err: rows[0].error };
812
+ }
813
+ else if (status === workflow_1.StatusString.CANCELLED) {
814
+ return { cancelled: true };
815
+ }
816
+ else {
817
+ // Status is not actionable
818
+ }
819
+ }
637
820
  }
638
- else if (status === workflow_1.StatusString.ERROR) {
639
- return { err: rows[0].error };
821
+ catch (e) {
822
+ const err = e;
823
+ this.logger.error(`Exception from system database: ${err}`);
824
+ throw err;
640
825
  }
641
- }
642
- if (et !== undefined) {
643
- const ct = new Date().getTime();
644
- if (et > ct) {
645
- await (0, utils_1.sleepms)(Math.min(pollingIntervalMs, et - ct));
826
+ const ct = Date.now();
827
+ if (finishTime && ct > finishTime)
828
+ return undefined; // Time's up
829
+ let timeoutPromise = Promise.resolve();
830
+ let timeoutCancel = () => { };
831
+ if (timerFuncID !== undefined && callerID !== undefined && timeoutms !== undefined) {
832
+ const { promise, cancel, endTime } = await this.durableSleepmsInternal(callerID, timerFuncID, timeoutms, this.dbPollingIntervalMs);
833
+ finishTime = endTime;
834
+ timeoutPromise = promise;
835
+ timeoutCancel = cancel;
646
836
  }
647
837
  else {
648
- break;
838
+ let poll = finishTime ? finishTime - ct : this.dbPollingIntervalMs;
839
+ poll = Math.min(this.dbPollingIntervalMs, poll);
840
+ const { promise, cancel } = (0, utils_1.cancellableSleep)(poll);
841
+ timeoutPromise = promise;
842
+ timeoutCancel = cancel;
843
+ }
844
+ try {
845
+ await Promise.race([statusPromise, timeoutPromise]);
846
+ }
847
+ finally {
848
+ timeoutCancel();
649
849
  }
650
850
  }
651
- else {
652
- await (0, utils_1.sleepms)(pollingIntervalMs);
851
+ finally {
852
+ this.workflowStatusMap.deregisterCallback(irh);
853
+ if (crh)
854
+ this.cancelWakeupMap.deregisterCallback(crh);
653
855
  }
654
856
  }
655
- return undefined;
656
857
  }
657
858
  /* BACKGROUND PROCESSES */
658
859
  /**
@@ -663,15 +864,30 @@ class PostgresSystemDatabase {
663
864
  this.notificationsClient = await this.pool.connect();
664
865
  await this.notificationsClient.query('LISTEN dbos_notifications_channel;');
665
866
  await this.notificationsClient.query('LISTEN dbos_workflow_events_channel;');
867
+ await this.notificationsClient.query('LISTEN dbos_workflow_status_channel;');
666
868
  const handler = (msg) => {
869
+ if (!this.shouldUseDBNotifications)
870
+ return; // Testing parameter
667
871
  if (msg.channel === 'dbos_notifications_channel') {
668
- if (msg.payload && msg.payload in this.notificationsMap) {
669
- this.notificationsMap[msg.payload]();
872
+ if (msg.payload) {
873
+ this.notificationsMap.callCallbacks(msg.payload);
670
874
  }
671
875
  }
672
- else {
673
- if (msg.payload && msg.payload in this.workflowEventsMap) {
674
- this.workflowEventsMap[msg.payload]();
876
+ else if (msg.channel === 'dbos_workflow_events_channel') {
877
+ if (msg.payload) {
878
+ this.workflowEventsMap.callCallbacks(msg.payload);
879
+ }
880
+ }
881
+ else if (msg.channel === 'dbos_workflow_status_channel') {
882
+ if (msg.payload) {
883
+ const notif = JSON.parse(msg.payload);
884
+ this.workflowStatusMap.callCallbacks(notif.wfid, notif);
885
+ if (notif.status === workflow_1.StatusString.CANCELLED) {
886
+ this.setWFCancelMap(notif.wfid);
887
+ }
888
+ else {
889
+ this.clearWFCancelMap(notif.wfid);
890
+ }
675
891
  }
676
892
  }
677
893
  };
@@ -868,7 +1084,7 @@ class PostgresSystemDatabase {
868
1084
  }
869
1085
  async dequeueWorkflow(workflowId, queue) {
870
1086
  if (queue.rateLimit) {
871
- const time = new Date().getTime();
1087
+ const time = Date.now();
872
1088
  await this.pool.query(`
873
1089
  UPDATE ${dbos_executor_1.DBOSExecutor.systemDBSchemaName}.workflow_queue
874
1090
  SET completed_at_epoch_ms = $2
@@ -883,7 +1099,7 @@ class PostgresSystemDatabase {
883
1099
  }
884
1100
  }
885
1101
  async findAndMarkStartableWorkflows(queue, executorID, appVersion) {
886
- const startTimeMs = new Date().getTime();
1102
+ const startTimeMs = Date.now();
887
1103
  const limiterPeriodMS = queue.rateLimit ? queue.rateLimit.periodSec * 1000 : 0;
888
1104
  const claimedIDs = [];
889
1105
  await this.knexDB.transaction(async (trx) => {