pg-boss 12.19.1 → 12.20.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 +2 -43
- package/dist/adapters/index.d.ts +2 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +1 -0
- package/dist/adapters/pglite.d.ts +11 -0
- package/dist/adapters/pglite.d.ts.map +1 -0
- package/dist/adapters/pglite.js +37 -0
- package/dist/attorney.d.ts.map +1 -1
- package/dist/attorney.js +54 -0
- package/dist/boss.d.ts.map +1 -1
- package/dist/boss.js +23 -8
- package/dist/contractor.js +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -1
- package/dist/manager.d.ts +8 -1
- package/dist/manager.d.ts.map +1 -1
- package/dist/manager.js +221 -11
- package/dist/migrationStore.d.ts +3 -3
- package/dist/migrationStore.d.ts.map +1 -1
- package/dist/migrationStore.js +8 -8
- package/dist/plans.d.ts +41 -11
- package/dist/plans.d.ts.map +1 -1
- package/dist/plans.js +277 -66
- package/dist/types.d.ts +37 -9
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -1
package/README.md
CHANGED
|
@@ -42,7 +42,7 @@ This will likely cater the most to teams already familiar with the simplicity of
|
|
|
42
42
|
|
|
43
43
|
## Summary
|
|
44
44
|
* Exactly-once job delivery
|
|
45
|
-
* Create jobs
|
|
45
|
+
* Create jobs in an existing db transaction, including adapters for popular ORMs such as Drizzle, Knex, Kysely, Prisma
|
|
46
46
|
* Backpressure-compatible polling workers
|
|
47
47
|
* Cron scheduling
|
|
48
48
|
* Queue storage policies to support a variety of rate limiting, debouncing, and concurrency use cases
|
|
@@ -51,6 +51,7 @@ This will likely cater the most to teams already familiar with the simplicity of
|
|
|
51
51
|
* SQL support for non-Node.js runtimes for most operations
|
|
52
52
|
* Serverless function compatible
|
|
53
53
|
* Multi-master compatible (for example, in a Kubernetes ReplicaSet)
|
|
54
|
+
* [Additional database backends](https://timgit.github.io/pg-boss/docs/database-backends) for Postgres-based databases such as CockroachDB, YugabyteDB and Citus. Or, use embedded PGlite for running entirely in-process.
|
|
54
55
|
|
|
55
56
|
## CLI
|
|
56
57
|
|
|
@@ -70,48 +71,6 @@ A HTTP proxy is available in the [`@pg-boss/proxy`](https://www.npmjs.com/packag
|
|
|
70
71
|
|
|
71
72
|
See the [proxy documentation](https://github.com/timgit/pg-boss/blob/master/packages/proxy/README.md) for full configuration and deployment options.
|
|
72
73
|
|
|
73
|
-
## ORM Transaction Adapters
|
|
74
|
-
|
|
75
|
-
pg-boss ships adapters for running operations inside ORM-managed transactions. Each adapter wraps the ORM's transaction object as an `IDatabase` you can pass via the `db` option on `send()`, `insert()`, `fetch()`, `complete()`, and other methods.
|
|
76
|
-
|
|
77
|
-
### Knex / Kysely / Prisma
|
|
78
|
-
|
|
79
|
-
```ts
|
|
80
|
-
import { fromKnex, fromKysely, fromPrisma } from 'pg-boss'
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
```ts
|
|
84
|
-
// Knex
|
|
85
|
-
await knex.transaction(async (trx) => {
|
|
86
|
-
await boss.send('my-queue', data, { db: fromKnex(trx) })
|
|
87
|
-
})
|
|
88
|
-
|
|
89
|
-
// Kysely
|
|
90
|
-
await db.transaction().execute(async (trx) => {
|
|
91
|
-
await boss.send('my-queue', data, { db: fromKysely(trx) })
|
|
92
|
-
})
|
|
93
|
-
|
|
94
|
-
// Prisma (v7+ with @prisma/adapter-pg)
|
|
95
|
-
await prisma.$transaction(async (tx) => {
|
|
96
|
-
await boss.send('my-queue', data, { db: fromPrisma(tx) })
|
|
97
|
-
})
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
### Drizzle
|
|
101
|
-
|
|
102
|
-
The Drizzle adapter accepts the `sql` tagged-template function from `drizzle-orm` as a second argument so it can construct parameterised queries without a runtime dependency on `drizzle-orm`.
|
|
103
|
-
|
|
104
|
-
```ts
|
|
105
|
-
import { fromDrizzle } from 'pg-boss'
|
|
106
|
-
import { sql } from 'drizzle-orm'
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
```ts
|
|
110
|
-
await db.transaction(async (tx) => {
|
|
111
|
-
await boss.send('my-queue', data, { db: fromDrizzle(tx, sql) })
|
|
112
|
-
})
|
|
113
|
-
```
|
|
114
|
-
|
|
115
74
|
## Requirements
|
|
116
75
|
* Node 22.12 or higher for CommonJS's require(esm)
|
|
117
76
|
* PostgreSQL 13 or higher
|
package/dist/adapters/index.d.ts
CHANGED
|
@@ -2,8 +2,10 @@ export { fromKnex } from './knex.ts';
|
|
|
2
2
|
export { fromKysely } from './kysely.ts';
|
|
3
3
|
export { fromDrizzle } from './drizzle.ts';
|
|
4
4
|
export { fromPrisma } from './prisma.ts';
|
|
5
|
+
export { fromPglite } from './pglite.ts';
|
|
5
6
|
export type { KnexTransactionLike } from './knex.ts';
|
|
6
7
|
export type { KyselyTransactionLike } from './kysely.ts';
|
|
7
8
|
export type { DrizzleTransactionLike, DrizzleSqlTagLike } from './drizzle.ts';
|
|
8
9
|
export type { PrismaTransactionLike } from './prisma.ts';
|
|
10
|
+
export type { PGliteLike } from './pglite.ts';
|
|
9
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,YAAY,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AACpD,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACxD,YAAY,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAC7E,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,YAAY,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AACpD,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACxD,YAAY,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAC7E,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACxD,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/adapters/index.js
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { IDatabase } from '../types.ts';
|
|
2
|
+
export interface PGliteLike {
|
|
3
|
+
query<T = any>(query: string, params?: unknown[]): Promise<{
|
|
4
|
+
rows: T[];
|
|
5
|
+
}>;
|
|
6
|
+
exec(query: string): Promise<Array<{
|
|
7
|
+
rows: any[];
|
|
8
|
+
}>>;
|
|
9
|
+
}
|
|
10
|
+
export declare function fromPglite(pglite: PGliteLike): IDatabase;
|
|
11
|
+
//# sourceMappingURL=pglite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pglite.d.ts","sourceRoot":"","sources":["../../src/adapters/pglite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAI5C,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,EAAE,CAAA;KAAE,CAAC,CAAA;IACzE,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC,CAAC,CAAA;CACrD;AAUD,wBAAgB,UAAU,CAAE,MAAM,EAAE,UAAU,GAAG,SAAS,CA6BzD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Adapts a PGlite instance (embedded single-connection WASM PostgreSQL) to pg-boss's IDatabase.
|
|
2
|
+
// PGlite is full PostgreSQL, so it needs none of the distributed compatibility flags — pair it
|
|
3
|
+
// with `backend: 'pglite'`. The user owns the PGlite instance lifecycle (construction and close).
|
|
4
|
+
//
|
|
5
|
+
// PGlite uses native `$1` placeholders, so no placeholder translation is needed. The one wrinkle is
|
|
6
|
+
// that `query()` runs a single statement only, while pg-boss issues concatenated multi-statement DDL
|
|
7
|
+
// (migrations/schema creation) with no parameters — those must go through `exec()`, which mirrors the
|
|
8
|
+
// simple-vs-extended protocol split that the default `pg.Pool`-backed driver relies on.
|
|
9
|
+
export function fromPglite(pglite) {
|
|
10
|
+
// pg-boss issues each statement expecting connection-pool semantics: an error on one statement
|
|
11
|
+
// must not affect the next. PGlite has a single connection, so a failed statement inside a
|
|
12
|
+
// BEGIN...COMMIT block (e.g. a migration that rolls back) leaves the connection in an aborted
|
|
13
|
+
// transaction that poisons every later query. A pooled driver sidesteps this by handing out a
|
|
14
|
+
// fresh connection; we emulate it by rolling back any aborted transaction before rethrowing.
|
|
15
|
+
const run = async (text, values) => {
|
|
16
|
+
if (values?.length) {
|
|
17
|
+
return await pglite.query(text, values);
|
|
18
|
+
}
|
|
19
|
+
// No parameters: may be a multi-statement block (e.g. a `locked()` BEGIN ... RETURNING ...
|
|
20
|
+
// COMMIT). exec() returns one result per statement; flatten their rows so a RETURNING in the
|
|
21
|
+
// middle isn't lost behind a trailing COMMIT. This mirrors how pg-boss unwraps the array that
|
|
22
|
+
// node-postgres returns for multi-statement queries (see unwrapSQLResult).
|
|
23
|
+
const results = await pglite.exec(text);
|
|
24
|
+
return { rows: results.flatMap(r => r.rows ?? []) };
|
|
25
|
+
};
|
|
26
|
+
return {
|
|
27
|
+
async executeSql(text, values) {
|
|
28
|
+
try {
|
|
29
|
+
return await run(text, values);
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
await pglite.query('ROLLBACK').catch(() => { });
|
|
33
|
+
throw err;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
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;
|
|
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;AAuDD,iBAAS,iBAAiB,CAAE,MAAM,GAAE,GAAQ,QAY3C;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,CA6BA;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,CAqB9F;AAgDD,iBAAS,wBAAwB,CAAE,IAAI,EAAE,MAAM,QAK9C;AAED,iBAAS,eAAe,CAAE,IAAI,EAAE,MAAM,QAIrC;AAED,iBAAS,SAAS,CAAE,GAAG,EAAE,MAAM,QAI9B;AA2GD,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
|
@@ -5,6 +5,41 @@ const POLICY = {
|
|
|
5
5
|
MIN_POLLING_INTERVAL_MS: 500,
|
|
6
6
|
MAX_RETENTION_DAYS: 365
|
|
7
7
|
};
|
|
8
|
+
// The internal compatibility flags a backend can toggle. A backend sets only the flags that differ
|
|
9
|
+
// from stock PostgreSQL; everything else defaults to false. These are derived from the backend
|
|
10
|
+
// profile and are not user-configurable (see resolveBackend).
|
|
11
|
+
const COMPATIBILITY_FLAGS = [
|
|
12
|
+
'noSkipLocked',
|
|
13
|
+
'noMultiMutationCte',
|
|
14
|
+
'noTablePartitioning',
|
|
15
|
+
'noDeferrableConstraints',
|
|
16
|
+
'noAdvisoryLocks',
|
|
17
|
+
'noCoveringIndexes'
|
|
18
|
+
];
|
|
19
|
+
// The single source of truth for backend presets, mirrored by test/testHelper.ts.
|
|
20
|
+
const BACKEND_PROFILES = {
|
|
21
|
+
postgres: { kind: 'standard', flags: {} },
|
|
22
|
+
cockroachdb: {
|
|
23
|
+
kind: 'distributed',
|
|
24
|
+
flags: {
|
|
25
|
+
noSkipLocked: true,
|
|
26
|
+
noMultiMutationCte: true,
|
|
27
|
+
noTablePartitioning: true,
|
|
28
|
+
noDeferrableConstraints: true,
|
|
29
|
+
noAdvisoryLocks: true,
|
|
30
|
+
noCoveringIndexes: true
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
yugabytedb: {
|
|
34
|
+
kind: 'distributed',
|
|
35
|
+
flags: {
|
|
36
|
+
noAdvisoryLocks: true,
|
|
37
|
+
noTablePartitioning: true
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
citus: { kind: 'distributed', flags: {} },
|
|
41
|
+
pglite: { kind: 'embedded', flags: {} }
|
|
42
|
+
};
|
|
8
43
|
function assertObjectName(value, name = 'Name') {
|
|
9
44
|
assert(/^[\w.\-/]+$/.test(value), `${name} can only contain alphanumeric characters, underscores, hyphens, periods, or forward slashes`);
|
|
10
45
|
}
|
|
@@ -246,6 +281,7 @@ function getConfig(value) {
|
|
|
246
281
|
config.supervise = ('supervise' in config) ? config.supervise : true;
|
|
247
282
|
config.migrate = ('migrate' in config) ? config.migrate : true;
|
|
248
283
|
config.createSchema = ('createSchema' in config) ? config.createSchema : true;
|
|
284
|
+
resolveBackend(config);
|
|
249
285
|
applySchemaConfig(config);
|
|
250
286
|
applyOpsConfig(config);
|
|
251
287
|
applyScheduleConfig(config);
|
|
@@ -265,6 +301,24 @@ function validateWarningConfig(config) {
|
|
|
265
301
|
assert(!('warningRetentionDays' in config) || (Number.isInteger(config.warningRetentionDays) && config.warningRetentionDays >= 1), 'configuration assert: warningRetentionDays must be an integer >= 1');
|
|
266
302
|
assert(!('warningRetentionDays' in config) || config.warningRetentionDays <= POLICY.MAX_RETENTION_DAYS, `configuration assert: warningRetentionDays cannot exceed ${POLICY.MAX_RETENTION_DAYS} days`);
|
|
267
303
|
}
|
|
304
|
+
// Expands config.backend into the internal compatibility flags. The flags are derived
|
|
305
|
+
// solely from the backend profile — they are not part of the public input, so a
|
|
306
|
+
// deployment can't end up with an inconsistent combination.
|
|
307
|
+
function resolveBackend(config) {
|
|
308
|
+
const backend = ('backend' in config) ? config.backend : 'postgres';
|
|
309
|
+
assert(backend in BACKEND_PROFILES, `configuration assert: backend must be one of ${Object.keys(BACKEND_PROFILES).join(', ')}`);
|
|
310
|
+
config.backend = backend;
|
|
311
|
+
const { flags } = BACKEND_PROFILES[backend];
|
|
312
|
+
for (const flag of COMPATIBILITY_FLAGS) {
|
|
313
|
+
config[flag] = flags[flag] ?? false;
|
|
314
|
+
}
|
|
315
|
+
// Test hook: exercise the distributed runtime paths (atomic fetch + split mutations)
|
|
316
|
+
// on top of the current backend's schema, without standing up a distributed database.
|
|
317
|
+
if (config.__test__distributed) {
|
|
318
|
+
config.noSkipLocked = true;
|
|
319
|
+
config.noMultiMutationCte = true;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
268
322
|
function assertPostgresObjectName(name) {
|
|
269
323
|
assert(typeof name === 'string', 'Name must be a string');
|
|
270
324
|
assert(name.length <= 50, 'Name cannot exceed 50 characters');
|
package/dist/boss.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boss.d.ts","sourceRoot":"","sources":["../src/boss.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAA;AACtC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAGvC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAkBnC,cAAM,IAAK,SAAQ,YAAa,YAAW,KAAK,CAAC,WAAW;;IAS1D,MAAM;;;MAAS;gBAGb,EAAE,EAAE,KAAK,CAAC,SAAS,EACnB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,KAAK,CAAC,0BAA0B;IAmB1C,IAAI,WAAW,IAAK,OAAO,CAE1B;IAEK,KAAK;IAWL,IAAI;IA+EJ,SAAS,CAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE;
|
|
1
|
+
{"version":3,"file":"boss.d.ts","sourceRoot":"","sources":["../src/boss.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAA;AACtC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAGvC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAkBnC,cAAM,IAAK,SAAQ,YAAa,YAAW,KAAK,CAAC,WAAW;;IAS1D,MAAM;;;MAAS;gBAGb,EAAE,EAAE,KAAK,CAAC,SAAS,EACnB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,KAAK,CAAC,0BAA0B;IAmB1C,IAAI,WAAW,IAAK,OAAO,CAE1B;IAEK,KAAK;IAWL,IAAI;IA+EJ,SAAS,CAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE;CAqHtD;AAED,eAAe,IAAI,CAAA"}
|
package/dist/boss.js
CHANGED
|
@@ -151,22 +151,37 @@ class Boss extends EventEmitter {
|
|
|
151
151
|
return;
|
|
152
152
|
if (rows.length) {
|
|
153
153
|
const queues = rows.map((q) => q.name);
|
|
154
|
-
const cacheStatsSql = plans.cacheQueueStats(this.#config.schema, table, queues);
|
|
154
|
+
const cacheStatsSql = plans.cacheQueueStats(this.#config.schema, table, queues, this.#config.noAdvisoryLocks);
|
|
155
155
|
const { rows: rowsCacheStats } = await this.#executeQuery(cacheStatsSql);
|
|
156
156
|
if (this.#stopping)
|
|
157
157
|
return;
|
|
158
|
-
|
|
158
|
+
// Coerce with Number(): CockroachDB returns these integer columns as strings, so a bare `>`
|
|
159
|
+
// would compare lexicographically ("100" > "9" === false) and silently miss the backlog. On
|
|
160
|
+
// standard Postgres these are already numbers, so Number() is a no-op.
|
|
161
|
+
const warnings = rowsCacheStats.filter(i => Number(i.queuedCount) > (Number(i.warningQueueSize) || WARNINGS.LARGE_QUEUE.size));
|
|
159
162
|
for (const warning of warnings) {
|
|
160
163
|
await emitAndPersistWarning(this.#warningContext, WARNING_TYPES.QUEUE_BACKLOG, WARNINGS.LARGE_QUEUE.message, warning);
|
|
161
164
|
}
|
|
162
|
-
|
|
163
|
-
|
|
165
|
+
// CockroachDB rejects the multi-mutation failJobs() CTE these use, so under noMultiMutationCte
|
|
166
|
+
// route expiry through the manager's split select/delete/re-insert variants instead.
|
|
167
|
+
if (this.#config.noMultiMutationCte) {
|
|
168
|
+
await this.#manager.failJobsByTimeoutDistributed(table, queues);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
const sql = plans.failJobsByTimeout(this.#config.schema, table, queues, this.#config.noAdvisoryLocks);
|
|
172
|
+
await this.#executeQuery(sql);
|
|
173
|
+
}
|
|
164
174
|
if (this.#stopping)
|
|
165
175
|
return;
|
|
166
176
|
const heartbeatQueues = queues.filter(q => heartbeatQueueNames.has(q));
|
|
167
177
|
if (heartbeatQueues.length) {
|
|
168
|
-
|
|
169
|
-
|
|
178
|
+
if (this.#config.noMultiMutationCte) {
|
|
179
|
+
await this.#manager.failJobsByHeartbeatDistributed(table, heartbeatQueues);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
const heartbeatSql = plans.failJobsByHeartbeat(this.#config.schema, table, heartbeatQueues, this.#config.noAdvisoryLocks);
|
|
183
|
+
await this.#executeQuery(heartbeatSql);
|
|
184
|
+
}
|
|
170
185
|
}
|
|
171
186
|
}
|
|
172
187
|
}
|
|
@@ -179,9 +194,9 @@ class Boss extends EventEmitter {
|
|
|
179
194
|
return;
|
|
180
195
|
if (rows.length) {
|
|
181
196
|
const queues = rows.map((q) => q.name);
|
|
182
|
-
const sql = plans.deletion(this.#config.schema, table, queues);
|
|
197
|
+
const sql = plans.deletion(this.#config.schema, table, queues, this.#config.noAdvisoryLocks);
|
|
183
198
|
await this.#executeQuery(sql);
|
|
184
|
-
const depSql = plans.cleanupDependencies(this.#config.schema, table, queues);
|
|
199
|
+
const depSql = plans.cleanupDependencies(this.#config.schema, table, queues, this.#config.noAdvisoryLocks);
|
|
185
200
|
await this.#executeQuery(depSql);
|
|
186
201
|
}
|
|
187
202
|
}
|
package/dist/contractor.js
CHANGED
|
@@ -62,7 +62,7 @@ class Contractor {
|
|
|
62
62
|
}
|
|
63
63
|
async migrate(version) {
|
|
64
64
|
try {
|
|
65
|
-
const commands = migrationStore.migrate(this.config.schema, version, this.migrations);
|
|
65
|
+
const commands = migrationStore.migrate(this.config.schema, version, this.migrations, this.config.noAdvisoryLocks);
|
|
66
66
|
await this.db.executeSql(commands);
|
|
67
67
|
}
|
|
68
68
|
catch (err) {
|
|
@@ -70,11 +70,11 @@ class Contractor {
|
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
async next(version) {
|
|
73
|
-
const commands = migrationStore.next(this.config.schema, version, this.migrations);
|
|
73
|
+
const commands = migrationStore.next(this.config.schema, version, this.migrations, this.config.noAdvisoryLocks);
|
|
74
74
|
await this.db.executeSql(commands);
|
|
75
75
|
}
|
|
76
76
|
async rollback(version) {
|
|
77
|
-
const commands = migrationStore.rollback(this.config.schema, version, this.migrations);
|
|
77
|
+
const commands = migrationStore.rollback(this.config.schema, version, this.migrations, this.config.noAdvisoryLocks);
|
|
78
78
|
await this.db.executeSql(commands);
|
|
79
79
|
}
|
|
80
80
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -78,8 +78,8 @@ export declare class PgBoss extends EventEmitter<types.PgBossEventMap> {
|
|
|
78
78
|
getBamEntries(): Promise<types.BamEntry[]>;
|
|
79
79
|
getDb(): types.IDatabase;
|
|
80
80
|
}
|
|
81
|
-
export type { BamEntry, BamEvent, BamStatusSummary, CommandResponse, CompleteOptions, ConnectionOptions, ConstructorOptions, DatabaseOptions, FetchGroupConcurrencyOptions, DependencyRef, FetchOptions, FindJobsOptions, FlowJob, GroupConcurrencyConfig, GroupOptions, IDatabase as Db, InsertOptions, Job, JobFetchOptions, JobInsert, JobOptions, JobPollingOptions, JobStates, Events, JobWithMetadata, MaintenanceOptions, OffWorkOptions, PgBossEventMap, Queue, QueueOptions, QueuePolicy, QueueResult, Request, Schedule, ScheduleOptions, SchedulingOptions, SendOptions, StopOptions, UpdateQueueOptions, Warning, WipData, WorkConcurrencyOptions, WorkerState, WorkHandler, WorkOptions, WorkWithMetadataHandler, } from './types.ts';
|
|
81
|
+
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, JobStates, Events, JobWithMetadata, MaintenanceOptions, OffWorkOptions, PgBossEventMap, Queue, QueueOptions, QueuePolicy, QueueResult, Request, Schedule, ScheduleOptions, SchedulingOptions, SendOptions, StopOptions, UpdateQueueOptions, Warning, WipData, WorkConcurrencyOptions, WorkerState, WorkHandler, WorkOptions, WorkWithMetadataHandler, } from './types.ts';
|
|
82
82
|
export type { JobSpyInterface, JobSpyState, JobDataSelector, JobSelector, SpyJob, } from './spy.ts';
|
|
83
|
-
export { fromKnex, fromKysely, fromDrizzle, fromPrisma, } from './adapters/index.ts';
|
|
84
|
-
export type { KnexTransactionLike, KyselyTransactionLike, DrizzleTransactionLike, DrizzleSqlTagLike, PrismaTransactionLike, } from './adapters/index.ts';
|
|
83
|
+
export { fromKnex, fromKysely, fromDrizzle, fromPrisma, fromPglite, } from './adapters/index.ts';
|
|
84
|
+
export type { KnexTransactionLike, KyselyTransactionLike, DrizzleTransactionLike, DrizzleSqlTagLike, PrismaTransactionLike, PGliteLike, } from './adapters/index.ts';
|
|
85
85
|
//# sourceMappingURL=index.d.ts.map
|
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;AAQtC,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAA;AAGxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE/C,OAAO,EAAE,UAAU,IAAI,MAAM,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAA;AACvD,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,MAMzB,CAAA;AAEF,wBAAgB,oBAAoB,CAAE,MAAM,CAAC,EAAE,MAAM,UAEpD;AAED,wBAAgB,iBAAiB,CAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,UAEnE;AAED,wBAAgB,gBAAgB,CAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,UAElE;AAED,qBAAa,MAAO,SAAQ,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC;;gBAa/C,gBAAgB,EAAE,MAAM;gBACxB,OAAO,EAAE,KAAK,CAAC,kBAAkB;IA6CxC,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -79,6 +79,7 @@ export class PgBoss extends EventEmitter {
|
|
|
79
79
|
if (this.#db._pgbdb && !this.#db.opened) {
|
|
80
80
|
await this.#db.open();
|
|
81
81
|
}
|
|
82
|
+
await this.#warnIfDistributedMisconfigured();
|
|
82
83
|
if (this.#config.migrate) {
|
|
83
84
|
await this.#contractor.start();
|
|
84
85
|
}
|
|
@@ -105,6 +106,27 @@ export class PgBoss extends EventEmitter {
|
|
|
105
106
|
this.#stopped = false;
|
|
106
107
|
return this;
|
|
107
108
|
}
|
|
109
|
+
// YugabyteDB needs the yugabytedb backend profile (no table partitioning + no advisory locks;
|
|
110
|
+
// partitioned queues are not supported there). pg-boss can't know the backend at construction
|
|
111
|
+
// time, so detect it from the server version at startup and warn when the profile isn't selected.
|
|
112
|
+
// Best-effort: never block startup on this check.
|
|
113
|
+
async #warnIfDistributedMisconfigured() {
|
|
114
|
+
try {
|
|
115
|
+
const { rows } = await this.#db.executeSql('SELECT version()');
|
|
116
|
+
const version = rows?.[0]?.version || '';
|
|
117
|
+
if (/yugabyte|-yb-/i.test(version)) {
|
|
118
|
+
if (!this.#config.noTablePartitioning || !this.#config.noAdvisoryLocks) {
|
|
119
|
+
this.emit(events.warning, {
|
|
120
|
+
message: "YugabyteDB detected: set backend: 'yugabytedb' for compatibility. Partitioned queues (partition: true) are not supported on YugabyteDB.",
|
|
121
|
+
data: { backend: 'yugabytedb' }
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// version detection is best-effort and must never prevent startup
|
|
128
|
+
}
|
|
129
|
+
}
|
|
108
130
|
async stop(options = {}) {
|
|
109
131
|
if (this.#stoppingOn || this.#stopped) {
|
|
110
132
|
return;
|
|
@@ -297,4 +319,4 @@ export class PgBoss extends EventEmitter {
|
|
|
297
319
|
return new DbDefault(this.#config);
|
|
298
320
|
}
|
|
299
321
|
}
|
|
300
|
-
export { fromKnex, fromKysely, fromDrizzle, fromPrisma, } from "./adapters/index.js";
|
|
322
|
+
export { fromKnex, fromKysely, fromDrizzle, fromPrisma, fromPglite, } from "./adapters/index.js";
|
package/dist/manager.d.ts
CHANGED
|
@@ -68,7 +68,14 @@ declare class Manager extends EventEmitter implements types.EventsMixin {
|
|
|
68
68
|
private mapCompletionDataArg;
|
|
69
69
|
private mapCommandResponse;
|
|
70
70
|
complete(name: string, id: string | string[], data?: object | null, options?: types.CompleteOptions): Promise<types.CommandResponse>;
|
|
71
|
+
private withDistributedTransaction;
|
|
72
|
+
private completeDistributed;
|
|
71
73
|
fail(name: string, id: string | string[], data?: any, options?: types.ConnectionOptions): Promise<types.CommandResponse>;
|
|
74
|
+
private failDistributed;
|
|
75
|
+
failJobsByTimeoutDistributed(table: string, queues: string[]): Promise<number>;
|
|
76
|
+
failJobsByHeartbeatDistributed(table: string, queues: string[]): Promise<number>;
|
|
77
|
+
private expireJobsDistributed;
|
|
78
|
+
private reinsertFailedJobs;
|
|
72
79
|
deleteJob(name: string, id: string | string[], options?: types.ConnectionOptions): Promise<types.CommandResponse>;
|
|
73
80
|
cancel(name: string, id: string | string[], options?: types.ConnectionOptions): Promise<types.CommandResponse>;
|
|
74
81
|
resume(name: string, id: string | string[], options?: types.ConnectionOptions): Promise<types.CommandResponse>;
|
|
@@ -81,7 +88,7 @@ declare class Manager extends EventEmitter implements types.EventsMixin {
|
|
|
81
88
|
getBlockedKeys(name: string): Promise<string[]>;
|
|
82
89
|
getQueues(names?: string | string[]): Promise<types.QueueResult[]>;
|
|
83
90
|
updateQueue(name: string, options?: types.UpdateQueueOptions): Promise<void>;
|
|
84
|
-
getQueue(name: string): Promise<
|
|
91
|
+
getQueue(name: string): Promise<types.QueueResult>;
|
|
85
92
|
deleteQueue(name: string): Promise<void>;
|
|
86
93
|
deleteQueuedJobs(name: string): Promise<void>;
|
|
87
94
|
deleteStoredJobs(name: string): 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;AAE7B,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;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
|