effect-jobs 0.1.0-alpha.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 +16 -0
- package/LICENSE +22 -0
- package/README.md +142 -0
- package/dist/Job.d.ts +33 -0
- package/dist/Job.d.ts.map +1 -0
- package/dist/Job.js +66 -0
- package/dist/Job.js.map +1 -0
- package/dist/JobConsumer.d.ts +34 -0
- package/dist/JobConsumer.d.ts.map +1 -0
- package/dist/JobConsumer.js +28 -0
- package/dist/JobConsumer.js.map +1 -0
- package/dist/JobContract.d.ts +128 -0
- package/dist/JobContract.d.ts.map +1 -0
- package/dist/JobContract.js +15 -0
- package/dist/JobContract.js.map +1 -0
- package/dist/JobFailure.d.ts +51 -0
- package/dist/JobFailure.d.ts.map +1 -0
- package/dist/JobFailure.js +34 -0
- package/dist/JobFailure.js.map +1 -0
- package/dist/JobId.d.ts +5 -0
- package/dist/JobId.d.ts.map +1 -0
- package/dist/JobId.js +4 -0
- package/dist/JobId.js.map +1 -0
- package/dist/JobIdentity.d.ts +54 -0
- package/dist/JobIdentity.d.ts.map +1 -0
- package/dist/JobIdentity.js +82 -0
- package/dist/JobIdentity.js.map +1 -0
- package/dist/JobLifecycle.d.ts +173 -0
- package/dist/JobLifecycle.d.ts.map +1 -0
- package/dist/JobLifecycle.js +234 -0
- package/dist/JobLifecycle.js.map +1 -0
- package/dist/JobPayload.d.ts +18 -0
- package/dist/JobPayload.d.ts.map +1 -0
- package/dist/JobPayload.js +10 -0
- package/dist/JobPayload.js.map +1 -0
- package/dist/JobPayloadCodec.d.ts +14 -0
- package/dist/JobPayloadCodec.d.ts.map +1 -0
- package/dist/JobPayloadCodec.js +78 -0
- package/dist/JobPayloadCodec.js.map +1 -0
- package/dist/JobPolicy.d.ts +50 -0
- package/dist/JobPolicy.d.ts.map +1 -0
- package/dist/JobPolicy.js +85 -0
- package/dist/JobPolicy.js.map +1 -0
- package/dist/JobProducer.d.ts +14 -0
- package/dist/JobProducer.d.ts.map +1 -0
- package/dist/JobProducer.js +23 -0
- package/dist/JobProducer.js.map +1 -0
- package/dist/JobQueue.d.ts +16 -0
- package/dist/JobQueue.d.ts.map +1 -0
- package/dist/JobQueue.js +16 -0
- package/dist/JobQueue.js.map +1 -0
- package/dist/JobRegistry.d.ts +37 -0
- package/dist/JobRegistry.d.ts.map +1 -0
- package/dist/JobRegistry.js +47 -0
- package/dist/JobRegistry.js.map +1 -0
- package/dist/JobStore.d.ts +348 -0
- package/dist/JobStore.d.ts.map +1 -0
- package/dist/JobStore.js +19 -0
- package/dist/JobStore.js.map +1 -0
- package/dist/JobTelemetry.d.ts +7 -0
- package/dist/JobTelemetry.d.ts.map +1 -0
- package/dist/JobTelemetry.js +61 -0
- package/dist/JobTelemetry.js.map +1 -0
- package/dist/JobTransaction.d.ts +24 -0
- package/dist/JobTransaction.d.ts.map +1 -0
- package/dist/JobTransaction.js +7 -0
- package/dist/JobTransaction.js.map +1 -0
- package/dist/JobWorker.d.ts +24 -0
- package/dist/JobWorker.d.ts.map +1 -0
- package/dist/JobWorker.js +155 -0
- package/dist/JobWorker.js.map +1 -0
- package/dist/JobWorkerRuntime.d.ts +18 -0
- package/dist/JobWorkerRuntime.d.ts.map +1 -0
- package/dist/JobWorkerRuntime.js +5 -0
- package/dist/JobWorkerRuntime.js.map +1 -0
- package/dist/PollingJobWorker.d.ts +9 -0
- package/dist/PollingJobWorker.d.ts.map +1 -0
- package/dist/PollingJobWorker.js +54 -0
- package/dist/PollingJobWorker.js.map +1 -0
- package/dist/PostgreSqlDrizzleSchema.d.ts +432 -0
- package/dist/PostgreSqlDrizzleSchema.d.ts.map +1 -0
- package/dist/PostgreSqlDrizzleSchema.js +72 -0
- package/dist/PostgreSqlDrizzleSchema.js.map +1 -0
- package/dist/PostgreSqlJobs.d.ts +25 -0
- package/dist/PostgreSqlJobs.d.ts.map +1 -0
- package/dist/PostgreSqlJobs.js +38 -0
- package/dist/PostgreSqlJobs.js.map +1 -0
- package/dist/PostgreSqlSchema.d.ts +30 -0
- package/dist/PostgreSqlSchema.d.ts.map +1 -0
- package/dist/PostgreSqlSchema.js +63 -0
- package/dist/PostgreSqlSchema.js.map +1 -0
- package/dist/PostgreSqlTransaction.d.ts +42 -0
- package/dist/PostgreSqlTransaction.d.ts.map +1 -0
- package/dist/PostgreSqlTransaction.js +9 -0
- package/dist/PostgreSqlTransaction.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/JobTransaction.d.ts +16 -0
- package/dist/internal/JobTransaction.d.ts.map +1 -0
- package/dist/internal/JobTransaction.js +21 -0
- package/dist/internal/JobTransaction.js.map +1 -0
- package/dist/internal/codec/CanonicalJson.d.ts +9 -0
- package/dist/internal/codec/CanonicalJson.d.ts.map +1 -0
- package/dist/internal/codec/CanonicalJson.js +184 -0
- package/dist/internal/codec/CanonicalJson.js.map +1 -0
- package/dist/internal/codec/ProtectedProjection.d.ts +12 -0
- package/dist/internal/codec/ProtectedProjection.d.ts.map +1 -0
- package/dist/internal/codec/ProtectedProjection.js +121 -0
- package/dist/internal/codec/ProtectedProjection.js.map +1 -0
- package/dist/internal/lifecycle/Artifacts.d.ts +6 -0
- package/dist/internal/lifecycle/Artifacts.d.ts.map +1 -0
- package/dist/internal/lifecycle/Artifacts.js +49 -0
- package/dist/internal/lifecycle/Artifacts.js.map +1 -0
- package/dist/internal/lifecycle/Reconciliation.d.ts +82 -0
- package/dist/internal/lifecycle/Reconciliation.d.ts.map +1 -0
- package/dist/internal/lifecycle/Reconciliation.js +98 -0
- package/dist/internal/lifecycle/Reconciliation.js.map +1 -0
- package/dist/internal/postgresql/Producer.d.ts +14 -0
- package/dist/internal/postgresql/Producer.d.ts.map +1 -0
- package/dist/internal/postgresql/Producer.js +55 -0
- package/dist/internal/postgresql/Producer.js.map +1 -0
- package/dist/internal/postgresql/Readiness.d.ts +5 -0
- package/dist/internal/postgresql/Readiness.d.ts.map +1 -0
- package/dist/internal/postgresql/Readiness.js +53 -0
- package/dist/internal/postgresql/Readiness.js.map +1 -0
- package/dist/internal/postgresql/Rows.d.ts +45 -0
- package/dist/internal/postgresql/Rows.d.ts.map +1 -0
- package/dist/internal/postgresql/Rows.js +75 -0
- package/dist/internal/postgresql/Rows.js.map +1 -0
- package/dist/internal/postgresql/Store.d.ts +5 -0
- package/dist/internal/postgresql/Store.d.ts.map +1 -0
- package/dist/internal/postgresql/Store.js +211 -0
- package/dist/internal/postgresql/Store.js.map +1 -0
- package/dist/internal/worker/Capability.d.ts +106 -0
- package/dist/internal/worker/Capability.d.ts.map +1 -0
- package/dist/internal/worker/Capability.js +11 -0
- package/dist/internal/worker/Capability.js.map +1 -0
- package/dist/internal/worker/Drain.d.ts +22 -0
- package/dist/internal/worker/Drain.d.ts.map +1 -0
- package/dist/internal/worker/Drain.js +59 -0
- package/dist/internal/worker/Drain.js.map +1 -0
- package/dist/internal/worker/Execution.d.ts +7 -0
- package/dist/internal/worker/Execution.d.ts.map +1 -0
- package/dist/internal/worker/Execution.js +125 -0
- package/dist/internal/worker/Execution.js.map +1 -0
- package/dist/internal/worker/Results.d.ts +108 -0
- package/dist/internal/worker/Results.d.ts.map +1 -0
- package/dist/internal/worker/Results.js +3 -0
- package/dist/internal/worker/Results.js.map +1 -0
- package/package.json +169 -0
- package/specs/architecture-decisions.md +841 -0
- package/specs/core-contract.md +323 -0
- package/specs/drizzle-compatibility.md +167 -0
- package/specs/postgresql-backend.md +291 -0
- package/specs/release-qualification.md +107 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { Effect, Result, Schema } from "effect";
|
|
2
|
+
import * as Lifecycle from "../../JobLifecycle.js";
|
|
3
|
+
import * as Store from "../../JobStore.js";
|
|
4
|
+
import * as Reconciliation from "../lifecycle/Reconciliation.js";
|
|
5
|
+
import { PostgreSqlFailure } from "../../PostgreSqlTransaction.js";
|
|
6
|
+
import { claimArtifact, dbTime, fromResult, snapshot, writeSnapshot } from "./Rows.js";
|
|
7
|
+
const inputError = () => new Store.JobStoreProtocolError({ reason: "invalid-input" });
|
|
8
|
+
const decode = (schema, value) => Schema.decodeUnknownEffect(schema, { onExcessProperty: "error" })(value).pipe(Effect.mapError(inputError));
|
|
9
|
+
const finalizationSchema = Schema.Struct({
|
|
10
|
+
ownership: Lifecycle.JobOwnership,
|
|
11
|
+
before: Lifecycle.JobSnapshot,
|
|
12
|
+
finalization: Lifecycle.JobFinalization
|
|
13
|
+
});
|
|
14
|
+
const finalizationInput = (input) => decode(finalizationSchema, input).pipe(Effect.map((decoded) => ({
|
|
15
|
+
ownership: { ...decoded.ownership },
|
|
16
|
+
finalization: { ...decoded.finalization },
|
|
17
|
+
before: {
|
|
18
|
+
...decoded.before,
|
|
19
|
+
policy: {
|
|
20
|
+
...decoded.before.policy,
|
|
21
|
+
retrySchedule: { ...decoded.before.policy.retrySchedule },
|
|
22
|
+
completedRetention: { ...decoded.before.policy.completedRetention },
|
|
23
|
+
deadRetention: { ...decoded.before.policy.deadRetention }
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
})));
|
|
27
|
+
const unknownResult = (effect, unknown) => effect.pipe(Effect.catchIf((error) => error instanceof PostgreSqlFailure && error.commitKnowledge === "Unknown", () => Effect.succeed(unknown())));
|
|
28
|
+
/** Invalid durable metadata is removed from scheduling, not repaired into executable data. */
|
|
29
|
+
const isolate = (query, jobs, id, now) => query.query(`UPDATE ${jobs} SET state='Isolated',lease_token=NULL,lease_expires_at=NULL,completed_at=NULL,
|
|
30
|
+
updated_at=$2,last_failure_code='invalid_artifact',
|
|
31
|
+
lifecycle_version=CASE WHEN lifecycle_version BETWEEN 0 AND 9007199254740990 THEN lifecycle_version+1 ELSE lifecycle_version END WHERE id=$1`, [id, now]);
|
|
32
|
+
export const makeStore = (adapter, jobs, payloads, budget) => {
|
|
33
|
+
const select = `SELECT j.*,p.format_version,p.payload,p.projection FROM ${jobs} j LEFT JOIN ${payloads} p ON p.job_id=j.id`;
|
|
34
|
+
const locked = (query, id) => query.query(`${select} WHERE j.id=$1 FOR UPDATE OF j`, [id]);
|
|
35
|
+
const claim = (input) => Effect.gen(function* () {
|
|
36
|
+
const validated = Store.validateClaimRequest(input);
|
|
37
|
+
if (Result.isFailure(validated)) {
|
|
38
|
+
return yield* validated.failure;
|
|
39
|
+
}
|
|
40
|
+
const request = {
|
|
41
|
+
...validated.success,
|
|
42
|
+
supportedCatalog: validated.success.supportedCatalog.map((catalog) => ({
|
|
43
|
+
queue: catalog.queue,
|
|
44
|
+
kind: catalog.kind,
|
|
45
|
+
version: catalog.version
|
|
46
|
+
}))
|
|
47
|
+
};
|
|
48
|
+
const result = yield* unknownResult(adapter.ownedTransaction((query) => Effect.gen(function* () {
|
|
49
|
+
const now = yield* dbTime(query);
|
|
50
|
+
const params = [request.queue, now];
|
|
51
|
+
const supported = request.supportedCatalog
|
|
52
|
+
.map((entry) => {
|
|
53
|
+
params.push(entry.kind, entry.version);
|
|
54
|
+
return `(j.kind=$${params.length - 1} AND j.version=$${params.length})`;
|
|
55
|
+
})
|
|
56
|
+
.join(" OR ");
|
|
57
|
+
const row = (yield* query.query(`${select} WHERE j.queue=$1 AND (${supported})
|
|
58
|
+
AND j.state IN ('Pending','RetryScheduled') AND j.available_at <= $2
|
|
59
|
+
ORDER BY j.available_at,j.id LIMIT 1 FOR UPDATE OF j SKIP LOCKED`, params))[0];
|
|
60
|
+
if (row === undefined) {
|
|
61
|
+
return Store.ClaimResults.Empty();
|
|
62
|
+
}
|
|
63
|
+
const before = snapshot(row);
|
|
64
|
+
if (Result.isFailure(before)) {
|
|
65
|
+
yield* isolate(query, jobs, row.id, now);
|
|
66
|
+
return Store.ClaimResults.Empty();
|
|
67
|
+
}
|
|
68
|
+
const plan = Lifecycle.claim(before.success, request.leaseToken, now, budget);
|
|
69
|
+
if (Result.isFailure(plan)) {
|
|
70
|
+
// Incompatible lease budget cannot be dispatched; no spinning on a poison head row.
|
|
71
|
+
yield* isolate(query, jobs, row.id, now);
|
|
72
|
+
return Store.ClaimResults.Empty();
|
|
73
|
+
}
|
|
74
|
+
yield* writeSnapshot(query, jobs, plan.success);
|
|
75
|
+
const claimed = yield* fromResult(claimArtifact(row, plan.success));
|
|
76
|
+
return Store.ClaimResults.Claimed({ claim: claimed });
|
|
77
|
+
})), Store.ClaimResults.Unknown);
|
|
78
|
+
if (result._tag !== "Claimed") {
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
// The commit response may have consumed the reserved lease. One bounded DB-time read,
|
|
82
|
+
// not a process-clock inference or a second claim. Unknown lets the worker reconcile.
|
|
83
|
+
return yield* adapter
|
|
84
|
+
.ownedTransaction((query) => dbTime(query))
|
|
85
|
+
.pipe(Effect.map((now) => Lifecycle.usableLease(result.claim.snapshot, now, budget)
|
|
86
|
+
? result
|
|
87
|
+
: Store.ClaimResults.Unknown()), Effect.catchTag("PostgreSqlFailure", () => Effect.succeed(Store.ClaimResults.Unknown())));
|
|
88
|
+
});
|
|
89
|
+
const reconcileClaim = (token) => Effect.gen(function* () {
|
|
90
|
+
yield* decode(Lifecycle.LeaseToken, token);
|
|
91
|
+
return yield* unknownResult(adapter.ownedTransaction((query) => Effect.gen(function* () {
|
|
92
|
+
// One statement snapshots row and DB time consistently, no write authority from absence.
|
|
93
|
+
const row = (yield* query.query(`${select.replace("SELECT j.*", "SELECT t.db_now,j.*")}, LATERAL (SELECT floor(extract(epoch FROM clock_timestamp())*1000)::bigint AS db_now) t
|
|
94
|
+
WHERE j.lease_token=$1`, [token]))[0];
|
|
95
|
+
if (row === undefined) {
|
|
96
|
+
return Store.ClaimReconciliations.NotOwned();
|
|
97
|
+
}
|
|
98
|
+
const stored = yield* fromResult(snapshot(row));
|
|
99
|
+
const observed = yield* fromResult(claimArtifact(row, stored));
|
|
100
|
+
return yield* fromResult(Reconciliation.inspectClaim(token, observed, Number(row.db_now), budget));
|
|
101
|
+
})), Store.ClaimReconciliations.Unknown);
|
|
102
|
+
});
|
|
103
|
+
const release = (input, phase) => Effect.gen(function* () {
|
|
104
|
+
const ownership = { ...(yield* decode(Lifecycle.JobOwnership, input)) };
|
|
105
|
+
if (phase !== "BeforeExecution") {
|
|
106
|
+
return yield* inputError();
|
|
107
|
+
}
|
|
108
|
+
return yield* unknownResult(adapter.ownedTransaction((query) => Effect.gen(function* () {
|
|
109
|
+
const row = (yield* locked(query, ownership.jobId))[0];
|
|
110
|
+
if (row === undefined) {
|
|
111
|
+
return yield* new Store.JobOwnershipLost();
|
|
112
|
+
}
|
|
113
|
+
const before = yield* fromResult(snapshot(row));
|
|
114
|
+
const now = yield* dbTime(query);
|
|
115
|
+
if (!Lifecycle.isOwned(before, ownership, now)) {
|
|
116
|
+
return yield* new Store.JobOwnershipLost();
|
|
117
|
+
}
|
|
118
|
+
const after = yield* fromResult(Lifecycle.release(before, ownership, now, phase));
|
|
119
|
+
yield* writeSnapshot(query, jobs, after);
|
|
120
|
+
return Store.FinalizationResults.Applied();
|
|
121
|
+
})), Store.FinalizationResults.Unknown);
|
|
122
|
+
});
|
|
123
|
+
const finalize = (input) => Effect.gen(function* () {
|
|
124
|
+
const request = yield* finalizationInput(input);
|
|
125
|
+
const beforeOwnership = yield* fromResult(Lifecycle.ownershipOf(request.before));
|
|
126
|
+
if (!Schema.toEquivalence(Lifecycle.JobOwnership)(beforeOwnership, request.ownership)) {
|
|
127
|
+
return yield* inputError();
|
|
128
|
+
}
|
|
129
|
+
return yield* unknownResult(adapter.ownedTransaction((query) => Effect.gen(function* () {
|
|
130
|
+
const row = (yield* locked(query, request.ownership.jobId))[0];
|
|
131
|
+
if (row === undefined) {
|
|
132
|
+
return yield* new Store.JobOwnershipLost();
|
|
133
|
+
}
|
|
134
|
+
const before = yield* fromResult(snapshot(row));
|
|
135
|
+
const now = yield* dbTime(query);
|
|
136
|
+
if (!Lifecycle.isOwned(before, request.ownership, now) ||
|
|
137
|
+
!Schema.toEquivalence(Lifecycle.JobSnapshot)(before, request.before)) {
|
|
138
|
+
return yield* new Store.JobOwnershipLost();
|
|
139
|
+
}
|
|
140
|
+
const after = yield* fromResult(Lifecycle.finalize(before, request.ownership, request.finalization, now));
|
|
141
|
+
yield* writeSnapshot(query, jobs, after);
|
|
142
|
+
return Store.FinalizationResults.Applied();
|
|
143
|
+
})), Store.FinalizationResults.Unknown);
|
|
144
|
+
});
|
|
145
|
+
const reconcileFinalization = (input) => Effect.gen(function* () {
|
|
146
|
+
const request = yield* finalizationInput(input);
|
|
147
|
+
return yield* unknownResult(adapter.ownedTransaction((query) => Effect.gen(function* () {
|
|
148
|
+
// LEFT JOIN a singleton guarantees time evidence even when the original row is absent.
|
|
149
|
+
const rows = yield* query.query(`SELECT j.*,floor(extract(epoch FROM clock_timestamp())*1000)::bigint AS db_now
|
|
150
|
+
FROM (VALUES (1)) t(n) LEFT JOIN ${jobs} j ON j.id=$1`, [request.ownership.jobId]);
|
|
151
|
+
const row = rows[0];
|
|
152
|
+
if (row === undefined) {
|
|
153
|
+
return yield* new Store.JobStoreProtocolError({
|
|
154
|
+
reason: "invalid-artifact"
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
const observed = row.id === null ? null : yield* fromResult(snapshot(row));
|
|
158
|
+
return yield* fromResult(Reconciliation.inspectFinalization(request, observed, Number(row.db_now)));
|
|
159
|
+
})), Store.FinalizationReconciliations.Unknown);
|
|
160
|
+
});
|
|
161
|
+
const recoverExpired = (limit) => Effect.gen(function* () {
|
|
162
|
+
yield* decode(Lifecycle.BatchLimit, limit);
|
|
163
|
+
// Number-only core port: uncertain recovery is an explicit Unknown error, NEVER a
|
|
164
|
+
// fabricated zero or success and NEVER replayed by this adapter.
|
|
165
|
+
return yield* adapter.ownedTransaction((query) => Effect.gen(function* () {
|
|
166
|
+
const now = yield* dbTime(query);
|
|
167
|
+
const rows = yield* query.query(`SELECT * FROM ${jobs} WHERE state='Active' AND lease_expires_at <= $1
|
|
168
|
+
ORDER BY lease_expires_at,id LIMIT $2 FOR UPDATE SKIP LOCKED`, [now, limit]);
|
|
169
|
+
for (const row of rows) {
|
|
170
|
+
const plan = Result.flatMap(snapshot(row), (stored) => Lifecycle.recoverExpired(stored, now));
|
|
171
|
+
if (Result.isFailure(plan)) {
|
|
172
|
+
yield* isolate(query, jobs, row.id, now);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
yield* writeSnapshot(query, jobs, plan.success);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return rows.length;
|
|
179
|
+
}));
|
|
180
|
+
});
|
|
181
|
+
return {
|
|
182
|
+
claim,
|
|
183
|
+
reconcileClaim,
|
|
184
|
+
release,
|
|
185
|
+
finalize,
|
|
186
|
+
reconcileFinalization,
|
|
187
|
+
recoverExpired
|
|
188
|
+
};
|
|
189
|
+
};
|
|
190
|
+
export const makeCleanup = (adapter, jobs) => ({
|
|
191
|
+
cleanup: (limit) => Effect.gen(function* () {
|
|
192
|
+
yield* decode(Lifecycle.BatchLimit, limit);
|
|
193
|
+
return yield* adapter.ownedTransaction((query) => Effect.gen(function* () {
|
|
194
|
+
const now = yield* dbTime(query);
|
|
195
|
+
// SQL narrows only terminal states; validated policies decide actual eligibility.
|
|
196
|
+
// Scan/delete bound is identical; invalid or Forever rows are not automatic purges.
|
|
197
|
+
const rows = yield* query.query(`SELECT * FROM ${jobs} WHERE state IN ('Completed','Dead') AND cleanup_at <= $1
|
|
198
|
+
ORDER BY cleanup_at,id LIMIT $2 FOR UPDATE SKIP LOCKED`, [now, limit]);
|
|
199
|
+
let removed = 0;
|
|
200
|
+
for (const row of rows) {
|
|
201
|
+
const eligible = Result.flatMap(snapshot(row), (stored) => Lifecycle.cleanupEligible(stored, now));
|
|
202
|
+
if (Result.isSuccess(eligible) && eligible.success) {
|
|
203
|
+
yield* query.query(`DELETE FROM ${jobs} WHERE id=$1`, [row.id]);
|
|
204
|
+
removed++;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return removed;
|
|
208
|
+
}));
|
|
209
|
+
})
|
|
210
|
+
});
|
|
211
|
+
//# sourceMappingURL=Store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Store.js","sourceRoot":"","sources":["../../../src/internal/postgresql/Store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { Data } from "effect";
|
|
2
|
+
import type { Effect, Semaphore } from "effect";
|
|
3
|
+
import type { JobConsumer } from "../../JobConsumer.js";
|
|
4
|
+
/** Explicit per-worker wiring; not exported as a package subpath. */
|
|
5
|
+
export declare const WorkerCapability: unique symbol;
|
|
6
|
+
declare const JobWorkerUnavailable_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
7
|
+
readonly _tag: "JobWorkerUnavailable";
|
|
8
|
+
} & Readonly<A>;
|
|
9
|
+
export declare class JobWorkerUnavailable extends JobWorkerUnavailable_base<{}> {
|
|
10
|
+
}
|
|
11
|
+
declare const JobWorkerNotReady_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
12
|
+
readonly _tag: "JobWorkerNotReady";
|
|
13
|
+
} & Readonly<A>;
|
|
14
|
+
export declare class JobWorkerNotReady extends JobWorkerNotReady_base<{}> {
|
|
15
|
+
}
|
|
16
|
+
declare const JobWorkerConfigurationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
17
|
+
readonly _tag: "JobWorkerConfigurationError";
|
|
18
|
+
} & Readonly<A>;
|
|
19
|
+
export declare class JobWorkerConfigurationError extends JobWorkerConfigurationError_base<{
|
|
20
|
+
readonly field: "catalog" | "operationResponseBudgetMillis" | "consumer" | "idlePollMillis";
|
|
21
|
+
}> {
|
|
22
|
+
}
|
|
23
|
+
export type DispatchResult = Data.TaggedEnum<{
|
|
24
|
+
Empty: {};
|
|
25
|
+
Unresolved: {};
|
|
26
|
+
Started: {
|
|
27
|
+
readonly execution: Effect.Effect<void>;
|
|
28
|
+
readonly release: Effect.Effect<void>;
|
|
29
|
+
};
|
|
30
|
+
}>;
|
|
31
|
+
export declare const DispatchResults: {
|
|
32
|
+
readonly $is: <Tag extends "Empty" | "Started" | "Unresolved">(tag: Tag) => (u: unknown) => u is Extract<{
|
|
33
|
+
readonly _tag: "Empty";
|
|
34
|
+
}, {
|
|
35
|
+
readonly _tag: Tag;
|
|
36
|
+
}> | Extract<{
|
|
37
|
+
readonly _tag: "Started";
|
|
38
|
+
readonly execution: Effect.Effect<void>;
|
|
39
|
+
readonly release: Effect.Effect<void>;
|
|
40
|
+
}, {
|
|
41
|
+
readonly _tag: Tag;
|
|
42
|
+
}> | Extract<{
|
|
43
|
+
readonly _tag: "Unresolved";
|
|
44
|
+
}, {
|
|
45
|
+
readonly _tag: Tag;
|
|
46
|
+
}>;
|
|
47
|
+
readonly $match: {
|
|
48
|
+
<Cases extends { readonly [Tag in "Empty" | "Started" | "Unresolved"]: (args: Extract<{
|
|
49
|
+
readonly _tag: "Empty";
|
|
50
|
+
} | {
|
|
51
|
+
readonly _tag: "Started";
|
|
52
|
+
readonly execution: Effect.Effect<void>;
|
|
53
|
+
readonly release: Effect.Effect<void>;
|
|
54
|
+
} | {
|
|
55
|
+
readonly _tag: "Unresolved";
|
|
56
|
+
}, {
|
|
57
|
+
readonly _tag: Tag;
|
|
58
|
+
}>) => any; }>(cases: Cases): (value: {
|
|
59
|
+
readonly _tag: "Empty";
|
|
60
|
+
} | {
|
|
61
|
+
readonly _tag: "Started";
|
|
62
|
+
readonly execution: Effect.Effect<void>;
|
|
63
|
+
readonly release: Effect.Effect<void>;
|
|
64
|
+
} | {
|
|
65
|
+
readonly _tag: "Unresolved";
|
|
66
|
+
}) => import("effect/Unify").Unify<ReturnType<Cases["Empty" | "Started" | "Unresolved"]>>;
|
|
67
|
+
<Cases extends { readonly [Tag in "Empty" | "Started" | "Unresolved"]: (args: Extract<{
|
|
68
|
+
readonly _tag: "Empty";
|
|
69
|
+
} | {
|
|
70
|
+
readonly _tag: "Started";
|
|
71
|
+
readonly execution: Effect.Effect<void>;
|
|
72
|
+
readonly release: Effect.Effect<void>;
|
|
73
|
+
} | {
|
|
74
|
+
readonly _tag: "Unresolved";
|
|
75
|
+
}, {
|
|
76
|
+
readonly _tag: Tag;
|
|
77
|
+
}>) => any; }>(value: {
|
|
78
|
+
readonly _tag: "Empty";
|
|
79
|
+
} | {
|
|
80
|
+
readonly _tag: "Started";
|
|
81
|
+
readonly execution: Effect.Effect<void>;
|
|
82
|
+
readonly release: Effect.Effect<void>;
|
|
83
|
+
} | {
|
|
84
|
+
readonly _tag: "Unresolved";
|
|
85
|
+
}, cases: Cases): import("effect/Unify").Unify<ReturnType<Cases["Empty" | "Started" | "Unresolved"]>>;
|
|
86
|
+
};
|
|
87
|
+
readonly Empty: Data.TaggedEnum.ConstructorFrom<{
|
|
88
|
+
readonly _tag: "Empty";
|
|
89
|
+
}, "_tag">;
|
|
90
|
+
readonly Started: Data.TaggedEnum.ConstructorFrom<{
|
|
91
|
+
readonly _tag: "Started";
|
|
92
|
+
readonly execution: Effect.Effect<void>;
|
|
93
|
+
readonly release: Effect.Effect<void>;
|
|
94
|
+
}, "_tag">;
|
|
95
|
+
readonly Unresolved: Data.TaggedEnum.ConstructorFrom<{
|
|
96
|
+
readonly _tag: "Unresolved";
|
|
97
|
+
}, "_tag">;
|
|
98
|
+
};
|
|
99
|
+
export interface RuntimeCapability {
|
|
100
|
+
readonly ready: (queue: string) => Effect.Effect<void, JobWorkerNotReady>;
|
|
101
|
+
readonly permits: (consumer: JobConsumer) => Effect.Effect<Semaphore.Semaphore, JobWorkerConfigurationError>;
|
|
102
|
+
readonly claim: (queue: string) => Effect.Effect<DispatchResult, JobWorkerUnavailable>;
|
|
103
|
+
readonly recover: (limit: number) => Effect.Effect<number, JobWorkerUnavailable>;
|
|
104
|
+
}
|
|
105
|
+
export {};
|
|
106
|
+
//# sourceMappingURL=Capability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Capability.d.ts","sourceRoot":"","sources":["../../../src/internal/worker/Capability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEvD,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,EAAE,OAAO,MAAgD,CAAA;;;;AAEtF,qBAAa,oBAAqB,SAAQ,0BAAyC,EAAE,CAAC;CAAG;;;;AACzF,qBAAa,iBAAkB,SAAQ,uBAAsC,EAAE,CAAC;CAAG;;;;AACnF,qBAAa,2BAA4B,SAAQ,iCAE/C;IACA,QAAQ,CAAC,KAAK,EACV,SAAS,GACT,+BAA+B,GAC/B,UAAU,GACV,gBAAgB,CAAA;CACrB,CAAC;CAAG;AAEL,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC;IAC3C,KAAK,EAAE,EAAE,CAAA;IACT,UAAU,EAAE,EAAE,CAAA;IACd,OAAO,EAAE;QACP,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;KACtC,CAAA;CACF,CAAC,CAAA;AACF,eAAO,MAAM,eAAe;;;;;;;4BAJJ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;0BACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;;;;gCADjB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;8BACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;gCADjB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;8BACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;4BADjB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;0BACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;;;;CAGuB,CAAA;AAEhE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;IACzE,QAAQ,CAAC,OAAO,EAAE,CAChB,QAAQ,EAAE,WAAW,KAClB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAA;IACpE,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAA;IACtF,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;CACjF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Data } from "effect";
|
|
2
|
+
/** Explicit per-worker wiring; not exported as a package subpath. */
|
|
3
|
+
export const WorkerCapability = Symbol("effect-jobs/worker/capability");
|
|
4
|
+
export class JobWorkerUnavailable extends Data.TaggedError("JobWorkerUnavailable") {
|
|
5
|
+
}
|
|
6
|
+
export class JobWorkerNotReady extends Data.TaggedError("JobWorkerNotReady") {
|
|
7
|
+
}
|
|
8
|
+
export class JobWorkerConfigurationError extends Data.TaggedError("JobWorkerConfigurationError") {
|
|
9
|
+
}
|
|
10
|
+
export const DispatchResults = Data.taggedEnum();
|
|
11
|
+
//# sourceMappingURL=Capability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Capability.js","sourceRoot":"","sources":["../../../src/internal/worker/Capability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAI7B,qEAAqE;AACrE,MAAM,CAAC,MAAM,gBAAgB,GAAkB,MAAM,CAAC,+BAA+B,CAAC,CAAA;AAEtF,MAAM,OAAO,oBAAqB,SAAQ,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAK;CAAG;AACzF,MAAM,OAAO,iBAAkB,SAAQ,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAK;CAAG;AACnF,MAAM,OAAO,2BAA4B,SAAQ,IAAI,CAAC,WAAW,CAC/D,6BAA6B,CAO7B;CAAG;AAUL,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,EAAkB,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { JobWorker } from "../../JobWorker.js";
|
|
3
|
+
import type { JobConsumer } from "../../JobConsumer.js";
|
|
4
|
+
export interface DrainOptions {
|
|
5
|
+
readonly recover?: boolean;
|
|
6
|
+
/** Internal deterministic shutdown hook; never a public polling option. */
|
|
7
|
+
readonly beforeExecutionBoundary?: Effect.Effect<void>;
|
|
8
|
+
}
|
|
9
|
+
export declare const drainWithOptions: (consumer: JobConsumer, options?: DrainOptions) => Effect.Effect<{
|
|
10
|
+
readonly _tag: "Backoff";
|
|
11
|
+
readonly phase: "claim" | "recovery" | "reconciliation";
|
|
12
|
+
readonly claimed: number;
|
|
13
|
+
} | {
|
|
14
|
+
readonly _tag: "Idle";
|
|
15
|
+
readonly claimed: number;
|
|
16
|
+
readonly recovered: number;
|
|
17
|
+
} | {
|
|
18
|
+
readonly _tag: "MoreWork";
|
|
19
|
+
readonly claimed: number;
|
|
20
|
+
readonly recovered: number;
|
|
21
|
+
}, import("./Capability.js").JobWorkerConfigurationError | import("./Capability.js").JobWorkerNotReady, JobWorker>;
|
|
22
|
+
//# sourceMappingURL=Drain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Drain.d.ts","sourceRoot":"","sources":["../../../src/internal/worker/Drain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAoB,MAAM,QAAQ,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAG9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAGvD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,2EAA2E;IAC3E,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CACvD;AAED,eAAO,MAAM,gBAAgB,aAAc,WAAW,YAAW,YAAY;;;;;;;;;;;;kHAiFzE,CAAA"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Effect, Fiber, Semaphore } from "effect";
|
|
2
|
+
import { JobWorker } from "../../JobWorker.js";
|
|
3
|
+
import { WorkerCapability } from "./Capability.js";
|
|
4
|
+
import { DrainResults } from "./Results.js";
|
|
5
|
+
export const drainWithOptions = (consumer, options = {}) => Effect.gen(function* () {
|
|
6
|
+
const worker = yield* JobWorker;
|
|
7
|
+
const runtime = worker[WorkerCapability];
|
|
8
|
+
yield* runtime.ready(consumer.queue.name);
|
|
9
|
+
const permits = yield* runtime.permits(consumer);
|
|
10
|
+
const recovery = yield* (options.recover === false
|
|
11
|
+
? Effect.succeed(0)
|
|
12
|
+
: runtime.recover(consumer.recoveryLimitPerRun)).pipe(Effect.result);
|
|
13
|
+
if (recovery._tag === "Failure") {
|
|
14
|
+
return DrainResults.Backoff({ phase: "recovery", claimed: 0 });
|
|
15
|
+
}
|
|
16
|
+
return yield* Effect.scoped(Effect.gen(function* () {
|
|
17
|
+
const executions = [];
|
|
18
|
+
let claimed = 0;
|
|
19
|
+
const install = (started, restore) => Effect.gen(function* () {
|
|
20
|
+
yield* restore(options.beforeExecutionBoundary ?? Effect.void).pipe(Effect.onInterrupt(() => started.release));
|
|
21
|
+
const fiber = yield* restore(started.execution).pipe(Effect.ensuring(Semaphore.release(permits, 1)), Effect.forkScoped);
|
|
22
|
+
executions.push(fiber);
|
|
23
|
+
});
|
|
24
|
+
let terminal = "Limit";
|
|
25
|
+
for (; claimed < consumer.claimLimitPerRun; claimed++) {
|
|
26
|
+
const result = yield* Effect.uninterruptibleMask((restore) => Effect.gen(function* () {
|
|
27
|
+
yield* restore(Semaphore.take(permits, 1));
|
|
28
|
+
let transferred = false;
|
|
29
|
+
return yield* restore(runtime.claim(consumer.queue.name)).pipe(Effect.flatMap((dispatch) => {
|
|
30
|
+
if (dispatch._tag !== "Started") {
|
|
31
|
+
return Effect.succeed(dispatch._tag);
|
|
32
|
+
}
|
|
33
|
+
return install(dispatch, restore).pipe(Effect.tap(() => Effect.sync(() => {
|
|
34
|
+
transferred = true;
|
|
35
|
+
})), Effect.as("Started"));
|
|
36
|
+
}), Effect.ensuring(Effect.suspend(() => transferred ? Effect.void : Semaphore.release(permits, 1))));
|
|
37
|
+
})).pipe(Effect.result);
|
|
38
|
+
if (result._tag === "Failure") {
|
|
39
|
+
terminal = "Failed";
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
if (result.success !== "Started") {
|
|
43
|
+
terminal = result.success;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
yield* Effect.forEach(executions, Fiber.await, { discard: true });
|
|
48
|
+
if (terminal === "Failed" || terminal === "Unresolved") {
|
|
49
|
+
return DrainResults.Backoff({
|
|
50
|
+
phase: terminal === "Failed" ? "claim" : "reconciliation",
|
|
51
|
+
claimed
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return terminal === "Empty"
|
|
55
|
+
? DrainResults.Idle({ claimed, recovered: recovery.success })
|
|
56
|
+
: DrainResults.MoreWork({ claimed, recovered: recovery.success });
|
|
57
|
+
}));
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=Drain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Drain.js","sourceRoot":"","sources":["../../../src/internal/worker/Drain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAU3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAqB,EAAE,OAAO,GAAiB,EAAE,EAAE,EAAE,CACpF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,SAAS,CAAA;IAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAA;IACxC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACzC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CACtB,OAAO,CAAC,OAAO,KAAK,KAAK;QACvB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAClD,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACrB,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,YAAY,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;IAChE,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CACzB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,UAAU,GAA6B,EAAE,CAAA;QAC/C,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,MAAM,OAAO,GAAG,CACd,OAA8D,EAC9D,OAA4E,EAC5E,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CACjE,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAC1C,CAAA;YACD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAClD,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAC9C,MAAM,CAAC,UAAU,CAClB,CAAA;YACD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC,CAAC,CAAA;QACJ,IAAI,QAAQ,GAAgD,OAAO,CAAA;QACnE,OAAO,OAAO,GAAG,QAAQ,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC;YACtD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,EAAE,EAAE,CAC3D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAClB,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;gBAC1C,IAAI,WAAW,GAAG,KAAK,CAAA;gBACvB,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC5D,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC1B,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBAChC,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;oBACtC,CAAC;oBACD,OAAO,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CACpC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CACd,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;wBACf,WAAW,GAAG,IAAI,CAAA;oBACpB,CAAC,CAAC,CACH,EACD,MAAM,CAAC,EAAE,CAAC,SAAkB,CAAC,CAC9B,CAAA;gBACH,CAAC,CAAC,EACF,MAAM,CAAC,QAAQ,CACb,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAClB,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAC1D,CACF,CACF,CAAA;YACH,CAAC,CAAC,CACH,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACrB,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,QAAQ,GAAG,QAAQ,CAAA;gBACnB,MAAK;YACP,CAAC;YACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACjC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAA;gBACzB,MAAK;YACP,CAAC;QACH,CAAC;QACD,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QACjE,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YACvD,OAAO,YAAY,CAAC,OAAO,CAAC;gBAC1B,KAAK,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB;gBACzD,OAAO;aACR,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,QAAQ,KAAK,OAAO;YACzB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC7D,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;IACrE,CAAC,CAAC,CACH,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { CatalogIdentity } from "../../JobIdentity.js";
|
|
3
|
+
import type { JobHandler } from "../../JobRegistry.js";
|
|
4
|
+
import type { ClaimedJob, JobStoreService } from "../../JobStore.js";
|
|
5
|
+
/** One attempt deadline covers validation, handler and the entire bounded protocol. */
|
|
6
|
+
export declare const executionFor: <E>(store: JobStoreService<E>, claim: ClaimedJob, find: (catalog: CatalogIdentity) => JobHandler | undefined, supported: ReadonlyArray<CatalogIdentity>, responseBudgetMillis: number) => Effect.Effect<void>;
|
|
7
|
+
//# sourceMappingURL=Execution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Execution.d.ts","sourceRoot":"","sources":["../../../src/internal/worker/Execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAwB,MAAM,QAAQ,CAAA;AAE5D,OAAO,EAAE,eAAe,EAAoB,MAAM,sBAAsB,CAAA;AAUxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAuB,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAuCzF,uFAAuF;AACvF,eAAO,MAAM,YAAY,GAAI,CAAC,SACrB,eAAe,CAAC,CAAC,CAAC,SAClB,UAAU,QACX,CAAC,OAAO,EAAE,eAAe,KAAK,UAAU,GAAG,SAAS,aAC/C,aAAa,CAAC,eAAe,CAAC,wBACnB,MAAM,KAC3B,MAAM,CAAC,MAAM,CAAC,IAAI,CA4HjB,CAAA"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { Cause, Effect, Exit, Result, Schema } from "effect";
|
|
2
|
+
import { JobPayloadCodecError } from "../../JobContract.js";
|
|
3
|
+
import { CatalogIdentity, ProducerIdentity } from "../../JobIdentity.js";
|
|
4
|
+
import { JobFinalizations, JobOwnership, JobSnapshot, attemptNumber, finalizationFromFailure } from "../../JobLifecycle.js";
|
|
5
|
+
import { EpochMillis, PersistedJobPolicy } from "../../JobPolicy.js";
|
|
6
|
+
import { observe } from "../../JobTelemetry.js";
|
|
7
|
+
const PreparedMetadata = Schema.Struct({
|
|
8
|
+
catalog: CatalogIdentity,
|
|
9
|
+
producer: ProducerIdentity,
|
|
10
|
+
policy: PersistedJobPolicy,
|
|
11
|
+
availableAt: Schema.optional(EpochMillis),
|
|
12
|
+
encoded: Schema.Struct({
|
|
13
|
+
formatVersion: Schema.Literal(1),
|
|
14
|
+
payloadBytes: Schema.declare((value) => value instanceof Uint8Array),
|
|
15
|
+
semanticProjectionBytes: Schema.declare((value) => value instanceof Uint8Array)
|
|
16
|
+
})
|
|
17
|
+
});
|
|
18
|
+
const policyEquals = Schema.toEquivalence(PersistedJobPolicy);
|
|
19
|
+
const finalizationFor = (exit) => {
|
|
20
|
+
if (Exit.isSuccess(exit)) {
|
|
21
|
+
return JobFinalizations.Complete();
|
|
22
|
+
}
|
|
23
|
+
const [reason] = exit.cause.reasons;
|
|
24
|
+
if (exit.cause.reasons.length !== 1 ||
|
|
25
|
+
reason === undefined ||
|
|
26
|
+
!Cause.isFailReason(reason)) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
if (reason.error instanceof JobPayloadCodecError) {
|
|
30
|
+
return JobFinalizations.Isolate({ code: "invalid_claimed_artifact" });
|
|
31
|
+
}
|
|
32
|
+
const result = finalizationFromFailure(reason.error);
|
|
33
|
+
return Result.isSuccess(result) ? result.success : null;
|
|
34
|
+
};
|
|
35
|
+
/** One attempt deadline covers validation, handler and the entire bounded protocol. */
|
|
36
|
+
export const executionFor = (store, claim, find, supported, responseBudgetMillis) => Effect.suspend(() => {
|
|
37
|
+
const snapshot = Schema.decodeResult(JobSnapshot, { onExcessProperty: "error" })(claim.snapshot);
|
|
38
|
+
const owner = Schema.decodeResult(JobOwnership, { onExcessProperty: "error" })(claim.ownership);
|
|
39
|
+
// Without trustworthy ownership and a full durable budget no write is safe.
|
|
40
|
+
if (Result.isFailure(snapshot) || Result.isFailure(owner)) {
|
|
41
|
+
return Effect.void;
|
|
42
|
+
}
|
|
43
|
+
const before = snapshot.success;
|
|
44
|
+
const ownership = owner.success;
|
|
45
|
+
if (before.state !== "Active" ||
|
|
46
|
+
before.jobId !== ownership.jobId ||
|
|
47
|
+
before.leaseToken !== ownership.leaseToken ||
|
|
48
|
+
before.leaseExpiresAt !== ownership.leaseExpiresAt ||
|
|
49
|
+
before.lifecycleVersion !== ownership.lifecycleVersion) {
|
|
50
|
+
return Effect.void;
|
|
51
|
+
}
|
|
52
|
+
const finalize = (finalization) => {
|
|
53
|
+
const request = Object.freeze({
|
|
54
|
+
ownership: Object.freeze(ownership),
|
|
55
|
+
before: Object.freeze({
|
|
56
|
+
...before,
|
|
57
|
+
policy: Object.freeze({
|
|
58
|
+
...before.policy,
|
|
59
|
+
retrySchedule: Object.freeze({ ...before.policy.retrySchedule }),
|
|
60
|
+
completedRetention: Object.freeze({ ...before.policy.completedRetention }),
|
|
61
|
+
deadRetention: Object.freeze({ ...before.policy.deadRetention })
|
|
62
|
+
})
|
|
63
|
+
}),
|
|
64
|
+
finalization: Object.freeze(finalization)
|
|
65
|
+
});
|
|
66
|
+
const write = () => Effect.suspend(() => store.finalize(request)).pipe(Effect.timeoutOrElse({
|
|
67
|
+
duration: responseBudgetMillis,
|
|
68
|
+
orElse: () => Effect.succeed({ _tag: "Unknown" })
|
|
69
|
+
}), observe("finalize", "finalization"));
|
|
70
|
+
return Effect.gen(function* () {
|
|
71
|
+
const result = yield* write();
|
|
72
|
+
if (result._tag === "Applied") {
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
const reconciled = yield* Effect.suspend(() => store.reconcileFinalization(request)).pipe(Effect.timeout(responseBudgetMillis), observe("finalize", "reconciliation"));
|
|
76
|
+
// Only exact StillOwned proof permits ONE fenced repeat of this same
|
|
77
|
+
// transition. No second reconciliation, handler rerun or fresh ownership.
|
|
78
|
+
if (reconciled._tag === "StillOwned") {
|
|
79
|
+
return yield* write();
|
|
80
|
+
}
|
|
81
|
+
return reconciled._tag === "Applied"
|
|
82
|
+
? { _tag: "Applied" }
|
|
83
|
+
: { _tag: "Unknown" };
|
|
84
|
+
}).pipe(observe("finalize", "protocol"), Effect.ignore);
|
|
85
|
+
};
|
|
86
|
+
return Effect.gen(function* () {
|
|
87
|
+
const prepared = yield* Schema.decodeUnknownEffect(PreparedMetadata)(claim.prepared, { onExcessProperty: "error" }).pipe(Effect.result);
|
|
88
|
+
if (Result.isFailure(prepared) ||
|
|
89
|
+
!policyEquals(prepared.success.policy, before.policy)) {
|
|
90
|
+
return yield* finalize(JobFinalizations.Isolate({ code: "invalid_claimed_artifact" }));
|
|
91
|
+
}
|
|
92
|
+
const { catalog, producer, encoded } = prepared.success;
|
|
93
|
+
// A store protocol violation must not consume unsupported-version counters.
|
|
94
|
+
if (!supported.some((entry) => entry.queue === catalog.queue &&
|
|
95
|
+
entry.kind === catalog.kind &&
|
|
96
|
+
entry.version === catalog.version)) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const handler = find(catalog);
|
|
100
|
+
if (handler === undefined) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (encoded.payloadBytes.byteLength > 65_536 ||
|
|
104
|
+
encoded.semanticProjectionBytes.byteLength > 65_536) {
|
|
105
|
+
return yield* finalize(JobFinalizations.Isolate({ code: "invalid_claimed_artifact" }));
|
|
106
|
+
}
|
|
107
|
+
const context = Object.freeze({
|
|
108
|
+
jobId: before.jobId,
|
|
109
|
+
catalog: Object.freeze(catalog),
|
|
110
|
+
producer: Object.freeze(producer),
|
|
111
|
+
attemptNumber: attemptNumber(before)
|
|
112
|
+
});
|
|
113
|
+
const copied = {
|
|
114
|
+
formatVersion: encoded.formatVersion,
|
|
115
|
+
payloadBytes: new Uint8Array(encoded.payloadBytes),
|
|
116
|
+
semanticProjectionBytes: new Uint8Array(encoded.semanticProjectionBytes)
|
|
117
|
+
};
|
|
118
|
+
const exit = yield* Effect.suspend(() => handler.execute(copied, context)).pipe(observe("execute", "handler"), Effect.exit);
|
|
119
|
+
const finalization = finalizationFor(exit);
|
|
120
|
+
if (finalization !== null) {
|
|
121
|
+
yield* finalize(finalization);
|
|
122
|
+
}
|
|
123
|
+
}).pipe(Effect.timeout(before.policy.attemptTimeoutMillis), Effect.ignore);
|
|
124
|
+
});
|
|
125
|
+
//# sourceMappingURL=Execution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Execution.js","sourceRoot":"","sources":["../../../src/internal/worker/Execution.ts"],"names":[],"mappings":"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"}
|