pg-boss 12.33.2 → 12.33.4
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 +13 -12
- package/dist/bam.d.ts.map +1 -1
- package/dist/bam.js +74 -28
- package/dist/boss.d.ts +1 -1
- package/dist/boss.js +14 -14
- package/dist/claimTimer.d.ts +11 -4
- package/dist/claimTimer.d.ts.map +1 -1
- package/dist/claimTimer.js +14 -7
- package/dist/cli.js +15 -14
- package/dist/contractor.js +2 -2
- package/dist/db.js +2 -2
- package/dist/drifter.js +21 -21
- package/dist/index.d.ts +2 -2
- package/dist/index.js +3 -3
- package/dist/manager.js +18 -18
- package/dist/migrationStore.js +11 -11
- package/dist/plans.d.ts +8 -7
- package/dist/plans.d.ts.map +1 -1
- package/dist/plans.js +117 -70
- package/dist/timekeeper.d.ts +34 -8
- package/dist/timekeeper.d.ts.map +1 -1
- package/dist/timekeeper.js +73 -12
- package/dist/types.d.ts +21 -21
- package/dist/types.d.ts.map +1 -1
- package/dist/worker.js +1 -1
- package/package.json +6 -5
package/dist/drifter.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { resolveSchemaName } from "./tools.js";
|
|
2
2
|
const SINGLE_QUOTE_REGEX = /'/g;
|
|
3
|
-
// Extracts the first balanced parenthesised group from a CREATE INDEX statement
|
|
3
|
+
// Extracts the first balanced parenthesised group from a CREATE INDEX statement. The key-column
|
|
4
4
|
// list. Stops at the matching close paren, so a trailing INCLUDE(...) or WHERE(...) is excluded and
|
|
5
5
|
// an inner COALESCE(...) is kept. Works on both hand-written DDL and pg_get_indexdef output (whose
|
|
6
6
|
// leading `USING btree (` opens the same first group). The INCLUDE payload is not ignored, just
|
|
7
|
-
// compared separately
|
|
7
|
+
// compared separately. See extractIndexIncludeList.
|
|
8
8
|
function extractIndexKeyList(ddl) {
|
|
9
9
|
const open = ddl.indexOf('(');
|
|
10
10
|
if (open === -1)
|
|
@@ -20,11 +20,11 @@ function extractIndexKeyList(ddl) {
|
|
|
20
20
|
}
|
|
21
21
|
// Strips SQL type casts, including schema-qualified enum casts (Postgres renders a job_state literal
|
|
22
22
|
// as `'active'::pgboss.job_state` and a text literal as `''::text`). Run before whitespace removal is
|
|
23
|
-
// fine
|
|
23
|
+
// fine, casts never contain spaces.
|
|
24
24
|
const CAST_REGEX = /::(?:[a-z_][a-z0-9_$]*\.)?[a-z_][a-z0-9_$]*(?:\[\])?/g;
|
|
25
25
|
// Normalises a key-column list so an expected list and a pg_get_indexdef list compare equal when they
|
|
26
26
|
// mean the same thing: lower-cased, quotes and whitespace stripped, and type casts removed. Column
|
|
27
|
-
// ORDER is preserved
|
|
27
|
+
// ORDER is preserved. An index on (a, b) must not normalise equal to (b, a), which is exactly the
|
|
28
28
|
// index-ordinal significance the drift check needs. Parens are kept so COALESCE(...) survives.
|
|
29
29
|
function normalizeKeyList(keyList) {
|
|
30
30
|
return keyList
|
|
@@ -76,13 +76,13 @@ export function indexIncludeRaw(ddl) {
|
|
|
76
76
|
const list = extractIndexIncludeList(ddl);
|
|
77
77
|
return list === null ? '' : list.replace(CAST_REGEX, '').replace(/\s+/g, ' ').trim();
|
|
78
78
|
}
|
|
79
|
-
// Everything after the top-level WHERE
|
|
79
|
+
// Everything after the top-level WHERE (the partial-index predicate) or '' for a non-partial index.
|
|
80
80
|
function extractPredicate(ddl) {
|
|
81
81
|
const m = ddl.match(/\bWHERE\b/i);
|
|
82
82
|
return m ? ddl.slice(m.index + m[0].length) : '';
|
|
83
83
|
}
|
|
84
|
-
// Normalises a predicate for comparison. Both sides originate from pg_get_indexdef
|
|
85
|
-
// manifest, live from the catalog
|
|
84
|
+
// Normalises a predicate for comparison. Both sides originate from pg_get_indexdef, expected from the
|
|
85
|
+
// manifest, live from the catalog, so both carry pg's canonical form; this only undoes the cosmetic
|
|
86
86
|
// differences pg can vary between two equal predicates:
|
|
87
87
|
// - casts added to every literal (`'active'::pgboss.job_state`, `'x'::text`) → stripped
|
|
88
88
|
// - `IN (a, b)` rendered as `= ANY (ARRAY[a, b])` → folded back to `IN (a, b)`
|
|
@@ -130,7 +130,7 @@ function outerParensWrapWhole(s) {
|
|
|
130
130
|
return false;
|
|
131
131
|
}
|
|
132
132
|
// Removes the redundant outer parentheses pg_get_indexdef wraps a whole predicate in. Only the
|
|
133
|
-
// outermost pair is stripped
|
|
133
|
+
// outermost pair is stripped, inner grouping (which may be meaningful) is left intact.
|
|
134
134
|
function stripOuterParens(s) {
|
|
135
135
|
let out = s.trim();
|
|
136
136
|
while (outerParensWrapWhole(out)) {
|
|
@@ -151,12 +151,12 @@ export function displayIndexDefinition(def) {
|
|
|
151
151
|
const predicate = stripOuterParens(cleaned.slice(m.index + m[0].length).trim());
|
|
152
152
|
return `${head} ${predicate}`;
|
|
153
153
|
}
|
|
154
|
-
// Extracts the body of a function definition
|
|
154
|
+
// Extracts the body of a function definition. The text between the outer dollar-quote tags. Works on
|
|
155
155
|
// both pg-boss's own `CREATE FUNCTION ... AS $$ … $$` and Postgres's `pg_get_functiondef` output
|
|
156
156
|
// (which wraps the body in `$function$ … $function$`). Postgres stores prosrc verbatim, so the two
|
|
157
157
|
// bodies are byte-identical for an un-drifted function, modulo the dollar-quote tag name. Nested
|
|
158
158
|
// dollar quotes with a different tag (pg-boss uses `$cmd$`) live inside the body and are preserved.
|
|
159
|
-
// Returns '' when no dollar-quoted body is found
|
|
159
|
+
// Returns '' when no dollar-quoted body is found. An un-diffable definition is skipped, not flagged.
|
|
160
160
|
export function extractFunctionBody(def) {
|
|
161
161
|
const open = def.match(/\$[A-Za-z0-9_]*\$/);
|
|
162
162
|
if (!open)
|
|
@@ -168,7 +168,7 @@ export function extractFunctionBody(def) {
|
|
|
168
168
|
}
|
|
169
169
|
// Normalises a function body so a hand-written definition and pg_get_functiondef's stored copy compare
|
|
170
170
|
// equal despite cosmetic reindentation: runs of whitespace collapse to a single space and the ends are
|
|
171
|
-
// trimmed. Case is preserved
|
|
171
|
+
// trimmed. Case is preserved. A changed string literal or identifier is real drift.
|
|
172
172
|
export function normalizeFunctionBody(body) {
|
|
173
173
|
return body.replace(/\s+/g, ' ').trim();
|
|
174
174
|
}
|
|
@@ -211,7 +211,7 @@ export function getSchemaFunctions(schema) {
|
|
|
211
211
|
`;
|
|
212
212
|
}
|
|
213
213
|
// The ordered value list of an enum type, for the enum-definition diff. ORDER BY enumsortorder
|
|
214
|
-
// preserves declaration order
|
|
214
|
+
// preserves declaration order, reordering the enum is itself drift (the numeric base type makes
|
|
215
215
|
// created < retry < … < failed load-bearing for state comparisons).
|
|
216
216
|
export function getEnumDefinition(schema, typeName = 'job_state') {
|
|
217
217
|
return `
|
|
@@ -244,7 +244,7 @@ export function getSchemaColumns(schema) {
|
|
|
244
244
|
}
|
|
245
245
|
// Every ordinary ('r') or partitioned ('p') table in the schema, catalog-only (pg_class), for the
|
|
246
246
|
// table-presence check. Deliberately independent of getSchemaColumns: that query uses pg_get_expr,
|
|
247
|
-
// which is unsupported on some backends and is wrapped in a best-effort try/catch
|
|
247
|
+
// which is unsupported on some backends and is wrapped in a best-effort try/catch, deriving table
|
|
248
248
|
// presence from its (possibly empty-on-failure) result would false-report every managed table as
|
|
249
249
|
// missing whenever the column query throws. pg_class is available everywhere, so table presence stays
|
|
250
250
|
// reliable even when the column diff is skipped.
|
|
@@ -296,7 +296,7 @@ function computeFunctionDrift(expected, live) {
|
|
|
296
296
|
return { missingFunctions, mismatchedFunctions };
|
|
297
297
|
}
|
|
298
298
|
// Column presence / default / type / nullability diff per managed table. A table with no live columns
|
|
299
|
-
// is skipped (it does not exist
|
|
299
|
+
// is skipped (it does not exist, table presence is reported separately), so a missing table never
|
|
300
300
|
// floods the report with every column. Default, type, and nullability drift are only checked for
|
|
301
301
|
// expected tables that carry the corresponding `defaults`/`types` maps (the fixed managed tables); the
|
|
302
302
|
// job/partition tables omit them and are name-only.
|
|
@@ -331,7 +331,7 @@ export function computeColumnDrift(expected, live) {
|
|
|
331
331
|
}
|
|
332
332
|
if (types && types[col]) {
|
|
333
333
|
// Both sides are the canonical format_type() form (expected from the manifest, actual from the
|
|
334
|
-
// live catalog), so a direct comparison suffices
|
|
334
|
+
// live catalog), so a direct comparison suffices. No alias folding needed.
|
|
335
335
|
const actualType = liveCol.type ?? '';
|
|
336
336
|
if (types[col].type !== actualType) {
|
|
337
337
|
typeMismatches.push({ column: col, expected: types[col].type, actual: actualType });
|
|
@@ -374,7 +374,7 @@ export function computeConstraintDrift(expected, live) {
|
|
|
374
374
|
}
|
|
375
375
|
return drift;
|
|
376
376
|
}
|
|
377
|
-
// Enum diff: ordered value-set comparison. An absent enum (empty actual
|
|
377
|
+
// Enum diff: ordered value-set comparison. An absent enum (empty actual, pre-enum schema or a backend
|
|
378
378
|
// without enums) is not treated as drift. Order is significant; the numeric base type relies on it.
|
|
379
379
|
function computeEnumDrift(name, expected, actual) {
|
|
380
380
|
if (actual.length === 0)
|
|
@@ -384,13 +384,13 @@ function computeEnumDrift(name, expected, actual) {
|
|
|
384
384
|
}
|
|
385
385
|
// Presence + index definition diff: which managed indexes exist, plus (for present, valid ones) a
|
|
386
386
|
// key-column-order and partial-predicate comparison. Ordinals are treated asymmetrically, the same
|
|
387
|
-
// convention test/pgSchemaHelper.ts encodes
|
|
387
|
+
// convention test/pgSchemaHelper.ts encodes, index column ORDER is significant here (an index on
|
|
388
388
|
// (a, b) differs from (b, a)); the table-column diff instead normalises ordinal position away.
|
|
389
389
|
//
|
|
390
390
|
// Generic engine: it carries no pg-boss knowledge. Every dimension is one optional `{ expected, live }`
|
|
391
|
-
// entry
|
|
391
|
+
// entry, none is privileged. `indexes.building` names async builds still in progress (pulled out of
|
|
392
392
|
// "missing"); `tables.expected` is the managed table set that scopes the extra-index warning. Each
|
|
393
|
-
// dimension is best-effort
|
|
393
|
+
// dimension is best-effort, callers omit the ones a backend can't support.
|
|
394
394
|
export function computeSchemaDrift(opts = {}) {
|
|
395
395
|
const expectedIndexes = opts.indexes?.expected ?? [];
|
|
396
396
|
const liveIndexes = opts.indexes?.live ?? [];
|
|
@@ -412,7 +412,7 @@ export function computeSchemaDrift(opts = {}) {
|
|
|
412
412
|
else if (idx.keys && found.def) {
|
|
413
413
|
// Definition-diff: a present, valid index whose key columns/order or predicate differ from the
|
|
414
414
|
// expected shape. Comparison is on the normalised forms (order-significant, format-insensitive),
|
|
415
|
-
// but the report carries the readable raw text. Only when the key list parses
|
|
415
|
+
// but the report carries the readable raw text. Only when the key list parses. An unparseable
|
|
416
416
|
// def is skipped, not falsely flagged. (An empty normalised key list means we could not parse the
|
|
417
417
|
// def; '' is never a real key list, whereas an empty predicate is legitimate for a non-partial
|
|
418
418
|
// index.)
|
|
@@ -436,7 +436,7 @@ export function computeSchemaDrift(opts = {}) {
|
|
|
436
436
|
}
|
|
437
437
|
}
|
|
438
438
|
// Extra indexes: standalone (non-constraint-backing) indexes on a managed table that the expected set
|
|
439
|
-
// does not account for
|
|
439
|
+
// does not account for. A stale pg-boss index or one a user added. These are informational (an extra
|
|
440
440
|
// index is harmless), so they are surfaced as a warning and do NOT flip `ok`. Scoped to managed tables
|
|
441
441
|
// so a user's indexes on their own tables in the schema are never reported.
|
|
442
442
|
const managedTables = new Set(opts.tables?.expected ?? expectedIndexes.map(i => i.table));
|
package/dist/index.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export declare function getConstructionPlans(schema?: string, options?: types.Co
|
|
|
11
11
|
export declare function getMigrationPlans(schema?: string, version?: number, options?: types.MigrationPlanOptions): string;
|
|
12
12
|
/**
|
|
13
13
|
* The catalog query pg-boss uses to find bloated job indexes, as SQL text. Runnable in psql with no
|
|
14
|
-
* pg-boss instance and no connection from this process. PostgreSQL only
|
|
14
|
+
* pg-boss instance and no connection from this process. PostgreSQL only. The heap-less engines
|
|
15
15
|
* (CockroachDB, YugabyteDB) do not answer it.
|
|
16
16
|
*/
|
|
17
17
|
export declare function getIndexBloatPlans(schema?: string, options?: types.IndexBloatOptions): string;
|
|
@@ -81,7 +81,7 @@ export declare class PgBoss extends EventEmitter<types.PgBossEventMap> {
|
|
|
81
81
|
* indexes, in the order they should be run, including any `DROP INDEX CONCURRENTLY` for stubs
|
|
82
82
|
* left by an interrupted rebuild.
|
|
83
83
|
*
|
|
84
|
-
* For installations where pg-boss cannot run them itself
|
|
84
|
+
* For installations where pg-boss cannot run them itself. A role that doesn't own the indexes,
|
|
85
85
|
* or an adapter that wraps queries in a transaction. Pass `{ force: true }` for every job index
|
|
86
86
|
* rather than only the bloated ones. Empty on CockroachDB and YugabyteDB, which have no btree
|
|
87
87
|
* bloat to reclaim and reject `REINDEX` in any form.
|
package/dist/index.js
CHANGED
|
@@ -33,7 +33,7 @@ export function getMigrationPlans(schema, version, options) {
|
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
35
|
* The catalog query pg-boss uses to find bloated job indexes, as SQL text. Runnable in psql with no
|
|
36
|
-
* pg-boss instance and no connection from this process. PostgreSQL only
|
|
36
|
+
* pg-boss instance and no connection from this process. PostgreSQL only. The heap-less engines
|
|
37
37
|
* (CockroachDB, YugabyteDB) do not answer it.
|
|
38
38
|
*/
|
|
39
39
|
export function getIndexBloatPlans(schema, options) {
|
|
@@ -101,7 +101,7 @@ export class PgBoss extends EventEmitter {
|
|
|
101
101
|
if (this.#stoppingPromise) {
|
|
102
102
|
await this.#stoppingPromise.catch(() => { });
|
|
103
103
|
}
|
|
104
|
-
// Return the SAME in-flight promise to a concurrent caller instead of a fresh `this
|
|
104
|
+
// Return the SAME in-flight promise to a concurrent caller instead of a fresh `this`. A
|
|
105
105
|
// second caller must observe the actual outcome (including a rejection), not silently no-op
|
|
106
106
|
// while the first call is still mid-flight.
|
|
107
107
|
if (this.#startingPromise) {
|
|
@@ -410,7 +410,7 @@ export class PgBoss extends EventEmitter {
|
|
|
410
410
|
* indexes, in the order they should be run, including any `DROP INDEX CONCURRENTLY` for stubs
|
|
411
411
|
* left by an interrupted rebuild.
|
|
412
412
|
*
|
|
413
|
-
* For installations where pg-boss cannot run them itself
|
|
413
|
+
* For installations where pg-boss cannot run them itself. A role that doesn't own the indexes,
|
|
414
414
|
* or an adapter that wraps queries in a transaction. Pass `{ force: true }` for every job index
|
|
415
415
|
* rather than only the bloated ones. Empty on CockroachDB and YugabyteDB, which have no btree
|
|
416
416
|
* bloat to reclaim and reject `REINDEX` in any form.
|
package/dist/manager.js
CHANGED
|
@@ -115,7 +115,7 @@ const events = {
|
|
|
115
115
|
wip: 'wip'
|
|
116
116
|
};
|
|
117
117
|
// The fetch options that were performance escapes from the fetch's sort. The index is now ordered to
|
|
118
|
-
// match the fetch, so they escape nothing
|
|
118
|
+
// match the fetch, so they escape nothing, `priority: false` is the only remaining shape that
|
|
119
119
|
// still full-sorts, making it slower than the default it was meant to beat. Accepted and ignored
|
|
120
120
|
// for now; removed in the next major.
|
|
121
121
|
const DEPRECATED_FETCH_OPTIONS = ['priority', 'orderByCreatedOn'];
|
|
@@ -284,7 +284,7 @@ class Manager extends EventEmitter {
|
|
|
284
284
|
else if (!persisted) {
|
|
285
285
|
// The handler deleted the job itself (e.g. boss.deleteJob in the handler), so there is
|
|
286
286
|
// no persisted row to inspect. The handler still returned normally, so from the spy's
|
|
287
|
-
// perspective the work succeeded
|
|
287
|
+
// perspective the work succeeded, record 'completed', matching the behavior before
|
|
288
288
|
// manual-failure tracking was added.
|
|
289
289
|
spy.addJob(job.id, name, job.data, 'completed', undefined);
|
|
290
290
|
}
|
|
@@ -298,10 +298,10 @@ class Manager extends EventEmitter {
|
|
|
298
298
|
// A handler throw routes through fail(), but fail() only lands the job in the terminal
|
|
299
299
|
// 'failed' state once its retries are exhausted (retry_count >= retry_limit). While retries
|
|
300
300
|
// remain the job goes back to 'retry' and will run again, so recording 'failed' here would be
|
|
301
|
-
// wrong
|
|
301
|
+
// wrong. The spy would report a permanent failure for a job that may yet succeed on retry,
|
|
302
302
|
// and (if the retry does succeed) it would hold contradictory 'failed' + 'completed' entries.
|
|
303
303
|
// Read the real persisted state and only record 'failed' when the job actually failed for good.
|
|
304
|
-
// The eventual outcome of a retried job
|
|
304
|
+
// The eventual outcome of a retried job (success, or terminal failure when retries run out)
|
|
305
305
|
// is recorded by whichever attempt produces it. Mirrors the slow path in #trackJobsCompleted.
|
|
306
306
|
for (const job of jobs) {
|
|
307
307
|
const persisted = await this.getJobById(name, job.id);
|
|
@@ -605,7 +605,7 @@ class Manager extends EventEmitter {
|
|
|
605
605
|
// Spy tracking runs after the completion/failure logic so a spy lookup error can never
|
|
606
606
|
// be mistaken for a handler failure and re-route the job through fail(). The flag is
|
|
607
607
|
// gated here, not just inside the trackers, so the production hot path (spies off) never
|
|
608
|
-
// even calls the async tracker
|
|
608
|
+
// even calls the async tracker. No promise allocated, no microtask tick. The checks
|
|
609
609
|
// inside the trackers stay as a safety net.
|
|
610
610
|
if (this.config.__test__enableSpies && this.#spies.has(name)) {
|
|
611
611
|
if (didFail) {
|
|
@@ -865,7 +865,7 @@ class Manager extends EventEmitter {
|
|
|
865
865
|
// A burst trigger only engages while the last fetch came back full (>= batchSize). That is
|
|
866
866
|
// both the meaning of burstWhenBatchFull and the anti-hot-loop guard for burstWhenReadyExceeds:
|
|
867
867
|
// the cached ready count lags reality, so a short fetch (including 0 < 1 at the default batchSize)
|
|
868
|
-
// means the queue has likely caught up
|
|
868
|
+
// means the queue has likely caught up, fall back to normal polling instead of spinning on
|
|
869
869
|
// empty fetches. burstWhenBatchFull is ignored at batchSize 1 (every fetch would be "full").
|
|
870
870
|
const resolveInterval = (lastFetchCount) => {
|
|
871
871
|
const fullBatch = lastFetchCount >= batchSize;
|
|
@@ -1010,7 +1010,7 @@ class Manager extends EventEmitter {
|
|
|
1010
1010
|
assert(name, 'queue name is required');
|
|
1011
1011
|
assert(typeof name === 'string', 'queue name must be a string');
|
|
1012
1012
|
// work() returns only the first spawned worker's id (shared as `workId` across every worker
|
|
1013
|
-
// it spawned under localConcurrency), so { id } must match on workId too
|
|
1013
|
+
// it spawned under localConcurrency), so { id } must match on workId too, otherwise only
|
|
1014
1014
|
// worker 0 of a localConcurrency > 1 call ever stops, and the rest poll forever with no other
|
|
1015
1015
|
// way to reach them. i.id is still checked so a specific worker id from getWipData() still
|
|
1016
1016
|
// targets just that one worker. name is always required so a stray/mismatched id can't stop
|
|
@@ -1234,7 +1234,7 @@ class Manager extends EventEmitter {
|
|
|
1234
1234
|
const by = opts.id ? 'id' : 'singletonKey';
|
|
1235
1235
|
const match = opts.match ?? 'newest';
|
|
1236
1236
|
// The insert-on-miss path needs a singletonKey on key_strict_fifo queues (a keyless job would
|
|
1237
|
-
// violate the queue's check constraint), so reject upfront
|
|
1237
|
+
// violate the queue's check constraint), so reject upfront, including the id-target case.
|
|
1238
1238
|
if (policy === plans.QUEUE_POLICIES.key_strict_fifo && !opts.singletonKey) {
|
|
1239
1239
|
throw new Error(`${plans.QUEUE_POLICIES.key_strict_fifo} queues require a singletonKey`);
|
|
1240
1240
|
}
|
|
@@ -1304,7 +1304,7 @@ class Manager extends EventEmitter {
|
|
|
1304
1304
|
}
|
|
1305
1305
|
const spy = this.config.__test__enableSpies ? this.#spies.get(name) : undefined;
|
|
1306
1306
|
// insertJobs ends in ON CONFLICT DO NOTHING, so skipped rows shift the returned rows out of
|
|
1307
|
-
// alignment with the input jobs
|
|
1307
|
+
// alignment with the input jobs. A positional rows[i] <-> jobs[i] pairing attributes the wrong
|
|
1308
1308
|
// data to the wrong id. When a spy is watching, assign every job an explicit id up front (the
|
|
1309
1309
|
// insert COALESCEs id, so this is equivalent to letting the DB generate one) and index data by
|
|
1310
1310
|
// id, so returned rows can be matched back to their job regardless of any conflicts.
|
|
@@ -1319,7 +1319,7 @@ class Manager extends EventEmitter {
|
|
|
1319
1319
|
// Flatten group to the column names insertJobs' json_to_recordset declares, matching
|
|
1320
1320
|
// send()/upsert()/flow(). Assigned only when a group is present: those same raw column
|
|
1321
1321
|
// names are accepted by the recordset directly, and unconditional keys would overwrite
|
|
1322
|
-
// them with undefined
|
|
1322
|
+
// them with undefined, silently breaking anyone who passed groupId/groupTier as a
|
|
1323
1323
|
// workaround while insert() was dropping `group` entirely.
|
|
1324
1324
|
if (group) {
|
|
1325
1325
|
Object.assign(rest, { groupId: group.id, groupTier: group.tier });
|
|
@@ -1333,7 +1333,7 @@ class Manager extends EventEmitter {
|
|
|
1333
1333
|
if (dataById) {
|
|
1334
1334
|
// Best-effort spy bookkeeping, only reached when __test__enableSpies is set (a test-intended
|
|
1335
1335
|
// opt-in, off by default). The id we assign here is exactly what the DB would otherwise
|
|
1336
|
-
// COALESCE in, so generating it client-side is harmless
|
|
1336
|
+
// COALESCE in, so generating it client-side is harmless, and if randomUUID ever fell short,
|
|
1337
1337
|
// only spy attribution would degrade, never the insert itself.
|
|
1338
1338
|
rest.id ??= randomUUID();
|
|
1339
1339
|
dataById.set(rest.id, j.data ?? {});
|
|
@@ -1470,7 +1470,7 @@ class Manager extends EventEmitter {
|
|
|
1470
1470
|
for (const option of DEPRECATED_FETCH_OPTIONS) {
|
|
1471
1471
|
if (options[option] === false && !this.#warnedFetchOptions.has(option)) {
|
|
1472
1472
|
this.#warnedFetchOptions.add(option);
|
|
1473
|
-
process.emitWarning(`${option}: false is deprecated and now ignored
|
|
1473
|
+
process.emitWarning(`${option}: false is deprecated and now ignored. Jobs are always fetched in priority and creation order. Remove it; it will be rejected in the next major.`, 'DeprecationWarning', DEPRECATED_FETCH_OPTIONS_CODE);
|
|
1474
1474
|
}
|
|
1475
1475
|
}
|
|
1476
1476
|
}
|
|
@@ -1495,7 +1495,7 @@ class Manager extends EventEmitter {
|
|
|
1495
1495
|
}
|
|
1496
1496
|
catch (err) {
|
|
1497
1497
|
// The only fetch error we tolerate is a unique-constraint violation (SQLSTATE 23505) from a
|
|
1498
|
-
// policy/singleton index when a concurrent fetch won the same slot
|
|
1498
|
+
// policy/singleton index when a concurrent fetch won the same slot, treat that as an empty
|
|
1499
1499
|
// fetch. Anything else (a DB outage, a malformed query) must surface: swallowing it turned
|
|
1500
1500
|
// every failed fetch into a silent [] with no error event, indistinguishable from an empty
|
|
1501
1501
|
// queue. Rethrowing routes it to the worker's onError (emits `error`) or to a direct caller.
|
|
@@ -1681,7 +1681,7 @@ class Manager extends EventEmitter {
|
|
|
1681
1681
|
const jobOutput = outputById ? (outputById.get(job.id) ?? null) : outputData;
|
|
1682
1682
|
// CockroachDB returns INT8 columns as strings. These rows come straight from a SELECT *, so
|
|
1683
1683
|
// unlike fetch/getJobById they are never normalized. Coerce the fields used in arithmetic and
|
|
1684
|
-
// comparison below
|
|
1684
|
+
// comparison below, otherwise `retry_count < retry_limit` is a lexicographic string compare
|
|
1685
1685
|
// ("9" < "10" === false, wrongly failing a retriable job) and `retry_count + 1` concatenates.
|
|
1686
1686
|
const retryCount = Number(job.retry_count);
|
|
1687
1687
|
const retryLimit = Number(job.retry_limit);
|
|
@@ -1885,7 +1885,7 @@ class Manager extends EventEmitter {
|
|
|
1885
1885
|
async deleteQueue(name) {
|
|
1886
1886
|
Attorney.assertQueueName(name);
|
|
1887
1887
|
// Scope the catch to the cache lookup only: a queue that doesn't exist is a no-op. The DELETE
|
|
1888
|
-
// and cache eviction must NOT be swallowed
|
|
1888
|
+
// and cache eviction must NOT be swallowed. A transient connection error there previously
|
|
1889
1889
|
// resolved as success while the queue (and its stale cache entry) survived.
|
|
1890
1890
|
try {
|
|
1891
1891
|
await this.getQueueCache(name);
|
|
@@ -1930,7 +1930,7 @@ class Manager extends EventEmitter {
|
|
|
1930
1930
|
//
|
|
1931
1931
|
// With persistQueueStats enabled this returns the recorded history, optionally bounded by
|
|
1932
1932
|
// from/to/limit. With it disabled there's no series, so it returns a single datapoint built from
|
|
1933
|
-
// the cached counts the monitor maintains on the queue table
|
|
1933
|
+
// the cached counts the monitor maintains on the queue table, cheap, and avoids re-running the
|
|
1934
1934
|
// job-table aggregate on every call. The aggregate runs only when { force: true } is passed or the
|
|
1935
1935
|
// cache is missing/stale; either way the fresh counts are written back to the cache so later reads
|
|
1936
1936
|
// stay cheap. Throws if the queue doesn't exist. For the cached counts as a single value, use
|
|
@@ -1979,7 +1979,7 @@ class Manager extends EventEmitter {
|
|
|
1979
1979
|
return rows.map(toSnapshot);
|
|
1980
1980
|
}
|
|
1981
1981
|
// persistQueueStats disabled: serve the cached counts the monitor keeps on the queue table.
|
|
1982
|
-
// capturedOn is monitor_on
|
|
1982
|
+
// capturedOn is monitor_on, NULL if never monitored, or old if monitoring has since been turned
|
|
1983
1983
|
// off. Serve the cache while it's within budget; otherwise recompute and re-cache. { force: true }
|
|
1984
1984
|
// applies a much tighter budget (a fresh reading), but still reuses a value computed in the last
|
|
1985
1985
|
// minute so repeated forced calls don't each re-run the aggregate.
|
|
@@ -2011,7 +2011,7 @@ class Manager extends EventEmitter {
|
|
|
2011
2011
|
return [toSnapshot(cached)];
|
|
2012
2012
|
}
|
|
2013
2013
|
// A queue with no capture yet has no cache to fall back on, so its first scan is exempt from the
|
|
2014
|
-
// try-lock
|
|
2014
|
+
// try-lock. See refreshQueueStats. Every later read has real counts to serve and can lose.
|
|
2015
2015
|
const refreshSql = plans.refreshQueueStats(this.config.schema, cached.table, name, {
|
|
2016
2016
|
noAdvisoryLocks: this.config.noAdvisoryLocks,
|
|
2017
2017
|
firstCapture: cached.capturedOn == null
|
package/dist/migrationStore.js
CHANGED
|
@@ -50,7 +50,7 @@ function inlineAsyncCommand(schema, asyncMigration, version, partitionTables) {
|
|
|
50
50
|
return targetTables.map(table => {
|
|
51
51
|
// Add IF NOT EXISTS so the exported script is re-runnable. The negative lookahead keeps it
|
|
52
52
|
// idempotent when the async command already spells out IF NOT EXISTS (the live BAM path needs it
|
|
53
|
-
// there for its own idempotency
|
|
53
|
+
// there for its own idempotency, e.g. migration v36's job_i9 build), avoiding a double insert.
|
|
54
54
|
const ddl = formatJobTable(body, table).replace(/(CREATE (?:UNIQUE )?INDEX CONCURRENTLY)(?! IF NOT EXISTS) /, '$1 IF NOT EXISTS ');
|
|
55
55
|
const comment = `-- inlined from ${schema}.job_table_run_async (migration v${version}, command: ${commandName})`;
|
|
56
56
|
return `${comment}\n${ddl}`;
|
|
@@ -92,7 +92,7 @@ function rollback(schema, version, migrations, noAdvisoryLocks) {
|
|
|
92
92
|
const result = migrations.find(i => i.version === version);
|
|
93
93
|
assert(result, `Version ${version} not found.`);
|
|
94
94
|
// Async (BAM) index builds are enqueued as bam rows, and the BAM runner does not filter by schema
|
|
95
|
-
// version
|
|
95
|
+
// version, so a row left unfinished by a rollback would rebuild, one version later, the very index
|
|
96
96
|
// the rollback just dropped. Clear this version's unfinished rows as part of the same transaction.
|
|
97
97
|
// Only migrations that enqueue async commands can have any, and the migration that introduced BAM
|
|
98
98
|
// is also the first one with async commands, so bam is guaranteed to exist here; ordering the delete
|
|
@@ -119,7 +119,7 @@ function migrateCommands(schema, version, migrations, noAdvisoryLocks, options =
|
|
|
119
119
|
migrations = migrations || getAll(schema);
|
|
120
120
|
// Refuse to migrate from a real DB version older than the oldest migration can start from.
|
|
121
121
|
// Without this floor, `filter(i => i.previous >= version)` happily selects the whole chain for any
|
|
122
|
-
// version below the minimum `previous`, applying migrations over missing intermediate steps
|
|
122
|
+
// version below the minimum `previous`, applying migrations over missing intermediate steps. A
|
|
123
123
|
// cryptic mid-transaction failure, or worse a "success" that stamps the latest version onto an
|
|
124
124
|
// incomplete schema. Version 0 is the sentinel for a full "from scratch" export (getMigrationPlans)
|
|
125
125
|
// and is intentionally exempt.
|
|
@@ -1355,7 +1355,7 @@ function getAll(schema, noPartitioning = false, noCovering = false, noAddColumnB
|
|
|
1355
1355
|
'group_concurency_index',
|
|
1356
1356
|
$VERSION$,
|
|
1357
1357
|
$$
|
|
1358
|
-
CREATE INDEX CONCURRENTLY job_i7 ON ${schema}.job (name, group_id) WHERE state = 'active' AND group_id IS NOT NULL
|
|
1358
|
+
CREATE INDEX CONCURRENTLY IF NOT EXISTS job_i7 ON ${schema}.job (name, group_id) WHERE state = 'active' AND group_id IS NOT NULL
|
|
1359
1359
|
$$
|
|
1360
1360
|
)`
|
|
1361
1361
|
],
|
|
@@ -1390,7 +1390,7 @@ function getAll(schema, noPartitioning = false, noCovering = false, noAddColumnB
|
|
|
1390
1390
|
'key_strict_fifo_index',
|
|
1391
1391
|
$VERSION$,
|
|
1392
1392
|
$$
|
|
1393
|
-
CREATE UNIQUE INDEX CONCURRENTLY job_i8 ON ${schema}.job (name, singleton_key) WHERE state IN ('active', 'retry', 'failed') AND policy = 'key_strict_fifo'
|
|
1393
|
+
CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS job_i8 ON ${schema}.job (name, singleton_key) WHERE state IN ('active', 'retry', 'failed') AND policy = 'key_strict_fifo'
|
|
1394
1394
|
$$
|
|
1395
1395
|
, 'job_common')`
|
|
1396
1396
|
],
|
|
@@ -1454,7 +1454,7 @@ function getAll(schema, noPartitioning = false, noCovering = false, noAddColumnB
|
|
|
1454
1454
|
)
|
|
1455
1455
|
`,
|
|
1456
1456
|
`CREATE INDEX IF NOT EXISTS job_dep_parent_idx ON ${schema}.job_dependency (parent_name, parent_id)`,
|
|
1457
|
-
// NOTE: the v31 job_i5 rebuild (adding `AND NOT blocked`) is intentionally omitted
|
|
1457
|
+
// NOTE: the v31 job_i5 rebuild (adding `AND NOT blocked`) is intentionally omitted, v33
|
|
1458
1458
|
// drops and rebuilds job_i5 again (slimming off the covering INCLUDE), so on a multi-version
|
|
1459
1459
|
// upgrade (<= v31 -> >= v33, applied as one migration transaction) this only built a covering
|
|
1460
1460
|
// index that v33 immediately throws away. The whole migration runs in a single transaction,
|
|
@@ -1499,13 +1499,13 @@ function getAll(schema, noPartitioning = false, noCovering = false, noAddColumnB
|
|
|
1499
1499
|
install: [
|
|
1500
1500
|
`ALTER TABLE ${schema}.version ADD COLUMN IF NOT EXISTS flow_on timestamp with time zone`,
|
|
1501
1501
|
// The job_i9 build and job_i5 reshape are run OFF the migration transaction, via BAM as
|
|
1502
|
-
// CONCURRENTLY DDL
|
|
1502
|
+
// CONCURRENTLY DDL, see the `async` block below. The original v33 ran them synchronously here
|
|
1503
1503
|
// via job_table_run(), taking SHARE/ACCESS EXCLUSIVE locks on job_common + every partition
|
|
1504
1504
|
// inside the migration transaction, which deadlocked live workers polling job_common during a
|
|
1505
1505
|
// rolling deploy (issue #832).
|
|
1506
1506
|
//
|
|
1507
1507
|
// Only databases that have NOT yet passed v33 execute this install, and they always have the
|
|
1508
|
-
// covering job_i5 (the slim form is introduced here)
|
|
1508
|
+
// covering job_i5 (the slim form is introduced here), so the reshape never needlessly
|
|
1509
1509
|
// rebuilds an already-slim index. Databases already past v33 keep what they built then; they
|
|
1510
1510
|
// pick up only the bam default change, carried separately by migration v36.
|
|
1511
1511
|
//
|
|
@@ -1604,7 +1604,7 @@ function getAll(schema, noPartitioning = false, noCovering = false, noAddColumnB
|
|
|
1604
1604
|
// identical to a fresh install (plans.create builds the bam table with this default), and lets a
|
|
1605
1605
|
// future async migration enqueue an ordered drop-then-rebuild without the now() tie. The ALTER
|
|
1606
1606
|
// is idempotent, so databases that just ran v33's copy of it (a multi-version upgrade) are
|
|
1607
|
-
// unaffected. No index work here
|
|
1607
|
+
// unaffected. No index work here. That lives in v33, which the deadlock-affected (pre-v33)
|
|
1608
1608
|
// databases run; databases already past v33 keep the indexes they built and skip the churn.
|
|
1609
1609
|
install: [
|
|
1610
1610
|
`ALTER TABLE ${schema}.bam ALTER COLUMN created_on SET DEFAULT clock_timestamp()`
|
|
@@ -1616,7 +1616,7 @@ function getAll(schema, noPartitioning = false, noCovering = false, noAddColumnB
|
|
|
1616
1616
|
release: '12.26.0',
|
|
1617
1617
|
version: 37,
|
|
1618
1618
|
previous: 36,
|
|
1619
|
-
// Only installed where partitioning is enabled
|
|
1619
|
+
// Only installed where partitioning is enabled, plans.create() creates job_table_format()
|
|
1620
1620
|
// solely in that case, so a noPartitioning database has none to replace.
|
|
1621
1621
|
install: noPartitioning
|
|
1622
1622
|
? []
|
|
@@ -1703,7 +1703,7 @@ function getAll(schema, noPartitioning = false, noCovering = false, noAddColumnB
|
|
|
1703
1703
|
}
|
|
1704
1704
|
],
|
|
1705
1705
|
// Restore before retire, the mirror of the install. Rollback can land at any point in the async
|
|
1706
|
-
// sequence
|
|
1706
|
+
// sequence (before the build, between build and retire, or after both) and IF NOT EXISTS is
|
|
1707
1707
|
// what makes all three the same statement: v40 never reshapes job_i5, it only drops it, so a
|
|
1708
1708
|
// job_i5 still present is already the v39 shape and is left exactly where it is rather than
|
|
1709
1709
|
// being dropped and rebuilt for nothing.
|
package/dist/plans.d.ts
CHANGED
|
@@ -258,6 +258,7 @@ export declare function getNextBamCommand(schema: string, { useLiveness }?: {
|
|
|
258
258
|
}): string;
|
|
259
259
|
export declare function bamHealDrop(schema: string, command: string): string | null;
|
|
260
260
|
export declare function bamHealProbe(schema: string, command: string): string | null;
|
|
261
|
+
export declare function releaseBamCommand(schema: string, id: string, priorStatus: string, priorStartedOn: string | null, claimedStartedOn: string): string;
|
|
261
262
|
export declare function setBamCompleted(schema: string, id: string): string;
|
|
262
263
|
export declare function setBamFailed(schema: string, id: string, error: string): string;
|
|
263
264
|
export declare function getBamStatus(schema: string): string;
|
|
@@ -290,19 +291,19 @@ export declare const REINDEX_DEFAULTS: {
|
|
|
290
291
|
* healthy one by three orders of magnitude on their own.
|
|
291
292
|
*
|
|
292
293
|
* PostgreSQL-only (including PGlite, where both the bloat and REINDEX CONCURRENTLY behave normally).
|
|
293
|
-
* Callers must gate on noReindex
|
|
294
|
+
* Callers must gate on noReindex. See the note in boss.ts #reindex.
|
|
294
295
|
*
|
|
295
296
|
* `owned` is returned rather than filtered on, so an installation whose role cannot reindex still
|
|
296
|
-
* gets told what is bloated. Only leaf indexes (relkind 'i') are candidates
|
|
297
|
+
* gets told what is bloated. Only leaf indexes (relkind 'i') are candidates. pg-boss creates
|
|
297
298
|
* i1..i10 directly on each partition, and a partitioned index (relkind 'I') cannot be reindexed
|
|
298
299
|
* except through its leaves anyway.
|
|
299
300
|
*
|
|
300
301
|
* Caveat: relpages/reltuples are refreshed by VACUUM/ANALYZE, so they go stale where autovacuum is
|
|
301
|
-
* disabled for the table. That is acceptable
|
|
302
|
+
* disabled for the table. That is acceptable. The entire failure mode assumes autovacuum runs.
|
|
302
303
|
*/
|
|
303
304
|
export declare function getBloatedIndexes(schema: string, tables?: string[], options?: IndexBloatOptions): string;
|
|
304
305
|
/**
|
|
305
|
-
* Every owned leaf index on the job tables, ignoring the density gate
|
|
306
|
+
* Every owned leaf index on the job tables, ignoring the density gate. The target list for
|
|
306
307
|
* `{ force: true }`.
|
|
307
308
|
*/
|
|
308
309
|
export declare function getJobIndexes(schema: string, tables?: string[]): string;
|
|
@@ -320,7 +321,7 @@ export declare function getReindexLeftovers(schema: string, tables?: string[], n
|
|
|
320
321
|
*
|
|
321
322
|
* `pg_stat_activity.backend_xmin` is readable by an unprivileged role (it is not one of the columns
|
|
322
323
|
* restricted to the owning user), as are the other three views, so the degraded path is defensive
|
|
323
|
-
* rather than expected
|
|
324
|
+
* rather than expected. A managed provider may still revoke them.
|
|
324
325
|
*/
|
|
325
326
|
export declare const XMIN_HORIZON_SOURCES: {
|
|
326
327
|
readonly backends: "SELECT max(age(backend_xmin)) FROM pg_catalog.pg_stat_activity WHERE backend_xmin IS NOT NULL AND (xact_start IS NULL OR xact_start < $1)";
|
|
@@ -337,7 +338,7 @@ export declare const XMIN_HORIZON_QUERY_SOURCES: readonly XminHorizonSource[];
|
|
|
337
338
|
* `age()` measures transactions elapsed since the pinned xid, not wall time, which is the metric
|
|
338
339
|
* that matters: dead tuples accumulate per transaction, so a horizon pinned across an idle night
|
|
339
340
|
* costs nothing while the same age on a busy queue is a backlog of rows autovacuum cannot reclaim.
|
|
340
|
-
* Measured directly
|
|
341
|
+
* Measured directly. A REPEATABLE READ holder open on an idle database reports 0, and 2,000 after
|
|
341
342
|
* 2,000 transactions with the same holder still open.
|
|
342
343
|
*
|
|
343
344
|
* Also returns the oldest in-transaction backend's wall-clock age, purely so the warning can say
|
|
@@ -373,7 +374,7 @@ export declare function dropIndexConcurrently(schema: string, name: string): str
|
|
|
373
374
|
* The statement list an operator runs by hand: every stale stub dropped first, then the rebuilds.
|
|
374
375
|
*
|
|
375
376
|
* Stubs are emitted whole rather than paired to the index they came from. Postgres does not append
|
|
376
|
-
* `_ccnew
|
|
377
|
+
* `_ccnew`. It truncates the *base* so the result fits in 63 bytes, so `j<sha224>_i11` (61 chars)
|
|
377
378
|
* leaves behind `j<sha224>__ccnew` with the `i11` gone, and a prefix match never fires on a
|
|
378
379
|
* partitioned queue (every partition table name is `'j' || sha224(queue_name)`, 57 chars). Dropping
|
|
379
380
|
* them unconditionally is also what the background pass does: an invalid stub is dead weight that
|
package/dist/plans.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../src/plans.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../src/plans.ts"],"names":[],"mappings":"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"}
|