@namzu/sdk 20.4.0 → 21.0.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 +179 -0
- package/dist/bridge/sse/mapper.d.ts +19 -0
- package/dist/bridge/sse/mapper.d.ts.map +1 -1
- package/dist/bridge/sse/mapper.js +9 -1
- package/dist/bridge/sse/mapper.js.map +1 -1
- package/dist/contracts/schemas.d.ts +10 -10
- package/dist/manager/run/persistence.d.ts +26 -0
- package/dist/manager/run/persistence.d.ts.map +1 -1
- package/dist/manager/run/persistence.js +40 -0
- package/dist/manager/run/persistence.js.map +1 -1
- package/dist/public-runtime.d.ts +4 -0
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +16 -0
- package/dist/public-runtime.js.map +1 -1
- package/dist/run/drain.d.ts +194 -0
- package/dist/run/drain.d.ts.map +1 -0
- package/dist/run/drain.js +228 -0
- package/dist/run/drain.js.map +1 -0
- package/dist/run/index.d.ts +2 -0
- package/dist/run/index.d.ts.map +1 -1
- package/dist/run/index.js +1 -0
- package/dist/run/index.js.map +1 -1
- package/dist/runtime/query/events.d.ts +12 -0
- package/dist/runtime/query/events.d.ts.map +1 -1
- package/dist/runtime/query/events.js +61 -3
- package/dist/runtime/query/events.js.map +1 -1
- package/dist/runtime/query/index.d.ts +36 -0
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +32 -0
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/resume-run.d.ts +25 -0
- package/dist/runtime/query/resume-run.d.ts.map +1 -1
- package/dist/runtime/query/resume-run.js +15 -3
- package/dist/runtime/query/resume-run.js.map +1 -1
- package/dist/store/index.d.ts +1 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +1 -1
- package/dist/store/index.js.map +1 -1
- package/dist/store/run/conformance.d.ts +159 -0
- package/dist/store/run/conformance.d.ts.map +1 -0
- package/dist/store/run/conformance.js +451 -0
- package/dist/store/run/conformance.js.map +1 -0
- package/dist/store/run/disk.d.ts +30 -2
- package/dist/store/run/disk.d.ts.map +1 -1
- package/dist/store/run/disk.js +101 -0
- package/dist/store/run/disk.js.map +1 -1
- package/dist/store/run/memory.d.ts +5 -4
- package/dist/store/run/memory.d.ts.map +1 -1
- package/dist/store/run/memory.js +30 -1
- package/dist/store/run/memory.js.map +1 -1
- package/dist/types/doctor/check.d.ts +28 -2
- package/dist/types/doctor/check.d.ts.map +1 -1
- package/dist/types/run/event-cursor.d.ts +90 -0
- package/dist/types/run/event-cursor.d.ts.map +1 -0
- package/dist/types/run/event-cursor.js +47 -0
- package/dist/types/run/event-cursor.js.map +1 -0
- package/dist/types/run/events.d.ts +71 -1
- package/dist/types/run/events.d.ts.map +1 -1
- package/dist/types/run/events.js.map +1 -1
- package/dist/types/run/index.d.ts +1 -0
- package/dist/types/run/index.d.ts.map +1 -1
- package/dist/types/run/index.js +1 -0
- package/dist/types/run/index.js.map +1 -1
- package/dist/types/run/store.d.ts +41 -1
- package/dist/types/run/store.d.ts.map +1 -1
- package/package.json +6 -1
- package/src/bridge/sse/mapper.ts +28 -1
- package/src/manager/run/persistence.ts +43 -0
- package/src/public-runtime.ts +22 -0
- package/src/run/drain.ts +393 -0
- package/src/run/index.ts +3 -0
- package/src/runtime/query/events.ts +68 -4
- package/src/runtime/query/index.ts +87 -0
- package/src/runtime/query/resume-run.ts +67 -12
- package/src/store/index.ts +1 -1
- package/src/store/run/conformance.ts +705 -0
- package/src/store/run/disk.ts +106 -2
- package/src/store/run/memory.ts +35 -5
- package/src/types/doctor/check.ts +28 -2
- package/src/types/run/event-cursor.ts +118 -0
- package/src/types/run/events.ts +80 -3
- package/src/types/run/index.ts +1 -0
- package/src/types/run/store.ts +43 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-runtime.js","sourceRoot":"","sources":["../src/public-runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"public-runtime.js","sourceRoot":"","sources":["../src/public-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One pass over a queue of durable runs: list what nobody holds, take it,
|
|
3
|
+
* hand it to a worker, give it back.
|
|
4
|
+
*
|
|
5
|
+
* Every primitive this composes already shipped —
|
|
6
|
+
* {@link import('../store/run/listing.js').listDurableRuns} enumerates runs
|
|
7
|
+
* above a run id, `claimRun` arbitrates between processes, `releaseRun`
|
|
8
|
+
* returns a run to the queue, and `resumeRun` carries a fence into every
|
|
9
|
+
* durable write. Nothing composed them, so the two things the claim was
|
|
10
|
+
* built for — an approval inbox and a crash sweeper — still required a host
|
|
11
|
+
* to write the loop, and writing it correctly means getting the release
|
|
12
|
+
* into a `finally` and the `null` claim out of the error path. Both are the
|
|
13
|
+
* kind of thing a host gets wrong once, quietly.
|
|
14
|
+
*
|
|
15
|
+
* ## What this deliberately is NOT
|
|
16
|
+
*
|
|
17
|
+
* A supervisor, a daemon, or a scheduler. There is no timer here, no
|
|
18
|
+
* process spawn, no retry backoff and no `while (true)`. `drainRuns` makes
|
|
19
|
+
* ONE bounded pass and returns what happened; running it again is the
|
|
20
|
+
* caller's decision, made wherever that caller already has a scheduler. A
|
|
21
|
+
* per-platform supervisor is the same trade the deployment-adapter matrix
|
|
22
|
+
* was rejected for: one seam beats N adapters.
|
|
23
|
+
*
|
|
24
|
+
* The unit of work is a callback, so this module never needs a provider, a
|
|
25
|
+
* tool registry or a sandbox — the half of a run that cannot be serialized
|
|
26
|
+
* stays with the caller, exactly as `resumeRun` already splits it.
|
|
27
|
+
*/
|
|
28
|
+
import type { RunId } from '../types/ids/index.js';
|
|
29
|
+
import type { CheckpointListingScope, CheckpointStore, DurableRunEntry, ParkState, RunClaim } from '../types/run/checkpoint-store.js';
|
|
30
|
+
/** Runs handled per pass when the caller names no page size. */
|
|
31
|
+
export declare const DEFAULT_DRAIN_PAGE_SIZE = 100;
|
|
32
|
+
/**
|
|
33
|
+
* What a drainer does with one run it successfully took.
|
|
34
|
+
*
|
|
35
|
+
* Receives the claim, not just its fence, because the holder and expiry are
|
|
36
|
+
* what a worker needs to decide whether it still has time to start — and
|
|
37
|
+
* because a caller that only ever sees a number tends to forget the lease
|
|
38
|
+
* can lapse under it.
|
|
39
|
+
*
|
|
40
|
+
* The intended body is a resume:
|
|
41
|
+
*
|
|
42
|
+
* ```ts
|
|
43
|
+
* onRun: (entry, claim) =>
|
|
44
|
+
* resumeRun({
|
|
45
|
+
* ...yourQueryParams,
|
|
46
|
+
* scope: { ...entry, threadId },
|
|
47
|
+
* checkpointStore: store,
|
|
48
|
+
* claimFence: claim.fence,
|
|
49
|
+
* })
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* `claimFence` is the whole reason the claim is handed over: a write that
|
|
53
|
+
* does not carry it is unfenced, so a worker stalled past its lease would
|
|
54
|
+
* still be able to overwrite the record of whoever took the run over.
|
|
55
|
+
*
|
|
56
|
+
* A throw is recorded against that run and the pass continues. A drainer
|
|
57
|
+
* that died on the first bad run would leave the rest of the queue
|
|
58
|
+
* untouched, which is the failure a queue exists to spread out.
|
|
59
|
+
*/
|
|
60
|
+
export type DrainRun = (entry: DurableRunEntry, claim: RunClaim) => void | Promise<void>;
|
|
61
|
+
export interface DrainRunsParams {
|
|
62
|
+
/** Backend to list, claim and release against. Must support all three. */
|
|
63
|
+
readonly store: CheckpointStore;
|
|
64
|
+
/** Contiguous prefix — `tenantId` required. See {@link CheckpointListingScope}. */
|
|
65
|
+
readonly scope: CheckpointListingScope;
|
|
66
|
+
/**
|
|
67
|
+
* Who is taking the runs. Per-PROCESS, never per-deployment: `holder` is
|
|
68
|
+
* the only thing that distinguishes a renewal from a theft, so two
|
|
69
|
+
* drainers sharing a string take live claims from each other instantly.
|
|
70
|
+
*/
|
|
71
|
+
readonly holder: string;
|
|
72
|
+
/** Lease length in ms. Long enough that the slowest run finishes inside it. */
|
|
73
|
+
readonly ttlMs: number;
|
|
74
|
+
/** The work. See {@link DrainRun}. */
|
|
75
|
+
readonly onRun: DrainRun;
|
|
76
|
+
/**
|
|
77
|
+
* Keep only runs whose park is in one of these states.
|
|
78
|
+
*
|
|
79
|
+
* **Absent means every run with durable state, parked or not**, and that
|
|
80
|
+
* is not a placeholder default — it is what a crash sweep wants, because
|
|
81
|
+
* a run that died mid-flight never parked and would be invisible under
|
|
82
|
+
* any park filter. An approval inbox passes `['outstanding']`; a
|
|
83
|
+
* reclamation sweep passes `['expired']`.
|
|
84
|
+
*/
|
|
85
|
+
readonly park?: readonly ParkState[];
|
|
86
|
+
/**
|
|
87
|
+
* Stop taking new runs. Work already in flight is NOT interrupted — this
|
|
88
|
+
* module owns no run and cannot cancel one; a caller that needs to abort
|
|
89
|
+
* the work itself passes the same signal into whatever `onRun` starts.
|
|
90
|
+
*/
|
|
91
|
+
readonly signal?: AbortSignal;
|
|
92
|
+
/**
|
|
93
|
+
* How many runs may be in flight at once. Defaults to 1.
|
|
94
|
+
*
|
|
95
|
+
* Bounded on purpose. The obvious implementation — claim everything, then
|
|
96
|
+
* `Promise.all` — holds N leases while doing one run's worth of work, so
|
|
97
|
+
* the runs at the back of the batch expire before they are started and
|
|
98
|
+
* are taken by somebody else mid-flight.
|
|
99
|
+
*/
|
|
100
|
+
readonly maxConcurrent?: number;
|
|
101
|
+
/** Listing page size. See {@link DEFAULT_DRAIN_PAGE_SIZE}. */
|
|
102
|
+
readonly pageSize?: number;
|
|
103
|
+
/**
|
|
104
|
+
* Clock for expiry, so one pass judges every claim against one instant
|
|
105
|
+
* and a test does not have to wait out a lease.
|
|
106
|
+
*/
|
|
107
|
+
readonly now?: number;
|
|
108
|
+
}
|
|
109
|
+
/** A run a pass could not finish, and why. */
|
|
110
|
+
export interface DrainFailure {
|
|
111
|
+
readonly runId: RunId;
|
|
112
|
+
readonly error: string;
|
|
113
|
+
}
|
|
114
|
+
/** What one pass did. */
|
|
115
|
+
export interface DrainRunsResult {
|
|
116
|
+
/** Rows the listing returned, before any of them were contended for. */
|
|
117
|
+
readonly listed: number;
|
|
118
|
+
/** Runs whose `onRun` returned. */
|
|
119
|
+
readonly drained: readonly RunId[];
|
|
120
|
+
/**
|
|
121
|
+
* Runs another worker held. Not failures: "somebody got there first" is
|
|
122
|
+
* the ordinary outcome of a queue with more than one reader.
|
|
123
|
+
*/
|
|
124
|
+
readonly skipped: readonly RunId[];
|
|
125
|
+
/**
|
|
126
|
+
* Runs that stopped matching {@link DrainRunsParams.park} between the
|
|
127
|
+
* listing and the claim, and were given straight back.
|
|
128
|
+
*
|
|
129
|
+
* Separate from {@link DrainRunsResult.skipped} because the cause is
|
|
130
|
+
* different and so is what an operator should do about a lot of them: a
|
|
131
|
+
* skip means another drainer is holding runs right now, a stale entry
|
|
132
|
+
* means another drainer already FINISHED one. Empty on a pass with no
|
|
133
|
+
* park filter, which has nothing to re-check against.
|
|
134
|
+
*/
|
|
135
|
+
readonly stale: readonly RunId[];
|
|
136
|
+
/** Runs whose `onRun` threw. */
|
|
137
|
+
readonly failed: readonly DrainFailure[];
|
|
138
|
+
/**
|
|
139
|
+
* Runs that finished but whose lease could not be handed back.
|
|
140
|
+
*
|
|
141
|
+
* Separate from {@link DrainRunsResult.failed} because it is a different
|
|
142
|
+
* fact with a different consequence: the work is done and the record is
|
|
143
|
+
* written; the run is merely unavailable to the next reader until the
|
|
144
|
+
* lease lapses. Reported rather than swallowed — a release that quietly
|
|
145
|
+
* did nothing is how a queue silently loses throughput.
|
|
146
|
+
*/
|
|
147
|
+
readonly unreleased: readonly DrainFailure[];
|
|
148
|
+
/** Whether the pass stopped early because the signal aborted. */
|
|
149
|
+
readonly stopped: boolean;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Take every unclaimed run under a scope, one bounded pass, and give each
|
|
153
|
+
* one back when its work returns.
|
|
154
|
+
*
|
|
155
|
+
* The shape is: list parked-and-unclaimed → claim → work → release in a
|
|
156
|
+
* `finally`. The `finally` is the part a host writes wrong: a worker that
|
|
157
|
+
* returns without releasing leaves the run stuck until the lease lapses,
|
|
158
|
+
* and a worker that releases only on success leaves a FAILED run stuck for
|
|
159
|
+
* the same duration — so a queue quietly loses its throughput to the runs
|
|
160
|
+
* that need retrying most.
|
|
161
|
+
*
|
|
162
|
+
* `claimed: false` is not a parameter. A drainer never wants work somebody
|
|
163
|
+
* else holds; that is what makes it a drainer rather than a listing. An
|
|
164
|
+
* expired claim counts as unheld, which is what makes a dead worker's runs
|
|
165
|
+
* recoverable at all.
|
|
166
|
+
*
|
|
167
|
+
* ## What "exactly once" does and does not mean here
|
|
168
|
+
*
|
|
169
|
+
* Two drainers never hold one run at the same time — that is the claim, and
|
|
170
|
+
* it is absolute. **Exactly-once over a whole pass is a weaker promise, and
|
|
171
|
+
* where it holds it comes from the FILTER, not from the claim.** A listing
|
|
172
|
+
* is a snapshot; between paging a row and claiming it, another drainer can
|
|
173
|
+
* finish that run and release it, and the claim then succeeds on work
|
|
174
|
+
* already done. So a claimed row is re-read against
|
|
175
|
+
* {@link DrainRunsParams.park} before any work starts, and one that no
|
|
176
|
+
* longer matches is given straight back as {@link DrainRunsResult.stale}.
|
|
177
|
+
* An inbox drain (`park: ['outstanding']`) whose work answers the park is
|
|
178
|
+
* therefore exactly-once, because doing the work is what removes the run
|
|
179
|
+
* from the queue.
|
|
180
|
+
*
|
|
181
|
+
* With NO park filter there is nothing to re-check, and two drainers can
|
|
182
|
+
* both process one run. That is not an omission: a checkpoint store holds no
|
|
183
|
+
* run STATUS by design — nothing in it distinguishes a run that finished
|
|
184
|
+
* from one that died — so "already done" is a fact only the host's own run
|
|
185
|
+
* records carry. A crash sweep intersects with those records inside
|
|
186
|
+
* `onRun`, which is the shape {@link DurableRunEntry} already prescribes.
|
|
187
|
+
*
|
|
188
|
+
* @throws NamzuError `capability_unavailable` when the store cannot list,
|
|
189
|
+
* claim or release — before any run is touched.
|
|
190
|
+
* @throws NamzuError `invalid_config` on a lease or concurrency that cannot
|
|
191
|
+
* mean what it says.
|
|
192
|
+
*/
|
|
193
|
+
export declare function drainRuns(params: DrainRunsParams): Promise<DrainRunsResult>;
|
|
194
|
+
//# sourceMappingURL=drain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drain.d.ts","sourceRoot":"","sources":["../../src/run/drain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,KAAK,EACX,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,SAAS,EACT,QAAQ,EACR,MAAM,kCAAkC,CAAA;AAEzC,gEAAgE;AAChE,eAAO,MAAM,uBAAuB,MAAM,CAAA;AAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAExF,MAAM,WAAW,eAAe;IAC/B,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAA;IACtC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,sCAAsC;IACtC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;IAExB;;;;;;;;OAQG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,SAAS,EAAE,CAAA;IAEpC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAE7B;;;;;;;OAOG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAE/B,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAE1B;;;OAGG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,8CAA8C;AAC9C,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACtB;AAED,yBAAyB;AACzB,MAAM,WAAW,eAAe;IAC/B,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,mCAAmC;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,KAAK,EAAE,CAAA;IAClC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,KAAK,EAAE,CAAA;IAClC;;;;;;;;;OASG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,KAAK,EAAE,CAAA;IAChC,gCAAgC;IAChC,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAA;IACxC;;;;;;;;OAQG;IACH,QAAQ,CAAC,UAAU,EAAE,SAAS,YAAY,EAAE,CAAA;IAC5C,iEAAiE;IACjE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CACzB;AAgCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAqJjF"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One pass over a queue of durable runs: list what nobody holds, take it,
|
|
3
|
+
* hand it to a worker, give it back.
|
|
4
|
+
*
|
|
5
|
+
* Every primitive this composes already shipped —
|
|
6
|
+
* {@link import('../store/run/listing.js').listDurableRuns} enumerates runs
|
|
7
|
+
* above a run id, `claimRun` arbitrates between processes, `releaseRun`
|
|
8
|
+
* returns a run to the queue, and `resumeRun` carries a fence into every
|
|
9
|
+
* durable write. Nothing composed them, so the two things the claim was
|
|
10
|
+
* built for — an approval inbox and a crash sweeper — still required a host
|
|
11
|
+
* to write the loop, and writing it correctly means getting the release
|
|
12
|
+
* into a `finally` and the `null` claim out of the error path. Both are the
|
|
13
|
+
* kind of thing a host gets wrong once, quietly.
|
|
14
|
+
*
|
|
15
|
+
* ## What this deliberately is NOT
|
|
16
|
+
*
|
|
17
|
+
* A supervisor, a daemon, or a scheduler. There is no timer here, no
|
|
18
|
+
* process spawn, no retry backoff and no `while (true)`. `drainRuns` makes
|
|
19
|
+
* ONE bounded pass and returns what happened; running it again is the
|
|
20
|
+
* caller's decision, made wherever that caller already has a scheduler. A
|
|
21
|
+
* per-platform supervisor is the same trade the deployment-adapter matrix
|
|
22
|
+
* was rejected for: one seam beats N adapters.
|
|
23
|
+
*
|
|
24
|
+
* The unit of work is a callback, so this module never needs a provider, a
|
|
25
|
+
* tool registry or a sandbox — the half of a run that cannot be serialized
|
|
26
|
+
* stays with the caller, exactly as `resumeRun` already splits it.
|
|
27
|
+
*/
|
|
28
|
+
import { claimRun, listDurableRuns, releaseRun, summarizePark } from '../store/run/listing.js';
|
|
29
|
+
import { NamzuError } from '../types/errors/index.js';
|
|
30
|
+
/** Runs handled per pass when the caller names no page size. */
|
|
31
|
+
export const DEFAULT_DRAIN_PAGE_SIZE = 100;
|
|
32
|
+
function refuse(code, message, details) {
|
|
33
|
+
throw new NamzuError({ code, message, details });
|
|
34
|
+
}
|
|
35
|
+
function toMessage(err) {
|
|
36
|
+
return err instanceof Error ? err.message : String(err);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Refuse a store that cannot do the whole job, BEFORE anything is listed.
|
|
40
|
+
*
|
|
41
|
+
* Checked up front rather than at the first call that needs each method, so
|
|
42
|
+
* that a store missing only `releaseRun` cannot resume half a queue and then
|
|
43
|
+
* discover it has no way to give the runs back. The optional-capability rule
|
|
44
|
+
* on `CheckpointStore` says a caller refuses rather than degrades; a drainer
|
|
45
|
+
* that degraded would be the worst instance of it, because "claimed by
|
|
46
|
+
* default" here means every worker proceeds on every run.
|
|
47
|
+
*/
|
|
48
|
+
function assertDrainable(store) {
|
|
49
|
+
const missing = ['listDurableRuns', 'claimRun', 'releaseRun'].filter((m) => typeof store[m] !== 'function');
|
|
50
|
+
if (missing.length === 0)
|
|
51
|
+
return;
|
|
52
|
+
refuse('capability_unavailable', `drainRuns: the injected checkpoint store does not implement ${missing.map((m) => `\`${m}\``).join(', ')}, so it cannot arbitrate a queue. Refusing before anything is claimed rather than draining what it can — a drainer that proceeded without a claim would let two workers restore one checkpoint, both execute its tools and both write under one run id. Supply a store that implements all three (the built-in disk and in-memory stores do), or run a single writer per run.`, { missing });
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Take every unclaimed run under a scope, one bounded pass, and give each
|
|
56
|
+
* one back when its work returns.
|
|
57
|
+
*
|
|
58
|
+
* The shape is: list parked-and-unclaimed → claim → work → release in a
|
|
59
|
+
* `finally`. The `finally` is the part a host writes wrong: a worker that
|
|
60
|
+
* returns without releasing leaves the run stuck until the lease lapses,
|
|
61
|
+
* and a worker that releases only on success leaves a FAILED run stuck for
|
|
62
|
+
* the same duration — so a queue quietly loses its throughput to the runs
|
|
63
|
+
* that need retrying most.
|
|
64
|
+
*
|
|
65
|
+
* `claimed: false` is not a parameter. A drainer never wants work somebody
|
|
66
|
+
* else holds; that is what makes it a drainer rather than a listing. An
|
|
67
|
+
* expired claim counts as unheld, which is what makes a dead worker's runs
|
|
68
|
+
* recoverable at all.
|
|
69
|
+
*
|
|
70
|
+
* ## What "exactly once" does and does not mean here
|
|
71
|
+
*
|
|
72
|
+
* Two drainers never hold one run at the same time — that is the claim, and
|
|
73
|
+
* it is absolute. **Exactly-once over a whole pass is a weaker promise, and
|
|
74
|
+
* where it holds it comes from the FILTER, not from the claim.** A listing
|
|
75
|
+
* is a snapshot; between paging a row and claiming it, another drainer can
|
|
76
|
+
* finish that run and release it, and the claim then succeeds on work
|
|
77
|
+
* already done. So a claimed row is re-read against
|
|
78
|
+
* {@link DrainRunsParams.park} before any work starts, and one that no
|
|
79
|
+
* longer matches is given straight back as {@link DrainRunsResult.stale}.
|
|
80
|
+
* An inbox drain (`park: ['outstanding']`) whose work answers the park is
|
|
81
|
+
* therefore exactly-once, because doing the work is what removes the run
|
|
82
|
+
* from the queue.
|
|
83
|
+
*
|
|
84
|
+
* With NO park filter there is nothing to re-check, and two drainers can
|
|
85
|
+
* both process one run. That is not an omission: a checkpoint store holds no
|
|
86
|
+
* run STATUS by design — nothing in it distinguishes a run that finished
|
|
87
|
+
* from one that died — so "already done" is a fact only the host's own run
|
|
88
|
+
* records carry. A crash sweep intersects with those records inside
|
|
89
|
+
* `onRun`, which is the shape {@link DurableRunEntry} already prescribes.
|
|
90
|
+
*
|
|
91
|
+
* @throws NamzuError `capability_unavailable` when the store cannot list,
|
|
92
|
+
* claim or release — before any run is touched.
|
|
93
|
+
* @throws NamzuError `invalid_config` on a lease or concurrency that cannot
|
|
94
|
+
* mean what it says.
|
|
95
|
+
*/
|
|
96
|
+
export async function drainRuns(params) {
|
|
97
|
+
const { store, scope, holder, ttlMs, onRun, park, signal, now } = params;
|
|
98
|
+
assertDrainable(store);
|
|
99
|
+
if (holder.trim().length === 0) {
|
|
100
|
+
refuse('invalid_config', 'drainRuns: `holder` is empty. It is the only thing that distinguishes a renewal from a theft, so two drainers sharing one string take live claims from each other instantly. Use something per-process — a worker id, a pod name plus a pid.', { holder });
|
|
101
|
+
}
|
|
102
|
+
if (!Number.isFinite(ttlMs) || ttlMs <= 0) {
|
|
103
|
+
refuse('invalid_config', `drainRuns: ttlMs must be a positive number of milliseconds, got ${String(ttlMs)}. A lease that expires immediately is a lease every worker can take at once, which is the condition a claim exists to prevent.`, { ttlMs });
|
|
104
|
+
}
|
|
105
|
+
const maxConcurrent = params.maxConcurrent ?? 1;
|
|
106
|
+
if (!Number.isInteger(maxConcurrent) || maxConcurrent < 1) {
|
|
107
|
+
refuse('invalid_config', `drainRuns: maxConcurrent must be a positive integer, got ${String(params.maxConcurrent)}. Zero would drain nothing while reporting a successful pass.`, { maxConcurrent: params.maxConcurrent });
|
|
108
|
+
}
|
|
109
|
+
const pageSize = params.pageSize ?? DEFAULT_DRAIN_PAGE_SIZE;
|
|
110
|
+
const drained = [];
|
|
111
|
+
const skipped = [];
|
|
112
|
+
const stale = [];
|
|
113
|
+
const failed = [];
|
|
114
|
+
const unreleased = [];
|
|
115
|
+
let listed = 0;
|
|
116
|
+
let stopped = false;
|
|
117
|
+
const giveBack = async (entry, fence) => {
|
|
118
|
+
try {
|
|
119
|
+
await releaseRun(store, entry, fence);
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
// Never rethrown: on the work path this runs inside a `finally`
|
|
123
|
+
// unwinding the caller's error, and replacing it would send the
|
|
124
|
+
// operator to debug the disk instead of the run.
|
|
125
|
+
unreleased.push({ runId: entry.runId, error: toMessage(err) });
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Is this row still the row the listing described?
|
|
130
|
+
*
|
|
131
|
+
* A listing is a SNAPSHOT, and a claim taken against a stale snapshot is
|
|
132
|
+
* a claim on work somebody already did. The window is real and small:
|
|
133
|
+
* drainer B pages the queue, drainer A takes a run, finishes it, answers
|
|
134
|
+
* its park and releases — and B's claim then succeeds on a run that is no
|
|
135
|
+
* longer outstanding. Mutual exclusion cannot close that; only re-reading
|
|
136
|
+
* after the claim can, which is why this is here and not in the store.
|
|
137
|
+
*
|
|
138
|
+
* Only the park is re-checked, because it is the only predicate this loop
|
|
139
|
+
* was given. **Two drainers with no park filter can both process one
|
|
140
|
+
* run**, and no amount of claiming prevents it: a checkpoint store holds
|
|
141
|
+
* no run STATUS by design — see the note on {@link DurableRunEntry} — so
|
|
142
|
+
* "already done" is a fact only the host's own run records carry. A crash
|
|
143
|
+
* sweep intersects with those records inside `onRun`.
|
|
144
|
+
*/
|
|
145
|
+
const stillMatches = async (entry) => {
|
|
146
|
+
if (!park)
|
|
147
|
+
return true;
|
|
148
|
+
const fresh = summarizePark(await store.listCheckpoints(entry), now ?? Date.now());
|
|
149
|
+
return fresh !== undefined && park.includes(fresh.state);
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* One run: take it, work it, give it back.
|
|
153
|
+
*
|
|
154
|
+
* **No cancellation check here, and its absence is deliberate.** One was
|
|
155
|
+
* written, and a mutation test found nothing could kill it: the batch
|
|
156
|
+
* below dispatches with `.map(handle)`, which calls every handler
|
|
157
|
+
* synchronously before any of them awaits, so a signal that aborts during
|
|
158
|
+
* a batch cannot be observed at the top of a handler that has already
|
|
159
|
+
* been entered — and a signal that aborts BETWEEN batches is caught by
|
|
160
|
+
* the check in the loop, which runs first. A branch nothing can reach is
|
|
161
|
+
* a declaration nothing drives, so it is gone rather than covered by a
|
|
162
|
+
* test that would have proved nothing
|
|
163
|
+
* (`docs/conventions/declared-but-undriven.md`).
|
|
164
|
+
*/
|
|
165
|
+
const handle = async (entry) => {
|
|
166
|
+
const claim = await claimRun(store, entry, {
|
|
167
|
+
holder,
|
|
168
|
+
ttlMs,
|
|
169
|
+
...(now !== undefined ? { now } : {}),
|
|
170
|
+
});
|
|
171
|
+
// `null` is not an error. Another worker got there first, which is the
|
|
172
|
+
// ordinary outcome of two readers on one queue.
|
|
173
|
+
if (!claim) {
|
|
174
|
+
skipped.push(entry.runId);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
// Checked with the claim in hand rather than before taking it: only
|
|
178
|
+
// under the claim is the answer stable, because nobody else can change
|
|
179
|
+
// it while this drainer holds the run.
|
|
180
|
+
if (!(await stillMatches(entry))) {
|
|
181
|
+
stale.push(entry.runId);
|
|
182
|
+
await giveBack(entry, claim.fence);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
try {
|
|
186
|
+
await onRun(entry, claim);
|
|
187
|
+
drained.push(entry.runId);
|
|
188
|
+
}
|
|
189
|
+
catch (err) {
|
|
190
|
+
failed.push({ runId: entry.runId, error: toMessage(err) });
|
|
191
|
+
}
|
|
192
|
+
finally {
|
|
193
|
+
await giveBack(entry, claim.fence);
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
let cursor;
|
|
197
|
+
do {
|
|
198
|
+
if (signal?.aborted) {
|
|
199
|
+
stopped = true;
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
const page = await listDurableRuns(store, scope, {
|
|
203
|
+
// Not a parameter. See the note above.
|
|
204
|
+
claimed: false,
|
|
205
|
+
...(park ? { park } : {}),
|
|
206
|
+
limit: pageSize,
|
|
207
|
+
...(cursor !== undefined ? { cursor } : {}),
|
|
208
|
+
...(now !== undefined ? { now } : {}),
|
|
209
|
+
});
|
|
210
|
+
listed += page.entries.length;
|
|
211
|
+
// Windowed rather than `Promise.all` over the page: the leases are taken
|
|
212
|
+
// as the work starts, so a page bigger than the pass can finish inside
|
|
213
|
+
// one TTL does not hand the tail of it to somebody else mid-flight.
|
|
214
|
+
for (let i = 0; i < page.entries.length; i += maxConcurrent) {
|
|
215
|
+
if (signal?.aborted) {
|
|
216
|
+
stopped = true;
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
await Promise.all(page.entries.slice(i, i + maxConcurrent).map(handle));
|
|
220
|
+
}
|
|
221
|
+
// A drained run is released, so it is unclaimed again — but the cursor
|
|
222
|
+
// is a position in a total order and has already passed it, so the pass
|
|
223
|
+
// cannot see it twice and cannot fail to terminate.
|
|
224
|
+
cursor = stopped ? undefined : page.cursor;
|
|
225
|
+
} while (cursor !== undefined);
|
|
226
|
+
return { listed, drained, skipped, stale, failed, unreleased, stopped };
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=drain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drain.js","sourceRoot":"","sources":["../../src/run/drain.ts"],"names":[],"mappings":"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"}
|
package/dist/run/index.d.ts
CHANGED
|
@@ -2,6 +2,8 @@ export { RunPersistence } from '../manager/run/persistence.js';
|
|
|
2
2
|
export { RunDiskStore } from '../store/run/disk.js';
|
|
3
3
|
export { createRunReporter } from './reporter.js';
|
|
4
4
|
export type { RunReporter } from './reporter.js';
|
|
5
|
+
export { DEFAULT_DRAIN_PAGE_SIZE, drainRuns } from './drain.js';
|
|
6
|
+
export type { DrainFailure, DrainRun, DrainRunsParams, DrainRunsResult } from './drain.js';
|
|
5
7
|
export { checkLimitsDetailed, buildLimitConfig } from './LimitChecker.js';
|
|
6
8
|
export type { LimitCheckerState, LimitCheckResult } from './LimitChecker.js';
|
|
7
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/run/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/run/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACzE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/run/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC/D,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE1F,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACzE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA"}
|
package/dist/run/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { RunPersistence } from '../manager/run/persistence.js';
|
|
2
2
|
export { RunDiskStore } from '../store/run/disk.js';
|
|
3
3
|
export { createRunReporter } from './reporter.js';
|
|
4
|
+
export { DEFAULT_DRAIN_PAGE_SIZE, drainRuns } from './drain.js';
|
|
4
5
|
export { checkLimitsDetailed, buildLimitConfig } from './LimitChecker.js';
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
package/dist/run/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/run/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAGjD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/run/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAGjD,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAG/D,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA"}
|
|
@@ -3,6 +3,7 @@ import type { RunPersistence } from '../../manager/run/persistence.js';
|
|
|
3
3
|
import { type ProbeRegistry } from '../../probe/registry.js';
|
|
4
4
|
import type { ActivityStore } from '../../store/activity/memory.js';
|
|
5
5
|
import type { RunId } from '../../types/ids/index.js';
|
|
6
|
+
import type { ClaimFence } from '../../types/run/checkpoint-store.js';
|
|
6
7
|
import type { RunEvent } from '../../types/run/index.js';
|
|
7
8
|
import type { TaskStore } from '../../types/task/index.js';
|
|
8
9
|
export type EmitEvent = (event: RunEvent) => Promise<void>;
|
|
@@ -13,6 +14,17 @@ export declare class EventTranslator {
|
|
|
13
14
|
private droppedDeltaCount;
|
|
14
15
|
private readonly log;
|
|
15
16
|
constructor(runMgr: RunPersistence, probeRegistry?: ProbeRegistry);
|
|
17
|
+
/**
|
|
18
|
+
* The claim this run is being written under, when it holds one.
|
|
19
|
+
*
|
|
20
|
+
* Stamped on every durable event as its `generation`, so a consumer whose
|
|
21
|
+
* cursor predates a takeover is told its sequence space changed instead of
|
|
22
|
+
* being handed a splice from a different writer's log.
|
|
23
|
+
*/
|
|
24
|
+
private generation;
|
|
25
|
+
/** Serializes sequence assignment against the append. See {@link emitEvent}. */
|
|
26
|
+
private appendChain;
|
|
27
|
+
setGeneration(fence: ClaimFence | undefined): void;
|
|
16
28
|
readonly emitEvent: EmitEvent;
|
|
17
29
|
drainPending(): Generator<RunEvent>;
|
|
18
30
|
wireActivityStore(activityStore: ActivityStore, runId: RunId): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAEtE,OAAO,EAAE,KAAK,aAAa,EAAiC,MAAM,yBAAyB,CAAA;AAC3F,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAClF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAEtE,OAAO,EAAE,KAAK,aAAa,EAAiC,MAAM,yBAAyB,CAAA;AAC3F,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAClF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAA;AAErE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAGrE,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAgB1D,qBAAa,eAAe;IAC3B,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA0D;gBAElE,MAAM,EAAE,cAAc,EAAE,aAAa,GAAE,aAAoC;IAKvF;;;;;;OAMG;IACH,OAAO,CAAC,UAAU,CAAwB;IAE1C,gFAAgF;IAChF,OAAO,CAAC,WAAW,CAAmC;IAEtD,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI;IAIlD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAoF3B;IAED,YAAY,IAAI,SAAS,CAAC,QAAQ,CAAC;IAQpC,iBAAiB,CAAC,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAwBnE,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,IAAI;IA6C7D,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CA0E7D"}
|
|
@@ -25,6 +25,19 @@ export class EventTranslator {
|
|
|
25
25
|
this.runMgr = runMgr;
|
|
26
26
|
this.probes = probeRegistry;
|
|
27
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* The claim this run is being written under, when it holds one.
|
|
30
|
+
*
|
|
31
|
+
* Stamped on every durable event as its `generation`, so a consumer whose
|
|
32
|
+
* cursor predates a takeover is told its sequence space changed instead of
|
|
33
|
+
* being handed a splice from a different writer's log.
|
|
34
|
+
*/
|
|
35
|
+
generation;
|
|
36
|
+
/** Serializes sequence assignment against the append. See {@link emitEvent}. */
|
|
37
|
+
appendChain = Promise.resolve();
|
|
38
|
+
setGeneration(fence) {
|
|
39
|
+
this.generation = fence;
|
|
40
|
+
}
|
|
28
41
|
emitEvent = async (event) => {
|
|
29
42
|
this.probes.dispatch(event, buildProbeContext({ runId: event.runId }));
|
|
30
43
|
// D2: bound the queue. Drop oldest ephemeral events under
|
|
@@ -50,14 +63,59 @@ export class EventTranslator {
|
|
|
50
63
|
// and rely on consumer drain catching up. Better to grow
|
|
51
64
|
// briefly than to drop a state transition.
|
|
52
65
|
}
|
|
53
|
-
this.pendingEvents.push(event);
|
|
54
66
|
// D1 middle path: ephemeral events never enter `transcript.jsonl`.
|
|
55
67
|
// They live only on the in-memory bus for live UI rendering.
|
|
56
68
|
// Replay (`runtime/query/replay/prepare.ts`) reads checkpoints
|
|
57
69
|
// not transcripts, so this preserves replay fidelity while
|
|
58
70
|
// eliminating the durable bloat review flagged.
|
|
59
|
-
if (
|
|
60
|
-
|
|
71
|
+
if (isEphemeralEvent(event)) {
|
|
72
|
+
// No number, and that is the honest statement: nothing will
|
|
73
|
+
// persist this, so a consumer must never advance a cursor to it.
|
|
74
|
+
this.pendingEvents.push(event);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
// One appender at a time, and this is not a precaution — it is the fix
|
|
78
|
+
// for a measured defect. Taking the number, awaiting the write and then
|
|
79
|
+
// committing is a read-modify-write, and emits genuinely interleave:
|
|
80
|
+
// the task store, the plan manager and a batch of parallel tools all
|
|
81
|
+
// emit into this one funnel. Measured on a two-tool run, three events
|
|
82
|
+
// took the number 15 and two took 12. A duplicated sequence is worse
|
|
83
|
+
// than a missing one — a consumer asking for everything above 15 is
|
|
84
|
+
// handed part of the run it already had, spliced in as if it were new.
|
|
85
|
+
const previous = this.appendChain;
|
|
86
|
+
let release;
|
|
87
|
+
this.appendChain = new Promise((resolve) => {
|
|
88
|
+
release = resolve;
|
|
89
|
+
});
|
|
90
|
+
try {
|
|
91
|
+
await previous;
|
|
92
|
+
// The number is a claim that the event is IN the log, so it is taken
|
|
93
|
+
// against the append and not before it. The candidate goes to the
|
|
94
|
+
// store first; only a write that landed advances the counter and
|
|
95
|
+
// reaches the live stream carrying it.
|
|
96
|
+
//
|
|
97
|
+
// The failure path still delivers the event — unstamped. A store
|
|
98
|
+
// that cannot record a `run_failed` must not also swallow it, and an
|
|
99
|
+
// unstamped event says exactly what is true of it: it happened, and
|
|
100
|
+
// it is not recoverable.
|
|
101
|
+
const seq = this.runMgr.nextEventSeq();
|
|
102
|
+
const stamped = {
|
|
103
|
+
...event,
|
|
104
|
+
seq,
|
|
105
|
+
...(this.generation !== undefined ? { generation: this.generation } : {}),
|
|
106
|
+
};
|
|
107
|
+
try {
|
|
108
|
+
await this.runMgr.getRunStore().appendEvent(stamped);
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
this.pendingEvents.push(event);
|
|
112
|
+
throw err;
|
|
113
|
+
}
|
|
114
|
+
this.runMgr.commitEventSeq(seq);
|
|
115
|
+
this.pendingEvents.push(stamped);
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
release();
|
|
61
119
|
}
|
|
62
120
|
};
|
|
63
121
|
*drainPending() {
|