@adonis-agora/durable 0.41.0 → 0.43.0
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/CHANGELOG.md +45 -0
- package/dist/assets/spa/assets/index-BkHCh-H3.js +16 -0
- package/dist/assets/spa/assets/index-BkHCh-H3.js.map +1 -0
- package/dist/assets/spa/index.html +1 -1
- package/dist/providers/durable_provider.d.ts.map +1 -1
- package/dist/providers/durable_provider.js +10 -0
- package/dist/providers/durable_provider.js.map +1 -1
- package/dist/src/codec-state-store.d.ts +13 -1
- package/dist/src/codec-state-store.d.ts.map +1 -1
- package/dist/src/codec-state-store.js +32 -0
- package/dist/src/codec-state-store.js.map +1 -1
- package/dist/src/commands/worker.d.ts.map +1 -1
- package/dist/src/commands/worker.js +4 -0
- package/dist/src/commands/worker.js.map +1 -1
- package/dist/src/concurrency.d.ts +55 -0
- package/dist/src/concurrency.d.ts.map +1 -0
- package/dist/src/concurrency.js +52 -0
- package/dist/src/concurrency.js.map +1 -0
- package/dist/src/dashboard/index.d.ts +1 -1
- package/dist/src/dashboard/index.js +1 -1
- package/dist/src/define_config.d.ts +17 -1
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/engine.d.ts +73 -2
- package/dist/src/engine.d.ts.map +1 -1
- package/dist/src/engine.js +195 -26
- package/dist/src/engine.js.map +1 -1
- package/dist/src/errors.d.ts +13 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +20 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/interfaces.d.ts +111 -0
- package/dist/src/interfaces.d.ts.map +1 -1
- package/dist/src/interfaces.js +18 -1
- package/dist/src/interfaces.js.map +1 -1
- package/dist/src/run-value-facets.d.ts +1 -1
- package/dist/src/run-value-facets.d.ts.map +1 -1
- package/dist/src/run-value-facets.js +1 -1
- package/dist/src/run-value-facets.js.map +1 -1
- package/dist/src/schedules.d.ts +172 -0
- package/dist/src/schedules.d.ts.map +1 -0
- package/dist/src/schedules.js +362 -0
- package/dist/src/schedules.js.map +1 -0
- package/dist/src/stores/lucid-schema.d.ts +1 -0
- package/dist/src/stores/lucid-schema.d.ts.map +1 -1
- package/dist/src/stores/lucid-schema.js +21 -0
- package/dist/src/stores/lucid-schema.js.map +1 -1
- package/dist/src/stores/lucid.d.ts +9 -1
- package/dist/src/stores/lucid.d.ts.map +1 -1
- package/dist/src/stores/lucid.js +107 -0
- package/dist/src/stores/lucid.js.map +1 -1
- package/dist/src/testing/in-memory-state-store.d.ts +8 -1
- package/dist/src/testing/in-memory-state-store.d.ts.map +1 -1
- package/dist/src/testing/in-memory-state-store.js +38 -0
- package/dist/src/testing/in-memory-state-store.js.map +1 -1
- package/dist/src/testing-kit/state-store-conformance.d.ts.map +1 -1
- package/dist/src/testing-kit/state-store-conformance.js +101 -0
- package/dist/src/testing-kit/state-store-conformance.js.map +1 -1
- package/dist/src/workflow-discovery.d.ts.map +1 -1
- package/dist/src/workflow-discovery.js +1 -0
- package/dist/src/workflow-discovery.js.map +1 -1
- package/dist/src/workflow-ref.d.ts +9 -0
- package/dist/src/workflow-ref.d.ts.map +1 -1
- package/dist/src/workflow-ref.js.map +1 -1
- package/package.json +6 -6
- package/dist/assets/spa/assets/index-CeHc6GHq.js +0 -16
- package/dist/assets/spa/assets/index-CeHc6GHq.js.map +0 -1
package/dist/src/engine.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { type AdmissionBackend } from './admission.js';
|
|
2
|
+
import { type ConcurrencyConfig, type ConcurrencyQuota } from './concurrency.js';
|
|
2
3
|
import { type EntityConfig } from './entities.js';
|
|
3
4
|
import { type EventBatchConfig } from './event-accumulators.js';
|
|
4
|
-
import type { ControlPlane, EngineListener, GroupHealth, NamedTransport, RunDispatcher, RunFacetQuery, RunQuery, RunResult, RunStatus, RunValueAxis, RunValueFacetOptions, RunValueFacetRow, SearchAttributes, SignalWaiter, StateStore, StepCheckpoint, StepError, StepInterceptor, Transport, UpdateResult, UpdateValidator, WorkflowCtx, WorkflowExecutor, WorkflowRun } from './interfaces.js';
|
|
5
|
+
import type { ControlPlane, EngineListener, GroupHealth, NamedTransport, RunDispatcher, RunFacetQuery, RunQuery, RunResult, RunScope, RunStatus, RunValueAxis, RunValueFacetOptions, RunValueFacetRow, ScopedRetentionPolicy, SearchAttributes, SignalWaiter, StateStore, StepCheckpoint, StepError, StepInterceptor, Transport, UpdateResult, UpdateValidator, WorkflowCtx, WorkflowExecutor, WorkflowRun } from './interfaces.js';
|
|
5
6
|
import type { QueueConfig } from './queue.js';
|
|
6
7
|
import { type ScheduledWorkflow } from './scheduler.js';
|
|
8
|
+
import { ScheduleClient } from './schedules.js';
|
|
7
9
|
import type { NormalizedEventTrigger } from './workflow-events.js';
|
|
8
10
|
import { type WorkflowClass, type WorkflowInputOf, type WorkflowRef } from './workflow-ref.js';
|
|
9
11
|
type WorkflowFn = (ctx: WorkflowCtx, input: unknown) => Promise<unknown>;
|
|
@@ -39,6 +41,12 @@ export interface StartOptions {
|
|
|
39
41
|
* when one shared workflow is started on behalf of another package.
|
|
40
42
|
*/
|
|
41
43
|
origin?: string | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* A start-time concurrency quota for this start — at most `limit` runs sharing `key` in flight;
|
|
46
|
+
* over it, `start` throws {@link ConcurrencyLimitError} and creates nothing. Overrides the
|
|
47
|
+
* workflow's registered `concurrency`. See {@link ConcurrencyQuota}.
|
|
48
|
+
*/
|
|
49
|
+
concurrency?: ConcurrencyQuota | undefined;
|
|
42
50
|
}
|
|
43
51
|
/** One row of {@link WorkflowEngine.listSchedules} — a schedule with its live control state. */
|
|
44
52
|
export interface ScheduleInfo {
|
|
@@ -236,6 +244,13 @@ export interface WorkflowEngineDeps {
|
|
|
236
244
|
* deletion (archival failure must never lose data).
|
|
237
245
|
*/
|
|
238
246
|
retention?: Partial<Record<'completed' | 'failed' | 'cancelled' | 'dead', number>> | undefined;
|
|
247
|
+
/**
|
|
248
|
+
* Scoped retention rules, swept alongside {@link retention} by the same throttled
|
|
249
|
+
* `sweepRetention`: each deletes terminal runs in its `statuses` that match its `scope` (a tenant's
|
|
250
|
+
* `namespace`, `tags`, `workflows`, search `attributes`) once older than `maxAgeMs`. The strictest
|
|
251
|
+
* rule matching a run wins, since every rule is applied.
|
|
252
|
+
*/
|
|
253
|
+
retentionPolicies?: ScopedRetentionPolicy[] | undefined;
|
|
239
254
|
/**
|
|
240
255
|
* How long an in-flight run must sit untouched — with the stranded signature (a wake-forever
|
|
241
256
|
* suspension, or an old pending remote step whose worker heartbeat is silent) — before the
|
|
@@ -282,6 +297,12 @@ export interface WorkflowEngineDeps {
|
|
|
282
297
|
* faster pickup.
|
|
283
298
|
*/
|
|
284
299
|
blockedPollMs?: number | undefined;
|
|
300
|
+
/**
|
|
301
|
+
* Fire the PERSISTED schedules managed at runtime through {@link WorkflowEngine.schedules} on every
|
|
302
|
+
* worker tick (`durable:work` / the embedded worker). Off by default, so a deployment that never
|
|
303
|
+
* uses them doesn't need the `durable_schedules` table touched.
|
|
304
|
+
*/
|
|
305
|
+
persistedSchedules?: boolean | undefined;
|
|
285
306
|
}
|
|
286
307
|
/** Thrown by {@link WorkflowEngine.resume} when the run belongs to a different namespace. */
|
|
287
308
|
export declare class NamespaceMismatch extends Error {
|
|
@@ -307,6 +328,14 @@ export declare class WorkflowEngine {
|
|
|
307
328
|
/** Worker-pool partition stamped on created runs and used to scope the poll/resume paths.
|
|
308
329
|
* `undefined` is the OPERATOR: it scopes nothing and belongs to every namespace. */
|
|
309
330
|
private readonly namespace;
|
|
331
|
+
/**
|
|
332
|
+
* Persisted, runtime-managed schedules: create/upsert/pause/resume/delete/list/trigger them, and
|
|
333
|
+
* `tick()` fires the due ones (the worker tick does it when `persistedSchedules` is on). Needs a
|
|
334
|
+
* store that persists schedules — the Lucid and in-memory stores do. See {@link ScheduleClient}.
|
|
335
|
+
*/
|
|
336
|
+
readonly schedules: ScheduleClient;
|
|
337
|
+
/** Whether the worker tick fires {@link schedules} (the `persistedSchedules` option). */
|
|
338
|
+
readonly persistedSchedulesEnabled: boolean;
|
|
310
339
|
private readonly leaseMs;
|
|
311
340
|
private readonly maxRecoveryAttempts?;
|
|
312
341
|
private readonly reconcileMs;
|
|
@@ -320,6 +349,7 @@ export declare class WorkflowEngine {
|
|
|
320
349
|
private readonly compensationRetries;
|
|
321
350
|
private readonly compensationTimeoutMs;
|
|
322
351
|
private readonly retention;
|
|
352
|
+
private readonly retentionPolicies;
|
|
323
353
|
/** Archival hooks run (awaited, in order) before a retention eviction deletes a run. */
|
|
324
354
|
private readonly evictListeners;
|
|
325
355
|
private readonly stalledAfterMs;
|
|
@@ -471,6 +501,8 @@ export declare class WorkflowEngine {
|
|
|
471
501
|
register(name: string, version: string, fn: WorkflowFn, opts?: {
|
|
472
502
|
tags?: string[] | undefined;
|
|
473
503
|
singleton?: SingletonConfig | undefined;
|
|
504
|
+
/** Start-time concurrency quota — see {@link ConcurrencyConfig}. */
|
|
505
|
+
concurrency?: ConcurrencyConfig | undefined;
|
|
474
506
|
executionTimeout?: string | number | undefined;
|
|
475
507
|
validateInput?: ((input: unknown) => void | Promise<void>) | undefined;
|
|
476
508
|
onEvent?: string[] | undefined;
|
|
@@ -490,6 +522,7 @@ export declare class WorkflowEngine {
|
|
|
490
522
|
executor: WorkflowExecutor;
|
|
491
523
|
tags?: string[];
|
|
492
524
|
singleton?: SingletonConfig;
|
|
525
|
+
concurrency?: ConcurrencyConfig;
|
|
493
526
|
executionTimeout?: string | number;
|
|
494
527
|
validateInput?: (input: unknown) => void | Promise<void>;
|
|
495
528
|
requires?: string[];
|
|
@@ -657,6 +690,43 @@ export declare class WorkflowEngine {
|
|
|
657
690
|
*/
|
|
658
691
|
sweepRetention(now?: number): Promise<number>;
|
|
659
692
|
deleteRun(runId: string): Promise<number>;
|
|
693
|
+
/**
|
|
694
|
+
* Sweep a deleted run's token-keyed buffered signals — they are not run-scoped rows, so the store's
|
|
695
|
+
* deleteRun can't cascade them. Without this every fire-and-forget child that was never joined leaks
|
|
696
|
+
* its buffered `child:<id>` completion FOREVER (one row per spawn), and a raced compensate-cancel
|
|
697
|
+
* can leave a `cancel:<id>` marker behind.
|
|
698
|
+
*/
|
|
699
|
+
private sweepRunBufferedSignals;
|
|
700
|
+
/**
|
|
701
|
+
* Hard-delete EVERY run matching `scope` — plus, by default, each one's whole child subtree — in
|
|
702
|
+
* bounded batches: the "forget this tenant" / "drop this feature's history" operation. Where
|
|
703
|
+
* {@link deleteRun} removes one tree you know the id of, this drains everything a scope selects
|
|
704
|
+
* (`{ namespace: 'acme' }`, `{ tag: 'tenant:acme' }`, `{ workflows: [...] }`, attribute predicates…)
|
|
705
|
+
* through the store API.
|
|
706
|
+
*
|
|
707
|
+
* - **Live runs** in the scope are {@link cancel cancelled} first (plain cancel, no saga undo),
|
|
708
|
+
* which tells any worker holding one to stop, then deleted. `cancelLive: false` leaves live runs
|
|
709
|
+
* (and live descendants of finished ones) alone and deletes terminal history only.
|
|
710
|
+
* - **Children** go with their root even when they don't match the scope themselves (children
|
|
711
|
+
* inherit `namespace`, not `tags`); `children: false` deletes exactly the matching runs.
|
|
712
|
+
* - Each deletion sweeps the run's token-keyed buffered signals like {@link deleteRun}, and the
|
|
713
|
+
* {@link onEvict} archival hooks are NOT called (this is an explicit purge, not retention).
|
|
714
|
+
*
|
|
715
|
+
* An EMPTY scope is rejected — it would delete every run. Returns how many runs were deleted.
|
|
716
|
+
*/
|
|
717
|
+
purgeRuns(scope: RunScope, opts?: {
|
|
718
|
+
batchSize?: number;
|
|
719
|
+
cancelLive?: boolean;
|
|
720
|
+
children?: boolean;
|
|
721
|
+
}): Promise<number>;
|
|
722
|
+
/**
|
|
723
|
+
* {@link purgeRuns} for one namespace — every run (and child) a tenant/partition owns. Children
|
|
724
|
+
* inherit their parent's namespace, so a namespace purge is complete by construction.
|
|
725
|
+
*/
|
|
726
|
+
purgeNamespace(namespace: string, opts?: {
|
|
727
|
+
batchSize?: number;
|
|
728
|
+
cancelLive?: boolean;
|
|
729
|
+
}): Promise<number>;
|
|
660
730
|
resume(runId: string): Promise<RunResult>;
|
|
661
731
|
/**
|
|
662
732
|
* Deferred re-drive after a suspended settle whose waited checkpoint(s) already settled — the
|
|
@@ -714,7 +784,8 @@ export declare class WorkflowEngine {
|
|
|
714
784
|
/**
|
|
715
785
|
* Per-recovery bookkeeping (called once the lease is held): count the attempt, or — past
|
|
716
786
|
* `maxRecoveryAttempts` — move a poison pill to the `dead` dead-letter state. Returns a terminal
|
|
717
|
-
* result to skip the resume,
|
|
787
|
+
* result to skip the resume, `null` to skip it silently (the run is no longer `running`), or
|
|
788
|
+
* `undefined` to proceed.
|
|
718
789
|
*/
|
|
719
790
|
private countRecovery;
|
|
720
791
|
/**
|
package/dist/src/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/src/engine.js
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import { InMemoryAdmissionBackend } from './admission.js';
|
|
2
2
|
import { backoffDelay, MAX_BACKOFF_MS } from './backoff.js';
|
|
3
3
|
import { instantCheckpoint, lostStepEvent, stepCheckpoint } from './checkpoints.js';
|
|
4
|
+
import { assertConcurrency, concurrencyTag, resolveConcurrency, } from './concurrency.js';
|
|
4
5
|
import { controlPlaneDescriptor, planDispatch, WorkflowBlocked, } from './dispatch-routing.js';
|
|
5
6
|
import { parseDuration } from './duration.js';
|
|
6
7
|
import { Entities } from './entities.js';
|
|
7
8
|
import { ContinueAsNew, NonDeterminismError, RemoteStepTimeout, WorkflowSuspended, } from './errors.js';
|
|
8
9
|
import { EventAccumulators } from './event-accumulators.js';
|
|
9
10
|
import { eventMatches, eventMatchOf, eventPrefix } from './events.js';
|
|
11
|
+
import { isNonEmptyRunScope, TERMINAL_RUN_STATUSES } from './interfaces.js';
|
|
10
12
|
import { asHeartbeat } from './observability-scope.js';
|
|
11
13
|
import { breakpointToken, stepId } from './protocol.js';
|
|
12
14
|
import { RemoteWorkflowExecutor } from './remote-workflow-executor.js';
|
|
13
15
|
import { scanRunValueFacets } from './run-value-facets.js';
|
|
14
16
|
import { scheduleWindow } from './scheduler.js';
|
|
17
|
+
import { ScheduleClient } from './schedules.js';
|
|
15
18
|
import { SingletonGate } from './singleton-gate.js';
|
|
16
19
|
import { sanitizeQueueToken, tenantGroup } from './tenant-group.js';
|
|
17
20
|
import { TransportPool } from './transport-pool.js';
|
|
@@ -112,6 +115,14 @@ export class WorkflowEngine {
|
|
|
112
115
|
/** Worker-pool partition stamped on created runs and used to scope the poll/resume paths.
|
|
113
116
|
* `undefined` is the OPERATOR: it scopes nothing and belongs to every namespace. */
|
|
114
117
|
namespace;
|
|
118
|
+
/**
|
|
119
|
+
* Persisted, runtime-managed schedules: create/upsert/pause/resume/delete/list/trigger them, and
|
|
120
|
+
* `tick()` fires the due ones (the worker tick does it when `persistedSchedules` is on). Needs a
|
|
121
|
+
* store that persists schedules — the Lucid and in-memory stores do. See {@link ScheduleClient}.
|
|
122
|
+
*/
|
|
123
|
+
schedules;
|
|
124
|
+
/** Whether the worker tick fires {@link schedules} (the `persistedSchedules` option). */
|
|
125
|
+
persistedSchedulesEnabled;
|
|
115
126
|
leaseMs;
|
|
116
127
|
maxRecoveryAttempts;
|
|
117
128
|
reconcileMs;
|
|
@@ -125,6 +136,7 @@ export class WorkflowEngine {
|
|
|
125
136
|
compensationRetries;
|
|
126
137
|
compensationTimeoutMs;
|
|
127
138
|
retention;
|
|
139
|
+
retentionPolicies;
|
|
128
140
|
// -Infinity so the FIRST sweep always runs (a fake/test clock may start near 0).
|
|
129
141
|
#lastRetentionSweepAt = Number.NEGATIVE_INFINITY;
|
|
130
142
|
/** Archival hooks run (awaited, in order) before a retention eviction deletes a run. */
|
|
@@ -263,6 +275,12 @@ export class WorkflowEngine {
|
|
|
263
275
|
this.compensationRetries = Math.max(1, deps.compensationRetries ?? 1);
|
|
264
276
|
this.compensationTimeoutMs = Math.max(1_000, deps.compensationTimeoutMs ?? 300_000);
|
|
265
277
|
this.retention = deps.retention;
|
|
278
|
+
this.retentionPolicies = deps.retentionPolicies ?? [];
|
|
279
|
+
this.persistedSchedulesEnabled = deps.persistedSchedules ?? false;
|
|
280
|
+
this.schedules = new ScheduleClient(this.store, {
|
|
281
|
+
start: (workflow, input, runId, opts) => this.start(workflow, input, runId, opts),
|
|
282
|
+
getRun: (runId) => this.store.getRun(runId),
|
|
283
|
+
}, { namespace: this.namespace, clock: this.clock });
|
|
266
284
|
this.stalledAfterMs = Math.max(60_000, deps.stalledAfterMs ?? 900_000);
|
|
267
285
|
this.trackStepStart = deps.trackStepStart ?? true;
|
|
268
286
|
// Default: execute the run on this instance, asynchronously, so `start` never blocks on the body.
|
|
@@ -515,6 +533,7 @@ export class WorkflowEngine {
|
|
|
515
533
|
tags: opts?.tags,
|
|
516
534
|
origin: opts?.origin,
|
|
517
535
|
singleton: opts?.singleton,
|
|
536
|
+
concurrency: opts?.concurrency,
|
|
518
537
|
executionTimeoutMs: opts?.executionTimeout != null ? parseDuration(opts.executionTimeout) : undefined,
|
|
519
538
|
validateInput: opts?.validateInput,
|
|
520
539
|
onEvent: opts?.onEvent,
|
|
@@ -547,6 +566,7 @@ export class WorkflowEngine {
|
|
|
547
566
|
},
|
|
548
567
|
tags: opts.tags,
|
|
549
568
|
singleton: opts.singleton,
|
|
569
|
+
concurrency: opts.concurrency,
|
|
550
570
|
executionTimeoutMs: opts.executionTimeout != null ? parseDuration(opts.executionTimeout) : undefined,
|
|
551
571
|
validateInput: opts.validateInput,
|
|
552
572
|
remote: { group: opts.group, executor: opts.executor },
|
|
@@ -756,12 +776,20 @@ export class WorkflowEngine {
|
|
|
756
776
|
}
|
|
757
777
|
return { runId, status: prior.status, output: prior.output, error: prior.error };
|
|
758
778
|
}
|
|
779
|
+
// Start-time concurrency quota (per-start override, else the workflow's): reject BEFORE creating
|
|
780
|
+
// anything when the key's in-flight runs already reach the limit. See {@link ConcurrencyQuota}.
|
|
781
|
+
const quota = await resolveConcurrency(opts?.concurrency, registered.concurrency, input);
|
|
782
|
+
if (quota)
|
|
783
|
+
await assertConcurrency(this.store, name, quota);
|
|
759
784
|
const now = new Date();
|
|
760
785
|
// A singleton workflow stamps a `singleton:<key>` tag so the admission gate (in execute) can find
|
|
761
|
-
// the other in-flight runs sharing the key via a tag+status query
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
:
|
|
786
|
+
// the other in-flight runs sharing the key via a tag+status query; a quota-bearing run stamps
|
|
787
|
+
// `concurrency:<key>` so the quota can count its siblings the same way.
|
|
788
|
+
const minted = [
|
|
789
|
+
...(registered.singleton ? [this.singletons.tag(registered.singleton, input)] : []),
|
|
790
|
+
...(quota ? [concurrencyTag(quota.key)] : []),
|
|
791
|
+
];
|
|
792
|
+
const tags = mergeTags(registered.tags, minted.length ? [...(opts?.tags ?? []), ...minted] : opts?.tags);
|
|
765
793
|
// Singleton back-pressure: reject a start that would grow the same-key backlog past
|
|
766
794
|
// `limit + maxQueueDepth` (no-op when no maxQueueDepth is configured).
|
|
767
795
|
if (registered.singleton) {
|
|
@@ -1006,22 +1034,39 @@ export class WorkflowEngine {
|
|
|
1006
1034
|
* parents.
|
|
1007
1035
|
*/
|
|
1008
1036
|
async sweepRetention(now = this.clock()) {
|
|
1009
|
-
if (!this.retention || this.draining)
|
|
1037
|
+
if ((!this.retention && this.retentionPolicies.length === 0) || this.draining)
|
|
1010
1038
|
return 0;
|
|
1011
1039
|
if (now - this.#lastRetentionSweepAt < 60_000)
|
|
1012
1040
|
return 0;
|
|
1013
1041
|
this.#lastRetentionSweepAt = now;
|
|
1014
1042
|
let evicted = 0;
|
|
1015
|
-
|
|
1016
|
-
|
|
1043
|
+
const passes = [];
|
|
1044
|
+
for (const status of TERMINAL_RUN_STATUSES) {
|
|
1045
|
+
const maxAgeMs = this.retention?.[status];
|
|
1017
1046
|
if (maxAgeMs == null || maxAgeMs <= 0)
|
|
1018
1047
|
continue;
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1048
|
+
passes.push({ statuses: [status], namespace: this.namespace, updatedBefore: now - maxAgeMs });
|
|
1049
|
+
}
|
|
1050
|
+
for (const policy of this.retentionPolicies) {
|
|
1051
|
+
const statuses = policy.statuses.filter((s) => TERMINAL_RUN_STATUSES.includes(s));
|
|
1052
|
+
if (statuses.length === 0 || !(policy.maxAgeMs > 0))
|
|
1053
|
+
continue;
|
|
1054
|
+
// A namespaced worker only ever prunes its own partition: a scope naming another one is not its
|
|
1055
|
+
// to sweep (the operator, `namespace: undefined`, sweeps every partition).
|
|
1056
|
+
if (this.namespace !== undefined &&
|
|
1057
|
+
policy.scope.namespace !== undefined &&
|
|
1058
|
+
policy.scope.namespace !== this.namespace) {
|
|
1059
|
+
continue;
|
|
1060
|
+
}
|
|
1061
|
+
passes.push({
|
|
1062
|
+
...policy.scope,
|
|
1063
|
+
namespace: policy.scope.namespace ?? this.namespace,
|
|
1064
|
+
statuses,
|
|
1065
|
+
updatedBefore: now - policy.maxAgeMs,
|
|
1024
1066
|
});
|
|
1067
|
+
}
|
|
1068
|
+
for (const pass of passes) {
|
|
1069
|
+
const candidates = await this.store.listRuns({ ...pass, size: 100 });
|
|
1025
1070
|
for (const run of candidates) {
|
|
1026
1071
|
try {
|
|
1027
1072
|
if (this.evictListeners.size > 0) {
|
|
@@ -1049,10 +1094,16 @@ export class WorkflowEngine {
|
|
|
1049
1094
|
deleted += await this.deleteRun(childId);
|
|
1050
1095
|
}
|
|
1051
1096
|
await this.store.deleteRun(runId);
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1097
|
+
await this.sweepRunBufferedSignals(runId);
|
|
1098
|
+
return deleted + 1;
|
|
1099
|
+
}
|
|
1100
|
+
/**
|
|
1101
|
+
* Sweep a deleted run's token-keyed buffered signals — they are not run-scoped rows, so the store's
|
|
1102
|
+
* deleteRun can't cascade them. Without this every fire-and-forget child that was never joined leaks
|
|
1103
|
+
* its buffered `child:<id>` completion FOREVER (one row per spawn), and a raced compensate-cancel
|
|
1104
|
+
* can leave a `cancel:<id>` marker behind.
|
|
1105
|
+
*/
|
|
1106
|
+
async sweepRunBufferedSignals(runId) {
|
|
1056
1107
|
for (const token of [`child:${runId}`, `cancel:${runId}`]) {
|
|
1057
1108
|
for (;;) {
|
|
1058
1109
|
const buffered = await this.store.takeBufferedSignal(token).catch(() => null);
|
|
@@ -1060,7 +1111,83 @@ export class WorkflowEngine {
|
|
|
1060
1111
|
break;
|
|
1061
1112
|
}
|
|
1062
1113
|
}
|
|
1063
|
-
|
|
1114
|
+
}
|
|
1115
|
+
/**
|
|
1116
|
+
* Hard-delete EVERY run matching `scope` — plus, by default, each one's whole child subtree — in
|
|
1117
|
+
* bounded batches: the "forget this tenant" / "drop this feature's history" operation. Where
|
|
1118
|
+
* {@link deleteRun} removes one tree you know the id of, this drains everything a scope selects
|
|
1119
|
+
* (`{ namespace: 'acme' }`, `{ tag: 'tenant:acme' }`, `{ workflows: [...] }`, attribute predicates…)
|
|
1120
|
+
* through the store API.
|
|
1121
|
+
*
|
|
1122
|
+
* - **Live runs** in the scope are {@link cancel cancelled} first (plain cancel, no saga undo),
|
|
1123
|
+
* which tells any worker holding one to stop, then deleted. `cancelLive: false` leaves live runs
|
|
1124
|
+
* (and live descendants of finished ones) alone and deletes terminal history only.
|
|
1125
|
+
* - **Children** go with their root even when they don't match the scope themselves (children
|
|
1126
|
+
* inherit `namespace`, not `tags`); `children: false` deletes exactly the matching runs.
|
|
1127
|
+
* - Each deletion sweeps the run's token-keyed buffered signals like {@link deleteRun}, and the
|
|
1128
|
+
* {@link onEvict} archival hooks are NOT called (this is an explicit purge, not retention).
|
|
1129
|
+
*
|
|
1130
|
+
* An EMPTY scope is rejected — it would delete every run. Returns how many runs were deleted.
|
|
1131
|
+
*/
|
|
1132
|
+
async purgeRuns(scope, opts) {
|
|
1133
|
+
if (!isNonEmptyRunScope(scope)) {
|
|
1134
|
+
throw new Error('purgeRuns: refusing an empty scope (it would delete every run) — pass at least one predicate, e.g. { namespace }');
|
|
1135
|
+
}
|
|
1136
|
+
const size = Math.max(1, opts?.batchSize ?? 500);
|
|
1137
|
+
const cancelLive = opts?.cancelLive ?? true;
|
|
1138
|
+
const withChildren = opts?.children ?? true;
|
|
1139
|
+
const statuses = cancelLive ? undefined : [...TERMINAL_RUN_STATUSES];
|
|
1140
|
+
let deleted = 0;
|
|
1141
|
+
let previous = '';
|
|
1142
|
+
for (;;) {
|
|
1143
|
+
const batch = await this.store.listRuns({ ...scope, statuses, size });
|
|
1144
|
+
if (batch.length === 0)
|
|
1145
|
+
break;
|
|
1146
|
+
const fingerprint = batch.map((r) => r.id).join('\u0000');
|
|
1147
|
+
// Every listed run is deleted below, so the next page is new rows — the same page twice means
|
|
1148
|
+
// the store is not deleting; stop instead of spinning forever.
|
|
1149
|
+
if (fingerprint === previous) {
|
|
1150
|
+
throw new Error('purgeRuns: the store returned the same runs after deleting them');
|
|
1151
|
+
}
|
|
1152
|
+
previous = fingerprint;
|
|
1153
|
+
const known = new Map(batch.map((r) => [r.id, r.status]));
|
|
1154
|
+
const ids = [];
|
|
1155
|
+
const seen = new Set();
|
|
1156
|
+
const visit = async (id) => {
|
|
1157
|
+
if (seen.has(id))
|
|
1158
|
+
return;
|
|
1159
|
+
seen.add(id);
|
|
1160
|
+
if (withChildren)
|
|
1161
|
+
for (const child of await this.getRunChildren(id))
|
|
1162
|
+
await visit(child);
|
|
1163
|
+
ids.push(id); // post-order: children before their parent
|
|
1164
|
+
};
|
|
1165
|
+
for (const run of batch)
|
|
1166
|
+
await visit(run.id);
|
|
1167
|
+
for (const id of ids) {
|
|
1168
|
+
const status = known.has(id) ? known.get(id) : (await this.store.getRun(id))?.status;
|
|
1169
|
+
if (status === undefined)
|
|
1170
|
+
continue; // already gone
|
|
1171
|
+
if (!TERMINAL_RUN_STATUSES.includes(status)) {
|
|
1172
|
+
if (!cancelLive)
|
|
1173
|
+
continue;
|
|
1174
|
+
await this.cancel(id).catch(() => undefined);
|
|
1175
|
+
}
|
|
1176
|
+
await this.store.deleteRun(id);
|
|
1177
|
+
await this.sweepRunBufferedSignals(id);
|
|
1178
|
+
deleted += 1;
|
|
1179
|
+
}
|
|
1180
|
+
if (batch.length < size)
|
|
1181
|
+
break;
|
|
1182
|
+
}
|
|
1183
|
+
return deleted;
|
|
1184
|
+
}
|
|
1185
|
+
/**
|
|
1186
|
+
* {@link purgeRuns} for one namespace — every run (and child) a tenant/partition owns. Children
|
|
1187
|
+
* inherit their parent's namespace, so a namespace purge is complete by construction.
|
|
1188
|
+
*/
|
|
1189
|
+
purgeNamespace(namespace, opts) {
|
|
1190
|
+
return this.purgeRuns({ namespace }, opts);
|
|
1064
1191
|
}
|
|
1065
1192
|
async resume(runId) {
|
|
1066
1193
|
const run = await this.store.getRun(runId);
|
|
@@ -1277,14 +1404,30 @@ export class WorkflowEngine {
|
|
|
1277
1404
|
}
|
|
1278
1405
|
return (await this.store.listIncompleteRuns(this.namespace)).filter((r) => r.lockedUntil === undefined || r.lockedUntil <= nowMs);
|
|
1279
1406
|
});
|
|
1280
|
-
for (const
|
|
1407
|
+
for (const listed of incomplete) {
|
|
1281
1408
|
// A live worker renews its lease, so an acquirable lease means the run is genuinely orphaned
|
|
1282
1409
|
// (its worker crashed). Skip the ones still owned.
|
|
1283
|
-
const acquired = await this.store.tryLockRun(
|
|
1410
|
+
const acquired = await this.store.tryLockRun(listed.id, this.instanceId, nowMs + this.leaseMs, nowMs);
|
|
1284
1411
|
if (!acquired)
|
|
1285
1412
|
continue;
|
|
1413
|
+
// Decide on the run as it is NOW that the lease is held, never on the listing. The listing is a
|
|
1414
|
+
// snapshot taken before this loop reached the row, and a live run moves on in between: the turn
|
|
1415
|
+
// that was executing it settles and releases its lease, a fast step result resumes it, it may
|
|
1416
|
+
// even complete. Trusting the listed `running` reads that as a crashed turn — and the code below
|
|
1417
|
+
// counts a recovery attempt (or, past `maxRecoveryAttempts`, writes `dead` over a live or
|
|
1418
|
+
// finished run) and re-enqueues it for a second execution. Only a run that still reads
|
|
1419
|
+
// `running` under the lease is an orphan; release the lease taken just to look at anything else.
|
|
1420
|
+
const run = await this.store.getRun(listed.id);
|
|
1421
|
+
if (run?.status !== 'running') {
|
|
1422
|
+
await this.store.releaseRunLock(listed.id, this.instanceId);
|
|
1423
|
+
continue;
|
|
1424
|
+
}
|
|
1286
1425
|
// Count the attempt / dead-letter a poison pill past maxRecoveryAttempts.
|
|
1287
1426
|
const settled = await this.countRecovery(run);
|
|
1427
|
+
// `null`: the run left `running` between the re-read above and the dead-letter write (a
|
|
1428
|
+
// lease-free `cancel()`), so it is not ours to touch — countRecovery already released the lease.
|
|
1429
|
+
if (settled === null)
|
|
1430
|
+
continue;
|
|
1288
1431
|
if (settled) {
|
|
1289
1432
|
results.push(settled);
|
|
1290
1433
|
continue;
|
|
@@ -1313,7 +1456,8 @@ export class WorkflowEngine {
|
|
|
1313
1456
|
/**
|
|
1314
1457
|
* Per-recovery bookkeeping (called once the lease is held): count the attempt, or — past
|
|
1315
1458
|
* `maxRecoveryAttempts` — move a poison pill to the `dead` dead-letter state. Returns a terminal
|
|
1316
|
-
* result to skip the resume,
|
|
1459
|
+
* result to skip the resume, `null` to skip it silently (the run is no longer `running`), or
|
|
1460
|
+
* `undefined` to proceed.
|
|
1317
1461
|
*/
|
|
1318
1462
|
async countRecovery(run) {
|
|
1319
1463
|
const attempts = (run.recoveryAttempts ?? 0) + 1;
|
|
@@ -1322,8 +1466,17 @@ export class WorkflowEngine {
|
|
|
1322
1466
|
message: `run exceeded maxRecoveryAttempts (${this.maxRecoveryAttempts}) — moved to dead-letter`,
|
|
1323
1467
|
code: 'max_recovery_attempts',
|
|
1324
1468
|
};
|
|
1325
|
-
|
|
1469
|
+
// Conditional on still-`running`, like the `pending` flip in recoverIncomplete: the lease does
|
|
1470
|
+
// not fence `cancel()`, which writes `cancelled` without it, so a cancel landing after the
|
|
1471
|
+
// caller's re-read must not be overwritten with `dead`.
|
|
1472
|
+
const applied = await this.store.updateRunIf(run.id, ['running'], {
|
|
1473
|
+
status: 'dead',
|
|
1474
|
+
error,
|
|
1475
|
+
updatedAt: new Date(),
|
|
1476
|
+
});
|
|
1326
1477
|
await this.store.releaseRunLock(run.id, this.instanceId);
|
|
1478
|
+
if (!applied)
|
|
1479
|
+
return null;
|
|
1327
1480
|
this.emit({
|
|
1328
1481
|
type: 'run.failed',
|
|
1329
1482
|
runId: run.id,
|
|
@@ -2950,19 +3103,26 @@ export class WorkflowEngine {
|
|
|
2950
3103
|
for (const cp of snapshot)
|
|
2951
3104
|
replay.set(cp.seq, cp);
|
|
2952
3105
|
const ctx = createWorkflowCtx(this.ctxHostFor(replay, run.namespace), run.id, compensations, run.workflow);
|
|
3106
|
+
// Every settle below is `return await`ed, never a bare `return this.settleRun(...)`: inside
|
|
3107
|
+
// `try … finally` a bare return runs the `finally` — which RELEASES THE LEASE — as soon as the
|
|
3108
|
+
// return expression is evaluated, while the settle's own write is still in flight. A first turn
|
|
3109
|
+
// (the one that flipped `pending` -> `running`) then sits unlocked but still reading `running`,
|
|
3110
|
+
// which is exactly the shape `listOrphanedRuns` returns for a crashed turn: the recovery sweep
|
|
3111
|
+
// counted an attempt (or dead-lettered it), flipped it to `pending` and re-enqueued a second
|
|
3112
|
+
// execution. The lease must outlive the state it protects.
|
|
2953
3113
|
try {
|
|
2954
3114
|
// Establish the ambient ctx for the duration of this body turn so context-aware statics
|
|
2955
3115
|
// (`BaseWorkflow.start`/`dispatch`) reachable from `fn` route through this run's `ctx.child`/
|
|
2956
3116
|
// `ctx.startChild`. Re-set on every replay turn (each is its own async scope) — correct.
|
|
2957
3117
|
const output = await workflowAls.run(ctx, () => fn(ctx, run.input));
|
|
2958
|
-
return this.settleRun(run, { kind: 'completed', output });
|
|
3118
|
+
return await this.settleRun(run, { kind: 'completed', output });
|
|
2959
3119
|
}
|
|
2960
3120
|
catch (err) {
|
|
2961
3121
|
if (err instanceof ContinueAsNew) {
|
|
2962
3122
|
// Hand off to a fresh execution with a clean history: persist the next run (`<id>~N`), then
|
|
2963
3123
|
// complete this one. Zombie fence first — a fenced turn must not fork a continuation either.
|
|
2964
3124
|
if (this.leaseLostRuns.has(run.id))
|
|
2965
|
-
return this.echoCurrentStatus(run.id);
|
|
3125
|
+
return await this.echoCurrentStatus(run.id);
|
|
2966
3126
|
const nextId = nextContinuationId(run.id);
|
|
2967
3127
|
// Persist the continuation BEFORE the parent's terminal write — the durable ordering that
|
|
2968
3128
|
// makes the chain crash-safe. The old order (complete parent, then create the continuation
|
|
@@ -2999,7 +3159,7 @@ export class WorkflowEngine {
|
|
|
2999
3159
|
// No live worker can run the next dispatch (capability/protocol) — park `blocked` with the
|
|
3000
3160
|
// structured reason + diagnostics instead of suspending on a timer that would re-drive into the
|
|
3001
3161
|
// same void. The blocked-recovery poll re-drives it when a capable+compatible worker appears.
|
|
3002
|
-
return this.parkBlocked(run, err.plan);
|
|
3162
|
+
return await this.parkBlocked(run, err.plan);
|
|
3003
3163
|
}
|
|
3004
3164
|
if (err instanceof WorkflowSuspended) {
|
|
3005
3165
|
// A compensating cancel resumed this run to reach here: the replay re-registered the saga,
|
|
@@ -3069,7 +3229,7 @@ export class WorkflowEngine {
|
|
|
3069
3229
|
continue;
|
|
3070
3230
|
await this.runCompensation(run, comp, i);
|
|
3071
3231
|
}
|
|
3072
|
-
return this.settleRun(run, { kind: 'failed', error });
|
|
3232
|
+
return await this.settleRun(run, { kind: 'failed', error });
|
|
3073
3233
|
}
|
|
3074
3234
|
finally {
|
|
3075
3235
|
// Release the recovery lease once the run reaches a terminal/suspended state, so the
|
|
@@ -3528,7 +3688,16 @@ export class WorkflowEngine {
|
|
|
3528
3688
|
async callRemote(runId, seq, step, input, queue, transport, replay, admission, runNamespace) {
|
|
3529
3689
|
// Read the prefix from the per-execution snapshot (avoids the O(N²) replay SELECTs); a seq absent
|
|
3530
3690
|
// from the snapshot — not yet dispatched, or written after the snapshot — falls back to the store.
|
|
3531
|
-
|
|
3691
|
+
let existing = replay?.get(seq) ?? (await this.store.getCheckpoint(runId, seq));
|
|
3692
|
+
// A `pending` step in the SNAPSHOT may already have its result: the snapshot is taken when this
|
|
3693
|
+
// execution starts, and the result can land any time after. Every branch below that sees
|
|
3694
|
+
// `pending` either suspends on it or WRITES the checkpoint back (`{ ...existing, wakeAt }` stamping
|
|
3695
|
+
// the lost-dispatch lease, or a re-dispatch) — written from a stale row, that overwrites the landed
|
|
3696
|
+
// `completed` result with `pending` and parks the run on a lease an hour out. So a pending step is
|
|
3697
|
+
// re-read from the store before anything acts on it (one read, only at a suspension point).
|
|
3698
|
+
if (existing?.status === 'pending' && replay?.has(seq)) {
|
|
3699
|
+
existing = (await this.store.getCheckpoint(runId, seq)) ?? existing;
|
|
3700
|
+
}
|
|
3532
3701
|
if (existing && existing.name !== step.name) {
|
|
3533
3702
|
throw new NonDeterminismError(runId, seq, step.name, existing.name);
|
|
3534
3703
|
}
|