@dbos-inc/dbos-enterprise 5.3.2-preview → 5.4.2-preview
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 +0 -2
- package/dist/src/auto_upgrade.d.ts +39 -0
- package/dist/src/auto_upgrade.d.ts.map +1 -0
- package/dist/src/auto_upgrade.js +229 -0
- package/dist/src/auto_upgrade.js.map +1 -0
- package/dist/src/cockroach.d.ts +10 -0
- package/dist/src/cockroach.d.ts.map +1 -0
- package/dist/src/cockroach.js +28 -0
- package/dist/src/cockroach.js.map +1 -0
- package/dist/src/conductor/conductor.d.ts +8 -5
- package/dist/src/conductor/conductor.d.ts.map +1 -1
- package/dist/src/conductor/conductor.js +765 -735
- package/dist/src/conductor/conductor.js.map +1 -1
- package/dist/src/conductor/protocol.d.ts +31 -7
- package/dist/src/conductor/protocol.d.ts.map +1 -1
- package/dist/src/conductor/protocol.js +84 -17
- package/dist/src/conductor/protocol.js.map +1 -1
- package/dist/src/export.d.ts +7 -0
- package/dist/src/export.d.ts.map +1 -1
- package/dist/src/export.js +15 -21
- package/dist/src/export.js.map +1 -1
- package/dist/src/fork.d.ts +7 -0
- package/dist/src/fork.d.ts.map +1 -1
- package/dist/src/fork.js +11 -3
- package/dist/src/fork.js.map +1 -1
- package/dist/src/index.d.ts +9 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +12 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/locks.d.ts +20 -0
- package/dist/src/locks.d.ts.map +1 -0
- package/dist/src/locks.js +47 -0
- package/dist/src/locks.js.map +1 -0
- package/dist/src/observability.d.ts +8 -0
- package/dist/src/observability.d.ts.map +1 -1
- package/dist/src/observability.js +63 -43
- package/dist/src/observability.js.map +1 -1
- package/dist/src/retention.d.ts +16 -34
- package/dist/src/retention.d.ts.map +1 -1
- package/dist/src/retention.js +151 -191
- package/dist/src/retention.js.map +1 -1
- package/dist/src/sharding/index.d.ts +9 -0
- package/dist/src/sharding/index.d.ts.map +1 -0
- package/dist/src/sharding/index.js +13 -0
- package/dist/src/sharding/index.js.map +1 -0
- package/dist/src/sharding/migrations.d.ts +20 -0
- package/dist/src/sharding/migrations.d.ts.map +1 -0
- package/dist/src/sharding/migrations.js +486 -0
- package/dist/src/sharding/migrations.js.map +1 -0
- package/dist/src/sharding/schema.d.ts +9 -0
- package/dist/src/sharding/schema.d.ts.map +1 -0
- package/dist/src/sharding/schema.js +12 -0
- package/dist/src/sharding/schema.js.map +1 -0
- package/dist/src/sharding/sys_db.d.ts +101 -0
- package/dist/src/sharding/sys_db.d.ts.map +1 -0
- package/dist/src/sharding/sys_db.js +717 -0
- package/dist/src/sharding/sys_db.js.map +1 -0
- package/package.json +3 -3
package/dist/src/retention.js
CHANGED
|
@@ -1,29 +1,36 @@
|
|
|
1
|
+
// Copyright (c) 2026 DBOS, Inc. All rights reserved.
|
|
2
|
+
//
|
|
3
|
+
// This file is part of Transact Enterprise, proprietary software licensed under the
|
|
4
|
+
// DBOS Conductor Software License: https://www.dbos.dev/conductor-license
|
|
5
|
+
// You may not use, copy, modify, or distribute this file except as that license permits.
|
|
6
|
+
// Disabling or circumventing the entitlement checks in @dbos-inc/dbos-sdk's src/enterprise.ts
|
|
7
|
+
// that gate it is a material breach of that license.
|
|
1
8
|
"use strict";
|
|
2
|
-
// Retention and bulk timeout across the whole system database.
|
|
3
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.globalTimeout = exports.garbageCollect = exports.listTimedOutWorkflowIds = exports.collectStatuses = exports.collectPayloads = exports.acquireRetentionLock = exports.DEFAULT_GC_BATCH_SIZE = exports.retentionLockKey = exports.retryOnSerializationError = void 0;
|
|
10
|
+
exports.globalTimeout = exports.garbageCollect = exports.listTimedOutWorkflowIds = exports.collectStatuses = exports.collectPayloads = exports.acquireRetentionLock = exports.WindowBatches = exports.DEFAULT_GC_BATCH_SIZE = exports.retentionLockKey = exports.retryOnSerializationError = void 0;
|
|
11
|
+
const cockroach_1 = require("./cockroach");
|
|
5
12
|
const dbos_executor_1 = require("@dbos-inc/dbos-sdk/internal/dbos-executor");
|
|
6
13
|
const error_1 = require("@dbos-inc/dbos-sdk/internal/error");
|
|
14
|
+
const shard_keys_1 = require("@dbos-inc/dbos-sdk/internal/shard_keys");
|
|
15
|
+
const locks_1 = require("./locks");
|
|
7
16
|
const system_database_1 = require("@dbos-inc/dbos-sdk/internal/system_database");
|
|
8
17
|
const utils_1 = require("@dbos-inc/dbos-sdk/internal/utils");
|
|
9
18
|
const workflow_1 = require("@dbos-inc/dbos-sdk/internal/workflow");
|
|
10
|
-
/**
|
|
11
|
-
* Bulk maintenance retries these a bounded number of times. 40001 is kept out of core's retryable sets,
|
|
12
|
-
* which feed `dbRetry` and so retry forever; every other path runs READ COMMITTED and never sees it.
|
|
13
|
-
*/
|
|
14
19
|
const SERIALIZATION_SQLSTATE_CODES = new Set([
|
|
15
|
-
'40001',
|
|
16
|
-
'40P01',
|
|
20
|
+
'40001',
|
|
21
|
+
'40P01',
|
|
17
22
|
]);
|
|
18
|
-
function isSerializationError(err) {
|
|
23
|
+
function isSerializationError(err, sysdb) {
|
|
19
24
|
for (const e of (0, system_database_1.unwrapErrors)(err)) {
|
|
25
|
+
if (sysdb.isSerializationConflict(e)) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
20
28
|
if ((0, system_database_1.isPgDatabaseError)(e) && SERIALIZATION_SQLSTATE_CODES.has(e.code)) {
|
|
21
29
|
return true;
|
|
22
30
|
}
|
|
23
31
|
}
|
|
24
32
|
return false;
|
|
25
33
|
}
|
|
26
|
-
/** Borrow a connection for a retention round, so the system database's destroy() can cut it. */
|
|
27
34
|
async function borrowRetentionClient(sysdb) {
|
|
28
35
|
if (sysdb.destroyed) {
|
|
29
36
|
throw new Error('System database shutting down');
|
|
@@ -32,18 +39,12 @@ async function borrowRetentionClient(sysdb) {
|
|
|
32
39
|
sysdb.retentionClients.add(client);
|
|
33
40
|
return client;
|
|
34
41
|
}
|
|
35
|
-
|
|
36
|
-
function releaseRetentionClient(sysdb, client) {
|
|
42
|
+
function releaseRetentionClient(sysdb, client, destroy = false) {
|
|
37
43
|
if (sysdb.retentionClients.delete(client)) {
|
|
38
|
-
|
|
39
|
-
client.release();
|
|
44
|
+
client.release(destroy);
|
|
40
45
|
}
|
|
41
46
|
}
|
|
42
|
-
|
|
43
|
-
* Re-run a batch that lost a deadlock or serialization race. The database already rolled it
|
|
44
|
-
* back, so replaying it is safe.
|
|
45
|
-
*/
|
|
46
|
-
async function retryOnSerializationError(operation) {
|
|
47
|
+
async function retryOnSerializationError(operation, sysdb) {
|
|
47
48
|
const maxAttempts = 10;
|
|
48
49
|
const maxBackoff = 2.0;
|
|
49
50
|
let backoff = 0.05;
|
|
@@ -52,7 +53,7 @@ async function retryOnSerializationError(operation) {
|
|
|
52
53
|
return await operation();
|
|
53
54
|
}
|
|
54
55
|
catch (e) {
|
|
55
|
-
if (!isSerializationError(e)) {
|
|
56
|
+
if (!isSerializationError(e, sysdb)) {
|
|
56
57
|
throw e;
|
|
57
58
|
}
|
|
58
59
|
const message = e instanceof Error ? e.message : String(e);
|
|
@@ -60,7 +61,6 @@ async function retryOnSerializationError(operation) {
|
|
|
60
61
|
dbos_executor_1.DBOSExecutor.globalInstance?.logger.warn(`Garbage collection failed after ${maxAttempts} attempts: ${message}`);
|
|
61
62
|
throw e;
|
|
62
63
|
}
|
|
63
|
-
// Jittered backoff, so peers that collided do not collide again
|
|
64
64
|
const actualBackoff = backoff * (0.5 + Math.random());
|
|
65
65
|
dbos_executor_1.DBOSExecutor.globalInstance?.logger.warn(`Contention or deadlock detected in workflow garbage collection: ${message}. ` +
|
|
66
66
|
`Retrying in ${actualBackoff.toFixed(2)}s (attempt ${attempt})`);
|
|
@@ -70,89 +70,122 @@ async function retryOnSerializationError(operation) {
|
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
exports.retryOnSerializationError = retryOnSerializationError;
|
|
73
|
-
/**
|
|
74
|
-
* The pg_try_advisory_lock argument for one schema's retention round: the leading 8 bytes of
|
|
75
|
-
* SHA-256 over a fixed string, read as a signed big-endian 64-bit integer. Separate locks for
|
|
76
|
-
* separate schemas. Every DBOS SDK derives the key this way, so rounds in different languages
|
|
77
|
-
* against one system database contend for the same lock; changing it here changes it everywhere.
|
|
78
|
-
*/
|
|
79
73
|
function retentionLockKey(schemaName) {
|
|
80
74
|
return (0, system_database_1.advisoryLockKey)(`dbos.retention.${schemaName}`);
|
|
81
75
|
}
|
|
82
76
|
exports.retentionLockKey = retentionLockKey;
|
|
83
|
-
// Rows deleted per transaction by garbage collection.
|
|
84
77
|
exports.DEFAULT_GC_BATCH_SIZE = 50_000;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if (
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
78
|
+
async function kthValue(sysdb, client, column, from, where, params, k, descending = false) {
|
|
79
|
+
if (!Number.isInteger(k) || k < 1) {
|
|
80
|
+
throw new error_1.DBOSError(`Cannot take the ${k}th value: k must be a positive integer`);
|
|
81
|
+
}
|
|
82
|
+
const order = `ORDER BY ${column}${descending ? ' DESC' : ''}`;
|
|
83
|
+
if (!sysdb.sharded) {
|
|
84
|
+
const { rows } = await client.query(`SELECT ${column} AS value FROM ${from} WHERE ${where} ${order} LIMIT 1${k > 1 ? ` OFFSET ${k - 1}` : ''}`, params);
|
|
85
|
+
return rows.length > 0 ? Number(rows[0].value) : undefined;
|
|
86
|
+
}
|
|
87
|
+
const { rows } = await client.query(`SELECT ${column} AS value FROM ${from} WHERE ${where} ${order} LIMIT ${k}`, params);
|
|
88
|
+
const values = rows.map((row) => Number(row.value)).sort((a, b) => (descending ? b - a : a - b));
|
|
89
|
+
return values.length >= k ? values[k - 1] : undefined;
|
|
90
|
+
}
|
|
91
|
+
const INITIAL_BATCH_WINDOW_MS = 1_000;
|
|
92
|
+
class WindowBatches {
|
|
93
|
+
batchSize;
|
|
94
|
+
width = INITIAL_BATCH_WINDOW_MS;
|
|
95
|
+
constructor(batchSize) {
|
|
96
|
+
this.batchSize = batchSize;
|
|
97
|
+
}
|
|
98
|
+
async bound(client, column, from, eligible, watermark, cutoff) {
|
|
99
|
+
const k = this.batchSize;
|
|
100
|
+
let lo = watermark;
|
|
101
|
+
let fits = undefined;
|
|
102
|
+
let fitsCount = 0;
|
|
103
|
+
let overflows = undefined;
|
|
104
|
+
let hi = lo + this.width;
|
|
105
|
+
let final;
|
|
106
|
+
let n;
|
|
107
|
+
for (;;) {
|
|
108
|
+
final = hi >= cutoff;
|
|
109
|
+
const params = [];
|
|
110
|
+
const window = [eligible(params), `${column} > $${params.push(lo)}`];
|
|
111
|
+
if (!final)
|
|
112
|
+
window.push(`${column} <= $${params.push(hi)}`);
|
|
113
|
+
const { rows } = await client.query(`SELECT count(*) AS count FROM ${from} WHERE ${window.join(' AND ')}`, params);
|
|
114
|
+
n = Number(rows[0].count);
|
|
115
|
+
if (n > 2 * k && hi - lo > 1) {
|
|
116
|
+
overflows = Math.min(hi, cutoff);
|
|
117
|
+
const base = fits ?? lo;
|
|
118
|
+
hi = base + Math.floor((overflows - base) / 2);
|
|
119
|
+
if (fits !== undefined && hi <= fits) {
|
|
120
|
+
hi = fits;
|
|
121
|
+
n = fitsCount;
|
|
122
|
+
final = false;
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (n === 0 && fits === undefined) {
|
|
128
|
+
if (final)
|
|
129
|
+
return undefined;
|
|
130
|
+
const nextParams = [];
|
|
131
|
+
const nextWhere = `${eligible(nextParams)} AND ${column} > $${nextParams.push(lo)}`;
|
|
132
|
+
const { rows: next } = await client.query(`SELECT min(${column}) AS next FROM ${from} WHERE ${nextWhere}`, nextParams);
|
|
133
|
+
if (next[0]?.next === null || next[0]?.next === undefined)
|
|
134
|
+
return undefined;
|
|
135
|
+
lo = Number(next[0].next) - 1;
|
|
136
|
+
hi = lo + this.width;
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
if (4 * n < k && !final) {
|
|
140
|
+
fits = hi;
|
|
141
|
+
fitsCount = n;
|
|
142
|
+
hi = overflows === undefined ? lo + (hi - lo) * 16 : Math.floor((hi + overflows) / 2);
|
|
143
|
+
if (overflows !== undefined && hi <= fits)
|
|
144
|
+
break;
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
break;
|
|
97
148
|
}
|
|
98
|
-
|
|
149
|
+
if (final)
|
|
150
|
+
return undefined;
|
|
151
|
+
const span = Math.max(1, hi - lo);
|
|
152
|
+
this.width = Math.max(1, Math.min(span * 16, Math.floor((span * k) / Math.max(n, 1))));
|
|
153
|
+
return hi;
|
|
99
154
|
}
|
|
100
|
-
return cockroach;
|
|
101
155
|
}
|
|
102
|
-
|
|
103
|
-
* Take a database-wide lock for one retention round, returning how to release it, or
|
|
104
|
-
* undefined when another round already holds it. The lock is session-scoped, so a round
|
|
105
|
-
* that crashes releases it. CockroachDB has no advisory locks and always takes it, so it
|
|
106
|
-
* collects unprotected rather than not at all.
|
|
107
|
-
*/
|
|
156
|
+
exports.WindowBatches = WindowBatches;
|
|
108
157
|
async function acquireRetentionLock(sysdb) {
|
|
109
|
-
if (
|
|
158
|
+
if (sysdb.destroyed) {
|
|
159
|
+
throw new Error('System database shutting down');
|
|
160
|
+
}
|
|
161
|
+
if (await (0, cockroach_1.isCockroach)(sysdb)) {
|
|
110
162
|
return { release: () => Promise.resolve() };
|
|
111
163
|
}
|
|
112
|
-
const key = retentionLockKey(sysdb.schemaName)
|
|
113
|
-
// The round holds this connection until it ends: releasing it would drop the lock.
|
|
164
|
+
const key = retentionLockKey(sysdb.schemaName);
|
|
114
165
|
const client = await borrowRetentionClient(sysdb);
|
|
115
|
-
let
|
|
166
|
+
let lock;
|
|
116
167
|
try {
|
|
117
|
-
|
|
118
|
-
acquired = rows[0]?.locked === true;
|
|
168
|
+
lock = await (0, locks_1.tryAdvisoryLock)(client, key, { name: 'retention', discard: sysdb.sharded, logger: sysdb.logger });
|
|
119
169
|
}
|
|
120
170
|
catch (e) {
|
|
121
|
-
releaseRetentionClient(sysdb, client);
|
|
171
|
+
releaseRetentionClient(sysdb, client, true);
|
|
122
172
|
throw e;
|
|
123
173
|
}
|
|
124
|
-
|
|
125
|
-
|
|
174
|
+
const release = async () => {
|
|
175
|
+
if (!sysdb.retentionClients.has(client)) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
releaseRetentionClient(sysdb, client, await lock.release());
|
|
179
|
+
};
|
|
180
|
+
if (!lock.acquired) {
|
|
181
|
+
await release();
|
|
126
182
|
return undefined;
|
|
127
183
|
}
|
|
128
|
-
return {
|
|
129
|
-
release: async () => {
|
|
130
|
-
// Already cut by destroy(): the session is gone and took the lock with it.
|
|
131
|
-
if (!sysdb.retentionClients.has(client)) {
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
try {
|
|
135
|
-
// Explicit, since releasing the client only returns the session to the pool.
|
|
136
|
-
const { rows } = await client.query('SELECT pg_advisory_unlock($1) AS released', [key]);
|
|
137
|
-
if (rows[0]?.released !== true) {
|
|
138
|
-
// False means this session no longer holds it, which a transaction-pooling proxy
|
|
139
|
-
// causes by switching backends.
|
|
140
|
-
sysdb.logger.warn('Could not release the retention lock: this session no longer holds it. Retention will ' +
|
|
141
|
-
'not proceed until the lock is released, which happens when the holding backend closes. ' +
|
|
142
|
-
'A transaction-pooling proxy in front of Postgres causes this; run DBOS through a ' +
|
|
143
|
-
'session-pooled or direct connection.');
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
finally {
|
|
147
|
-
releaseRetentionClient(sysdb, client);
|
|
148
|
-
}
|
|
149
|
-
},
|
|
150
|
-
};
|
|
184
|
+
return { release };
|
|
151
185
|
}
|
|
152
186
|
exports.acquireRetentionLock = acquireRetentionLock;
|
|
153
|
-
/** VACUUM the tables a sweep dirtied. No-op where there is no autovacuum to outrun. */
|
|
154
187
|
async function vacuumTables(sysdb, tables) {
|
|
155
|
-
if (await isCockroach(sysdb)) {
|
|
188
|
+
if (await (0, cockroach_1.isCockroach)(sysdb)) {
|
|
156
189
|
return;
|
|
157
190
|
}
|
|
158
191
|
const client = await borrowRetentionClient(sysdb);
|
|
@@ -161,7 +194,6 @@ async function vacuumTables(sysdb, tables) {
|
|
|
161
194
|
client.on('notice', onNotice);
|
|
162
195
|
try {
|
|
163
196
|
for (const table of tables) {
|
|
164
|
-
// Per table, so one refusal does not skip the rest.
|
|
165
197
|
notices = [];
|
|
166
198
|
try {
|
|
167
199
|
await client.query(`VACUUM (INDEX_CLEANUP ON, TRUNCATE OFF, ANALYZE) "${sysdb.schemaName}"."${table}"`);
|
|
@@ -173,8 +205,6 @@ async function vacuumTables(sysdb, tables) {
|
|
|
173
205
|
sysdb.logger.warn(`Payload retention could not vacuum ${table}: ${e.message}`);
|
|
174
206
|
continue;
|
|
175
207
|
}
|
|
176
|
-
// A refused or stalled VACUUM does not raise, it says so in a notice; a successful
|
|
177
|
-
// one is silent, so anything here is worth surfacing.
|
|
178
208
|
for (const notice of notices) {
|
|
179
209
|
sysdb.logger.warn(`Payload retention vacuuming ${table}: ${notice}`);
|
|
180
210
|
}
|
|
@@ -185,45 +215,27 @@ async function vacuumTables(sysdb, tables) {
|
|
|
185
215
|
releaseRetentionClient(sysdb, client);
|
|
186
216
|
}
|
|
187
217
|
}
|
|
188
|
-
/** Delete one payload table's orphans below the cutoff, one batch per transaction. */
|
|
189
218
|
async function collectPayloadTable(sysdb, table, cutoff, batchSize) {
|
|
190
|
-
// A payload below the cutoff belongs to a workflow created before it, so the status side
|
|
191
|
-
// is the few such rows still present, not the whole table.
|
|
192
219
|
const orphaned = `NOT EXISTS (
|
|
193
220
|
SELECT 1 FROM "${sysdb.schemaName}".workflow_status ws
|
|
194
|
-
WHERE ws
|
|
221
|
+
WHERE ${sysdb.wfJoin('ws', 't')} AND ws.created_at < $1
|
|
195
222
|
)`;
|
|
196
|
-
|
|
197
|
-
const oldest = await retryOnSerializationError(
|
|
198
|
-
const { rows } = await sysdb.pool.query(`SELECT retention_timestamp
|
|
199
|
-
FROM "${sysdb.schemaName}".${table}
|
|
200
|
-
WHERE retention_timestamp < $1
|
|
201
|
-
ORDER BY retention_timestamp
|
|
202
|
-
LIMIT 1`, [cutoff]);
|
|
203
|
-
// retention_timestamp is a bigint, so node-postgres hands it back as a string.
|
|
204
|
-
return rows.length > 0 ? Number(rows[0].retention_timestamp) : undefined;
|
|
205
|
-
});
|
|
223
|
+
const from = `"${sysdb.schemaName}".${table}`;
|
|
224
|
+
const oldest = await retryOnSerializationError(() => kthValue(sysdb, sysdb.pool, 'retention_timestamp', from, 'retention_timestamp < $1', [cutoff], 1), sysdb);
|
|
206
225
|
if (oldest === undefined) {
|
|
207
226
|
return 0;
|
|
208
227
|
}
|
|
209
228
|
let total = 0;
|
|
210
229
|
let watermark = oldest - 1;
|
|
230
|
+
const windows = sysdb.sharded ? new WindowBatches(batchSize) : undefined;
|
|
211
231
|
for (;;) {
|
|
212
232
|
const batch = await retryOnSerializationError(async () => {
|
|
213
|
-
// Borrowed rather than pool.query'd: that releases with the error, which discards the
|
|
214
|
-
// connection on a deadlock, so the retry wrapping this would churn the pool per batch.
|
|
215
233
|
const client = await borrowRetentionClient(sysdb);
|
|
216
234
|
try {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
FROM "${sysdb.schemaName}".${table}
|
|
221
|
-
WHERE retention_timestamp < $1 AND retention_timestamp > $2
|
|
222
|
-
ORDER BY retention_timestamp
|
|
223
|
-
LIMIT 1 OFFSET ${batchSize - 1}`, [cutoff, watermark]);
|
|
224
|
-
const step = rows.length > 0 ? Number(rows[0].retention_timestamp) : undefined;
|
|
235
|
+
const step = windows !== undefined
|
|
236
|
+
? await windows.bound(client, 'retention_timestamp', from, (params) => `retention_timestamp < $${params.push(cutoff)}`, watermark, cutoff)
|
|
237
|
+
: await kthValue(sysdb, client, 'retention_timestamp', from, 'retention_timestamp < $1 AND retention_timestamp > $2', [cutoff, watermark], batchSize);
|
|
225
238
|
const params = [cutoff, watermark];
|
|
226
|
-
// Timestamp ties may push the batch slightly over batchSize, but never split across two.
|
|
227
239
|
const upperBound = step === undefined ? '' : `AND t.retention_timestamp <= $${params.push(step)} `;
|
|
228
240
|
const result = await client.query(`DELETE FROM "${sysdb.schemaName}".${table} t
|
|
229
241
|
WHERE t.retention_timestamp < $1 AND t.retention_timestamp > $2 ${upperBound}AND ${orphaned}`, params);
|
|
@@ -232,7 +244,7 @@ async function collectPayloadTable(sysdb, table, cutoff, batchSize) {
|
|
|
232
244
|
finally {
|
|
233
245
|
releaseRetentionClient(sysdb, client);
|
|
234
246
|
}
|
|
235
|
-
});
|
|
247
|
+
}, sysdb);
|
|
236
248
|
total += batch.deleted;
|
|
237
249
|
if (batch.step === undefined) {
|
|
238
250
|
return total;
|
|
@@ -240,22 +252,12 @@ async function collectPayloadTable(sysdb, table, cutoff, batchSize) {
|
|
|
240
252
|
watermark = batch.step;
|
|
241
253
|
}
|
|
242
254
|
}
|
|
243
|
-
/**
|
|
244
|
-
* Delete payload and step rows below the cutoff whose workflow is gone, returning the count
|
|
245
|
-
* removed from each table. Runs after the status sweep, whose orphans all fall in range:
|
|
246
|
-
* every payload is stamped no later than the completion that made the row collectable.
|
|
247
|
-
*/
|
|
248
255
|
async function collectPayloads(sysdb, cutoff, batchSize = exports.DEFAULT_GC_BATCH_SIZE) {
|
|
249
|
-
// A NaN survives a bare `< 1` test and would only fail once it reached SQL.
|
|
250
256
|
if (!Number.isInteger(batchSize) || batchSize < 1) {
|
|
251
257
|
throw new error_1.DBOSError(`batchSize must be a positive integer, got ${batchSize}`);
|
|
252
258
|
}
|
|
253
259
|
const tables = ['workflow_input', 'workflow_output', 'operation_outputs'];
|
|
254
|
-
// To optimize performance, vacuum payload tables both before and after collecting them.
|
|
255
260
|
await vacuumTables(sysdb, ['workflow_status', ...tables]);
|
|
256
|
-
// One connection per concurrent sweep, on top of the one the retention lock holds for the
|
|
257
|
-
// whole round. A pool too small for all three runs them sequentially rather than leaving
|
|
258
|
-
// sweeps waiting on a connection that only the round itself would free.
|
|
259
261
|
const poolMax = sysdb.pool.options.max ?? system_database_1.DEFAULT_POOL_SIZE;
|
|
260
262
|
const concurrency = Math.max(1, Math.min(tables.length, poolMax - 1));
|
|
261
263
|
const deleted = new Array(tables.length).fill(0);
|
|
@@ -275,7 +277,6 @@ async function collectPayloads(sysdb, cutoff, batchSize = exports.DEFAULT_GC_BAT
|
|
|
275
277
|
}
|
|
276
278
|
};
|
|
277
279
|
await Promise.all(Array.from({ length: concurrency }, () => sweep()));
|
|
278
|
-
// Only the first can be thrown, so the rest would otherwise be lost.
|
|
279
280
|
for (const extra of failures.slice(1)) {
|
|
280
281
|
sysdb.logger.warn(`Payload retention sweep also failed: ${extra instanceof Error ? extra.message : String(extra)}`);
|
|
281
282
|
}
|
|
@@ -287,45 +288,30 @@ async function collectPayloads(sysdb, cutoff, batchSize = exports.DEFAULT_GC_BAT
|
|
|
287
288
|
return deleted;
|
|
288
289
|
}
|
|
289
290
|
exports.collectPayloads = collectPayloads;
|
|
290
|
-
/**
|
|
291
|
-
* Rows garbage collection may delete. completed_at is set on every terminal transition and
|
|
292
|
-
* cleared on resume, so one predicate covers eligibility: in-flight rows hold NULL and never
|
|
293
|
-
* compare true. Unscoped by application: retention is system-wide.
|
|
294
|
-
*/
|
|
295
291
|
function gcFilter(sysdb, cutoffEpochTimestampMs, params) {
|
|
296
292
|
params.push(cutoffEpochTimestampMs);
|
|
297
293
|
return `completed_at < $${params.length}`;
|
|
298
294
|
}
|
|
299
|
-
|
|
300
|
-
* Delete one batch, returning the watermark to resume from, or undefined once the last one ran.
|
|
301
|
-
* The delete is its own transaction; it re-checks the filter, so it needs no snapshot shared
|
|
302
|
-
* with the select that bounds it.
|
|
303
|
-
*/
|
|
304
|
-
async function collectStatusBatch(sysdb, cutoffEpochTimestampMs, batchSize, watermark) {
|
|
305
|
-
// Borrowed rather than pool.query'd: that releases with the error, which discards the
|
|
306
|
-
// connection on a deadlock, so the retry wrapping this would churn the pool per batch.
|
|
295
|
+
async function collectStatusBatch(sysdb, cutoffEpochTimestampMs, batchSize, watermark, windows) {
|
|
307
296
|
const client = await borrowRetentionClient(sysdb);
|
|
308
297
|
try {
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
298
|
+
const from = `"${sysdb.schemaName}".workflow_status`;
|
|
299
|
+
let step;
|
|
300
|
+
if (windows !== undefined) {
|
|
301
|
+
step = await windows.bound(client, 'completed_at', from, (params) => gcFilter(sysdb, cutoffEpochTimestampMs, params), watermark, cutoffEpochTimestampMs);
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
const stepParams = [];
|
|
305
|
+
const stepScope = gcFilter(sysdb, cutoffEpochTimestampMs, stepParams);
|
|
306
|
+
stepParams.push(watermark);
|
|
307
|
+
step = await kthValue(sysdb, client, 'completed_at', from, `${stepScope} AND completed_at > $${stepParams.length}`, stepParams, batchSize);
|
|
308
|
+
}
|
|
320
309
|
const deleteParams = [];
|
|
321
310
|
let deleteScope = gcFilter(sysdb, cutoffEpochTimestampMs, deleteParams);
|
|
322
311
|
if (step !== undefined) {
|
|
323
|
-
// Inclusive upper bound: completed_at ties may push a batch over batchSize, but never split across two.
|
|
324
312
|
deleteParams.push(watermark, step);
|
|
325
313
|
deleteScope = `${deleteScope} AND completed_at > $${deleteParams.length - 1} AND completed_at <= $${deleteParams.length}`;
|
|
326
314
|
}
|
|
327
|
-
// The final batch drops the watermark: unbounded, since an import can land a
|
|
328
|
-
// completed_at below it mid-pass.
|
|
329
315
|
await client.query(`DELETE FROM "${sysdb.schemaName}".workflow_status WHERE ${deleteScope}`, deleteParams);
|
|
330
316
|
return step;
|
|
331
317
|
}
|
|
@@ -333,28 +319,15 @@ async function collectStatusBatch(sysdb, cutoffEpochTimestampMs, batchSize, wate
|
|
|
333
319
|
releaseRetentionClient(sysdb, client);
|
|
334
320
|
}
|
|
335
321
|
}
|
|
336
|
-
/**
|
|
337
|
-
* Delete old terminal workflows throughout the system database, returning the cutoff
|
|
338
|
-
* actually used, or undefined when there is nothing to collect.
|
|
339
|
-
*
|
|
340
|
-
* Conductor sends cleared retention thresholds as JSON null, so every param is nullish.
|
|
341
|
-
*/
|
|
342
322
|
async function collectStatuses(sysdb, cutoffEpochTimestampMs, rowsThreshold, options = {}) {
|
|
343
323
|
const batchSize = options.batchSize ?? exports.DEFAULT_GC_BATCH_SIZE;
|
|
344
|
-
// A NaN survives a bare `< 1` test and would only fail once it reached SQL, leaving GC half-applied.
|
|
345
324
|
if (!Number.isInteger(batchSize) || batchSize < 1) {
|
|
346
325
|
throw new error_1.DBOSError(`batchSize must be a positive integer, got ${batchSize}`);
|
|
347
326
|
}
|
|
348
327
|
if (rowsThreshold !== undefined && rowsThreshold !== null) {
|
|
349
|
-
|
|
350
|
-
const
|
|
351
|
-
|
|
352
|
-
WHERE completed_at IS NOT NULL
|
|
353
|
-
ORDER BY completed_at DESC
|
|
354
|
-
LIMIT 1 OFFSET $1`, [rowsThreshold - 1]));
|
|
355
|
-
if (result.rows.length > 0) {
|
|
356
|
-
const rowsBasedCutoff = Number(result.rows[0].completed_at);
|
|
357
|
-
// Use the more restrictive cutoff (higher timestamp = more recent = more deletion)
|
|
328
|
+
const threshold = rowsThreshold;
|
|
329
|
+
const rowsBasedCutoff = await retryOnSerializationError(() => kthValue(sysdb, sysdb.pool, 'completed_at', `"${sysdb.schemaName}".workflow_status`, 'completed_at IS NOT NULL', [], threshold, true), sysdb);
|
|
330
|
+
if (rowsBasedCutoff !== undefined) {
|
|
358
331
|
if (cutoffEpochTimestampMs === undefined ||
|
|
359
332
|
cutoffEpochTimestampMs === null ||
|
|
360
333
|
rowsBasedCutoff > cutoffEpochTimestampMs) {
|
|
@@ -365,34 +338,22 @@ async function collectStatuses(sysdb, cutoffEpochTimestampMs, rowsThreshold, opt
|
|
|
365
338
|
if (cutoffEpochTimestampMs === undefined || cutoffEpochTimestampMs === null) {
|
|
366
339
|
return undefined;
|
|
367
340
|
}
|
|
368
|
-
// Narrowed to a constant so the closures below keep it.
|
|
369
341
|
const cutoff = cutoffEpochTimestampMs;
|
|
370
|
-
|
|
371
|
-
// history neither deletes in one transaction nor rescans what it already deleted.
|
|
372
|
-
const oldest = await retryOnSerializationError(async () => {
|
|
342
|
+
const oldest = await retryOnSerializationError(() => {
|
|
373
343
|
const params = [];
|
|
374
344
|
const scope = gcFilter(sysdb, cutoff, params);
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
WHERE ${scope}
|
|
378
|
-
ORDER BY completed_at
|
|
379
|
-
LIMIT 1`, params);
|
|
380
|
-
return rows.length > 0 ? Number(rows[0].completed_at) : undefined;
|
|
381
|
-
});
|
|
345
|
+
return kthValue(sysdb, sysdb.pool, 'completed_at', `"${sysdb.schemaName}".workflow_status`, scope, params, 1);
|
|
346
|
+
}, sysdb);
|
|
382
347
|
let watermark = oldest === undefined ? 0 : oldest - 1;
|
|
348
|
+
const windows = sysdb.sharded ? new WindowBatches(batchSize) : undefined;
|
|
383
349
|
for (;;) {
|
|
384
|
-
const next = await retryOnSerializationError(() => collectStatusBatch(sysdb, cutoff, batchSize, watermark));
|
|
385
|
-
// Fewer than a full batch remained, so that delete took the rest.
|
|
350
|
+
const next = await retryOnSerializationError(() => collectStatusBatch(sysdb, cutoff, batchSize, watermark, windows), sysdb);
|
|
386
351
|
if (next === undefined)
|
|
387
352
|
return cutoff;
|
|
388
353
|
watermark = next;
|
|
389
354
|
}
|
|
390
355
|
}
|
|
391
356
|
exports.collectStatuses = collectStatuses;
|
|
392
|
-
/**
|
|
393
|
-
* IDs of this application's in-flight workflows created at or before the cutoff.
|
|
394
|
-
* Claiming-scoped, so an upgrade still times out its own unclaimed workflows.
|
|
395
|
-
*/
|
|
396
357
|
async function listTimedOutWorkflowIds(sysdb, cutoffEpochTimestampMs) {
|
|
397
358
|
return (0, system_database_1.withDbRetry)(async () => {
|
|
398
359
|
const params = [
|
|
@@ -402,17 +363,20 @@ async function listTimedOutWorkflowIds(sysdb, cutoffEpochTimestampMs) {
|
|
|
402
363
|
workflow_1.StatusString.DELAYED,
|
|
403
364
|
];
|
|
404
365
|
const scope = sysdb.appNameFilter('application_name', sysdb.appName, params);
|
|
405
|
-
const
|
|
366
|
+
const key = sysdb.keyColumn(undefined);
|
|
367
|
+
const { rows } = await sysdb.pool.query(`SELECT workflow_uuid, ${key ?? 'NULL'} AS shard_key
|
|
406
368
|
FROM "${sysdb.schemaName}".workflow_status
|
|
407
369
|
WHERE created_at <= $1
|
|
408
370
|
AND status IN ($2, $3, $4)
|
|
409
371
|
AND ${scope}`, params);
|
|
410
|
-
return rows.map((row) => row.workflow_uuid);
|
|
372
|
+
return rows.map((row) => [row.workflow_uuid, row.shard_key ?? undefined]);
|
|
411
373
|
});
|
|
412
374
|
}
|
|
413
375
|
exports.listTimedOutWorkflowIds = listTimedOutWorkflowIds;
|
|
414
|
-
/** Enforce retention across the entire system database. */
|
|
415
376
|
async function garbageCollect(sysdb, cutoffEpochTimestampMs, rowsThreshold, options = {}) {
|
|
377
|
+
if (rowsThreshold !== undefined && rowsThreshold !== null && sysdb.sharded) {
|
|
378
|
+
throw new error_1.DBOSError('A rows threshold is not supported on a sharded system database; use a time cutoff instead');
|
|
379
|
+
}
|
|
416
380
|
if ((cutoffEpochTimestampMs === undefined || cutoffEpochTimestampMs === null) &&
|
|
417
381
|
(rowsThreshold === undefined || rowsThreshold === null)) {
|
|
418
382
|
return;
|
|
@@ -423,14 +387,11 @@ async function garbageCollect(sysdb, cutoffEpochTimestampMs, rowsThreshold, opti
|
|
|
423
387
|
return;
|
|
424
388
|
}
|
|
425
389
|
try {
|
|
426
|
-
// Both sweeps take the same batch size, and both default it the same way when unset.
|
|
427
390
|
const batchSize = options.batchSize ?? undefined;
|
|
428
391
|
const cutoff = await collectStatuses(sysdb, cutoffEpochTimestampMs, rowsThreshold, { batchSize });
|
|
429
392
|
if (cutoff === undefined) {
|
|
430
393
|
return;
|
|
431
394
|
}
|
|
432
|
-
// Strictly after the status sweep: the payload sweep only takes orphans, so this round's
|
|
433
|
-
// are only visible to it once that sweep has committed.
|
|
434
395
|
await collectPayloads(sysdb, cutoff, batchSize);
|
|
435
396
|
}
|
|
436
397
|
finally {
|
|
@@ -439,9 +400,8 @@ async function garbageCollect(sysdb, cutoffEpochTimestampMs, rowsThreshold, opti
|
|
|
439
400
|
}
|
|
440
401
|
exports.garbageCollect = garbageCollect;
|
|
441
402
|
async function globalTimeout(sysdb, cutoffEpochTimestampMs) {
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
await sysdb.cancelWorkflows([workflowID]);
|
|
403
|
+
for (const [workflowID, shardKey] of await listTimedOutWorkflowIds(sysdb, cutoffEpochTimestampMs)) {
|
|
404
|
+
await (0, shard_keys_1.bindShardKeys)([[workflowID, shardKey]], () => sysdb.cancelWorkflows([workflowID]));
|
|
445
405
|
}
|
|
446
406
|
}
|
|
447
407
|
exports.globalTimeout = globalTimeout;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retention.js","sourceRoot":"","sources":["../../src/retention.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"retention.js","sourceRoot":"","sources":["../../src/retention.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Copyright (c) 2026 DBOS, Inc. All rights reserved.
|
|
2
|
+
//
|
|
3
|
+
// This file is part of Transact Enterprise, proprietary software licensed under the
|
|
4
|
+
// DBOS Conductor Software License: https://www.dbos.dev/conductor-license
|
|
5
|
+
// You may not use, copy, modify, or distribute this file except as that license permits.
|
|
6
|
+
// Disabling or circumventing the entitlement checks in @dbos-inc/dbos-sdk's src/enterprise.ts
|
|
7
|
+
// that gate it is a material breach of that license.
|
|
8
|
+
export { ShardedSystemDatabase } from './sys_db';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sharding/index.ts"],"names":[],"mappings":";;;;;;;AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC"}
|