pg-boss 12.21.2 → 12.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/attorney.d.ts.map +1 -1
- package/dist/attorney.js +6 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -1
- package/dist/manager.d.ts +2 -0
- package/dist/manager.d.ts.map +1 -1
- package/dist/manager.js +53 -22
- package/dist/migrationStore.d.ts.map +1 -1
- package/dist/migrationStore.js +134 -0
- package/dist/navigator.d.ts +17 -0
- package/dist/navigator.d.ts.map +1 -0
- package/dist/navigator.js +141 -0
- package/dist/plans.d.ts +6 -0
- package/dist/plans.d.ts.map +1 -1
- package/dist/plans.js +188 -67
- package/dist/types.d.ts +46 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -47,7 +47,7 @@ This will likely cater the most to teams already familiar with the simplicity of
|
|
|
47
47
|
* Job dependency workflow orchestration
|
|
48
48
|
* Cron scheduling, job deferral
|
|
49
49
|
* Queue storage policies to support a variety of rate limiting, debouncing, and concurrency use cases
|
|
50
|
-
* Priority queues, dead letter queues, automatic retries with exponential backoff
|
|
50
|
+
* Priority queues, dead letter queues with redrive, automatic retries with exponential backoff
|
|
51
51
|
* Pub/sub API for fan-out queue relationships
|
|
52
52
|
* SQL support for non-Node.js runtimes for most operations
|
|
53
53
|
* Serverless function compatible
|
package/dist/attorney.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attorney.d.ts","sourceRoot":"","sources":["../src/attorney.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAA;AAExC,QAAA,MAAM,MAAM;;;;CAIX,CAAA;AAyDD,iBAAS,iBAAiB,CAAE,MAAM,GAAE,GAAQ,QAc3C;AAED,iBAAS,aAAa,CAAE,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,OAAO,CAgDhD;AAWD,iBAAS,gBAAgB,CAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,QA2D/C;AA2GD,iBAAS,aAAa,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;IAClD,OAAO,EAAE,KAAK,CAAC,mBAAmB,CAAA;IAClC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;CACjC,CA8BA;AAED,iBAAS,cAAc,CAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAQlD;AAED,iBAAS,SAAS,CAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,kBAAkB,GAAG,KAAK,CAAC,0BAA0B,
|
|
1
|
+
{"version":3,"file":"attorney.d.ts","sourceRoot":"","sources":["../src/attorney.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAA;AAExC,QAAA,MAAM,MAAM;;;;CAIX,CAAA;AAyDD,iBAAS,iBAAiB,CAAE,MAAM,GAAE,GAAQ,QAc3C;AAED,iBAAS,aAAa,CAAE,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,OAAO,CAgDhD;AAWD,iBAAS,gBAAgB,CAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,QA2D/C;AA2GD,iBAAS,aAAa,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG;IAClD,OAAO,EAAE,KAAK,CAAC,mBAAmB,CAAA;IAClC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;CACjC,CA8BA;AAED,iBAAS,cAAc,CAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAQlD;AAED,iBAAS,SAAS,CAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,kBAAkB,GAAG,KAAK,CAAC,0BAA0B,CAwB9F;AAgDD,iBAAS,wBAAwB,CAAE,IAAI,EAAE,MAAM,QAK9C;AAED,iBAAS,eAAe,CAAE,IAAI,EAAE,MAAM,QAIrC;AAED,iBAAS,SAAS,CAAE,GAAG,EAAE,MAAM,QAI9B;AA2ID,OAAO,EACL,SAAS,EACT,wBAAwB,EACxB,eAAe,EACf,cAAc,EACd,aAAa,EACb,aAAa,EACb,SAAS,EACT,MAAM,EACN,gBAAgB,EAChB,iBAAiB,EAClB,CAAA"}
|
package/dist/attorney.js
CHANGED
|
@@ -291,6 +291,7 @@ function getConfig(value) {
|
|
|
291
291
|
applyOpsConfig(config);
|
|
292
292
|
applyScheduleConfig(config);
|
|
293
293
|
applyBamConfig(config);
|
|
294
|
+
applyFlowConfig(config);
|
|
294
295
|
validateWarningConfig(config);
|
|
295
296
|
return config;
|
|
296
297
|
}
|
|
@@ -416,4 +417,9 @@ function applyBamConfig(config) {
|
|
|
416
417
|
assert(!('bamIntervalSeconds' in config) || config.bamIntervalSeconds >= minInterval, `configuration assert: bamIntervalSeconds must be at least ${minInterval} seconds`);
|
|
417
418
|
config.bamIntervalSeconds = config.bamIntervalSeconds || 60;
|
|
418
419
|
}
|
|
420
|
+
function applyFlowConfig(config) {
|
|
421
|
+
const minInterval = config.__test__bypass_flow_interval_check ? 0.5 : 1;
|
|
422
|
+
assert(!('flowIntervalSeconds' in config) || config.flowIntervalSeconds >= minInterval, `configuration assert: flowIntervalSeconds must be at least ${minInterval} seconds`);
|
|
423
|
+
config.flowIntervalSeconds = config.flowIntervalSeconds || 5;
|
|
424
|
+
}
|
|
419
425
|
export { assertKey, assertPostgresObjectName, assertQueueName, checkFetchArgs, checkSendArgs, checkWorkArgs, getConfig, POLICY, validateFlowJobs, validateQueueArgs };
|
package/dist/index.d.ts
CHANGED
|
@@ -39,6 +39,7 @@ export declare class PgBoss extends EventEmitter<types.PgBossEventMap> {
|
|
|
39
39
|
resume(name: string, id: string | string[], options?: types.ConnectionOptions): Promise<types.CommandResponse>;
|
|
40
40
|
retry(name: string, id: string | string[], options?: types.ConnectionOptions): Promise<types.CommandResponse>;
|
|
41
41
|
deleteJob(name: string, id: string | string[], options?: types.ConnectionOptions): Promise<types.CommandResponse>;
|
|
42
|
+
redrive(name: string, options?: types.RedriveOptions): Promise<number>;
|
|
42
43
|
deleteQueuedJobs(name: string): Promise<void>;
|
|
43
44
|
deleteStoredJobs(name: string): Promise<void>;
|
|
44
45
|
deleteAllJobs(name?: string): Promise<void>;
|
|
@@ -61,8 +62,10 @@ export declare class PgBoss extends EventEmitter<types.PgBossEventMap> {
|
|
|
61
62
|
getQueueStats(name: string): Promise<types.QueueResult>;
|
|
62
63
|
isMaintaining(): boolean;
|
|
63
64
|
isBamWorking(): boolean;
|
|
65
|
+
isResolvingFlow(): boolean;
|
|
64
66
|
isCheckingSkew(): boolean;
|
|
65
67
|
supervise(name?: string): Promise<void>;
|
|
68
|
+
resolveFlow(): Promise<void>;
|
|
66
69
|
getWipData(options?: {
|
|
67
70
|
includeInternal?: boolean;
|
|
68
71
|
}): types.WipData[];
|
|
@@ -77,7 +80,7 @@ export declare class PgBoss extends EventEmitter<types.PgBossEventMap> {
|
|
|
77
80
|
getBamEntries(): Promise<types.BamEntry[]>;
|
|
78
81
|
getDb(): types.IDatabase;
|
|
79
82
|
}
|
|
80
|
-
export type { BackendProfile, BackendOptions, BamEntry, BamEvent, BamStatusSummary, CommandResponse, CompleteOptions, ConnectionOptions, ConstructorOptions, DatabaseOptions, FetchGroupConcurrencyOptions, DependencyRef, FetchOptions, FindJobsOptions, FlowJob, GroupConcurrencyConfig, GroupOptions, IDatabase as Db, InsertOptions, Job, JobFetchOptions, JobInsert, JobOptions, JobPollingOptions, JobResult, JobResultStatus, JobStates, Events, JobWithMetadata, MaintenanceOptions, OffWorkOptions, PgBossEventMap, Queue, QueueOptions, QueuePolicy, QueueResult, Request, Schedule, ScheduleOptions, SchedulingOptions, SendOptions, StopOptions, UpdateQueueOptions, Warning, WipData, WorkConcurrencyOptions, WorkerState, WorkHandler, WorkOptions, WorkWithMetadataHandler, WorkHandlerFor, PerJobWorkHandler, PerJobWorkWithMetadataHandler, } from './types.ts';
|
|
83
|
+
export type { BackendProfile, BackendOptions, BamEntry, BamEvent, BamStatusSummary, CommandResponse, CompleteOptions, ConnectionOptions, ConstructorOptions, DatabaseOptions, FetchGroupConcurrencyOptions, DependencyRef, FetchOptions, FindJobsOptions, FlowJob, GroupConcurrencyConfig, GroupOptions, IDatabase as Db, InsertOptions, Job, JobFetchOptions, JobInsert, JobOptions, JobPollingOptions, JobResult, JobResultStatus, JobStates, Events, JobWithMetadata, MaintenanceOptions, OffWorkOptions, PgBossEventMap, Queue, QueueOptions, QueuePolicy, QueueResult, RedriveOptions, Request, Schedule, ScheduleOptions, SchedulingOptions, SendOptions, StopOptions, UpdateQueueOptions, Warning, WipData, WorkConcurrencyOptions, WorkerState, WorkHandler, WorkOptions, WorkWithMetadataHandler, WorkHandlerFor, PerJobWorkHandler, PerJobWorkWithMetadataHandler, } from './types.ts';
|
|
81
84
|
export type { JobSpyInterface, JobSpyState, JobDataSelector, JobSelector, SpyJob, } from './spy.ts';
|
|
82
85
|
export { fromKnex, fromKysely, fromDrizzle, fromPrisma, fromPglite, } from './adapters/index.ts';
|
|
83
86
|
export type { KnexTransactionLike, KyselyTransactionLike, DrizzleTransactionLike, DrizzleSqlTagLike, PrismaTransactionLike, PGliteLike, } from './adapters/index.ts';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,6 +5,7 @@ import Manager from "./manager.js";
|
|
|
5
5
|
import Timekeeper from "./timekeeper.js";
|
|
6
6
|
import Boss from "./boss.js";
|
|
7
7
|
import Bam from "./bam.js";
|
|
8
|
+
import Navigator from "./navigator.js";
|
|
8
9
|
import Notifier from "./notifier.js";
|
|
9
10
|
import { delay } from "./tools.js";
|
|
10
11
|
import * as plans from "./plans.js";
|
|
@@ -16,7 +17,8 @@ export const events = Object.freeze({
|
|
|
16
17
|
warning: 'warning',
|
|
17
18
|
wip: 'wip',
|
|
18
19
|
stopped: 'stopped',
|
|
19
|
-
bam: 'bam'
|
|
20
|
+
bam: 'bam',
|
|
21
|
+
flow: 'flow'
|
|
20
22
|
});
|
|
21
23
|
export function getConstructionPlans(schema) {
|
|
22
24
|
return Contractor.constructionPlans(schema);
|
|
@@ -39,6 +41,7 @@ export class PgBoss extends EventEmitter {
|
|
|
39
41
|
#manager;
|
|
40
42
|
#timekeeper;
|
|
41
43
|
#bam;
|
|
44
|
+
#navigator;
|
|
42
45
|
#notifier;
|
|
43
46
|
constructor(value) {
|
|
44
47
|
super();
|
|
@@ -57,18 +60,21 @@ export class PgBoss extends EventEmitter {
|
|
|
57
60
|
const timekeeper = new Timekeeper(db, manager, config);
|
|
58
61
|
manager.timekeeper = timekeeper;
|
|
59
62
|
const bam = new Bam(db, config);
|
|
63
|
+
const navigator = new Navigator(db, manager, config);
|
|
60
64
|
const notifier = new Notifier(db, manager, config);
|
|
61
65
|
manager.notifier = notifier;
|
|
62
66
|
this.#promoteEvents(manager);
|
|
63
67
|
this.#promoteEvents(boss);
|
|
64
68
|
this.#promoteEvents(timekeeper);
|
|
65
69
|
this.#promoteEvents(bam);
|
|
70
|
+
this.#promoteEvents(navigator);
|
|
66
71
|
this.#promoteEvents(notifier);
|
|
67
72
|
this.#boss = boss;
|
|
68
73
|
this.#contractor = contractor;
|
|
69
74
|
this.#manager = manager;
|
|
70
75
|
this.#timekeeper = timekeeper;
|
|
71
76
|
this.#bam = bam;
|
|
77
|
+
this.#navigator = navigator;
|
|
72
78
|
this.#notifier = notifier;
|
|
73
79
|
}
|
|
74
80
|
#promoteEvents(emitter) {
|
|
@@ -98,6 +104,7 @@ export class PgBoss extends EventEmitter {
|
|
|
98
104
|
}
|
|
99
105
|
if (this.#config.supervise) {
|
|
100
106
|
await this.#boss.start();
|
|
107
|
+
await this.#navigator.start();
|
|
101
108
|
}
|
|
102
109
|
if (this.#config.schedule) {
|
|
103
110
|
await this.#timekeeper.start();
|
|
@@ -147,6 +154,7 @@ export class PgBoss extends EventEmitter {
|
|
|
147
154
|
await this.#manager.stop();
|
|
148
155
|
await this.#timekeeper.stop();
|
|
149
156
|
await this.#boss.stop();
|
|
157
|
+
await this.#navigator.stop();
|
|
150
158
|
await this.#bam.stop();
|
|
151
159
|
const shutdown = async () => {
|
|
152
160
|
await this.#manager.failWip();
|
|
@@ -219,6 +227,9 @@ export class PgBoss extends EventEmitter {
|
|
|
219
227
|
deleteJob(name, id, options) {
|
|
220
228
|
return this.#manager.deleteJob(name, id, options);
|
|
221
229
|
}
|
|
230
|
+
redrive(name, options) {
|
|
231
|
+
return this.#manager.redrive(name, options);
|
|
232
|
+
}
|
|
222
233
|
deleteQueuedJobs(name) {
|
|
223
234
|
return this.#manager.deleteQueuedJobs(name);
|
|
224
235
|
}
|
|
@@ -279,12 +290,20 @@ export class PgBoss extends EventEmitter {
|
|
|
279
290
|
isBamWorking() {
|
|
280
291
|
return this.#bam.working;
|
|
281
292
|
}
|
|
293
|
+
isResolvingFlow() {
|
|
294
|
+
return this.#navigator.working;
|
|
295
|
+
}
|
|
282
296
|
isCheckingSkew() {
|
|
283
297
|
return this.#timekeeper.checkingSkew;
|
|
284
298
|
}
|
|
285
299
|
supervise(name) {
|
|
286
300
|
return this.#boss.supervise(name);
|
|
287
301
|
}
|
|
302
|
+
// Force an immediate flow-resolution pass (unblock dependents of completed jobs) instead of
|
|
303
|
+
// waiting for the next background poll. Mirrors supervise() for on-demand maintenance.
|
|
304
|
+
resolveFlow() {
|
|
305
|
+
return this.#navigator.resolveNow();
|
|
306
|
+
}
|
|
288
307
|
getWipData(options) {
|
|
289
308
|
return this.#manager.getWipData(options);
|
|
290
309
|
}
|
package/dist/manager.d.ts
CHANGED
|
@@ -75,9 +75,11 @@ declare class Manager extends EventEmitter implements types.EventsMixin {
|
|
|
75
75
|
private failDistributed;
|
|
76
76
|
failJobsByTimeoutDistributed(table: string, queues: string[]): Promise<number>;
|
|
77
77
|
failJobsByHeartbeatDistributed(table: string, queues: string[]): Promise<number>;
|
|
78
|
+
resolveFlowJobsDistributed(table: string, names: string[]): Promise<number>;
|
|
78
79
|
private expireJobsDistributed;
|
|
79
80
|
private reinsertFailedJobs;
|
|
80
81
|
deleteJob(name: string, id: string | string[], options?: types.ConnectionOptions): Promise<types.CommandResponse>;
|
|
82
|
+
redrive(name: string, options?: types.RedriveOptions): Promise<number>;
|
|
81
83
|
cancel(name: string, id: string | string[], options?: types.ConnectionOptions): Promise<types.CommandResponse>;
|
|
82
84
|
resume(name: string, id: string | string[], options?: types.ConnectionOptions): Promise<types.CommandResponse>;
|
|
83
85
|
restore(name: string, id: string | string[], options?: types.ConnectionOptions): Promise<void>;
|
package/dist/manager.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAEA,OAAO,YAAY,MAAM,aAAa,CAAA;AAGtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAG7C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EAAU,KAAK,eAAe,EAAE,MAAM,UAAU,CAAA;AAmDvD,cAAM,OAAQ,SAAQ,YAAa,YAAW,KAAK,CAAC,WAAW;;IAC7D,MAAM;;;MAAS;IACf,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG;QAAE,MAAM,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC,GAAG,EAAE,CAAA;IAC/C,MAAM,EAAE,KAAK,CAAC,0BAA0B,CAAA;IACxC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,OAAO,EAAE,OAAO,GAAG,SAAS,CAAA;IAC5B,kBAAkB,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAA;IAC9C,WAAW,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAA;IACvC,UAAU,EAAE,UAAU,GAAG,SAAS,CAAA;IAClC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAA;IAChD,sBAAsB,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;gBAM5B,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,0BAA0B;IAe1E,MAAM,CAAC,CAAC,GAAG,MAAM,EAAG,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC;IAYrD,UAAU,IAAK,IAAI;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/manager.js
CHANGED
|
@@ -286,15 +286,11 @@ class Manager extends EventEmitter {
|
|
|
286
286
|
const payload = items.map(item => ({ id: item.id, output: this.mapCompletionDataArg(item.output) }));
|
|
287
287
|
const ids = items.map(item => item.id);
|
|
288
288
|
if (this.config.noMultiMutationCte) {
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
await tx.executeSql(plans.decrementDependents(this.config.schema), [name, blockingIds]);
|
|
295
|
-
}
|
|
296
|
-
return { jobs: ids, requested: ids.length, affected: rows.length };
|
|
297
|
-
});
|
|
289
|
+
// Dependency unblocking is handled out of band by the background resolver (Navigator), so
|
|
290
|
+
// completion is a single statement here too.
|
|
291
|
+
const sql = plans.completeJobsWithOutputsDistributed(this.config.schema, table);
|
|
292
|
+
const { rows } = await this.db.executeSql(sql, [name, JSON.stringify(payload)]);
|
|
293
|
+
return { jobs: ids, requested: ids.length, affected: rows.length };
|
|
298
294
|
}
|
|
299
295
|
const sql = plans.completeJobsWithOutputs(this.config.schema, table);
|
|
300
296
|
const result = await this.db.executeSql(sql, [name, JSON.stringify(payload)]);
|
|
@@ -988,18 +984,11 @@ class Manager extends EventEmitter {
|
|
|
988
984
|
return fn(db);
|
|
989
985
|
}
|
|
990
986
|
async completeDistributed(name, ids, outputData, table, db, includeQueued) {
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
const blockingIds = rows.filter(row => row.blocking).map(row => row.id);
|
|
997
|
-
if (blockingIds.length > 0) {
|
|
998
|
-
const decrementSql = plans.decrementDependents(this.config.schema);
|
|
999
|
-
await tx.executeSql(decrementSql, [name, blockingIds]);
|
|
1000
|
-
}
|
|
1001
|
-
return { jobs: ids, requested: ids.length, affected: rows.length };
|
|
1002
|
-
});
|
|
987
|
+
// Dependency unblocking is handled out of band by the background resolver (Navigator), so
|
|
988
|
+
// completion is a single statement on every backend.
|
|
989
|
+
const sql = plans.completeJobsDistributed(this.config.schema, table, includeQueued);
|
|
990
|
+
const { rows } = await db.executeSql(sql, [name, ids, outputData]);
|
|
991
|
+
return { jobs: ids, requested: ids.length, affected: rows.length };
|
|
1003
992
|
}
|
|
1004
993
|
async fail(name, id, data, options = {}) {
|
|
1005
994
|
Attorney.assertQueueName(name);
|
|
@@ -1047,6 +1036,32 @@ class Manager extends EventEmitter {
|
|
|
1047
1036
|
const select = plans.selectJobsToFailByHeartbeat(this.config.schema, table, queues);
|
|
1048
1037
|
return this.expireJobsDistributed(table, select, { value: { message: 'job heartbeat timeout' } });
|
|
1049
1038
|
}
|
|
1039
|
+
// Distributed flow audit for one partition table (CockroachDB / noMultiMutationCte): lock a
|
|
1040
|
+
// batch of completed blocking parents, then decrement their children and clear blocking per
|
|
1041
|
+
// parent queue (decrementDependents and clearBlocking are each keyed by a single name). Returns
|
|
1042
|
+
// the number of parents resolved so the resolver can loop until a batch drains.
|
|
1043
|
+
async resolveFlowJobsDistributed(table, names) {
|
|
1044
|
+
const select = plans.selectBlockingParents(this.config.schema, table, names, this.config.noSkipLocked);
|
|
1045
|
+
return this.withDistributedTransaction(this.db, async (tx) => {
|
|
1046
|
+
const { rows } = await tx.executeSql(select.text, select.values);
|
|
1047
|
+
if (rows.length === 0) {
|
|
1048
|
+
return 0;
|
|
1049
|
+
}
|
|
1050
|
+
const idsByName = new Map();
|
|
1051
|
+
for (const row of rows) {
|
|
1052
|
+
const list = idsByName.get(row.name) || [];
|
|
1053
|
+
list.push(row.id);
|
|
1054
|
+
idsByName.set(row.name, list);
|
|
1055
|
+
}
|
|
1056
|
+
const decrementSql = plans.decrementDependents(this.config.schema);
|
|
1057
|
+
const clearSql = plans.clearBlocking(this.config.schema);
|
|
1058
|
+
for (const [name, ids] of idsByName) {
|
|
1059
|
+
await tx.executeSql(decrementSql, [name, ids]);
|
|
1060
|
+
await tx.executeSql(clearSql, [name, ids]);
|
|
1061
|
+
}
|
|
1062
|
+
return rows.length;
|
|
1063
|
+
});
|
|
1064
|
+
}
|
|
1050
1065
|
async expireJobsDistributed(table, select, outputData) {
|
|
1051
1066
|
return this.withDistributedTransaction(this.db, async (tx) => {
|
|
1052
1067
|
const { rows: jobs } = await tx.executeSql(select.text, []);
|
|
@@ -1122,7 +1137,7 @@ class Manager extends EventEmitter {
|
|
|
1122
1137
|
]);
|
|
1123
1138
|
// Insert to dead letter queue if failed and has dead_letter configured
|
|
1124
1139
|
if (job.dead_letter) {
|
|
1125
|
-
await tx.executeSql(dlqSql, [job.dead_letter, job.data, jobOutput]);
|
|
1140
|
+
await tx.executeSql(dlqSql, [job.dead_letter, job.data, jobOutput, job.name, job.id, job.created_on, job.retry_count]);
|
|
1126
1141
|
}
|
|
1127
1142
|
}
|
|
1128
1143
|
count++;
|
|
@@ -1138,6 +1153,22 @@ class Manager extends EventEmitter {
|
|
|
1138
1153
|
const result = await db.executeSql(sql, [name, ids]);
|
|
1139
1154
|
return this.mapCommandResponse(ids, result);
|
|
1140
1155
|
}
|
|
1156
|
+
async redrive(name, options = {}) {
|
|
1157
|
+
Attorney.assertQueueName(name);
|
|
1158
|
+
const { destination, sourceName, limit = 1000 } = options;
|
|
1159
|
+
if (destination !== undefined) {
|
|
1160
|
+
Attorney.assertQueueName(destination);
|
|
1161
|
+
}
|
|
1162
|
+
if (sourceName !== undefined) {
|
|
1163
|
+
Attorney.assertQueueName(sourceName);
|
|
1164
|
+
}
|
|
1165
|
+
assert(Number.isInteger(limit) && limit >= 1, 'limit must be an integer >= 1');
|
|
1166
|
+
const db = this.assertDb(options);
|
|
1167
|
+
const { table } = await this.getQueueCache(name);
|
|
1168
|
+
const sql = plans.redriveJobs(this.config.schema, table);
|
|
1169
|
+
const result = await db.executeSql(sql, [name, destination ?? null, sourceName ?? null, limit]);
|
|
1170
|
+
return result.rows[0].moved;
|
|
1171
|
+
}
|
|
1141
1172
|
async cancel(name, id, options = {}) {
|
|
1142
1173
|
Attorney.assertQueueName(name);
|
|
1143
1174
|
const db = this.assertDb(options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrationStore.d.ts","sourceRoot":"","sources":["../src/migrationStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAKnC,UAAU,cAAc;IACtB,WAAW,CAAC,EAAE,OAAO,CAAA;IAIrB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC3B;AAyCD,UAAU,iBAAiB;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AASD,iBAAS,QAAQ,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,UAQ5G;AAED,iBAAS,IAAI,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,UAQxG;AAKD,iBAAS,eAAe,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,OAAO,GAAE,cAAmB,GAAG,iBAAiB,CAgCrK;AAKD,iBAAS,OAAO,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,OAAO,GAAE,cAAmB,UAIzI;
|
|
1
|
+
{"version":3,"file":"migrationStore.d.ts","sourceRoot":"","sources":["../src/migrationStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAKnC,UAAU,cAAc;IACtB,WAAW,CAAC,EAAE,OAAO,CAAA;IAIrB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC3B;AAyCD,UAAU,iBAAiB;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AASD,iBAAS,QAAQ,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,UAQ5G;AAED,iBAAS,IAAI,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,UAQxG;AAKD,iBAAS,eAAe,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,OAAO,GAAE,cAAmB,GAAG,iBAAiB,CAgCrK;AAKD,iBAAS,OAAO,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,OAAO,GAAE,cAAmB,UAIzI;AAwkBD,iBAAS,MAAM,CAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CA2TlD;AAED,OAAO,EACL,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,eAAe,EACf,MAAM,GACP,CAAA"}
|
package/dist/migrationStore.js
CHANGED
|
@@ -568,6 +568,92 @@ const createQueueFn = {
|
|
|
568
568
|
END;
|
|
569
569
|
$$
|
|
570
570
|
LANGUAGE plpgsql;
|
|
571
|
+
`,
|
|
572
|
+
33: (schema) => `
|
|
573
|
+
CREATE OR REPLACE FUNCTION ${schema}.create_queue(queue_name text, options jsonb)
|
|
574
|
+
RETURNS VOID AS
|
|
575
|
+
$$
|
|
576
|
+
DECLARE
|
|
577
|
+
tablename varchar := CASE WHEN options->>'partition' = 'true'
|
|
578
|
+
THEN 'j' || encode(sha224(queue_name::bytea), 'hex')
|
|
579
|
+
ELSE 'job_common'
|
|
580
|
+
END;
|
|
581
|
+
queue_created_on timestamptz;
|
|
582
|
+
BEGIN
|
|
583
|
+
|
|
584
|
+
WITH q as (
|
|
585
|
+
INSERT INTO ${schema}.queue (
|
|
586
|
+
name,
|
|
587
|
+
policy,
|
|
588
|
+
retry_limit,
|
|
589
|
+
retry_delay,
|
|
590
|
+
retry_backoff,
|
|
591
|
+
retry_delay_max,
|
|
592
|
+
expire_seconds,
|
|
593
|
+
retention_seconds,
|
|
594
|
+
deletion_seconds,
|
|
595
|
+
warning_queued,
|
|
596
|
+
dead_letter,
|
|
597
|
+
partition,
|
|
598
|
+
table_name,
|
|
599
|
+
heartbeat_seconds,
|
|
600
|
+
notify
|
|
601
|
+
)
|
|
602
|
+
VALUES (
|
|
603
|
+
queue_name,
|
|
604
|
+
options->>'policy',
|
|
605
|
+
COALESCE((options->>'retryLimit')::int, 2),
|
|
606
|
+
COALESCE((options->>'retryDelay')::int, 0),
|
|
607
|
+
COALESCE((options->>'retryBackoff')::bool, false),
|
|
608
|
+
(options->>'retryDelayMax')::int,
|
|
609
|
+
COALESCE((options->>'expireInSeconds')::int, 900),
|
|
610
|
+
COALESCE((options->>'retentionSeconds')::int, 1209600),
|
|
611
|
+
COALESCE((options->>'deleteAfterSeconds')::int, 604800),
|
|
612
|
+
COALESCE((options->>'warningQueueSize')::int, 0),
|
|
613
|
+
options->>'deadLetter',
|
|
614
|
+
COALESCE((options->>'partition')::bool, false),
|
|
615
|
+
tablename,
|
|
616
|
+
(options->>'heartbeatSeconds')::int,
|
|
617
|
+
COALESCE((options->>'notify')::bool, false)
|
|
618
|
+
)
|
|
619
|
+
ON CONFLICT DO NOTHING
|
|
620
|
+
RETURNING created_on
|
|
621
|
+
)
|
|
622
|
+
SELECT created_on into queue_created_on from q;
|
|
623
|
+
|
|
624
|
+
IF queue_created_on IS NULL OR options->>'partition' IS DISTINCT FROM 'true' THEN
|
|
625
|
+
RETURN;
|
|
626
|
+
END IF;
|
|
627
|
+
|
|
628
|
+
EXECUTE format('CREATE TABLE ${schema}.%I (LIKE ${schema}.job INCLUDING DEFAULTS)', tablename);
|
|
629
|
+
|
|
630
|
+
EXECUTE ${schema}.job_table_format($cmd$ALTER TABLE ${schema}.job ADD PRIMARY KEY (name, id)$cmd$, tablename);
|
|
631
|
+
EXECUTE ${schema}.job_table_format($cmd$ALTER TABLE ${schema}.job ADD CONSTRAINT q_fkey FOREIGN KEY (name) REFERENCES ${schema}.queue (name) ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED$cmd$, tablename);
|
|
632
|
+
EXECUTE ${schema}.job_table_format($cmd$ALTER TABLE ${schema}.job ADD CONSTRAINT dlq_fkey FOREIGN KEY (dead_letter) REFERENCES ${schema}.queue (name) ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED$cmd$, tablename);
|
|
633
|
+
|
|
634
|
+
EXECUTE ${schema}.job_table_format($cmd$CREATE INDEX job_i5 ON ${schema}.job (name, start_after) WHERE state < 'active' AND NOT blocked$cmd$, tablename);
|
|
635
|
+
EXECUTE ${schema}.job_table_format($cmd$CREATE UNIQUE INDEX job_i4 ON ${schema}.job (name, singleton_on, COALESCE(singleton_key, '')) WHERE state <> 'cancelled' AND singleton_on IS NOT NULL$cmd$, tablename);
|
|
636
|
+
EXECUTE ${schema}.job_table_format($cmd$CREATE INDEX job_i7 ON ${schema}.job (name, group_id) WHERE state = 'active' AND group_id IS NOT NULL$cmd$, tablename);
|
|
637
|
+
EXECUTE ${schema}.job_table_format($cmd$CREATE INDEX job_i9 ON ${schema}.job (name, id) WHERE blocking AND state = 'completed'$cmd$, tablename);
|
|
638
|
+
|
|
639
|
+
IF options->>'policy' = 'short' THEN
|
|
640
|
+
EXECUTE ${schema}.job_table_format($cmd$CREATE UNIQUE INDEX job_i1 ON ${schema}.job (name, COALESCE(singleton_key, '')) WHERE state = 'created' AND policy = 'short'$cmd$, tablename);
|
|
641
|
+
ELSIF options->>'policy' = 'singleton' THEN
|
|
642
|
+
EXECUTE ${schema}.job_table_format($cmd$CREATE UNIQUE INDEX job_i2 ON ${schema}.job (name, COALESCE(singleton_key, '')) WHERE state = 'active' AND policy = 'singleton'$cmd$, tablename);
|
|
643
|
+
ELSIF options->>'policy' = 'stately' THEN
|
|
644
|
+
EXECUTE ${schema}.job_table_format($cmd$CREATE UNIQUE INDEX job_i3 ON ${schema}.job (name, state, COALESCE(singleton_key, '')) WHERE state <= 'active' AND policy = 'stately'$cmd$, tablename);
|
|
645
|
+
ELSIF options->>'policy' = 'exclusive' THEN
|
|
646
|
+
EXECUTE ${schema}.job_table_format($cmd$CREATE UNIQUE INDEX job_i6 ON ${schema}.job (name, COALESCE(singleton_key, '')) WHERE state <= 'active' AND policy = 'exclusive'$cmd$, tablename);
|
|
647
|
+
ELSIF options->>'policy' = 'key_strict_fifo' THEN
|
|
648
|
+
EXECUTE ${schema}.job_table_format($cmd$CREATE UNIQUE INDEX job_i8 ON ${schema}.job (name, singleton_key) WHERE state IN ('active', 'retry', 'failed') AND policy = 'key_strict_fifo'$cmd$, tablename);
|
|
649
|
+
EXECUTE ${schema}.job_table_format($cmd$ALTER TABLE ${schema}.job ADD CONSTRAINT job_key_strict_fifo_singleton_key_check CHECK (NOT (policy = 'key_strict_fifo' AND singleton_key IS NULL))$cmd$, tablename);
|
|
650
|
+
END IF;
|
|
651
|
+
|
|
652
|
+
EXECUTE format('ALTER TABLE ${schema}.%I ADD CONSTRAINT cjc CHECK (name=%L)', tablename, queue_name);
|
|
653
|
+
EXECUTE format('ALTER TABLE ${schema}.job ATTACH PARTITION ${schema}.%I FOR VALUES IN (%L)', tablename, queue_name);
|
|
654
|
+
END;
|
|
655
|
+
$$
|
|
656
|
+
LANGUAGE plpgsql;
|
|
571
657
|
`
|
|
572
658
|
};
|
|
573
659
|
function getAll(schema) {
|
|
@@ -835,6 +921,54 @@ function getAll(schema) {
|
|
|
835
921
|
createQueueFn[31](schema),
|
|
836
922
|
`ALTER TABLE ${schema}.queue DROP COLUMN notify`
|
|
837
923
|
]
|
|
924
|
+
},
|
|
925
|
+
{
|
|
926
|
+
release: '12.22.0',
|
|
927
|
+
version: 33,
|
|
928
|
+
previous: 32,
|
|
929
|
+
install: [
|
|
930
|
+
`ALTER TABLE ${schema}.version ADD COLUMN IF NOT EXISTS flow_on timestamp with time zone`,
|
|
931
|
+
// The partial job_i9 index backs the background flow resolver. Built synchronously across
|
|
932
|
+
// job_common + every existing partition (no table arg fans out), mirroring v31's job_i5
|
|
933
|
+
// rebuild; it is a tiny partial index, so the build is cheap. New partitions get it from
|
|
934
|
+
// createQueueFn[33] below.
|
|
935
|
+
`SELECT ${schema}.job_table_run($cmd$CREATE INDEX job_i9 ON ${schema}.job (name, id) WHERE blocking AND state = 'completed'$cmd$)`,
|
|
936
|
+
// Drop the covering INCLUDE from the fetch index job_i5: FOR UPDATE ... SKIP LOCKED in the
|
|
937
|
+
// fetch forces heap access, so the payload was never read from the index
|
|
938
|
+
// Rebuilt across job_common + every existing partition, same as v31's job_i5 rebuild.
|
|
939
|
+
// New partitions get the slim form from createQueueFn[33] above.
|
|
940
|
+
`SELECT ${schema}.job_table_run($cmd$DROP INDEX IF EXISTS ${schema}.job_i5$cmd$)`,
|
|
941
|
+
`SELECT ${schema}.job_table_run($cmd$CREATE INDEX job_i5 ON ${schema}.job (name, start_after) WHERE state < 'active' AND NOT blocked$cmd$)`,
|
|
942
|
+
createQueueFn[33](schema)
|
|
943
|
+
],
|
|
944
|
+
uninstall: [
|
|
945
|
+
createQueueFn[32](schema),
|
|
946
|
+
// Restore the covering INCLUDE on the fetch index (the v32 shape).
|
|
947
|
+
`SELECT ${schema}.job_table_run($cmd$DROP INDEX IF EXISTS ${schema}.job_i5$cmd$)`,
|
|
948
|
+
`SELECT ${schema}.job_table_run($cmd$CREATE INDEX job_i5 ON ${schema}.job (name, start_after) INCLUDE (priority, created_on, id) WHERE state < 'active' AND NOT blocked$cmd$)`,
|
|
949
|
+
`SELECT ${schema}.job_table_run($cmd$DROP INDEX IF EXISTS ${schema}.job_i9$cmd$)`,
|
|
950
|
+
`ALTER TABLE ${schema}.version DROP COLUMN flow_on`
|
|
951
|
+
]
|
|
952
|
+
},
|
|
953
|
+
{
|
|
954
|
+
release: '12.23.0',
|
|
955
|
+
version: 34,
|
|
956
|
+
previous: 33,
|
|
957
|
+
// Dead-letter source provenance. Plain columns on the partitioned parent cascade to
|
|
958
|
+
// job_common (DEFAULT partition) and every existing/future partition, so no job_table_run
|
|
959
|
+
// fan-out or createQueueFn bump is needed (queue-creation/index logic is unchanged).
|
|
960
|
+
install: [
|
|
961
|
+
`ALTER TABLE ${schema}.job ADD COLUMN IF NOT EXISTS source_name text`,
|
|
962
|
+
`ALTER TABLE ${schema}.job ADD COLUMN IF NOT EXISTS source_id uuid`,
|
|
963
|
+
`ALTER TABLE ${schema}.job ADD COLUMN IF NOT EXISTS source_created_on timestamp with time zone`,
|
|
964
|
+
`ALTER TABLE ${schema}.job ADD COLUMN IF NOT EXISTS source_retry_count int`
|
|
965
|
+
],
|
|
966
|
+
uninstall: [
|
|
967
|
+
`ALTER TABLE ${schema}.job DROP COLUMN source_name`,
|
|
968
|
+
`ALTER TABLE ${schema}.job DROP COLUMN source_id`,
|
|
969
|
+
`ALTER TABLE ${schema}.job DROP COLUMN source_created_on`,
|
|
970
|
+
`ALTER TABLE ${schema}.job DROP COLUMN source_retry_count`
|
|
971
|
+
]
|
|
838
972
|
}
|
|
839
973
|
];
|
|
840
974
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import EventEmitter from 'node:events';
|
|
2
|
+
import type Manager from './manager.ts';
|
|
3
|
+
import * as types from './types.ts';
|
|
4
|
+
declare class Navigator extends EventEmitter implements types.EventsMixin {
|
|
5
|
+
#private;
|
|
6
|
+
events: {
|
|
7
|
+
error: string;
|
|
8
|
+
flow: string;
|
|
9
|
+
};
|
|
10
|
+
constructor(db: types.IDatabase, manager: Manager, config: types.ResolvedConstructorOptions);
|
|
11
|
+
get working(): boolean;
|
|
12
|
+
start(): Promise<void>;
|
|
13
|
+
stop(): Promise<void>;
|
|
14
|
+
resolveNow(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export default Navigator;
|
|
17
|
+
//# sourceMappingURL=navigator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigator.d.ts","sourceRoot":"","sources":["../src/navigator.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAA;AACtC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAGvC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAiBnC,cAAM,SAAU,SAAQ,YAAa,YAAW,KAAK,CAAC,WAAW;;IAS/D,MAAM;;;MAAS;gBAGb,EAAE,EAAE,KAAK,CAAC,SAAS,EACnB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,KAAK,CAAC,0BAA0B;IAY1C,IAAI,OAAO,IAAK,OAAO,CAEtB;IAEK,KAAK;IAYL,IAAI;IA6CJ,UAAU,IAAK,OAAO,CAAC,IAAI,CAAC;CA8DnC;AAED,eAAe,SAAS,CAAA"}
|