@shivaedev/jobs 0.28.3 → 0.29.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/CHANGELOG.md +17 -0
- package/README.md +6 -2
- package/dist/server/adapters/deferralCount.d.ts +5 -0
- package/dist/server/adapters/deferralCount.d.ts.map +1 -0
- package/dist/server/adapters/deferralCount.js +22 -0
- package/dist/server/adapters/deferralCount.js.map +1 -0
- package/dist/server/adapters/testingDueNow.d.ts +7 -0
- package/dist/server/adapters/testingDueNow.d.ts.map +1 -0
- package/dist/server/adapters/testingDueNow.js +26 -0
- package/dist/server/adapters/testingDueNow.js.map +1 -0
- package/dist/server/definition.d.ts +3 -1
- package/dist/server/definition.d.ts.map +1 -1
- package/dist/server/definition.js +3 -1
- package/dist/server/definition.js.map +1 -1
- package/dist/server/internal/register.js +1 -1
- package/dist/server/internal/register.js.map +1 -1
- package/dist/server/internal/runQueueWorker.d.ts +2 -1
- package/dist/server/internal/runQueueWorker.d.ts.map +1 -1
- package/dist/server/internal/runQueueWorker.js +3 -2
- package/dist/server/internal/runQueueWorker.js.map +1 -1
- package/dist/server/internal/testingDeferrals.d.ts +1 -2
- package/dist/server/internal/testingDeferrals.d.ts.map +1 -1
- package/dist/server/internal/testingDeferrals.js +1 -15
- package/dist/server/internal/testingDeferrals.js.map +1 -1
- package/dist/server/testing.d.ts +2 -1
- package/dist/server/testing.d.ts.map +1 -1
- package/dist/server/testing.js +3 -1
- package/dist/server/testing.js.map +1 -1
- package/package.json +6 -6
- package/src/server/adapters/deferralCount.ts +28 -0
- package/src/server/adapters/testingDueNow.ts +32 -0
- package/src/server/definition.ts +5 -1
- package/src/server/internal/register.ts +1 -1
- package/src/server/internal/runQueueWorker.ts +6 -2
- package/src/server/internal/testingDeferrals.ts +1 -23
- package/src/server/testing.ts +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.29.1 - 2026-11-01
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- Update `@shivaedev/sql` from 0.30.0 to 0.31.0.
|
|
8
|
+
|
|
9
|
+
## 0.29.0 - 2026-11-01
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Expose `retryCount` and `deferralCount` on queue handlers' `JobContext` so `RetryAt` backoff can grow without application storage.
|
|
14
|
+
- Add `makePgBossTesting().runDueNow(queue)` to make delayed sends, native retries and deferrals due now and wake local workers. `waitForIdle` excludes future jobs.
|
|
15
|
+
|
|
16
|
+
### Breaking
|
|
17
|
+
|
|
18
|
+
- Queue handlers read Platform's durable deferral counter before each attempt, including handlers that never defer. If a deployment uses `migrate: false` with only pg-boss's native schema installed, run `installPgBossSchema` or apply the `pgBossSchema` migration component before starting its workers.
|
|
19
|
+
|
|
3
20
|
## 0.28.3 - 2026-11-01
|
|
4
21
|
|
|
5
22
|
### Changed
|
package/README.md
CHANGED
|
@@ -157,7 +157,7 @@ export const Cleanup = defineSchedule({
|
|
|
157
157
|
export const cleanupWorker = Cleanup.run(Effect.flatMap(Mail, (mail) => mail.removeExpired()));
|
|
158
158
|
```
|
|
159
159
|
|
|
160
|
-
The queue takes `{ userId: number }` in application code and stores `{ userId: string }`. Its handler receives the decoded number and a job context, including the job's `id`. Keep the queue definition available to producers; the runtime registers the worker created by `handle`.
|
|
160
|
+
The queue takes `{ userId: number }` in application code and stores `{ userId: string }`. Its handler receives the decoded number and a job context, including the job's `id`, `retryCount` and `deferralCount`. Both counts start at zero. `retryCount` is the native retry count; `deferralCount` counts accepted `RetryAt` deferrals before this attempt, independently of native retries. Keep the queue definition available to producers; the runtime registers the worker created by `handle`.
|
|
161
161
|
|
|
162
162
|
The schedule runs a payload-free Effect. This schedule registers its cron expression with `tz: "UTC"`. The package creates a `<name>-dlq` dead-letter queue for both kinds of worker and supplies `retryLimit: 3` and `retryBackoff: true` by default. The email queue above overrides the retry limit to five. These are pg-boss registration settings; pg-boss runs the retry and scheduling engine.
|
|
163
163
|
|
|
@@ -212,7 +212,9 @@ const waitForQuota = Effect.fail(
|
|
|
212
212
|
|
|
213
213
|
The same job returns to waiting with `startAfter` set to `at`; its ID, singleton key, payload and retry count stay unchanged. A past or current `at` is eligible on the next fetch. Deferral does not dead-letter the job or call `onError`. Its job span ends OK with a `job.deferred` event whose `at` is an ISO UTC string and whose `reason` is the supplied string. Deferred jobs rely on polling, including queues using `notify: true`. Stately jobs sharing a singleton key can defer together and still run one at a time. While waiting, their native job metadata reports the adapter's `effect-stately-deferred` policy; a database trigger restores `stately` when pg-boss claims them, preserving its active-job exclusion.
|
|
214
214
|
|
|
215
|
-
Set `queue: { maxDeferrals: 20 }` on a queue or schedule to change the default limit of ten deferrals per job. The limit must be a nonnegative safe integer; zero disables deferral. Once the limit is reached, `RetryAt` follows the normal failure and retry path. The adapter stores the count in its own table in the pg-boss schema, preserving it across worker restarts, ordinary failures, expiry and heartbeat timeouts. Automatic migrations and `installPgBossSchema` create this table and the stately claim trigger; use `installPgBossSchema` before starting workers with `migrate: false`.
|
|
215
|
+
Set `queue: { maxDeferrals: 20 }` on a queue or schedule to change the default limit of ten deferrals per job. The limit must be a nonnegative safe integer; zero disables deferral. Once the limit is reached, `RetryAt` follows the normal failure and retry path. The adapter stores the count in its own table in the pg-boss schema, preserving it across worker restarts, ordinary failures, expiry and heartbeat timeouts. Queue handlers read this table before every attempt, including handlers that never defer. Automatic migrations and `installPgBossSchema` create this table and the stately claim trigger; use `installPgBossSchema` or the `pgBossSchema` migration component before starting workers with `migrate: false`.
|
|
216
|
+
|
|
217
|
+
A queue handler can use `job.deferralCount` to grow its `RetryAt` backoff without an application column. The count survives worker restarts and native retries; a deferral leaves `job.retryCount` unchanged.
|
|
216
218
|
|
|
217
219
|
### One active job per entity
|
|
218
220
|
|
|
@@ -525,6 +527,8 @@ Set `retryPolicy: testRetryPolicy` through the controller to override queue and
|
|
|
525
527
|
|
|
526
528
|
`expireIn(queue, duration)` takes an Effect `Duration.Input`, such as `"1 second"`, and sets the expiry of subsequent sends, rounded up to whole seconds. Durations below one second or nonfinite durations fail with `PgBossTestingError` (`operation: "expireIn"`). Earlier sends retain their expiry, and later calls and duplicate-ID sends do not change stored jobs. It can be combined with `expireAfter`: one sets each attempt's time budget, the other limits attempts. A stuck handler is interrupted at its deadline, and the same worker can fetch its retry after pg-boss fails the attempt. The testing expiry hooks support pg-boss schema version 46.
|
|
527
529
|
|
|
530
|
+
`runDueNow(queue)` makes future jobs in the queue's `created` or `retry` state due at the database's current time and wakes local workers. It includes delayed sends (`startAfter`), native retries and `RetryAt` deferrals. Yield `waitForIdle` afterwards before observing handler results; future jobs do not hold that wait open. It leaves active and terminal jobs and other queues unchanged.
|
|
531
|
+
|
|
528
532
|
`deferred(queue)` returns waiting deferrals as `{ at: DateTime.Utc, reason: string }[]`. `runDeferredNow(queue)` pulls those jobs forward to the database’s current time and wakes local workers without waiting for their original due time. Read `revision` before reading deferrals and use `waitForChange(revision)` as with other controls.
|
|
529
533
|
|
|
530
534
|
`checkBatchWindow(queue, millisecondsPerJob)` checks that the declared sequential batch fits strictly inside the stored queue expiry window. `schemaVersion` reads the installed version, and `checkSchemaVersion(expected)` fails when it differs. Test control, read and check failures use `PgBossTestingError` with `operation`, optional `queue` and a redacted `original`.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import type { Job } from "pg-boss";
|
|
3
|
+
import type { PgBossClient } from "#client.ts";
|
|
4
|
+
export declare const deferralCount: (client: PgBossClient, schema: string, job: Job<unknown>) => Effect.Effect<number, import("#error.ts").PgBossError, never>;
|
|
5
|
+
//# sourceMappingURL=deferralCount.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deferralCount.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/deferralCount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,eAAO,MAAM,aAAa,4HAmBxB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Effect, Schema } from "effect";
|
|
2
|
+
import { toPgBossError } from "#error.ts";
|
|
3
|
+
import { quotedSchema } from "#internal/storedRows.ts";
|
|
4
|
+
const Count = Schema.Struct({ count: Schema.NumberFromString });
|
|
5
|
+
export const deferralCount = Effect.fnUntraced(function* (client, schema, job) {
|
|
6
|
+
const quoted = quotedSchema(schema);
|
|
7
|
+
return yield* Effect.tryPromise({
|
|
8
|
+
catch: (error) => toPgBossError("settle", error, job.name),
|
|
9
|
+
try: async () => {
|
|
10
|
+
if (client.getDb === undefined) {
|
|
11
|
+
throw new TypeError("This pg-boss client does not support getDb for deferral counts");
|
|
12
|
+
}
|
|
13
|
+
const { rows } = await client.getDb().executeSql(`SELECT COALESCE((
|
|
14
|
+
SELECT deferred.count FROM ${quoted}.effect_job_deferral AS deferred
|
|
15
|
+
JOIN ${quoted}.job AS job USING (name, id, created_on)
|
|
16
|
+
WHERE job.name = $1 AND job.id = $2
|
|
17
|
+
), 0)::text AS count`, [job.name, job.id]);
|
|
18
|
+
return Schema.decodeUnknownSync(Count)(rows[0]).count;
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=deferralCount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deferralCount.js","sourceRoot":"","sources":["../../../src/server/adapters/deferralCount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGxC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAEhE,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAoB,EAAE,MAAc,EAAE,GAAiB;IAChH,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QAC/B,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC;QAC1D,GAAG,EAAE,KAAK,IAAI,EAAE;YACf,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,IAAI,SAAS,CAAC,gEAAgE,CAAC,CAAC;YACvF,CAAC;YACD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,UAAU,CAC/C;kCAC8B,MAAM;YAC5B,MAAM;;yBAEO,EACrB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAClB,CAAC;YACF,OAAO,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACvD,CAAC;KACD,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PgBoss } from "pg-boss";
|
|
2
|
+
import type { QueueDefinition } from "#definition.ts";
|
|
3
|
+
export declare function testingDueNow(client: () => PgBoss, schema: () => string, changed: () => void): {
|
|
4
|
+
runDeferredNow: (queue: Pick<QueueDefinition, "name">) => import("effect/Effect").Effect<void, import("../error.ts").PgBossTestingError, never>;
|
|
5
|
+
runDueNow: (queue: Pick<QueueDefinition, "name">) => import("effect/Effect").Effect<void, import("../error.ts").PgBossTestingError, never>;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=testingDueNow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testingDueNow.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/testingDueNow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAItD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,MAAM,EAAE,MAAM,EAAE,MAAM,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI;IAuB3F,cAAc,UAAU,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;IACrD,SAAS,UAAU,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;EAEjD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { quotedSchema } from "#internal/storedRows.ts";
|
|
2
|
+
import { testingOperation } from "#internal/testingReadout.ts";
|
|
3
|
+
export function testingDueNow(client, schema, changed) {
|
|
4
|
+
function makeDue(queue, deferredOnly) {
|
|
5
|
+
return testingOperation(deferredOnly ? "runDeferredNow" : "runDueNow", async () => {
|
|
6
|
+
const quoted = quotedSchema(schema());
|
|
7
|
+
const condition = deferredOnly
|
|
8
|
+
? "state = 'retry' AND output ? 'jobDeferral' AND started_on IS NULL"
|
|
9
|
+
: `state IN ('created', 'retry') AND start_after > ${quoted}.job_now()`;
|
|
10
|
+
await client()
|
|
11
|
+
.getDb()
|
|
12
|
+
.executeSql(`UPDATE ${quoted}.job SET start_after = ${quoted}.job_now() WHERE name = $1 AND ${condition}`, [queue.name]);
|
|
13
|
+
changed();
|
|
14
|
+
for (const worker of client()
|
|
15
|
+
.getWipData()
|
|
16
|
+
.filter((candidate) => candidate.name === queue.name)) {
|
|
17
|
+
client().notifyWorker(worker.id);
|
|
18
|
+
}
|
|
19
|
+
}, queue.name);
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
runDeferredNow: (queue) => makeDue(queue, true),
|
|
23
|
+
runDueNow: (queue) => makeDue(queue, false),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=testingDueNow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testingDueNow.js","sourceRoot":"","sources":["../../../src/server/adapters/testingDueNow.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,MAAM,UAAU,aAAa,CAAC,MAAoB,EAAE,MAAoB,EAAE,OAAmB;IAC5F,SAAS,OAAO,CAAC,KAAoC,EAAE,YAAqB;QAC3E,OAAO,gBAAgB,CACtB,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,EAC7C,KAAK,IAAI,EAAE;YACV,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;YACtC,MAAM,SAAS,GAAG,YAAY;gBAC7B,CAAC,CAAC,mEAAmE;gBACrE,CAAC,CAAC,mDAAmD,MAAM,YAAY,CAAC;YACzE,MAAM,MAAM,EAAE;iBACZ,KAAK,EAAE;iBACP,UAAU,CAAC,UAAU,MAAM,0BAA0B,MAAM,kCAAkC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1H,OAAO,EAAE,CAAC;YACV,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE;iBAC3B,UAAU,EAAE;iBACZ,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxD,MAAM,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAClC,CAAC;QACF,CAAC,EACD,KAAK,CAAC,IAAI,CACV,CAAC;IACH,CAAC;IACD,OAAO;QACN,cAAc,EAAE,CAAC,KAAoC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;QAC9E,SAAS,EAAE,CAAC,KAAoC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;KAC1E,CAAC;AACH,CAAC"}
|
|
@@ -16,11 +16,13 @@ export interface JobPayloadSchema extends Schema.Top {
|
|
|
16
16
|
readonly Type: object;
|
|
17
17
|
}
|
|
18
18
|
export interface JobContext {
|
|
19
|
+
readonly deferralCount: number;
|
|
19
20
|
readonly expireInSeconds: number;
|
|
20
21
|
readonly heartbeatSeconds: number | null;
|
|
21
22
|
readonly id: string;
|
|
22
23
|
readonly name: string;
|
|
23
24
|
readonly remainingBudget: Effect.Effect<Duration.Duration>;
|
|
25
|
+
readonly retryCount: number;
|
|
24
26
|
readonly signal: AbortSignal;
|
|
25
27
|
}
|
|
26
28
|
export interface QueueDefinition<TName extends string = string, TPayload extends JobPayloadSchema = JobPayloadSchema> {
|
|
@@ -90,6 +92,6 @@ export interface DefineScheduleOptions<TName extends string> {
|
|
|
90
92
|
readonly schedule?: ScheduleOptions;
|
|
91
93
|
readonly worker?: WorkOptions;
|
|
92
94
|
}
|
|
93
|
-
export declare function jobContext(job: Job<unknown>, deadline: number): JobContext;
|
|
95
|
+
export declare function jobContext(job: Job<unknown>, deadline: number, deferralCount?: number): JobContext;
|
|
94
96
|
export {};
|
|
95
97
|
//# sourceMappingURL=definition.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/server/definition.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/server/definition.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,13 +22,15 @@ export function defineQueue(options) {
|
|
|
22
22
|
};
|
|
23
23
|
return Object.freeze(definition);
|
|
24
24
|
}
|
|
25
|
-
export function jobContext(job, deadline) {
|
|
25
|
+
export function jobContext(job, deadline, deferralCount = 0) {
|
|
26
26
|
return {
|
|
27
|
+
deferralCount,
|
|
27
28
|
expireInSeconds: job.expireInSeconds,
|
|
28
29
|
heartbeatSeconds: job.heartbeatSeconds,
|
|
29
30
|
id: job.id,
|
|
30
31
|
name: job.name,
|
|
31
32
|
remainingBudget: Effect.map(Clock.currentTimeMillis, (now) => Duration.millis(Math.max(0, deadline - now))),
|
|
33
|
+
retryCount: job.retryCount,
|
|
32
34
|
signal: job.signal,
|
|
33
35
|
};
|
|
34
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/server/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAElF,MAAM,OAAO,OAAQ,SAAQ,MAAM,CAAC,WAAW,EAAW,CAAC,SAAS,EAAE;IACrE,EAAE,EAAE,MAAM,CAAC,WAAW;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM;CACrB,CAAC;CAAG;
|
|
1
|
+
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/server/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAElF,MAAM,OAAO,OAAQ,SAAQ,MAAM,CAAC,WAAW,EAAW,CAAC,SAAS,EAAE;IACrE,EAAE,EAAE,MAAM,CAAC,WAAW;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM;CACrB,CAAC;CAAG;AA0FL,MAAM,UAAU,WAAW,CAC1B,OAA4C;IAE5C,MAAM,UAAU,GAAqC;QACpD,IAAI,EAAE,iBAAiB;QACvB,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1D,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CACnB,MAAM,CAAC,MAAM,CAAC;YACb,IAAI,EAAE,aAAsB;YAC5B,OAAO;YACP,KAAK,EAAE,UAAU;SACjB,CAAC;QACH,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;QACzC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,YAAY,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC;QAC/C,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;KAC5F,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAClC,CAAC;AAUD,MAAM,UAAU,UAAU,CAAC,GAAiB,EAAE,QAAgB,EAAE,aAAa,GAAG,CAAC;IAChF,OAAO;QACN,aAAa;QACb,eAAe,EAAE,GAAG,CAAC,eAAe;QACpC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC;QAC3G,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,MAAM,EAAE,GAAG,CAAC,MAAM;KAClB,CAAC;AACH,CAAC"}
|
|
@@ -47,7 +47,7 @@ const registerQueue = Effect.fnUntraced(function* (client, registration, context
|
|
|
47
47
|
if (registration._tag === "QueueDefinition") {
|
|
48
48
|
return;
|
|
49
49
|
}
|
|
50
|
-
yield* registerWorker(client, name, queue.workerOptions, (job, deadline) => runQueueWorker(registration, job, deadline), scope, schema, queue.maxDeferrals, graceful).pipe(Effect.provide(context));
|
|
50
|
+
yield* registerWorker(client, name, queue.workerOptions, (job, deadline) => runQueueWorker(registration, job, deadline, client, schema), scope, schema, queue.maxDeferrals, graceful).pipe(Effect.provide(context));
|
|
51
51
|
});
|
|
52
52
|
const registerSchedule = Effect.fnUntraced(function* (client, worker, context, scope, schema, graceful) {
|
|
53
53
|
const { schedule } = worker;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/server/internal/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,EAAc,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,SAAS,aAAa,CAAC,YAA6B;IACnD,OAAO,YAAY,CAAC,IAAI,KAAK,aAAa,CAAC;AAC5C,CAAC;AAED,SAAS,iBAAiB,CAAC,YAA6B;IACvD,OAAO,YAAY,CAAC,IAAI,KAAK,iBAAiB,CAAC;AAChD,CAAC;AAED,SAAS,iBAAiB,CAAC,YAA6B;IACvD,OAAO,YAAY,CAAC,IAAI,KAAK,iBAAiB,CAAC;AAChD,CAAC;AAED,SAAS,sBAAsB,CAAC,YAA6B;IAC5D,IAAI,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;QACrC,OAAO,YAAY,CAAC;IACrB,CAAC;IACD,IAAI,aAAa,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,YAAY,CAAC,KAAK,CAAC;IAC3B,CAAC;IACD,IAAI,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;QACrC,OAAO,YAAY,CAAC,QAAQ,CAAC;IAC9B,CAAC;IACD,MAAM,IAAI,SAAS,CAAC,iCAAiC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,YAA6B;IAC7D,OAAO,sBAAsB,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC;AAED,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAoB,EAAE,aAAyC,EAAE,cAAuB;IAC1I,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QAC1C,IAAI,cAAc,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;YACxD,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7I,CAAC;IACF,CAAC;IACD,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;QACxD,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CACxE,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,YAAY,uBAAuB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAClI,CAAC;IACH,CAAC;AACF,CAAC,CAAC,CAAC;AAIH,SAAS,aAAa,CAAC,OAAgB;IACtC,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAChD,MAAoB,EACpB,YAA2C,EAC3C,OAAiC,EACjC,KAAkB,EAClB,MAAc,EACd,QAAiB;IAEjB,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;IACtF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,YAAY,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAC7C,OAAO;IACR,CAAC;IACD,KAAK,CAAC,CAAC,cAAc,CACpB,MAAM,EACN,IAAI,EACJ,KAAK,CAAC,aAAa,EACnB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,YAAY,EAAE,GAAG,EAAE,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/server/internal/register.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
2
|
import type { Job } from "pg-boss";
|
|
3
|
+
import type { PgBossClient } from "#client.ts";
|
|
3
4
|
import { type QueueWorker } from "#definition.ts";
|
|
4
|
-
export declare function runQueueWorker(worker: QueueWorker, job: Job<unknown>, deadline: number): Effect.Effect<unknown, unknown, unknown>;
|
|
5
|
+
export declare function runQueueWorker(worker: QueueWorker, job: Job<unknown>, deadline: number, client: PgBossClient, schema: string): Effect.Effect<unknown, unknown, unknown>;
|
|
5
6
|
//# sourceMappingURL=runQueueWorker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runQueueWorker.d.ts","sourceRoot":"","sources":["../../../src/server/internal/runQueueWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAoB,MAAM,QAAQ,CAAC;AAClD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"runQueueWorker.d.ts","sourceRoot":"","sources":["../../../src/server/internal/runQueueWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAoB,MAAM,QAAQ,CAAC;AAClD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAGnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAI9D,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,4CAe5H"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { Effect, Redacted, Schema } from "effect";
|
|
2
|
+
import { deferralCount } from "#adapters/deferralCount.ts";
|
|
2
3
|
import { workerDiagnostics } from "#adapters/workerDiagnostics.ts";
|
|
3
4
|
import { jobContext } from "#definition.ts";
|
|
4
5
|
import { PgBossPayloadError } from "#error.ts";
|
|
5
6
|
import { payloadOf } from "#internal/tracing.ts";
|
|
6
|
-
export function runQueueWorker(worker, job, deadline) {
|
|
7
|
+
export function runQueueWorker(worker, job, deadline, client, schema) {
|
|
7
8
|
return Schema.decodeUnknownEffect(Schema.toCodecJson(worker.queue.schema))(payloadOf(job.data)).pipe(Effect.mapError((error) => new PgBossPayloadError({
|
|
8
9
|
direction: "decode",
|
|
9
10
|
original: Redacted.make(error),
|
|
10
11
|
queue: worker.queue.name,
|
|
11
|
-
})), Effect.flatMap((payload) => worker.handler(payload, jobContext(job, deadline))), workerDiagnostics);
|
|
12
|
+
})), Effect.flatMap((payload) => deferralCount(client, schema, job).pipe(Effect.flatMap((count) => worker.handler(payload, jobContext(job, deadline, count))))), workerDiagnostics);
|
|
12
13
|
}
|
|
13
14
|
//# sourceMappingURL=runQueueWorker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runQueueWorker.js","sourceRoot":"","sources":["../../../src/server/internal/runQueueWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"runQueueWorker.js","sourceRoot":"","sources":["../../../src/server/internal/runQueueWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAoB,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,UAAU,cAAc,CAAC,MAAmB,EAAE,GAAiB,EAAE,QAAgB,EAAE,MAAoB,EAAE,MAAc;IAC5H,OAAO,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CACnG,MAAM,CAAC,QAAQ,CACd,CAAC,KAAK,EAAE,EAAE,CACT,IAAI,kBAAkB,CAAC;QACtB,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;KACxB,CAAC,CACH,EACD,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC1B,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAC7H,EACD,iBAAiB,CACjB,CAAC;AACH,CAAC"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { DateTime } from "effect";
|
|
2
2
|
import type { PgBoss } from "pg-boss";
|
|
3
3
|
import type { QueueDefinition } from "#definition.ts";
|
|
4
|
-
export declare function testingDeferrals(client: () => PgBoss
|
|
4
|
+
export declare function testingDeferrals(client: () => PgBoss): {
|
|
5
5
|
deferred: (queue: Pick<QueueDefinition, "name">) => import("effect/Effect").Effect<{
|
|
6
6
|
at: DateTime.Utc;
|
|
7
7
|
reason: string;
|
|
8
8
|
}[], import("../error.ts").PgBossTestingError, never>;
|
|
9
|
-
runDeferredNow: (queue: Pick<QueueDefinition, "name">) => import("effect/Effect").Effect<void, import("../error.ts").PgBossTestingError, never>;
|
|
10
9
|
};
|
|
11
10
|
//# sourceMappingURL=testingDeferrals.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testingDeferrals.d.ts","sourceRoot":"","sources":["../../../src/server/internal/testingDeferrals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"testingDeferrals.d.ts","sourceRoot":"","sources":["../../../src/server/internal/testingDeferrals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAItD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,MAAM;IAEnD,QAAQ,UAAU,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;;;;EAahD"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { DateTime } from "effect";
|
|
2
2
|
import { deferralOf } from "#internal/deferral.ts";
|
|
3
|
-
import { quotedSchema } from "#internal/storedRows.ts";
|
|
4
3
|
import { testingOperation } from "#internal/testingReadout.ts";
|
|
5
|
-
export function testingDeferrals(client
|
|
4
|
+
export function testingDeferrals(client) {
|
|
6
5
|
return {
|
|
7
6
|
deferred: (queue) => testingOperation("deferred", async () => {
|
|
8
7
|
const jobs = await client().findJobs(queue.name);
|
|
@@ -11,19 +10,6 @@ export function testingDeferrals(client, schema, changed) {
|
|
|
11
10
|
return deferral === undefined ? [] : [{ at: DateTime.makeUnsafe(job.startAfter), reason: deferral.reason }];
|
|
12
11
|
});
|
|
13
12
|
}, queue.name),
|
|
14
|
-
runDeferredNow: (queue) => testingOperation("runDeferredNow", async () => {
|
|
15
|
-
const quoted = quotedSchema(schema());
|
|
16
|
-
await client()
|
|
17
|
-
.getDb()
|
|
18
|
-
.executeSql(`UPDATE ${quoted}.job SET start_after = ${quoted}.job_now()
|
|
19
|
-
WHERE name = $1 AND state = 'retry' AND output ? 'jobDeferral' AND started_on IS NULL`, [queue.name]);
|
|
20
|
-
changed();
|
|
21
|
-
for (const worker of client()
|
|
22
|
-
.getWipData()
|
|
23
|
-
.filter((candidate) => candidate.name === queue.name)) {
|
|
24
|
-
client().notifyWorker(worker.id);
|
|
25
|
-
}
|
|
26
|
-
}, queue.name),
|
|
27
13
|
};
|
|
28
14
|
}
|
|
29
15
|
//# sourceMappingURL=testingDeferrals.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testingDeferrals.js","sourceRoot":"","sources":["../../../src/server/internal/testingDeferrals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGlC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"testingDeferrals.js","sourceRoot":"","sources":["../../../src/server/internal/testingDeferrals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGlC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACpD,OAAO;QACN,QAAQ,EAAE,CAAC,KAAoC,EAAE,EAAE,CAClD,gBAAgB,CACf,UAAU,EACV,KAAK,IAAI,EAAE;YACV,MAAM,IAAI,GAAG,MAAM,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,KAAK,OAAO,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC/F,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7G,CAAC,CAAC,CAAC;QACJ,CAAC,EACD,KAAK,CAAC,IAAI,CACV;KACF,CAAC;AACH,CAAC"}
|
package/dist/server/testing.d.ts
CHANGED
|
@@ -21,11 +21,12 @@ export interface PgBossTestingOptions {
|
|
|
21
21
|
readonly retryPolicy?: typeof testRetryPolicy;
|
|
22
22
|
}
|
|
23
23
|
export declare function makePgBossTesting(options?: PgBossTestingOptions): {
|
|
24
|
+
runDeferredNow: (queue: Pick<QueueDefinition, "name">) => Effect.Effect<void, PgBossTestingError, never>;
|
|
25
|
+
runDueNow: (queue: Pick<QueueDefinition, "name">) => Effect.Effect<void, PgBossTestingError, never>;
|
|
24
26
|
deferred: (queue: Pick<QueueDefinition, "name">) => Effect.Effect<{
|
|
25
27
|
at: DateTime.Utc;
|
|
26
28
|
reason: string;
|
|
27
29
|
}[], PgBossTestingError, never>;
|
|
28
|
-
runDeferredNow: (queue: Pick<QueueDefinition, "name">) => Effect.Effect<void, PgBossTestingError, never>;
|
|
29
30
|
schedules: () => Effect.Effect<{
|
|
30
31
|
cron: string;
|
|
31
32
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/server/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAY,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/server/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAY,MAAM,QAAQ,CAAC;AAGnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAW/C,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;AAE/F,MAAM,WAAW,aAAa,CAAC,MAAM,SAAS,aAAa;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;CAC1D;AAED,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;CACjC;AAED,eAAO,MAAM,eAAe;;;EAAwD,CAAC;AAErF,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,eAAe,CAAC;CAC9C;AAED,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,oBAAyB;;;;;;;;;;;;;;;8BAkCxC,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,eAAe,CAAC,sBAAsB,MAAM;mCAqBtE,MAAM;;yBAOhB,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,YAAY,MAAM;sBAUlD,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,YAAY,QAAQ,CAAC,KAAK;0BAWnD,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQpD;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
package/dist/server/testing.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Duration, Effect, Redacted } from "effect";
|
|
2
|
+
import { testingDueNow } from "#adapters/testingDueNow.ts";
|
|
2
3
|
import { defaultClientFactory } from "#defaultClientFactory.ts";
|
|
3
4
|
import { PgBossTestingError } from "#error.ts";
|
|
4
5
|
import { testingFetches } from "#internal/adapters/testingFetches.ts";
|
|
@@ -41,7 +42,8 @@ export function makePgBossTesting(options = {}) {
|
|
|
41
42
|
return testingClient(current, clientOptions.schema ?? "pgboss", controls);
|
|
42
43
|
};
|
|
43
44
|
return {
|
|
44
|
-
...testingDeferrals(client
|
|
45
|
+
...testingDeferrals(client),
|
|
46
|
+
...testingDueNow(client, () => schema, signal.changed),
|
|
45
47
|
...testingSchedules(client, signal.changed),
|
|
46
48
|
...testingWaits(client, () => fetches, signal),
|
|
47
49
|
checkBatchWindow: (queue, millisecondsPerJob) => testingOperation("checkBatchWindow", async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/server/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/server/testing.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shivaedev/jobs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.29.1",
|
|
4
4
|
"description": "Effect-native jobs and lifecycle management for pg-boss",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"effect"
|
|
@@ -48,16 +48,16 @@
|
|
|
48
48
|
"README.md"
|
|
49
49
|
],
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@shivaedev/errors": "0.4.
|
|
51
|
+
"@shivaedev/errors": "0.4.1",
|
|
52
52
|
"@shivaedev/service": "0.6.0",
|
|
53
|
-
"@shivaedev/sql": "0.
|
|
53
|
+
"@shivaedev/sql": "0.31.0"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@shivaedev/http": "0.3.1",
|
|
57
|
-
"@shivaedev/quality": "0.
|
|
57
|
+
"@shivaedev/quality": "0.54.0",
|
|
58
58
|
"@shivaedev/test": "0.12.0",
|
|
59
|
-
"@shivaedev/test-sql": "0.
|
|
60
|
-
"@shivaedev/test-story": "0.
|
|
59
|
+
"@shivaedev/test-sql": "0.16.0",
|
|
60
|
+
"@shivaedev/test-story": "0.32.0",
|
|
61
61
|
"@types/node": "24.19.2",
|
|
62
62
|
"effect": "4.0.6",
|
|
63
63
|
"pg-boss": "12.38.0",
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Effect, Schema } from "effect";
|
|
2
|
+
import type { Job } from "pg-boss";
|
|
3
|
+
import type { PgBossClient } from "#client.ts";
|
|
4
|
+
import { toPgBossError } from "#error.ts";
|
|
5
|
+
import { quotedSchema } from "#internal/storedRows.ts";
|
|
6
|
+
|
|
7
|
+
const Count = Schema.Struct({ count: Schema.NumberFromString });
|
|
8
|
+
|
|
9
|
+
export const deferralCount = Effect.fnUntraced(function* (client: PgBossClient, schema: string, job: Job<unknown>) {
|
|
10
|
+
const quoted = quotedSchema(schema);
|
|
11
|
+
return yield* Effect.tryPromise({
|
|
12
|
+
catch: (error) => toPgBossError("settle", error, job.name),
|
|
13
|
+
try: async () => {
|
|
14
|
+
if (client.getDb === undefined) {
|
|
15
|
+
throw new TypeError("This pg-boss client does not support getDb for deferral counts");
|
|
16
|
+
}
|
|
17
|
+
const { rows } = await client.getDb().executeSql(
|
|
18
|
+
`SELECT COALESCE((
|
|
19
|
+
SELECT deferred.count FROM ${quoted}.effect_job_deferral AS deferred
|
|
20
|
+
JOIN ${quoted}.job AS job USING (name, id, created_on)
|
|
21
|
+
WHERE job.name = $1 AND job.id = $2
|
|
22
|
+
), 0)::text AS count`,
|
|
23
|
+
[job.name, job.id],
|
|
24
|
+
);
|
|
25
|
+
return Schema.decodeUnknownSync(Count)(rows[0]).count;
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { PgBoss } from "pg-boss";
|
|
2
|
+
import type { QueueDefinition } from "#definition.ts";
|
|
3
|
+
import { quotedSchema } from "#internal/storedRows.ts";
|
|
4
|
+
import { testingOperation } from "#internal/testingReadout.ts";
|
|
5
|
+
|
|
6
|
+
export function testingDueNow(client: () => PgBoss, schema: () => string, changed: () => void) {
|
|
7
|
+
function makeDue(queue: Pick<QueueDefinition, "name">, deferredOnly: boolean) {
|
|
8
|
+
return testingOperation(
|
|
9
|
+
deferredOnly ? "runDeferredNow" : "runDueNow",
|
|
10
|
+
async () => {
|
|
11
|
+
const quoted = quotedSchema(schema());
|
|
12
|
+
const condition = deferredOnly
|
|
13
|
+
? "state = 'retry' AND output ? 'jobDeferral' AND started_on IS NULL"
|
|
14
|
+
: `state IN ('created', 'retry') AND start_after > ${quoted}.job_now()`;
|
|
15
|
+
await client()
|
|
16
|
+
.getDb()
|
|
17
|
+
.executeSql(`UPDATE ${quoted}.job SET start_after = ${quoted}.job_now() WHERE name = $1 AND ${condition}`, [queue.name]);
|
|
18
|
+
changed();
|
|
19
|
+
for (const worker of client()
|
|
20
|
+
.getWipData()
|
|
21
|
+
.filter((candidate) => candidate.name === queue.name)) {
|
|
22
|
+
client().notifyWorker(worker.id);
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
queue.name,
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
runDeferredNow: (queue: Pick<QueueDefinition, "name">) => makeDue(queue, true),
|
|
30
|
+
runDueNow: (queue: Pick<QueueDefinition, "name">) => makeDue(queue, false),
|
|
31
|
+
};
|
|
32
|
+
}
|
package/src/server/definition.ts
CHANGED
|
@@ -19,11 +19,13 @@ export interface JobPayloadSchema extends Schema.Top {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
export interface JobContext {
|
|
22
|
+
readonly deferralCount: number;
|
|
22
23
|
readonly expireInSeconds: number;
|
|
23
24
|
readonly heartbeatSeconds: number | null;
|
|
24
25
|
readonly id: string;
|
|
25
26
|
readonly name: string;
|
|
26
27
|
readonly remainingBudget: Effect.Effect<Duration.Duration>;
|
|
28
|
+
readonly retryCount: number;
|
|
27
29
|
readonly signal: AbortSignal;
|
|
28
30
|
}
|
|
29
31
|
|
|
@@ -122,13 +124,15 @@ export interface DefineScheduleOptions<TName extends string> {
|
|
|
122
124
|
readonly worker?: WorkOptions;
|
|
123
125
|
}
|
|
124
126
|
|
|
125
|
-
export function jobContext(job: Job<unknown>, deadline: number): JobContext {
|
|
127
|
+
export function jobContext(job: Job<unknown>, deadline: number, deferralCount = 0): JobContext {
|
|
126
128
|
return {
|
|
129
|
+
deferralCount,
|
|
127
130
|
expireInSeconds: job.expireInSeconds,
|
|
128
131
|
heartbeatSeconds: job.heartbeatSeconds,
|
|
129
132
|
id: job.id,
|
|
130
133
|
name: job.name,
|
|
131
134
|
remainingBudget: Effect.map(Clock.currentTimeMillis, (now) => Duration.millis(Math.max(0, deadline - now))),
|
|
135
|
+
retryCount: job.retryCount,
|
|
132
136
|
signal: job.signal,
|
|
133
137
|
};
|
|
134
138
|
}
|
|
@@ -72,7 +72,7 @@ const registerQueue = Effect.fnUntraced(function* (
|
|
|
72
72
|
client,
|
|
73
73
|
name,
|
|
74
74
|
queue.workerOptions,
|
|
75
|
-
(job, deadline) => runQueueWorker(registration, job, deadline),
|
|
75
|
+
(job, deadline) => runQueueWorker(registration, job, deadline, client, schema),
|
|
76
76
|
scope,
|
|
77
77
|
schema,
|
|
78
78
|
queue.maxDeferrals,
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { Effect, Redacted, Schema } from "effect";
|
|
2
2
|
import type { Job } from "pg-boss";
|
|
3
|
+
import { deferralCount } from "#adapters/deferralCount.ts";
|
|
3
4
|
import { workerDiagnostics } from "#adapters/workerDiagnostics.ts";
|
|
5
|
+
import type { PgBossClient } from "#client.ts";
|
|
4
6
|
import { jobContext, type QueueWorker } from "#definition.ts";
|
|
5
7
|
import { PgBossPayloadError } from "#error.ts";
|
|
6
8
|
import { payloadOf } from "#internal/tracing.ts";
|
|
7
9
|
|
|
8
|
-
export function runQueueWorker(worker: QueueWorker, job: Job<unknown>, deadline: number) {
|
|
10
|
+
export function runQueueWorker(worker: QueueWorker, job: Job<unknown>, deadline: number, client: PgBossClient, schema: string) {
|
|
9
11
|
return Schema.decodeUnknownEffect(Schema.toCodecJson(worker.queue.schema))(payloadOf(job.data)).pipe(
|
|
10
12
|
Effect.mapError(
|
|
11
13
|
(error) =>
|
|
@@ -15,7 +17,9 @@ export function runQueueWorker(worker: QueueWorker, job: Job<unknown>, deadline:
|
|
|
15
17
|
queue: worker.queue.name,
|
|
16
18
|
}),
|
|
17
19
|
),
|
|
18
|
-
Effect.flatMap((payload) =>
|
|
20
|
+
Effect.flatMap((payload) =>
|
|
21
|
+
deferralCount(client, schema, job).pipe(Effect.flatMap((count) => worker.handler(payload, jobContext(job, deadline, count)))),
|
|
22
|
+
),
|
|
19
23
|
workerDiagnostics,
|
|
20
24
|
);
|
|
21
25
|
}
|
|
@@ -2,10 +2,9 @@ import { DateTime } from "effect";
|
|
|
2
2
|
import type { PgBoss } from "pg-boss";
|
|
3
3
|
import type { QueueDefinition } from "#definition.ts";
|
|
4
4
|
import { deferralOf } from "#internal/deferral.ts";
|
|
5
|
-
import { quotedSchema } from "#internal/storedRows.ts";
|
|
6
5
|
import { testingOperation } from "#internal/testingReadout.ts";
|
|
7
6
|
|
|
8
|
-
export function testingDeferrals(client: () => PgBoss
|
|
7
|
+
export function testingDeferrals(client: () => PgBoss) {
|
|
9
8
|
return {
|
|
10
9
|
deferred: (queue: Pick<QueueDefinition, "name">) =>
|
|
11
10
|
testingOperation(
|
|
@@ -19,26 +18,5 @@ export function testingDeferrals(client: () => PgBoss, schema: () => string, cha
|
|
|
19
18
|
},
|
|
20
19
|
queue.name,
|
|
21
20
|
),
|
|
22
|
-
runDeferredNow: (queue: Pick<QueueDefinition, "name">) =>
|
|
23
|
-
testingOperation(
|
|
24
|
-
"runDeferredNow",
|
|
25
|
-
async () => {
|
|
26
|
-
const quoted = quotedSchema(schema());
|
|
27
|
-
await client()
|
|
28
|
-
.getDb()
|
|
29
|
-
.executeSql(
|
|
30
|
-
`UPDATE ${quoted}.job SET start_after = ${quoted}.job_now()
|
|
31
|
-
WHERE name = $1 AND state = 'retry' AND output ? 'jobDeferral' AND started_on IS NULL`,
|
|
32
|
-
[queue.name],
|
|
33
|
-
);
|
|
34
|
-
changed();
|
|
35
|
-
for (const worker of client()
|
|
36
|
-
.getWipData()
|
|
37
|
-
.filter((candidate) => candidate.name === queue.name)) {
|
|
38
|
-
client().notifyWorker(worker.id);
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
queue.name,
|
|
42
|
-
),
|
|
43
21
|
};
|
|
44
22
|
}
|
package/src/server/testing.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type DateTime, Duration, Effect, Redacted } from "effect";
|
|
2
2
|
import type { PgBoss } from "pg-boss";
|
|
3
|
+
import { testingDueNow } from "#adapters/testingDueNow.ts";
|
|
3
4
|
import type { PgBossClientFactory } from "#client.ts";
|
|
4
5
|
import { defaultClientFactory } from "#defaultClientFactory.ts";
|
|
5
6
|
import type { JobPayloadSchema, QueueDefinition } from "#definition.ts";
|
|
@@ -64,7 +65,8 @@ export function makePgBossTesting(options: PgBossTestingOptions = {}) {
|
|
|
64
65
|
return testingClient(current, clientOptions.schema ?? "pgboss", controls);
|
|
65
66
|
};
|
|
66
67
|
return {
|
|
67
|
-
...testingDeferrals(client
|
|
68
|
+
...testingDeferrals(client),
|
|
69
|
+
...testingDueNow(client, () => schema, signal.changed),
|
|
68
70
|
...testingSchedules(client, signal.changed),
|
|
69
71
|
...testingWaits(client, () => fetches, signal),
|
|
70
72
|
checkBatchWindow: (queue: Pick<QueueDefinition, "name" | "workerOptions">, millisecondsPerJob: number) =>
|