effect-mq 0.1.0 → 0.2.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.
Files changed (62) hide show
  1. package/README.md +167 -22
  2. package/dist/Job.d.ts +67 -4
  3. package/dist/Job.d.ts.map +1 -1
  4. package/dist/Job.js +76 -3
  5. package/dist/Job.js.map +1 -1
  6. package/dist/JobStore.d.ts +174 -3
  7. package/dist/JobStore.d.ts.map +1 -1
  8. package/dist/JobStore.js +89 -1
  9. package/dist/JobStore.js.map +1 -1
  10. package/dist/MemoryJobStore.d.ts +37 -6
  11. package/dist/MemoryJobStore.d.ts.map +1 -1
  12. package/dist/MemoryJobStore.js +201 -25
  13. package/dist/MemoryJobStore.js.map +1 -1
  14. package/dist/Worker.d.ts +5 -1
  15. package/dist/Worker.d.ts.map +1 -1
  16. package/dist/Worker.js +116 -10
  17. package/dist/Worker.js.map +1 -1
  18. package/dist/{drizzle → drizzle-postgres}/DrizzleJobStore.d.ts +18 -2
  19. package/dist/drizzle-postgres/DrizzleJobStore.d.ts.map +1 -0
  20. package/dist/{drizzle → drizzle-postgres}/DrizzleJobStore.js +287 -40
  21. package/dist/drizzle-postgres/DrizzleJobStore.js.map +1 -0
  22. package/dist/drizzle-postgres/index.d.ts.map +1 -0
  23. package/dist/drizzle-postgres/index.js.map +1 -0
  24. package/dist/{drizzle → drizzle-postgres}/schema.d.ts +306 -4
  25. package/dist/drizzle-postgres/schema.d.ts.map +1 -0
  26. package/dist/{drizzle → drizzle-postgres}/schema.js +36 -2
  27. package/dist/drizzle-postgres/schema.js.map +1 -0
  28. package/dist/redis/RedisJobStore.d.ts +56 -0
  29. package/dist/redis/RedisJobStore.d.ts.map +1 -0
  30. package/dist/redis/RedisJobStore.js +385 -0
  31. package/dist/redis/RedisJobStore.js.map +1 -0
  32. package/dist/redis/index.d.ts +9 -0
  33. package/dist/redis/index.d.ts.map +1 -0
  34. package/dist/redis/index.js +9 -0
  35. package/dist/redis/index.js.map +1 -0
  36. package/dist/redis/scripts.d.ts +168 -0
  37. package/dist/redis/scripts.d.ts.map +1 -0
  38. package/dist/redis/scripts.js +755 -0
  39. package/dist/redis/scripts.js.map +1 -0
  40. package/dist/testing/conformance.d.ts.map +1 -1
  41. package/dist/testing/conformance.js +332 -3
  42. package/dist/testing/conformance.js.map +1 -1
  43. package/package.json +8 -4
  44. package/src/Job.ts +189 -5
  45. package/src/JobStore.ts +252 -4
  46. package/src/MemoryJobStore.ts +273 -26
  47. package/src/Worker.ts +152 -10
  48. package/src/{drizzle → drizzle-postgres}/DrizzleJobStore.ts +412 -40
  49. package/src/{drizzle → drizzle-postgres}/schema.ts +52 -3
  50. package/src/redis/RedisJobStore.ts +597 -0
  51. package/src/redis/index.ts +8 -0
  52. package/src/redis/scripts.ts +862 -0
  53. package/src/testing/conformance.ts +421 -3
  54. package/dist/drizzle/DrizzleJobStore.d.ts.map +0 -1
  55. package/dist/drizzle/DrizzleJobStore.js.map +0 -1
  56. package/dist/drizzle/index.d.ts.map +0 -1
  57. package/dist/drizzle/index.js.map +0 -1
  58. package/dist/drizzle/schema.d.ts.map +0 -1
  59. package/dist/drizzle/schema.js.map +0 -1
  60. /package/dist/{drizzle → drizzle-postgres}/index.d.ts +0 -0
  61. /package/dist/{drizzle → drizzle-postgres}/index.js +0 -0
  62. /package/src/{drizzle → drizzle-postgres}/index.ts +0 -0
@@ -20,10 +20,26 @@ import * as JobStore from "../JobStore.js";
20
20
  import { asc, eq, sql } from "drizzle-orm";
21
21
  import * as PgDrizzle from "drizzle-orm/effect-postgres";
22
22
  import { getTableConfig } from "drizzle-orm/pg-core";
23
- import { Clock, Deferred, Effect, Layer, Option, Stream } from "effect";
23
+ import { Clock, Deferred, Duration, Effect, Layer, Option, Stream } from "effect";
24
24
  const { JobId } = JobStore;
25
25
  const storeError = (message) => (cause) => new JobStore.JobStoreError({ message, cause });
26
26
  const rowsOf = (result) => "rows" in result ? result.rows : result;
27
+ const toSchedule = (row) => ({
28
+ key: JobStore.ScheduleKey(row.key),
29
+ jobName: row.jobName,
30
+ queue: JobStore.QueueName(row.queue),
31
+ cron: row.cron ?? undefined,
32
+ tz: row.tz ?? undefined,
33
+ everyMs: row.everyMs === null ? undefined : Number(row.everyMs),
34
+ payload: row.payload,
35
+ metadata: row.metadata ?? {},
36
+ priority: row.priority,
37
+ attemptsMax: row.attemptsMax,
38
+ backoff: row.backoff ?? undefined,
39
+ keep: row.keep ?? undefined,
40
+ timeoutMs: row.timeoutMs === null ? undefined : Number(row.timeoutMs),
41
+ nextRunAt: row.nextRunAt.getTime()
42
+ });
27
43
  const toRecord = (row) => ({
28
44
  id: JobId(row.id),
29
45
  name: row.name,
@@ -37,6 +53,8 @@ const toRecord = (row) => ({
37
53
  stalledCount: row.stalledCount,
38
54
  backoff: row.backoff ?? undefined,
39
55
  keep: row.keep ?? undefined,
56
+ timeoutMs: row.timeoutMs === null || row.timeoutMs === undefined ? undefined : Number(row.timeoutMs),
57
+ cancelRequested: row.cancelRequested,
40
58
  runAt: row.runAt.getTime(),
41
59
  enqueuedAt: row.enqueuedAt.getTime(),
42
60
  processedAt: row.processedAt?.getTime(),
@@ -55,13 +73,17 @@ export const make = (options) => Effect.gen(function* () {
55
73
  const client = db.$client;
56
74
  const jobs = options.jobs;
57
75
  const attempts = options.attempts;
76
+ const schedules = options.schedules;
77
+ const queues = options.queues;
58
78
  const jobsName = getTableConfig(jobs).name;
59
79
  const attemptsName = getTableConfig(attempts).name;
60
80
  const wakeChannel = `effect_mq_wake_${jobsName}`;
61
81
  if (options.validate ?? true) {
62
82
  yield* Effect.all([
63
83
  db.select({ id: jobs.id }).from(jobs).limit(0),
64
- db.select({ jobId: attempts.jobId }).from(attempts).limit(0)
84
+ db.select({ jobId: attempts.jobId }).from(attempts).limit(0),
85
+ db.select({ key: schedules.key }).from(schedules).limit(0),
86
+ db.select({ queue: queues.queue }).from(queues).limit(0)
65
87
  ]).pipe(Effect.mapError(storeError(`effect-mq: tables "${jobsName}"/"${attemptsName}" are missing or mismatched — ` +
66
88
  `re-export the effect-mq/drizzle schema factories from your drizzle schema and run your migrations (drizzle-kit generate)`)));
67
89
  }
@@ -79,6 +101,19 @@ export const make = (options) => Effect.gen(function* () {
79
101
  // Resubscribe forever: if the LISTEN stream ends or fails, wake-ups
80
102
  // degrade to the worker's pollInterval until the next attempt succeeds.
81
103
  yield* client.listen(wakeChannel).pipe(Stream.runForEach(() => Effect.sync(signalWake)), Effect.catchCause((cause) => Effect.logWarning("effect-mq: LISTEN subscription failed; wake-ups degraded to polling until resubscribe", cause)), Effect.andThen(Effect.sleep("1 second")), Effect.forever, Effect.forkScoped);
104
+ if (options.historyTtl !== undefined) {
105
+ const ttlMs = Duration.toMillis(options.historyTtl);
106
+ const sweepMs = Duration.toMillis(options.historySweepInterval ?? "1 minute");
107
+ yield* Effect.gen(function* () {
108
+ yield* Effect.sleep(sweepMs);
109
+ const now = yield* nowDate;
110
+ yield* db.execute(sql `
111
+ DELETE FROM ${jobs}
112
+ WHERE ${jobs.state} IN ('completed', 'failed', 'cancelled')
113
+ AND ${jobs.finishedAt} <= ${new Date(now.getTime() - ttlMs)}
114
+ `);
115
+ }).pipe(Effect.catchCause((cause) => Effect.logWarning("effect-mq: history sweep failed", cause)), Effect.forever, Effect.forkScoped);
116
+ }
82
117
  // Local mutation wake-up: bump synchronously, then best-effort NOTIFY so
83
118
  // workers in other processes wake promptly too.
84
119
  const wakeUp = Effect.suspend(() => {
@@ -129,21 +164,31 @@ export const make = (options) => Effect.gen(function* () {
129
164
  const now = yield* nowDate;
130
165
  const runAt = new Date(now.getTime() + Math.max(0, request.delayMs));
131
166
  const state = request.delayMs > 0 ? "delayed" : "waiting";
132
- // Store-assigned ids come from the seq sequence; loop on the
133
- // (unlikely) collision with a user-supplied id.
167
+ // Store-assigned ids come from the configured generator (or the
168
+ // seq sequence); loop on the (unlikely) collision with an existing
169
+ // id — ON CONFLICT DO NOTHING makes the retry safe.
170
+ const generate = options.idGenerator;
134
171
  for (let i = 0; i < 5; i++) {
172
+ const generated = request.id === undefined && generate !== undefined
173
+ ? yield* Effect.suspend(() => {
174
+ const raw = generate(request);
175
+ return Effect.isEffect(raw) ? raw : Effect.succeed(raw);
176
+ })
177
+ : undefined;
135
178
  const idExpr = request.id !== undefined
136
179
  ? sql `${request.id}`
137
- : sql `'j-' || ${seqExpr}::text`;
180
+ : generated !== undefined
181
+ ? sql `${generated}`
182
+ : sql `'j-' || ${seqExpr}::text`;
138
183
  const rows = rowsOf(yield* db.execute(sql `
139
184
  INSERT INTO ${jobs} (id, name, queue, state, priority, payload, metadata,
140
- attempts_max, backoff, keep, run_at, enqueued_at)
185
+ attempts_max, backoff, keep, timeout_ms, run_at, enqueued_at)
141
186
  VALUES (${idExpr}, ${request.name}, ${request.queue}, ${state}, ${request.priority},
142
187
  ${JSON.stringify(request.payload ?? null)}::jsonb, ${JSON.stringify(request.metadata)}::jsonb,
143
188
  ${request.attemptsMax},
144
189
  ${request.backoff === undefined ? null : JSON.stringify(request.backoff)}::jsonb,
145
190
  ${request.keep === undefined ? null : JSON.stringify(request.keep)}::jsonb,
146
- ${runAt}, ${now})
191
+ ${request.timeoutMs ?? null}, ${runAt}, ${now})
147
192
  ON CONFLICT (id) DO NOTHING
148
193
  RETURNING ${jobs.id} AS id
149
194
  `).pipe(Effect.mapError(storeError("enqueue failed"))));
@@ -175,7 +220,12 @@ export const make = (options) => Effect.gen(function* () {
175
220
  WHERE ${jobs.queue} = ${claimOptions.queue} AND ${jobs.state} = 'delayed'
176
221
  AND ${jobs.runAt} <= ${now}
177
222
  `);
178
- const claimed = rowsOf(yield* tx.execute(sql `
223
+ const pausedRows = rowsOf(yield* tx.execute(sql `
224
+ SELECT ${queues.paused} AS "paused" FROM ${queues}
225
+ WHERE ${queues.queue} = ${claimOptions.queue}
226
+ `));
227
+ const isPaused = pausedRows[0]?.paused === true;
228
+ const claimed = isPaused ? [] : rowsOf(yield* tx.execute(sql `
179
229
  WITH candidate AS (
180
230
  SELECT ${jobs.id} AS id FROM ${jobs}
181
231
  WHERE ${jobs.queue} = ${claimOptions.queue} AND ${jobs.state} = 'waiting'
@@ -193,7 +243,9 @@ export const make = (options) => Effect.gen(function* () {
193
243
  ${jobs.payload} AS "payload", ${jobs.metadata} AS "metadata",
194
244
  ${jobs.attemptsMax} AS "attemptsMax", ${jobs.attemptsMade} AS "attemptsMade",
195
245
  ${jobs.stalledCount} AS "stalledCount", ${jobs.backoff} AS "backoff",
196
- ${jobs.keep} AS "keep", ${jobs.runAt} AS "runAt", ${jobs.enqueuedAt} AS "enqueuedAt",
246
+ ${jobs.keep} AS "keep", ${jobs.timeoutMs} AS "timeoutMs",
247
+ ${jobs.cancelRequested} AS "cancelRequested",
248
+ ${jobs.runAt} AS "runAt", ${jobs.enqueuedAt} AS "enqueuedAt",
197
249
  ${jobs.processedAt} AS "processedAt", ${jobs.finishedAt} AS "finishedAt",
198
250
  ${jobs.exit} AS "exit", ${jobs.failedReason} AS "failedReason"
199
251
  `));
@@ -218,12 +270,20 @@ export const make = (options) => Effect.gen(function* () {
218
270
  ack: (id, token, outcome) => db.transaction((tx) => Effect.gen(function* () {
219
271
  const now = yield* nowDate;
220
272
  const update = outcome._tag === "Complete"
221
- ? sql `state = 'completed', exit = ${JSON.stringify(outcome.exit ?? null)}::jsonb, finished_at = ${now}`
273
+ ? sql `state = 'completed', cancel_requested = FALSE, exit = ${JSON.stringify(outcome.exit ?? null)}::jsonb, finished_at = ${now}`
222
274
  : outcome._tag === "Fail"
223
- ? sql `state = 'failed', exit = ${JSON.stringify(outcome.exit ?? null)}::jsonb, finished_at = ${now}`
224
- : sql `state = ${outcome.delayMs > 0 ? "delayed" : "waiting"},
225
- run_at = ${new Date(now.getTime() + Math.max(0, outcome.delayMs))},
226
- seq = ${seqExpr}`;
275
+ ? sql `state = 'failed', cancel_requested = FALSE, exit = ${JSON.stringify(outcome.exit ?? null)}::jsonb, finished_at = ${now}`
276
+ : outcome._tag === "Cancelled"
277
+ ? sql `state = 'cancelled', cancel_requested = FALSE, finished_at = ${now}`
278
+ // A cancel that raced this natural failure wins over revival
279
+ // (mirrors release/recoverStalled).
280
+ : sql `state = CASE WHEN ${jobs.cancelRequested} THEN 'cancelled'
281
+ ELSE ${outcome.delayMs > 0 ? "delayed" : "waiting"} END,
282
+ finished_at = CASE WHEN ${jobs.cancelRequested} THEN ${now}::timestamptz ELSE NULL END,
283
+ run_at = CASE WHEN ${jobs.cancelRequested} THEN ${jobs.runAt}
284
+ ELSE ${new Date(now.getTime() + Math.max(0, outcome.delayMs))}::timestamptz END,
285
+ seq = CASE WHEN ${jobs.cancelRequested} THEN ${jobs.seq} ELSE ${seqExpr} END,
286
+ cancel_requested = FALSE`;
227
287
  const rows = rowsOf(yield* tx.execute(sql `
228
288
  UPDATE ${jobs} SET ${update},
229
289
  attempts_made = ${jobs.attemptsMade} + 1, lock_token = NULL, lock_expires_at = NULL
@@ -235,13 +295,16 @@ export const make = (options) => Effect.gen(function* () {
235
295
  if (row === undefined) {
236
296
  return yield* explainMiss(id);
237
297
  }
298
+ const cancelledRetry = outcome._tag === "Retry" && row.state === "cancelled";
238
299
  const ledgerOutcome = outcome._tag === "Complete"
239
300
  ? "completed"
240
301
  : outcome._tag === "Fail"
241
302
  ? "failed"
242
- : "retried";
243
- yield* insertAttempt(tx, id, ledgerOutcome, row.processedAt, now, outcome.exit);
244
- if (outcome._tag !== "Retry") {
303
+ : outcome._tag === "Cancelled" || cancelledRetry
304
+ ? "cancelled"
305
+ : "retried";
306
+ yield* insertAttempt(tx, id, ledgerOutcome, row.processedAt, now, outcome._tag === "Cancelled" || cancelledRetry ? undefined : outcome.exit);
307
+ if (outcome._tag !== "Retry" || cancelledRetry) {
245
308
  yield* applyKeep(tx, row, now);
246
309
  }
247
310
  })).pipe(Effect.mapError((error) => error instanceof JobStore.JobNotFoundError || error instanceof JobStore.LockLostError ||
@@ -249,19 +312,41 @@ export const make = (options) => Effect.gen(function* () {
249
312
  ? error
250
313
  : storeError("ack failed")(error)), Effect.tap(() => outcome._tag === "Retry" ? wakeUp : Effect.void)),
251
314
  release: (id, token) => Effect.gen(function* () {
252
- const rows = rowsOf(yield* db.execute(sql `
253
- UPDATE ${jobs} SET state = 'waiting', lock_token = NULL, lock_expires_at = NULL
254
- WHERE ${jobs.id} = ${id} AND ${jobs.state} = 'active' AND ${jobs.lockToken} = ${token}
255
- RETURNING ${jobs.id} AS id
256
- `).pipe(Effect.mapError(storeError("release failed"))));
257
- if (rows.length === 0) {
315
+ const cancelled = yield* db.transaction((tx) => Effect.gen(function* () {
316
+ const now = yield* nowDate;
317
+ // A cancel that arrived while the worker was shutting down is
318
+ // honoured instead of reviving the job.
319
+ const rows = rowsOf(yield* tx.execute(sql `
320
+ UPDATE ${jobs} SET
321
+ state = CASE WHEN ${jobs.cancelRequested} THEN 'cancelled' ELSE 'waiting' END,
322
+ finished_at = CASE WHEN ${jobs.cancelRequested} THEN ${now}::timestamptz ELSE NULL END,
323
+ cancel_requested = FALSE,
324
+ lock_token = NULL, lock_expires_at = NULL
325
+ WHERE ${jobs.id} = ${id} AND ${jobs.state} = 'active' AND ${jobs.lockToken} = ${token}
326
+ RETURNING ${jobs.id} AS id, (${jobs.state} = 'cancelled') AS cancelled,
327
+ ${jobs.processedAt} AS "processedAt", ${jobs.name} AS "name", ${jobs.keep} AS "keep"
328
+ `));
329
+ const row = rows[0];
330
+ if (row === undefined)
331
+ return undefined;
332
+ if (row.cancelled) {
333
+ yield* insertAttempt(tx, id, "cancelled", row.processedAt, now, undefined);
334
+ yield* applyKeep(tx, { name: row.name, state: "cancelled", keep: row.keep }, now);
335
+ }
336
+ return row.cancelled;
337
+ })).pipe(Effect.mapError((error) => error instanceof JobStore.JobStoreError ? error : storeError("release failed")(error)));
338
+ if (cancelled === undefined) {
258
339
  return yield* explainMiss(id);
259
340
  }
260
- yield* wakeUp;
341
+ if (!cancelled) {
342
+ yield* wakeUp;
343
+ }
261
344
  }),
262
345
  extendLocks: (locks, durationMs) => Effect.gen(function* () {
263
- if (locks.length === 0)
264
- return [];
346
+ if (locks.length === 0) {
347
+ const empty = { lost: [], cancelRequested: [] };
348
+ return empty;
349
+ }
265
350
  const now = yield* nowDate;
266
351
  const rows = rowsOf(yield* db.execute(sql `
267
352
  WITH input AS (
@@ -272,34 +357,61 @@ export const make = (options) => Effect.gen(function* () {
272
357
  updated AS (
273
358
  UPDATE ${jobs} SET lock_expires_at = ${new Date(now.getTime() + durationMs)}
274
359
  FROM input
275
- WHERE ${jobs.id} = input.job_id AND ${jobs.state} = 'active' AND ${jobs.lockToken} = input.token
360
+ WHERE ${jobs.id} = input.job_id AND ${jobs.state} = 'active'
361
+ AND ${jobs.lockToken} = input.token AND ${jobs.cancelRequested} = FALSE
276
362
  RETURNING ${jobs.id} AS id
277
363
  )
278
- SELECT input.job_id AS id FROM input
364
+ SELECT input.job_id AS id,
365
+ CASE WHEN ${jobs.id} IS NOT NULL AND ${jobs.state} = 'active'
366
+ AND ${jobs.lockToken} = input.token AND ${jobs.cancelRequested} THEN 'cancel'
367
+ ELSE 'lost' END AS status
368
+ FROM input
279
369
  LEFT JOIN updated ON updated.id = input.job_id
370
+ LEFT JOIN ${jobs} ON ${jobs.id} = input.job_id
280
371
  WHERE updated.id IS NULL
281
372
  `).pipe(Effect.mapError(storeError("extendLocks failed"))));
282
- return rows.map((row) => JobId(row.id));
373
+ const result = {
374
+ lost: rows.filter((row) => row.status === "lost").map((row) => JobId(row.id)),
375
+ cancelRequested: rows.filter((row) => row.status === "cancel").map((row) => JobId(row.id))
376
+ };
377
+ return result;
283
378
  }),
284
379
  recoverStalled: (recoverOptions) => db.transaction((tx) => Effect.gen(function* () {
285
380
  const now = yield* nowDate;
381
+ // A stalled job whose worker died before honouring a cancel
382
+ // request is finished as cancelled rather than revived.
286
383
  const rows = rowsOf(yield* tx.execute(sql `
287
384
  UPDATE ${jobs} SET
288
- stalled_count = ${jobs.stalledCount} + 1,
385
+ stalled_count = CASE WHEN ${jobs.cancelRequested} THEN ${jobs.stalledCount}
386
+ ELSE ${jobs.stalledCount} + 1 END,
289
387
  lock_token = NULL, lock_expires_at = NULL,
290
- state = CASE WHEN ${jobs.stalledCount} + 1 > ${recoverOptions.maxStalledCount}::int
291
- THEN 'failed' ELSE 'waiting' END,
292
- finished_at = CASE WHEN ${jobs.stalledCount} + 1 > ${recoverOptions.maxStalledCount}::int
388
+ state = CASE
389
+ WHEN ${jobs.cancelRequested} THEN 'cancelled'
390
+ WHEN ${jobs.stalledCount} + 1 > ${recoverOptions.maxStalledCount}::int THEN 'failed'
391
+ ELSE 'waiting' END,
392
+ finished_at = CASE
393
+ WHEN ${jobs.cancelRequested} OR ${jobs.stalledCount} + 1 > ${recoverOptions.maxStalledCount}::int
293
394
  THEN ${now}::timestamptz ELSE NULL END,
294
- failed_reason = CASE WHEN ${jobs.stalledCount} + 1 > ${recoverOptions.maxStalledCount}::int
295
- THEN 'job stalled more than allowable limit' ELSE NULL END
395
+ failed_reason = CASE
396
+ WHEN ${jobs.cancelRequested} THEN NULL
397
+ WHEN ${jobs.stalledCount} + 1 > ${recoverOptions.maxStalledCount}::int
398
+ THEN 'job stalled more than allowable limit' ELSE NULL END,
399
+ cancel_requested = FALSE
296
400
  WHERE ${jobs.state} = 'active' AND ${jobs.lockExpiresAt} <= ${now}::timestamptz
297
- RETURNING ${jobs.id} AS "id", ${jobs.state} AS "state", ${jobs.processedAt} AS "processedAt"
401
+ RETURNING ${jobs.id} AS "id", ${jobs.state} AS "state", ${jobs.processedAt} AS "processedAt",
402
+ ${jobs.name} AS "name", ${jobs.keep} AS "keep"
298
403
  `));
404
+ const recovered = [];
299
405
  for (const row of rows) {
300
- yield* insertAttempt(tx, row.id, "stalled", row.processedAt, now, undefined);
406
+ yield* insertAttempt(tx, row.id, row.state === "cancelled" ? "cancelled" : "stalled", row.processedAt, now, undefined);
407
+ if (row.state === "cancelled") {
408
+ yield* applyKeep(tx, { name: row.name, state: "cancelled", keep: row.keep }, now);
409
+ }
410
+ else {
411
+ recovered.push({ id: JobId(row.id), failed: row.state === "failed" });
412
+ }
301
413
  }
302
- return rows.map((row) => ({ id: JobId(row.id), failed: row.state === "failed" }));
414
+ return recovered;
303
415
  })).pipe(Effect.mapError((error) => error instanceof JobStore.JobStoreError ? error : storeError("recoverStalled failed")(error)), Effect.tap((recovered) => recovered.some((entry) => !entry.failed) ? wakeUp : Effect.void)),
304
416
  awaitWake: (_queues, wakeToken) => Effect.suspend(() => {
305
417
  if (wakeVersion > wakeToken)
@@ -344,7 +456,9 @@ export const make = (options) => Effect.gen(function* () {
344
456
  ${jobs.payload} AS "payload", ${jobs.metadata} AS "metadata",
345
457
  ${jobs.attemptsMax} AS "attemptsMax", ${jobs.attemptsMade} AS "attemptsMade",
346
458
  ${jobs.stalledCount} AS "stalledCount", ${jobs.backoff} AS "backoff",
347
- ${jobs.keep} AS "keep", ${jobs.runAt} AS "runAt", ${jobs.enqueuedAt} AS "enqueuedAt",
459
+ ${jobs.keep} AS "keep", ${jobs.timeoutMs} AS "timeoutMs",
460
+ ${jobs.cancelRequested} AS "cancelRequested",
461
+ ${jobs.runAt} AS "runAt", ${jobs.enqueuedAt} AS "enqueuedAt",
348
462
  ${jobs.processedAt} AS "processedAt", ${jobs.finishedAt} AS "finishedAt",
349
463
  ${jobs.exit} AS "exit", ${jobs.failedReason} AS "failedReason"
350
464
  FROM ${jobs}
@@ -365,6 +479,7 @@ export const make = (options) => Effect.gen(function* () {
365
479
  const now = yield* nowDate;
366
480
  const rows = rowsOf(yield* db.execute(sql `
367
481
  UPDATE ${jobs} SET state = 'waiting', attempts_made = 0, stalled_count = 0,
482
+ cancel_requested = FALSE,
368
483
  exit = NULL, failed_reason = NULL, finished_at = NULL, processed_at = NULL,
369
484
  run_at = ${now}, seq = ${seqExpr}
370
485
  WHERE ${jobs.id} = ${id} AND ${jobs.state} = 'failed'
@@ -381,6 +496,137 @@ export const make = (options) => Effect.gen(function* () {
381
496
  }
382
497
  yield* wakeUp;
383
498
  }),
499
+ cancel: (id) => db.transaction((tx) => Effect.gen(function* () {
500
+ const now = yield* nowDate;
501
+ // One guarded statement: waiting/delayed become terminal, active
502
+ // gets the cancel-request flag; anything else is reported by state.
503
+ const rows = rowsOf(yield* tx.execute(sql `
504
+ UPDATE ${jobs} SET
505
+ state = CASE WHEN ${jobs.state} IN ('waiting', 'delayed') THEN 'cancelled' ELSE ${jobs.state} END,
506
+ finished_at = CASE WHEN ${jobs.state} IN ('waiting', 'delayed') THEN ${now}::timestamptz ELSE ${jobs.finishedAt} END,
507
+ cancel_requested = CASE WHEN ${jobs.state} = 'active' THEN TRUE ELSE ${jobs.cancelRequested} END
508
+ WHERE ${jobs.id} = ${id} AND ${jobs.state} IN ('waiting', 'delayed', 'active')
509
+ RETURNING ${jobs.id} AS id, ${jobs.state} AS state,
510
+ ${jobs.processedAt} AS "processedAt", ${jobs.name} AS "name", ${jobs.keep} AS "keep"
511
+ `));
512
+ const row = rows[0];
513
+ if (row === undefined) {
514
+ const existing = rowsOf(yield* tx.execute(sql `
515
+ SELECT ${jobs.state} AS state FROM ${jobs} WHERE ${jobs.id} = ${id}
516
+ `));
517
+ const found = existing[0];
518
+ if (found === undefined) {
519
+ return yield* new JobStore.JobNotFoundError({ jobId: id });
520
+ }
521
+ return yield* new JobStore.JobNotCancellableError({ jobId: id, state: found.state });
522
+ }
523
+ if (row.state === "cancelled") {
524
+ yield* insertAttempt(tx, id, "cancelled", row.processedAt, now, undefined);
525
+ yield* applyKeep(tx, { name: row.name, state: "cancelled", keep: row.keep }, now);
526
+ }
527
+ })).pipe(Effect.mapError((error) => error instanceof JobStore.JobNotFoundError ||
528
+ error instanceof JobStore.JobNotCancellableError ||
529
+ error instanceof JobStore.JobStoreError
530
+ ? error
531
+ : storeError("cancel failed")(error)), Effect.asVoid),
532
+ promote: (id) => Effect.gen(function* () {
533
+ const now = yield* nowDate;
534
+ const rows = rowsOf(yield* db.execute(sql `
535
+ UPDATE ${jobs} SET state = 'waiting', run_at = ${now}
536
+ WHERE ${jobs.id} = ${id} AND ${jobs.state} = 'delayed'
537
+ RETURNING ${jobs.id} AS id
538
+ `).pipe(Effect.mapError(storeError("promote failed"))));
539
+ if (rows.length === 0) {
540
+ const existing = rowsOf(yield* db.execute(sql `
541
+ SELECT ${jobs.state} AS state FROM ${jobs} WHERE ${jobs.id} = ${id}
542
+ `).pipe(Effect.mapError(storeError("promote failed"))));
543
+ const found = existing[0];
544
+ if (found === undefined) {
545
+ return yield* new JobStore.JobNotFoundError({ jobId: id });
546
+ }
547
+ return yield* new JobStore.JobNotPromotableError({ jobId: id, state: found.state });
548
+ }
549
+ yield* wakeUp;
550
+ }),
551
+ pause: (queue) => db.execute(sql `
552
+ INSERT INTO ${queues} (queue, paused) VALUES (${queue}, TRUE)
553
+ ON CONFLICT (queue) DO UPDATE SET paused = TRUE
554
+ `).pipe(Effect.mapError(storeError("pause failed")), Effect.asVoid),
555
+ resume: (queue) => db.execute(sql `
556
+ UPDATE ${queues} SET paused = FALSE WHERE ${queues.queue} = ${queue}
557
+ `).pipe(Effect.mapError(storeError("resume failed")), Effect.andThen(wakeUp)),
558
+ pausedQueues: () => db.execute(sql `
559
+ SELECT ${queues.queue} AS queue FROM ${queues} WHERE ${queues.paused} = TRUE
560
+ `).pipe(Effect.mapError(storeError("pausedQueues failed")), Effect.map((result) => rowsOf(result).map((row) => JobStore.QueueName(row.queue)))),
561
+ upsertSchedule: (schedule) => db.execute(sql `
562
+ INSERT INTO ${schedules} (key, job_name, queue, cron, tz, every_ms, payload, metadata,
563
+ priority, attempts_max, backoff, keep, timeout_ms, next_run_at)
564
+ VALUES (${schedule.key}, ${schedule.jobName}, ${schedule.queue},
565
+ ${schedule.cron ?? null}, ${schedule.tz ?? null}, ${schedule.everyMs ?? null},
566
+ ${JSON.stringify(schedule.payload ?? null)}::jsonb, ${JSON.stringify(schedule.metadata)}::jsonb,
567
+ ${schedule.priority}, ${schedule.attemptsMax},
568
+ ${schedule.backoff === undefined ? null : JSON.stringify(schedule.backoff)}::jsonb,
569
+ ${schedule.keep === undefined ? null : JSON.stringify(schedule.keep)}::jsonb,
570
+ ${schedule.timeoutMs ?? null}, ${new Date(schedule.nextRunAt)})
571
+ ON CONFLICT (key) DO UPDATE SET
572
+ job_name = EXCLUDED.job_name, queue = EXCLUDED.queue, cron = EXCLUDED.cron,
573
+ tz = EXCLUDED.tz, every_ms = EXCLUDED.every_ms, payload = EXCLUDED.payload,
574
+ metadata = EXCLUDED.metadata, priority = EXCLUDED.priority,
575
+ attempts_max = EXCLUDED.attempts_max, backoff = EXCLUDED.backoff,
576
+ keep = EXCLUDED.keep, timeout_ms = EXCLUDED.timeout_ms,
577
+ next_run_at = CASE
578
+ WHEN ${schedules.cron} IS NOT DISTINCT FROM EXCLUDED.cron
579
+ AND ${schedules.tz} IS NOT DISTINCT FROM EXCLUDED.tz
580
+ AND ${schedules.everyMs} IS NOT DISTINCT FROM EXCLUDED.every_ms
581
+ THEN ${schedules.nextRunAt}
582
+ ELSE EXCLUDED.next_run_at END
583
+ `).pipe(Effect.mapError(storeError("upsertSchedule failed")), Effect.asVoid),
584
+ removeSchedule: (key) => db.execute(sql `
585
+ DELETE FROM ${schedules} WHERE ${schedules.key} = ${key}
586
+ RETURNING ${schedules.key} AS key
587
+ `).pipe(Effect.mapError(storeError("removeSchedule failed")), Effect.map((result) => rowsOf(result).length > 0)),
588
+ listSchedules: (listOptions) => Effect.gen(function* () {
589
+ const conditions = [sql `TRUE`];
590
+ if (listOptions?.jobName !== undefined) {
591
+ conditions.push(sql `${schedules.jobName} = ${listOptions.jobName}`);
592
+ }
593
+ if (listOptions?.queue !== undefined) {
594
+ conditions.push(sql `${schedules.queue} = ${listOptions.queue}`);
595
+ }
596
+ const rows = rowsOf(yield* db.execute(sql `
597
+ SELECT ${schedules.key} AS "key", ${schedules.jobName} AS "jobName",
598
+ ${schedules.queue} AS "queue", ${schedules.cron} AS "cron", ${schedules.tz} AS "tz",
599
+ ${schedules.everyMs} AS "everyMs", ${schedules.payload} AS "payload",
600
+ ${schedules.metadata} AS "metadata", ${schedules.priority} AS "priority",
601
+ ${schedules.attemptsMax} AS "attemptsMax", ${schedules.backoff} AS "backoff",
602
+ ${schedules.keep} AS "keep", ${schedules.timeoutMs} AS "timeoutMs",
603
+ ${schedules.nextRunAt} AS "nextRunAt"
604
+ FROM ${schedules}
605
+ WHERE ${sql.join(conditions, sql ` AND `)}
606
+ ORDER BY ${schedules.key}
607
+ `).pipe(Effect.mapError(storeError("listSchedules failed"))));
608
+ return rows.map(toSchedule);
609
+ }),
610
+ dueSchedules: () => Effect.gen(function* () {
611
+ const now = yield* nowDate;
612
+ const rows = rowsOf(yield* db.execute(sql `
613
+ SELECT ${schedules.key} AS "key", ${schedules.jobName} AS "jobName",
614
+ ${schedules.queue} AS "queue", ${schedules.cron} AS "cron", ${schedules.tz} AS "tz",
615
+ ${schedules.everyMs} AS "everyMs", ${schedules.payload} AS "payload",
616
+ ${schedules.metadata} AS "metadata", ${schedules.priority} AS "priority",
617
+ ${schedules.attemptsMax} AS "attemptsMax", ${schedules.backoff} AS "backoff",
618
+ ${schedules.keep} AS "keep", ${schedules.timeoutMs} AS "timeoutMs",
619
+ ${schedules.nextRunAt} AS "nextRunAt"
620
+ FROM ${schedules}
621
+ WHERE ${schedules.nextRunAt} <= ${now}
622
+ ORDER BY ${schedules.nextRunAt} ASC
623
+ `).pipe(Effect.mapError(storeError("dueSchedules failed"))));
624
+ return rows.map(toSchedule);
625
+ }),
626
+ advanceSchedule: (key, expectedRunAt, nextRunAt) => db.execute(sql `
627
+ UPDATE ${schedules} SET next_run_at = ${new Date(nextRunAt)}
628
+ WHERE ${schedules.key} = ${key} AND ${schedules.nextRunAt} = ${new Date(expectedRunAt)}
629
+ `).pipe(Effect.mapError(storeError("advanceSchedule failed")), Effect.asVoid),
384
630
  counts: (queue) => db.execute(sql `
385
631
  SELECT ${jobs.state} AS "state", count(*)::int AS "count" FROM ${jobs}
386
632
  ${queue === undefined ? sql `` : sql `WHERE ${jobs.queue} = ${queue}`}
@@ -392,7 +638,8 @@ export const make = (options) => Effect.gen(function* () {
392
638
  delayed: 0,
393
639
  active: 0,
394
640
  completed: 0,
395
- failed: 0
641
+ failed: 0,
642
+ cancelled: 0
396
643
  };
397
644
  for (const row of rows)
398
645
  counts[row.state] = row.count;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DrizzleJobStore.js","sourceRoot":"","sources":["../../src/drizzle-postgres/DrizzleJobStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/drizzle-postgres/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AAEvD;;;;;GAKG;AACH,cAAc,aAAa,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/drizzle-postgres/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AAEvD;;;;;GAKG;AACH,cAAc,aAAa,CAAA"}