effect-mq 0.2.0 → 0.3.1
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/README.md +182 -18
- package/dist/Job.d.ts +51 -1
- package/dist/Job.d.ts.map +1 -1
- package/dist/Job.js +52 -6
- package/dist/Job.js.map +1 -1
- package/dist/JobStore.d.ts +86 -6
- package/dist/JobStore.d.ts.map +1 -1
- package/dist/JobStore.js +27 -1
- package/dist/JobStore.js.map +1 -1
- package/dist/MemoryJobStore.d.ts +6 -5
- package/dist/MemoryJobStore.d.ts.map +1 -1
- package/dist/MemoryJobStore.js +160 -32
- package/dist/MemoryJobStore.js.map +1 -1
- package/dist/Metrics.d.ts +98 -0
- package/dist/Metrics.d.ts.map +1 -0
- package/dist/Metrics.js +124 -0
- package/dist/Metrics.js.map +1 -0
- package/dist/Worker.d.ts +6 -0
- package/dist/Worker.d.ts.map +1 -1
- package/dist/Worker.js +63 -3
- package/dist/Worker.js.map +1 -1
- package/dist/drizzle-postgres/DrizzleJobStore.d.ts +20 -3
- package/dist/drizzle-postgres/DrizzleJobStore.d.ts.map +1 -1
- package/dist/drizzle-postgres/DrizzleJobStore.js +352 -84
- package/dist/drizzle-postgres/DrizzleJobStore.js.map +1 -1
- package/dist/drizzle-postgres/schema.d.ts +255 -351
- package/dist/drizzle-postgres/schema.d.ts.map +1 -1
- package/dist/drizzle-postgres/schema.js +75 -27
- package/dist/drizzle-postgres/schema.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/redis/RedisJobStore.d.ts +4 -2
- package/dist/redis/RedisJobStore.d.ts.map +1 -1
- package/dist/redis/RedisJobStore.js +67 -28
- package/dist/redis/RedisJobStore.js.map +1 -1
- package/dist/redis/scripts.d.ts +19 -6
- package/dist/redis/scripts.d.ts.map +1 -1
- package/dist/redis/scripts.js +208 -23
- package/dist/redis/scripts.js.map +1 -1
- package/dist/testing/conformance.d.ts.map +1 -1
- package/dist/testing/conformance.js +172 -7
- package/dist/testing/conformance.js.map +1 -1
- package/package.json +1 -1
- package/src/Job.ts +128 -9
- package/src/JobStore.ts +122 -6
- package/src/MemoryJobStore.ts +184 -44
- package/src/Metrics.ts +135 -0
- package/src/Worker.ts +102 -3
- package/src/drizzle-postgres/DrizzleJobStore.ts +431 -91
- package/src/drizzle-postgres/schema.ts +177 -63
- package/src/index.ts +8 -0
- package/src/redis/RedisJobStore.ts +90 -35
- package/src/redis/scripts.ts +217 -24
- package/src/testing/conformance.ts +246 -7
package/dist/JobStore.d.ts
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
*
|
|
17
17
|
* @since 0.1.0
|
|
18
18
|
*/
|
|
19
|
-
import { Brand, Context, type Effect, type Option } from "effect";
|
|
19
|
+
import { Brand, Context, Duration, type Effect, type Option } from "effect";
|
|
20
20
|
/**
|
|
21
21
|
* The identifier of an enqueued job. Produced by `enqueue` (either
|
|
22
22
|
* store-assigned or derived from a custom id / idempotency key).
|
|
@@ -80,18 +80,65 @@ export interface BackoffPolicy {
|
|
|
80
80
|
readonly factor?: number | undefined;
|
|
81
81
|
}
|
|
82
82
|
/**
|
|
83
|
-
* Retention
|
|
84
|
-
* record. Applied by the store after terminal acks, scoped to jobs with the
|
|
85
|
-
* same name and state. Default (undefined) keeps records forever.
|
|
83
|
+
* Retention rule for one terminal state's records (per job name).
|
|
86
84
|
*
|
|
87
|
-
* @since 0.
|
|
85
|
+
* @since 0.3.0
|
|
88
86
|
*/
|
|
89
|
-
export interface
|
|
87
|
+
export interface KeepStatePolicy {
|
|
90
88
|
/** Keep at most this many terminal records (per name + state). */
|
|
91
89
|
readonly count?: number | undefined;
|
|
92
90
|
/** Remove terminal records older than this many milliseconds. */
|
|
93
91
|
readonly ageMs?: number | undefined;
|
|
94
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Retention policy persisted on the record, split by terminal state —
|
|
95
|
+
* completed jobs are usually noise, failed ones evidence. Applied by the
|
|
96
|
+
* store after terminal acks (scoped to jobs with the same name and state),
|
|
97
|
+
* and honoured by the store's periodic history sweep when one is configured.
|
|
98
|
+
* An absent state keeps its records until the store's `historyTtl` ceiling
|
|
99
|
+
* (forever without one). Producers accept a flat `{ count, age }` shorthand
|
|
100
|
+
* and normalize it to all three states before it reaches a driver.
|
|
101
|
+
*
|
|
102
|
+
* @since 0.1.0
|
|
103
|
+
*/
|
|
104
|
+
export interface KeepPolicy {
|
|
105
|
+
readonly completed?: KeepStatePolicy | undefined;
|
|
106
|
+
readonly failed?: KeepStatePolicy | undefined;
|
|
107
|
+
readonly cancelled?: KeepStatePolicy | undefined;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* The terminal states retention applies to.
|
|
111
|
+
*
|
|
112
|
+
* @since 0.3.0
|
|
113
|
+
*/
|
|
114
|
+
export type TerminalState = "completed" | "failed" | "cancelled";
|
|
115
|
+
/**
|
|
116
|
+
* Store-level retention ceiling: one duration for all terminal states, or a
|
|
117
|
+
* per-state split (an absent state is never swept by the timer).
|
|
118
|
+
*
|
|
119
|
+
* @since 0.3.0
|
|
120
|
+
*/
|
|
121
|
+
export type HistoryTtlInput = Duration.Input | {
|
|
122
|
+
readonly completed?: Duration.Input | undefined;
|
|
123
|
+
readonly failed?: Duration.Input | undefined;
|
|
124
|
+
readonly cancelled?: Duration.Input | undefined;
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* `HistoryTtlInput` normalized to milliseconds per terminal state.
|
|
128
|
+
*
|
|
129
|
+
* @since 0.3.0
|
|
130
|
+
*/
|
|
131
|
+
export interface HistoryTtlByState {
|
|
132
|
+
readonly completed?: number | undefined;
|
|
133
|
+
readonly failed?: number | undefined;
|
|
134
|
+
readonly cancelled?: number | undefined;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Normalize a `HistoryTtlInput` to milliseconds per terminal state.
|
|
138
|
+
*
|
|
139
|
+
* @internal
|
|
140
|
+
*/
|
|
141
|
+
export declare const normalizeHistoryTtl: (input: HistoryTtlInput) => HistoryTtlByState;
|
|
95
142
|
/**
|
|
96
143
|
* One run of a job, persisted so the full run history is durable and
|
|
97
144
|
* inspectable — the storage-level analogue of `tapError` before a rerun,
|
|
@@ -141,6 +188,8 @@ export interface JobRecord {
|
|
|
141
188
|
* handler on its next heartbeat and acks `Cancelled`.
|
|
142
189
|
*/
|
|
143
190
|
readonly cancelRequested: boolean;
|
|
191
|
+
/** The dedup key this job was enqueued under, if any (see `DedupePolicy`). */
|
|
192
|
+
readonly dedupeKey: string | undefined;
|
|
144
193
|
/** Epoch millis before which the job must not be claimed. */
|
|
145
194
|
readonly runAt: number;
|
|
146
195
|
readonly enqueuedAt: number;
|
|
@@ -151,6 +200,35 @@ export interface JobRecord {
|
|
|
151
200
|
/** Set when the store itself failed the job (e.g. exceeded stall limit). */
|
|
152
201
|
readonly failedReason: string | undefined;
|
|
153
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Deduplication policy carried on an enqueue request, scoped per job name.
|
|
205
|
+
* Dedup NEVER changes the job id — ids come from the caller, the idempotency
|
|
206
|
+
* key, or the store's id generator; the dedup key is a separate value with
|
|
207
|
+
* its own lifecycle:
|
|
208
|
+
*
|
|
209
|
+
* - `{ key }` (no ttl): dedupe while the keyed job is pending (waiting,
|
|
210
|
+
* delayed, or active); a terminal keyed job frees the key.
|
|
211
|
+
* - `{ key, ttlMs }`: throttle — at most one job per key per window,
|
|
212
|
+
* regardless of the keyed job's completion.
|
|
213
|
+
* - `extend` (requires `ttlMs`): each deduplicated enqueue pushes the window
|
|
214
|
+
* out (debounce).
|
|
215
|
+
* - `replace`: while the keyed job is still *delayed*, the new enqueue's
|
|
216
|
+
* payload/metadata/priority/attempts/backoff/keep/timeout/delay replace the
|
|
217
|
+
* existing job's (id and ledger preserved), and a `ttlMs` window is
|
|
218
|
+
* re-armed from the replace; in every other state normal dedup applies.
|
|
219
|
+
*
|
|
220
|
+
* A deduplicated (or replaced) enqueue returns the keyed job's id with
|
|
221
|
+
* `duplicate: true`.
|
|
222
|
+
*
|
|
223
|
+
* @since 0.3.0
|
|
224
|
+
*/
|
|
225
|
+
export interface DedupePolicy {
|
|
226
|
+
/** Non-empty; producers validate before the request reaches a driver. */
|
|
227
|
+
readonly key: string;
|
|
228
|
+
readonly ttlMs: number | undefined;
|
|
229
|
+
readonly extend: boolean;
|
|
230
|
+
readonly replace: boolean;
|
|
231
|
+
}
|
|
154
232
|
/**
|
|
155
233
|
* @since 0.1.0
|
|
156
234
|
*/
|
|
@@ -170,6 +248,8 @@ export interface EnqueueRequest {
|
|
|
170
248
|
readonly backoff: BackoffPolicy | undefined;
|
|
171
249
|
readonly keep: KeepPolicy | undefined;
|
|
172
250
|
readonly timeoutMs: number | undefined;
|
|
251
|
+
/** Deduplicate against other enqueues sharing `dedupe.key` (same name). */
|
|
252
|
+
readonly dedupe: DedupePolicy | undefined;
|
|
173
253
|
readonly delayMs: number;
|
|
174
254
|
}
|
|
175
255
|
/**
|
package/dist/JobStore.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JobStore.d.ts","sourceRoot":"","sources":["../src/JobStore.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"JobStore.d.ts","sourceRoot":"","sources":["../src/JobStore.ts"],"names":[],"mappings":"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"}
|
package/dist/JobStore.js
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
*
|
|
17
17
|
* @since 0.1.0
|
|
18
18
|
*/
|
|
19
|
-
import { Brand, Context, Cron, Data, Predicate, Result } from "effect";
|
|
19
|
+
import { Brand, Context, Cron, Data, Duration, Predicate, Result } from "effect";
|
|
20
20
|
/**
|
|
21
21
|
* Brand a raw string as a `JobId`.
|
|
22
22
|
*
|
|
@@ -35,6 +35,32 @@ export const QueueName = Brand.nominal();
|
|
|
35
35
|
* @since 0.2.0
|
|
36
36
|
*/
|
|
37
37
|
export const ScheduleKey = Brand.nominal();
|
|
38
|
+
/**
|
|
39
|
+
* Normalize a `HistoryTtlInput` to milliseconds per terminal state.
|
|
40
|
+
*
|
|
41
|
+
* @internal
|
|
42
|
+
*/
|
|
43
|
+
export const normalizeHistoryTtl = (input) => {
|
|
44
|
+
if (Predicate.isObject(input) && !Duration.isDuration(input)) {
|
|
45
|
+
if (!("completed" in input || "failed" in input || "cancelled" in input)) {
|
|
46
|
+
// {} or a DurationObject would silently normalize to a 0ms ceiling and
|
|
47
|
+
// wipe all history — refuse loudly; use "90 days"-style inputs.
|
|
48
|
+
throw new Error("effect-mq: historyTtl object must set at least one of completed/failed/cancelled");
|
|
49
|
+
}
|
|
50
|
+
// SAFETY: Duration inputs (numbers, strings, bigints, tuples, Duration
|
|
51
|
+
// instances, DurationObjects) never carry terminal-state keys, so this
|
|
52
|
+
// is the per-state split form.
|
|
53
|
+
const split = input;
|
|
54
|
+
return {
|
|
55
|
+
completed: split.completed !== undefined ? Duration.toMillis(split.completed) : undefined,
|
|
56
|
+
failed: split.failed !== undefined ? Duration.toMillis(split.failed) : undefined,
|
|
57
|
+
cancelled: split.cancelled !== undefined ? Duration.toMillis(split.cancelled) : undefined
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// SAFETY: not the split form (checked above), so a plain Duration input.
|
|
61
|
+
const ms = Duration.toMillis(input);
|
|
62
|
+
return { completed: ms, failed: ms, cancelled: ms };
|
|
63
|
+
};
|
|
38
64
|
/**
|
|
39
65
|
* A transient or fatal driver error (connection loss, serialization, etc.).
|
|
40
66
|
*
|
package/dist/JobStore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JobStore.js","sourceRoot":"","sources":["../src/JobStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAA4B,SAAS,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"JobStore.js","sourceRoot":"","sources":["../src/JobStore.ts"],"names":[],"mappings":"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"}
|
package/dist/MemoryJobStore.d.ts
CHANGED
|
@@ -11,17 +11,18 @@
|
|
|
11
11
|
* @since 0.1.0
|
|
12
12
|
*/
|
|
13
13
|
import { type Context, Duration, Effect, Layer, type Scope } from "effect";
|
|
14
|
-
import { type IdGenerator, JobStore, type Service } from "./JobStore.ts";
|
|
14
|
+
import { type HistoryTtlInput, type IdGenerator, JobStore, type Service } from "./JobStore.ts";
|
|
15
15
|
/**
|
|
16
16
|
* @since 0.2.0
|
|
17
17
|
*/
|
|
18
18
|
export interface MemoryJobStoreOptions {
|
|
19
19
|
/**
|
|
20
|
-
* Store-level retention ceiling: terminal records
|
|
21
|
-
*
|
|
22
|
-
* `
|
|
20
|
+
* Store-level retention ceiling: terminal records older than this are
|
|
21
|
+
* removed by a periodic sweep — one duration for all terminal states or a
|
|
22
|
+
* per-state split (`{ completed: "1 day", failed: "30 days" }`). The sweep
|
|
23
|
+
* also honours stricter per-job `keep.age` rules.
|
|
23
24
|
*/
|
|
24
|
-
readonly historyTtl?:
|
|
25
|
+
readonly historyTtl?: HistoryTtlInput | undefined;
|
|
25
26
|
/** Sweep cadence (default 1 minute). */
|
|
26
27
|
readonly historySweepInterval?: Duration.Input | undefined;
|
|
27
28
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryJobStore.d.ts","sourceRoot":"","sources":["../src/MemoryJobStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAS,KAAK,OAAO,EAAY,QAAQ,EAAE,MAAM,EAAQ,KAAK,EAAU,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAA;AACzG,OAAO,
|
|
1
|
+
{"version":3,"file":"MemoryJobStore.d.ts","sourceRoot":"","sources":["../src/MemoryJobStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAS,KAAK,OAAO,EAAY,QAAQ,EAAE,MAAM,EAAQ,KAAK,EAAU,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAA;AACzG,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,WAAW,EAShB,QAAQ,EASR,KAAK,OAAO,EACb,MAAM,eAAe,CAAA;AAmuBtB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,GAAG,SAAS,CAAA;IACjD,wCAAwC;IACxC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAA;IAC1D;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;CAC/C;AAED;;;;;GAKG;AACH,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAgD,CAAA;AAExF;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,aACT,qBAAqB,GAAG,SAAS,KAC1C,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAaxC,CAAA;AAEJ;;;;GAIG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAsC,CAAA;AAE9E;;;;GAIG;AACH,eAAO,MAAM,SAAS,aACV,qBAAqB,GAAG,SAAS,KAC1C,KAAK,CAAC,KAAK,CAAC,QAAQ,CAA8C,CAAA;AAErE;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,EAAE,SAClB,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,YACrB,qBAAqB,GAAG,SAAS,KAC1C,KAAK,CAAC,KAAK,CAAC,EAAE,CAA2C,CAAA"}
|
package/dist/MemoryJobStore.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* @since 0.1.0
|
|
12
12
|
*/
|
|
13
13
|
import { Clock, Deferred, Duration, Effect, Exit, Layer, Option } from "effect";
|
|
14
|
-
import { JobId, JobNotCancellableError, JobNotFoundError, JobNotPromotableError, JobNotRetryableError, JobStore, LockLostError, JobStoreError } from "./JobStore.js";
|
|
14
|
+
import { JobId, JobNotCancellableError, JobNotFoundError, JobNotPromotableError, JobNotRetryableError, JobStore, LockLostError, JobStoreError, normalizeHistoryTtl } from "./JobStore.js";
|
|
15
15
|
const TERMINAL_STATES = new Set(["completed", "failed", "cancelled"]);
|
|
16
16
|
const snapshot = (job) => ({
|
|
17
17
|
id: job.id,
|
|
@@ -28,6 +28,7 @@ const snapshot = (job) => ({
|
|
|
28
28
|
keep: job.keep,
|
|
29
29
|
timeoutMs: job.timeoutMs,
|
|
30
30
|
cancelRequested: job.cancelRequested,
|
|
31
|
+
dedupeKey: job.dedupeKey,
|
|
31
32
|
runAt: job.runAt,
|
|
32
33
|
enqueuedAt: job.enqueuedAt,
|
|
33
34
|
processedAt: job.processedAt,
|
|
@@ -46,18 +47,42 @@ const makeStoreUnsafe = (options) => {
|
|
|
46
47
|
const jobs = new Map();
|
|
47
48
|
const schedules = new Map();
|
|
48
49
|
const paused = new Set();
|
|
50
|
+
// Dedup registry: one entry per (name, key). `expiresAt` is set for
|
|
51
|
+
// ttl/throttle windows; pending-mode entries live as long as their job.
|
|
52
|
+
const dedupes = new Map();
|
|
53
|
+
const dedupeMapKey = (name, key) => `${name}\u0000${key}`;
|
|
49
54
|
let seq = 0;
|
|
50
55
|
let idCounter = 0;
|
|
51
56
|
let wakeVersion = 0;
|
|
52
|
-
let
|
|
57
|
+
let lastBroadcast = 0;
|
|
58
|
+
const lastWake = new Map();
|
|
59
|
+
const waiters = new Set();
|
|
60
|
+
const lastWakeFor = (queue) => Math.max(lastWake.get(queue) ?? 0, lastBroadcast);
|
|
53
61
|
// Synchronous on purpose: it is called inside the same synchronous block as
|
|
54
62
|
// the state mutation, so no effect-op boundary (where an interrupt could
|
|
55
|
-
// land) can separate a mutation from its wake-up signal.
|
|
56
|
-
|
|
63
|
+
// land) can separate a mutation from its wake-up signal. A queue targets
|
|
64
|
+
// only waiters watching it; no queue broadcasts (rare maintenance verbs).
|
|
65
|
+
const signalWake = (queue) => {
|
|
57
66
|
wakeVersion += 1;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
67
|
+
if (queue === undefined) {
|
|
68
|
+
lastBroadcast = wakeVersion;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
lastWake.set(queue, wakeVersion);
|
|
72
|
+
}
|
|
73
|
+
// Snapshot-and-clear BEFORE resolving: doneUnsafe resumes waiting fibers
|
|
74
|
+
// synchronously, and a woken taker that re-parks registers a NEW waiter —
|
|
75
|
+
// resolving inside the live Set iteration would visit it and livelock.
|
|
76
|
+
const toWake = [];
|
|
77
|
+
for (const waiter of waiters) {
|
|
78
|
+
if (queue === undefined || waiter.queues.has(queue)) {
|
|
79
|
+
waiters.delete(waiter);
|
|
80
|
+
toWake.push(waiter);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
for (const waiter of toWake) {
|
|
84
|
+
Deferred.doneUnsafe(waiter.deferred, Exit.succeed(void 0));
|
|
85
|
+
}
|
|
61
86
|
};
|
|
62
87
|
const promoteDue = (now) => {
|
|
63
88
|
for (const job of jobs.values()) {
|
|
@@ -79,32 +104,68 @@ const makeStoreUnsafe = (options) => {
|
|
|
79
104
|
exit
|
|
80
105
|
});
|
|
81
106
|
};
|
|
107
|
+
// A job leaving the pending states frees its pending-mode dedup entry;
|
|
108
|
+
// live throttle windows deliberately outlast the job.
|
|
109
|
+
const releaseDedupe = (job, now) => {
|
|
110
|
+
if (job.dedupeKey === undefined)
|
|
111
|
+
return;
|
|
112
|
+
const key = dedupeMapKey(job.name, job.dedupeKey);
|
|
113
|
+
const entry = dedupes.get(key);
|
|
114
|
+
if (entry !== undefined && entry.jobId === job.id &&
|
|
115
|
+
(entry.expiresAt === undefined || entry.expiresAt <= now)) {
|
|
116
|
+
dedupes.delete(key);
|
|
117
|
+
}
|
|
118
|
+
};
|
|
82
119
|
const markCancelled = (job, now) => {
|
|
83
120
|
clearLock(job);
|
|
84
121
|
job.cancelRequested = false;
|
|
85
122
|
job.state = "cancelled";
|
|
86
123
|
job.finishedAt = now;
|
|
87
124
|
recordAttempt(job, "cancelled", now, undefined);
|
|
125
|
+
releaseDedupe(job, now);
|
|
88
126
|
applyKeep(job, now);
|
|
89
127
|
};
|
|
128
|
+
const keepPolicyFor = (keep, state) => {
|
|
129
|
+
if (keep === undefined)
|
|
130
|
+
return undefined;
|
|
131
|
+
const policy = state === "completed"
|
|
132
|
+
? keep.completed
|
|
133
|
+
: state === "failed"
|
|
134
|
+
? keep.failed
|
|
135
|
+
: state === "cancelled"
|
|
136
|
+
? keep.cancelled
|
|
137
|
+
: undefined;
|
|
138
|
+
if (policy !== undefined)
|
|
139
|
+
return policy;
|
|
140
|
+
// Records persisted by 0.2.x carry the flat {count, ageMs} shape — honour
|
|
141
|
+
// it as an all-states policy so upgrades keep pruning.
|
|
142
|
+
if (keep.completed === undefined && keep.failed === undefined && keep.cancelled === undefined &&
|
|
143
|
+
("count" in keep || "ageMs" in keep)) {
|
|
144
|
+
// SAFETY: the flat legacy shape carries KeepStatePolicy fields.
|
|
145
|
+
return keep;
|
|
146
|
+
}
|
|
147
|
+
return undefined;
|
|
148
|
+
};
|
|
90
149
|
// Terminal retention: keep at most `count` and drop older than `ageMs`
|
|
91
|
-
// among terminal jobs sharing this job's name + state
|
|
150
|
+
// among terminal jobs sharing this job's name + state (policies are split
|
|
151
|
+
// per terminal state).
|
|
92
152
|
const applyKeep = (job, now) => {
|
|
93
|
-
|
|
153
|
+
const policy = keepPolicyFor(job.keep, job.state);
|
|
154
|
+
if (policy === undefined)
|
|
94
155
|
return;
|
|
95
156
|
const peers = Array.from(jobs.values())
|
|
96
157
|
.filter((peer) => peer.name === job.name && peer.state === job.state)
|
|
97
158
|
.toSorted((a, b) => ((b.finishedAt ?? 0) - (a.finishedAt ?? 0)) || (b.seq - a.seq));
|
|
98
159
|
const remove = new Set();
|
|
99
|
-
if (
|
|
160
|
+
if (policy.ageMs !== undefined) {
|
|
100
161
|
for (const peer of peers) {
|
|
101
|
-
if (peer.finishedAt !== undefined && peer.finishedAt <= now -
|
|
162
|
+
if (peer.finishedAt !== undefined && peer.finishedAt <= now - policy.ageMs) {
|
|
102
163
|
remove.add(peer.id);
|
|
103
164
|
}
|
|
104
165
|
}
|
|
105
166
|
}
|
|
106
|
-
if (
|
|
107
|
-
for (const peer of peers.slice(Math.max(0,
|
|
167
|
+
if (policy.count !== undefined) {
|
|
168
|
+
for (const peer of peers.slice(Math.max(0, policy.count))) {
|
|
108
169
|
remove.add(peer.id);
|
|
109
170
|
}
|
|
110
171
|
}
|
|
@@ -112,18 +173,75 @@ const makeStoreUnsafe = (options) => {
|
|
|
112
173
|
jobs.delete(id);
|
|
113
174
|
}
|
|
114
175
|
};
|
|
115
|
-
const sweepHistory = (now,
|
|
176
|
+
const sweepHistory = (now, ttlByState) => {
|
|
116
177
|
for (const job of jobs.values()) {
|
|
117
|
-
if (TERMINAL_STATES.has(job.state)
|
|
118
|
-
|
|
119
|
-
|
|
178
|
+
if (!TERMINAL_STATES.has(job.state) || job.finishedAt === undefined)
|
|
179
|
+
continue;
|
|
180
|
+
// SAFETY: TERMINAL_STATES membership was checked above.
|
|
181
|
+
const state = job.state;
|
|
182
|
+
const ttl = ttlByState[state];
|
|
183
|
+
const keepAge = keepPolicyFor(job.keep, state)?.ageMs;
|
|
184
|
+
// The sweep honours min(per-row keep age, store ceiling) — a quiet job
|
|
185
|
+
// name is pruned on the timer, not only when its group is acked.
|
|
186
|
+
const effective = keepAge !== undefined && (ttl === undefined || keepAge < ttl) ? keepAge : ttl;
|
|
187
|
+
if (effective !== undefined && job.finishedAt <= now - effective) {
|
|
120
188
|
jobs.delete(job.id);
|
|
121
189
|
}
|
|
122
190
|
}
|
|
191
|
+
// Dead dedup entries: expired window, or a pointer at a vanished job.
|
|
192
|
+
for (const [key, entry] of dedupes) {
|
|
193
|
+
const alive = entry.expiresAt !== undefined
|
|
194
|
+
? entry.expiresAt > now
|
|
195
|
+
: jobs.has(entry.jobId) && !TERMINAL_STATES.has(jobs.get(entry.jobId)?.state ?? "completed");
|
|
196
|
+
if (!alive)
|
|
197
|
+
dedupes.delete(key);
|
|
198
|
+
}
|
|
123
199
|
};
|
|
124
200
|
const service = JobStore.of({
|
|
125
201
|
enqueue: (request) => Effect.gen(function* () {
|
|
126
202
|
const now = yield* Clock.currentTimeMillis;
|
|
203
|
+
if (request.id !== undefined && jobs.has(request.id)) {
|
|
204
|
+
return { id: request.id, duplicate: true };
|
|
205
|
+
}
|
|
206
|
+
// The dedup decision tree runs BEFORE id generation, so a
|
|
207
|
+
// deduplicated enqueue never consults the id generator.
|
|
208
|
+
if (request.dedupe !== undefined) {
|
|
209
|
+
const mapKey = dedupeMapKey(request.name, request.dedupe.key);
|
|
210
|
+
const entry = dedupes.get(mapKey);
|
|
211
|
+
if (entry !== undefined) {
|
|
212
|
+
const keyed = jobs.get(entry.jobId);
|
|
213
|
+
const windowLive = entry.expiresAt !== undefined && now < entry.expiresAt;
|
|
214
|
+
// Latest-wins while the keyed job is still delayed.
|
|
215
|
+
if (request.dedupe.replace && keyed !== undefined && keyed.state === "delayed") {
|
|
216
|
+
keyed.payload = request.payload;
|
|
217
|
+
keyed.metadata = request.metadata;
|
|
218
|
+
keyed.priority = request.priority;
|
|
219
|
+
keyed.attemptsMax = request.attemptsMax;
|
|
220
|
+
keyed.backoff = request.backoff;
|
|
221
|
+
keyed.keep = request.keep;
|
|
222
|
+
keyed.timeoutMs = request.timeoutMs;
|
|
223
|
+
keyed.runAt = now + Math.max(0, request.delayMs);
|
|
224
|
+
// A landed replace re-arms the ttl window.
|
|
225
|
+
if (request.dedupe.ttlMs !== undefined) {
|
|
226
|
+
entry.expiresAt = now + request.dedupe.ttlMs;
|
|
227
|
+
}
|
|
228
|
+
signalWake(keyed.queue);
|
|
229
|
+
return { id: keyed.id, duplicate: true };
|
|
230
|
+
}
|
|
231
|
+
if (windowLive) {
|
|
232
|
+
if (request.dedupe.extend && request.dedupe.ttlMs !== undefined) {
|
|
233
|
+
entry.expiresAt = now + request.dedupe.ttlMs;
|
|
234
|
+
}
|
|
235
|
+
return { id: entry.jobId, duplicate: true };
|
|
236
|
+
}
|
|
237
|
+
const pending = keyed !== undefined && !TERMINAL_STATES.has(keyed.state);
|
|
238
|
+
if (entry.expiresAt === undefined && pending) {
|
|
239
|
+
return { id: entry.jobId, duplicate: true };
|
|
240
|
+
}
|
|
241
|
+
// Dead entry (expired window / finished job): fall through and
|
|
242
|
+
// let the new job take over the key below.
|
|
243
|
+
}
|
|
244
|
+
}
|
|
127
245
|
let id = request.id;
|
|
128
246
|
if (id === undefined) {
|
|
129
247
|
const generate = options?.idGenerator;
|
|
@@ -150,9 +268,6 @@ const makeStoreUnsafe = (options) => {
|
|
|
150
268
|
}
|
|
151
269
|
}
|
|
152
270
|
}
|
|
153
|
-
else if (jobs.has(id)) {
|
|
154
|
-
return { id, duplicate: true };
|
|
155
|
-
}
|
|
156
271
|
jobs.set(id, {
|
|
157
272
|
id,
|
|
158
273
|
name: request.name,
|
|
@@ -168,6 +283,7 @@ const makeStoreUnsafe = (options) => {
|
|
|
168
283
|
keep: request.keep,
|
|
169
284
|
timeoutMs: request.timeoutMs,
|
|
170
285
|
cancelRequested: false,
|
|
286
|
+
dedupeKey: request.dedupe?.key,
|
|
171
287
|
runAt: now + Math.max(0, request.delayMs),
|
|
172
288
|
enqueuedAt: now,
|
|
173
289
|
processedAt: undefined,
|
|
@@ -179,7 +295,13 @@ const makeStoreUnsafe = (options) => {
|
|
|
179
295
|
lockToken: undefined,
|
|
180
296
|
lockExpiresAt: undefined
|
|
181
297
|
});
|
|
182
|
-
|
|
298
|
+
if (request.dedupe !== undefined) {
|
|
299
|
+
dedupes.set(dedupeMapKey(request.name, request.dedupe.key), {
|
|
300
|
+
jobId: id,
|
|
301
|
+
expiresAt: request.dedupe.ttlMs !== undefined ? now + request.dedupe.ttlMs : undefined
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
signalWake(request.queue);
|
|
183
305
|
return { id, duplicate: false };
|
|
184
306
|
}),
|
|
185
307
|
claim: (options) => Effect.gen(function* () {
|
|
@@ -233,6 +355,7 @@ const makeStoreUnsafe = (options) => {
|
|
|
233
355
|
job.exit = outcome.exit;
|
|
234
356
|
job.finishedAt = now;
|
|
235
357
|
recordAttempt(job, "completed", now, outcome.exit);
|
|
358
|
+
releaseDedupe(job, now);
|
|
236
359
|
applyKeep(job, now);
|
|
237
360
|
break;
|
|
238
361
|
}
|
|
@@ -242,6 +365,7 @@ const makeStoreUnsafe = (options) => {
|
|
|
242
365
|
job.exit = outcome.exit;
|
|
243
366
|
job.finishedAt = now;
|
|
244
367
|
recordAttempt(job, "failed", now, outcome.exit);
|
|
368
|
+
releaseDedupe(job, now);
|
|
245
369
|
applyKeep(job, now);
|
|
246
370
|
break;
|
|
247
371
|
}
|
|
@@ -250,6 +374,7 @@ const makeStoreUnsafe = (options) => {
|
|
|
250
374
|
job.state = "cancelled";
|
|
251
375
|
job.finishedAt = now;
|
|
252
376
|
recordAttempt(job, "cancelled", now, undefined);
|
|
377
|
+
releaseDedupe(job, now);
|
|
253
378
|
applyKeep(job, now);
|
|
254
379
|
break;
|
|
255
380
|
}
|
|
@@ -265,7 +390,7 @@ const makeStoreUnsafe = (options) => {
|
|
|
265
390
|
job.runAt = now + Math.max(0, outcome.delayMs);
|
|
266
391
|
job.state = outcome.delayMs > 0 ? "delayed" : "waiting";
|
|
267
392
|
job.seq = ++seq;
|
|
268
|
-
signalWake();
|
|
393
|
+
signalWake(job.queue);
|
|
269
394
|
break;
|
|
270
395
|
}
|
|
271
396
|
}
|
|
@@ -287,7 +412,7 @@ const makeStoreUnsafe = (options) => {
|
|
|
287
412
|
}
|
|
288
413
|
clearLock(job);
|
|
289
414
|
job.state = "waiting";
|
|
290
|
-
signalWake();
|
|
415
|
+
signalWake(job.queue);
|
|
291
416
|
}),
|
|
292
417
|
extendLocks: (locks, durationMs) => Effect.gen(function* () {
|
|
293
418
|
const now = yield* Clock.currentTimeMillis;
|
|
@@ -331,6 +456,7 @@ const makeStoreUnsafe = (options) => {
|
|
|
331
456
|
job.state = "failed";
|
|
332
457
|
job.finishedAt = now;
|
|
333
458
|
job.failedReason = "job stalled more than allowable limit";
|
|
459
|
+
releaseDedupe(job, now);
|
|
334
460
|
recovered.push({ id: job.id, failed: true });
|
|
335
461
|
}
|
|
336
462
|
else {
|
|
@@ -343,10 +469,12 @@ const makeStoreUnsafe = (options) => {
|
|
|
343
469
|
}
|
|
344
470
|
return recovered;
|
|
345
471
|
}),
|
|
346
|
-
awaitWake: (
|
|
347
|
-
if (
|
|
472
|
+
awaitWake: (queues, wakeToken) => Effect.suspend(() => {
|
|
473
|
+
if (queues.some((queue) => lastWakeFor(queue) > wakeToken))
|
|
348
474
|
return Effect.void;
|
|
349
|
-
|
|
475
|
+
const waiter = { queues: new Set(queues), deferred: Deferred.makeUnsafe() };
|
|
476
|
+
waiters.add(waiter);
|
|
477
|
+
return Deferred.await(waiter.deferred).pipe(Effect.ensuring(Effect.sync(() => waiters.delete(waiter))));
|
|
350
478
|
}),
|
|
351
479
|
getJob: (id) => Effect.sync(() => {
|
|
352
480
|
const job = jobs.get(id);
|
|
@@ -412,7 +540,7 @@ const makeStoreUnsafe = (options) => {
|
|
|
412
540
|
job.processedAt = undefined;
|
|
413
541
|
job.runAt = now;
|
|
414
542
|
job.seq = ++seq;
|
|
415
|
-
signalWake();
|
|
543
|
+
signalWake(job.queue);
|
|
416
544
|
}),
|
|
417
545
|
cancel: (id) => Effect.gen(function* () {
|
|
418
546
|
const now = yield* Clock.currentTimeMillis;
|
|
@@ -446,14 +574,14 @@ const makeStoreUnsafe = (options) => {
|
|
|
446
574
|
}
|
|
447
575
|
job.state = "waiting";
|
|
448
576
|
job.runAt = now;
|
|
449
|
-
signalWake();
|
|
577
|
+
signalWake(job.queue);
|
|
450
578
|
}),
|
|
451
579
|
pause: (queue) => Effect.sync(() => {
|
|
452
580
|
paused.add(queue);
|
|
453
581
|
}),
|
|
454
582
|
resume: (queue) => Effect.sync(() => {
|
|
455
583
|
if (paused.delete(queue)) {
|
|
456
|
-
signalWake();
|
|
584
|
+
signalWake(queue);
|
|
457
585
|
}
|
|
458
586
|
}),
|
|
459
587
|
pausedQueues: () => Effect.sync(() => Array.from(paused)),
|
|
@@ -467,7 +595,7 @@ const makeStoreUnsafe = (options) => {
|
|
|
467
595
|
existing.tz === schedule.tz &&
|
|
468
596
|
existing.everyMs === schedule.everyMs;
|
|
469
597
|
schedules.set(schedule.key, sameCadence ? { ...schedule, nextRunAt: existing.nextRunAt } : schedule);
|
|
470
|
-
signalWake();
|
|
598
|
+
signalWake(schedule.queue);
|
|
471
599
|
}),
|
|
472
600
|
removeSchedule: (key) => Effect.sync(() => schedules.delete(key)),
|
|
473
601
|
listSchedules: (options) => Effect.sync(() => Array.from(schedules.values()).filter((schedule) => (options?.jobName === undefined || schedule.jobName === options.jobName) &&
|
|
@@ -526,12 +654,12 @@ export const make = Effect.sync(() => makeStoreUnsafe().service);
|
|
|
526
654
|
export const makeWith = (options) => Effect.gen(function* () {
|
|
527
655
|
const { service, sweepHistory } = makeStoreUnsafe(options);
|
|
528
656
|
if (options?.historyTtl !== undefined) {
|
|
529
|
-
const
|
|
657
|
+
const ttlByState = normalizeHistoryTtl(options.historyTtl);
|
|
530
658
|
const intervalMs = Duration.toMillis(options.historySweepInterval ?? "1 minute");
|
|
531
659
|
yield* Effect.gen(function* () {
|
|
532
660
|
yield* Effect.sleep(intervalMs);
|
|
533
661
|
const now = yield* Clock.currentTimeMillis;
|
|
534
|
-
sweepHistory(now,
|
|
662
|
+
sweepHistory(now, ttlByState);
|
|
535
663
|
}).pipe(Effect.forever, Effect.forkScoped);
|
|
536
664
|
}
|
|
537
665
|
return service;
|