@dbos-inc/dbos-enterprise 5.4.1-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 +7 -20
- package/dist/src/auto_upgrade.d.ts.map +1 -1
- package/dist/src/auto_upgrade.js +7 -51
- package/dist/src/auto_upgrade.js.map +1 -1
- package/dist/src/cockroach.d.ts +7 -1
- package/dist/src/cockroach.d.ts.map +1 -1
- package/dist/src/cockroach.js +7 -1
- package/dist/src/cockroach.js.map +1 -1
- 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 +8 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +10 -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 +148 -176
- 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,30 +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;
|
|
5
11
|
const cockroach_1 = require("./cockroach");
|
|
6
12
|
const dbos_executor_1 = require("@dbos-inc/dbos-sdk/internal/dbos-executor");
|
|
7
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");
|
|
8
16
|
const system_database_1 = require("@dbos-inc/dbos-sdk/internal/system_database");
|
|
9
17
|
const utils_1 = require("@dbos-inc/dbos-sdk/internal/utils");
|
|
10
18
|
const workflow_1 = require("@dbos-inc/dbos-sdk/internal/workflow");
|
|
11
|
-
/**
|
|
12
|
-
* Bulk maintenance retries these a bounded number of times. 40001 is kept out of core's retryable sets,
|
|
13
|
-
* which feed `dbRetry` and so retry forever; every other path runs READ COMMITTED and never sees it.
|
|
14
|
-
*/
|
|
15
19
|
const SERIALIZATION_SQLSTATE_CODES = new Set([
|
|
16
|
-
'40001',
|
|
17
|
-
'40P01',
|
|
20
|
+
'40001',
|
|
21
|
+
'40P01',
|
|
18
22
|
]);
|
|
19
|
-
function isSerializationError(err) {
|
|
23
|
+
function isSerializationError(err, sysdb) {
|
|
20
24
|
for (const e of (0, system_database_1.unwrapErrors)(err)) {
|
|
25
|
+
if (sysdb.isSerializationConflict(e)) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
21
28
|
if ((0, system_database_1.isPgDatabaseError)(e) && SERIALIZATION_SQLSTATE_CODES.has(e.code)) {
|
|
22
29
|
return true;
|
|
23
30
|
}
|
|
24
31
|
}
|
|
25
32
|
return false;
|
|
26
33
|
}
|
|
27
|
-
/** Borrow a connection for a retention round, so the system database's destroy() can cut it. */
|
|
28
34
|
async function borrowRetentionClient(sysdb) {
|
|
29
35
|
if (sysdb.destroyed) {
|
|
30
36
|
throw new Error('System database shutting down');
|
|
@@ -33,18 +39,12 @@ async function borrowRetentionClient(sysdb) {
|
|
|
33
39
|
sysdb.retentionClients.add(client);
|
|
34
40
|
return client;
|
|
35
41
|
}
|
|
36
|
-
|
|
37
|
-
function releaseRetentionClient(sysdb, client) {
|
|
42
|
+
function releaseRetentionClient(sysdb, client, destroy = false) {
|
|
38
43
|
if (sysdb.retentionClients.delete(client)) {
|
|
39
|
-
|
|
40
|
-
client.release();
|
|
44
|
+
client.release(destroy);
|
|
41
45
|
}
|
|
42
46
|
}
|
|
43
|
-
|
|
44
|
-
* Re-run a batch that lost a deadlock or serialization race. The database already rolled it
|
|
45
|
-
* back, so replaying it is safe.
|
|
46
|
-
*/
|
|
47
|
-
async function retryOnSerializationError(operation) {
|
|
47
|
+
async function retryOnSerializationError(operation, sysdb) {
|
|
48
48
|
const maxAttempts = 10;
|
|
49
49
|
const maxBackoff = 2.0;
|
|
50
50
|
let backoff = 0.05;
|
|
@@ -53,7 +53,7 @@ async function retryOnSerializationError(operation) {
|
|
|
53
53
|
return await operation();
|
|
54
54
|
}
|
|
55
55
|
catch (e) {
|
|
56
|
-
if (!isSerializationError(e)) {
|
|
56
|
+
if (!isSerializationError(e, sysdb)) {
|
|
57
57
|
throw e;
|
|
58
58
|
}
|
|
59
59
|
const message = e instanceof Error ? e.message : String(e);
|
|
@@ -61,7 +61,6 @@ async function retryOnSerializationError(operation) {
|
|
|
61
61
|
dbos_executor_1.DBOSExecutor.globalInstance?.logger.warn(`Garbage collection failed after ${maxAttempts} attempts: ${message}`);
|
|
62
62
|
throw e;
|
|
63
63
|
}
|
|
64
|
-
// Jittered backoff, so peers that collided do not collide again
|
|
65
64
|
const actualBackoff = backoff * (0.5 + Math.random());
|
|
66
65
|
dbos_executor_1.DBOSExecutor.globalInstance?.logger.warn(`Contention or deadlock detected in workflow garbage collection: ${message}. ` +
|
|
67
66
|
`Retrying in ${actualBackoff.toFixed(2)}s (attempt ${attempt})`);
|
|
@@ -71,25 +70,90 @@ async function retryOnSerializationError(operation) {
|
|
|
71
70
|
}
|
|
72
71
|
}
|
|
73
72
|
exports.retryOnSerializationError = retryOnSerializationError;
|
|
74
|
-
/**
|
|
75
|
-
* The pg_try_advisory_lock argument for one schema's retention round: the leading 8 bytes of
|
|
76
|
-
* SHA-256 over a fixed string, read as a signed big-endian 64-bit integer. Separate locks for
|
|
77
|
-
* separate schemas. Every DBOS SDK derives the key this way, so rounds in different languages
|
|
78
|
-
* against one system database contend for the same lock; changing it here changes it everywhere.
|
|
79
|
-
*/
|
|
80
73
|
function retentionLockKey(schemaName) {
|
|
81
74
|
return (0, system_database_1.advisoryLockKey)(`dbos.retention.${schemaName}`);
|
|
82
75
|
}
|
|
83
76
|
exports.retentionLockKey = retentionLockKey;
|
|
84
|
-
// Rows deleted per transaction by garbage collection.
|
|
85
77
|
exports.DEFAULT_GC_BATCH_SIZE = 50_000;
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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;
|
|
148
|
+
}
|
|
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;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.WindowBatches = WindowBatches;
|
|
93
157
|
async function acquireRetentionLock(sysdb) {
|
|
94
158
|
if (sysdb.destroyed) {
|
|
95
159
|
throw new Error('System database shutting down');
|
|
@@ -97,48 +161,29 @@ async function acquireRetentionLock(sysdb) {
|
|
|
97
161
|
if (await (0, cockroach_1.isCockroach)(sysdb)) {
|
|
98
162
|
return { release: () => Promise.resolve() };
|
|
99
163
|
}
|
|
100
|
-
const key = retentionLockKey(sysdb.schemaName)
|
|
101
|
-
// The round holds this connection until it ends: releasing it would drop the lock.
|
|
164
|
+
const key = retentionLockKey(sysdb.schemaName);
|
|
102
165
|
const client = await borrowRetentionClient(sysdb);
|
|
103
|
-
let
|
|
166
|
+
let lock;
|
|
104
167
|
try {
|
|
105
|
-
|
|
106
|
-
acquired = rows[0]?.locked === true;
|
|
168
|
+
lock = await (0, locks_1.tryAdvisoryLock)(client, key, { name: 'retention', discard: sysdb.sharded, logger: sysdb.logger });
|
|
107
169
|
}
|
|
108
170
|
catch (e) {
|
|
109
|
-
releaseRetentionClient(sysdb, client);
|
|
171
|
+
releaseRetentionClient(sysdb, client, true);
|
|
110
172
|
throw e;
|
|
111
173
|
}
|
|
112
|
-
|
|
113
|
-
|
|
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();
|
|
114
182
|
return undefined;
|
|
115
183
|
}
|
|
116
|
-
return {
|
|
117
|
-
release: async () => {
|
|
118
|
-
// Already cut by destroy(): the session is gone and took the lock with it.
|
|
119
|
-
if (!sysdb.retentionClients.has(client)) {
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
try {
|
|
123
|
-
// Explicit, since releasing the client only returns the session to the pool.
|
|
124
|
-
const { rows } = await client.query('SELECT pg_advisory_unlock($1) AS released', [key]);
|
|
125
|
-
if (rows[0]?.released !== true) {
|
|
126
|
-
// False means this session no longer holds it, which a transaction-pooling proxy
|
|
127
|
-
// causes by switching backends.
|
|
128
|
-
sysdb.logger.warn('Could not release the retention lock: this session no longer holds it. Retention will ' +
|
|
129
|
-
'not proceed until the lock is released, which happens when the holding backend closes. ' +
|
|
130
|
-
'A transaction-pooling proxy in front of Postgres causes this; run DBOS through a ' +
|
|
131
|
-
'session-pooled or direct connection.');
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
finally {
|
|
135
|
-
releaseRetentionClient(sysdb, client);
|
|
136
|
-
}
|
|
137
|
-
},
|
|
138
|
-
};
|
|
184
|
+
return { release };
|
|
139
185
|
}
|
|
140
186
|
exports.acquireRetentionLock = acquireRetentionLock;
|
|
141
|
-
/** VACUUM the tables a sweep dirtied. No-op where there is no autovacuum to outrun. */
|
|
142
187
|
async function vacuumTables(sysdb, tables) {
|
|
143
188
|
if (await (0, cockroach_1.isCockroach)(sysdb)) {
|
|
144
189
|
return;
|
|
@@ -149,7 +194,6 @@ async function vacuumTables(sysdb, tables) {
|
|
|
149
194
|
client.on('notice', onNotice);
|
|
150
195
|
try {
|
|
151
196
|
for (const table of tables) {
|
|
152
|
-
// Per table, so one refusal does not skip the rest.
|
|
153
197
|
notices = [];
|
|
154
198
|
try {
|
|
155
199
|
await client.query(`VACUUM (INDEX_CLEANUP ON, TRUNCATE OFF, ANALYZE) "${sysdb.schemaName}"."${table}"`);
|
|
@@ -161,8 +205,6 @@ async function vacuumTables(sysdb, tables) {
|
|
|
161
205
|
sysdb.logger.warn(`Payload retention could not vacuum ${table}: ${e.message}`);
|
|
162
206
|
continue;
|
|
163
207
|
}
|
|
164
|
-
// A refused or stalled VACUUM does not raise, it says so in a notice; a successful
|
|
165
|
-
// one is silent, so anything here is worth surfacing.
|
|
166
208
|
for (const notice of notices) {
|
|
167
209
|
sysdb.logger.warn(`Payload retention vacuuming ${table}: ${notice}`);
|
|
168
210
|
}
|
|
@@ -173,45 +215,27 @@ async function vacuumTables(sysdb, tables) {
|
|
|
173
215
|
releaseRetentionClient(sysdb, client);
|
|
174
216
|
}
|
|
175
217
|
}
|
|
176
|
-
/** Delete one payload table's orphans below the cutoff, one batch per transaction. */
|
|
177
218
|
async function collectPayloadTable(sysdb, table, cutoff, batchSize) {
|
|
178
|
-
// A payload below the cutoff belongs to a workflow created before it, so the status side
|
|
179
|
-
// is the few such rows still present, not the whole table.
|
|
180
219
|
const orphaned = `NOT EXISTS (
|
|
181
220
|
SELECT 1 FROM "${sysdb.schemaName}".workflow_status ws
|
|
182
|
-
WHERE ws
|
|
221
|
+
WHERE ${sysdb.wfJoin('ws', 't')} AND ws.created_at < $1
|
|
183
222
|
)`;
|
|
184
|
-
|
|
185
|
-
const oldest = await retryOnSerializationError(
|
|
186
|
-
const { rows } = await sysdb.pool.query(`SELECT retention_timestamp
|
|
187
|
-
FROM "${sysdb.schemaName}".${table}
|
|
188
|
-
WHERE retention_timestamp < $1
|
|
189
|
-
ORDER BY retention_timestamp
|
|
190
|
-
LIMIT 1`, [cutoff]);
|
|
191
|
-
// retention_timestamp is a bigint, so node-postgres hands it back as a string.
|
|
192
|
-
return rows.length > 0 ? Number(rows[0].retention_timestamp) : undefined;
|
|
193
|
-
});
|
|
223
|
+
const from = `"${sysdb.schemaName}".${table}`;
|
|
224
|
+
const oldest = await retryOnSerializationError(() => kthValue(sysdb, sysdb.pool, 'retention_timestamp', from, 'retention_timestamp < $1', [cutoff], 1), sysdb);
|
|
194
225
|
if (oldest === undefined) {
|
|
195
226
|
return 0;
|
|
196
227
|
}
|
|
197
228
|
let total = 0;
|
|
198
229
|
let watermark = oldest - 1;
|
|
230
|
+
const windows = sysdb.sharded ? new WindowBatches(batchSize) : undefined;
|
|
199
231
|
for (;;) {
|
|
200
232
|
const batch = await retryOnSerializationError(async () => {
|
|
201
|
-
// Borrowed rather than pool.query'd: that releases with the error, which discards the
|
|
202
|
-
// connection on a deadlock, so the retry wrapping this would churn the pool per batch.
|
|
203
233
|
const client = await borrowRetentionClient(sysdb);
|
|
204
234
|
try {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
FROM "${sysdb.schemaName}".${table}
|
|
209
|
-
WHERE retention_timestamp < $1 AND retention_timestamp > $2
|
|
210
|
-
ORDER BY retention_timestamp
|
|
211
|
-
LIMIT 1 OFFSET ${batchSize - 1}`, [cutoff, watermark]);
|
|
212
|
-
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);
|
|
213
238
|
const params = [cutoff, watermark];
|
|
214
|
-
// Timestamp ties may push the batch slightly over batchSize, but never split across two.
|
|
215
239
|
const upperBound = step === undefined ? '' : `AND t.retention_timestamp <= $${params.push(step)} `;
|
|
216
240
|
const result = await client.query(`DELETE FROM "${sysdb.schemaName}".${table} t
|
|
217
241
|
WHERE t.retention_timestamp < $1 AND t.retention_timestamp > $2 ${upperBound}AND ${orphaned}`, params);
|
|
@@ -220,7 +244,7 @@ async function collectPayloadTable(sysdb, table, cutoff, batchSize) {
|
|
|
220
244
|
finally {
|
|
221
245
|
releaseRetentionClient(sysdb, client);
|
|
222
246
|
}
|
|
223
|
-
});
|
|
247
|
+
}, sysdb);
|
|
224
248
|
total += batch.deleted;
|
|
225
249
|
if (batch.step === undefined) {
|
|
226
250
|
return total;
|
|
@@ -228,22 +252,12 @@ async function collectPayloadTable(sysdb, table, cutoff, batchSize) {
|
|
|
228
252
|
watermark = batch.step;
|
|
229
253
|
}
|
|
230
254
|
}
|
|
231
|
-
/**
|
|
232
|
-
* Delete payload and step rows below the cutoff whose workflow is gone, returning the count
|
|
233
|
-
* removed from each table. Runs after the status sweep, whose orphans all fall in range:
|
|
234
|
-
* every payload is stamped no later than the completion that made the row collectable.
|
|
235
|
-
*/
|
|
236
255
|
async function collectPayloads(sysdb, cutoff, batchSize = exports.DEFAULT_GC_BATCH_SIZE) {
|
|
237
|
-
// A NaN survives a bare `< 1` test and would only fail once it reached SQL.
|
|
238
256
|
if (!Number.isInteger(batchSize) || batchSize < 1) {
|
|
239
257
|
throw new error_1.DBOSError(`batchSize must be a positive integer, got ${batchSize}`);
|
|
240
258
|
}
|
|
241
259
|
const tables = ['workflow_input', 'workflow_output', 'operation_outputs'];
|
|
242
|
-
// To optimize performance, vacuum payload tables both before and after collecting them.
|
|
243
260
|
await vacuumTables(sysdb, ['workflow_status', ...tables]);
|
|
244
|
-
// One connection per concurrent sweep, on top of the one the retention lock holds for the
|
|
245
|
-
// whole round. A pool too small for all three runs them sequentially rather than leaving
|
|
246
|
-
// sweeps waiting on a connection that only the round itself would free.
|
|
247
261
|
const poolMax = sysdb.pool.options.max ?? system_database_1.DEFAULT_POOL_SIZE;
|
|
248
262
|
const concurrency = Math.max(1, Math.min(tables.length, poolMax - 1));
|
|
249
263
|
const deleted = new Array(tables.length).fill(0);
|
|
@@ -263,7 +277,6 @@ async function collectPayloads(sysdb, cutoff, batchSize = exports.DEFAULT_GC_BAT
|
|
|
263
277
|
}
|
|
264
278
|
};
|
|
265
279
|
await Promise.all(Array.from({ length: concurrency }, () => sweep()));
|
|
266
|
-
// Only the first can be thrown, so the rest would otherwise be lost.
|
|
267
280
|
for (const extra of failures.slice(1)) {
|
|
268
281
|
sysdb.logger.warn(`Payload retention sweep also failed: ${extra instanceof Error ? extra.message : String(extra)}`);
|
|
269
282
|
}
|
|
@@ -275,45 +288,30 @@ async function collectPayloads(sysdb, cutoff, batchSize = exports.DEFAULT_GC_BAT
|
|
|
275
288
|
return deleted;
|
|
276
289
|
}
|
|
277
290
|
exports.collectPayloads = collectPayloads;
|
|
278
|
-
/**
|
|
279
|
-
* Rows garbage collection may delete. completed_at is set on every terminal transition and
|
|
280
|
-
* cleared on resume, so one predicate covers eligibility: in-flight rows hold NULL and never
|
|
281
|
-
* compare true. Unscoped by application: retention is system-wide.
|
|
282
|
-
*/
|
|
283
291
|
function gcFilter(sysdb, cutoffEpochTimestampMs, params) {
|
|
284
292
|
params.push(cutoffEpochTimestampMs);
|
|
285
293
|
return `completed_at < $${params.length}`;
|
|
286
294
|
}
|
|
287
|
-
|
|
288
|
-
* Delete one batch, returning the watermark to resume from, or undefined once the last one ran.
|
|
289
|
-
* The delete is its own transaction; it re-checks the filter, so it needs no snapshot shared
|
|
290
|
-
* with the select that bounds it.
|
|
291
|
-
*/
|
|
292
|
-
async function collectStatusBatch(sysdb, cutoffEpochTimestampMs, batchSize, watermark) {
|
|
293
|
-
// Borrowed rather than pool.query'd: that releases with the error, which discards the
|
|
294
|
-
// connection on a deadlock, so the retry wrapping this would churn the pool per batch.
|
|
295
|
+
async function collectStatusBatch(sysdb, cutoffEpochTimestampMs, batchSize, watermark, windows) {
|
|
295
296
|
const client = await borrowRetentionClient(sysdb);
|
|
296
297
|
try {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
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
|
+
}
|
|
308
309
|
const deleteParams = [];
|
|
309
310
|
let deleteScope = gcFilter(sysdb, cutoffEpochTimestampMs, deleteParams);
|
|
310
311
|
if (step !== undefined) {
|
|
311
|
-
// Inclusive upper bound: completed_at ties may push a batch over batchSize, but never split across two.
|
|
312
312
|
deleteParams.push(watermark, step);
|
|
313
313
|
deleteScope = `${deleteScope} AND completed_at > $${deleteParams.length - 1} AND completed_at <= $${deleteParams.length}`;
|
|
314
314
|
}
|
|
315
|
-
// The final batch drops the watermark: unbounded, since an import can land a
|
|
316
|
-
// completed_at below it mid-pass.
|
|
317
315
|
await client.query(`DELETE FROM "${sysdb.schemaName}".workflow_status WHERE ${deleteScope}`, deleteParams);
|
|
318
316
|
return step;
|
|
319
317
|
}
|
|
@@ -321,28 +319,15 @@ async function collectStatusBatch(sysdb, cutoffEpochTimestampMs, batchSize, wate
|
|
|
321
319
|
releaseRetentionClient(sysdb, client);
|
|
322
320
|
}
|
|
323
321
|
}
|
|
324
|
-
/**
|
|
325
|
-
* Delete old terminal workflows throughout the system database, returning the cutoff
|
|
326
|
-
* actually used, or undefined when there is nothing to collect.
|
|
327
|
-
*
|
|
328
|
-
* Conductor sends cleared retention thresholds as JSON null, so every param is nullish.
|
|
329
|
-
*/
|
|
330
322
|
async function collectStatuses(sysdb, cutoffEpochTimestampMs, rowsThreshold, options = {}) {
|
|
331
323
|
const batchSize = options.batchSize ?? exports.DEFAULT_GC_BATCH_SIZE;
|
|
332
|
-
// A NaN survives a bare `< 1` test and would only fail once it reached SQL, leaving GC half-applied.
|
|
333
324
|
if (!Number.isInteger(batchSize) || batchSize < 1) {
|
|
334
325
|
throw new error_1.DBOSError(`batchSize must be a positive integer, got ${batchSize}`);
|
|
335
326
|
}
|
|
336
327
|
if (rowsThreshold !== undefined && rowsThreshold !== null) {
|
|
337
|
-
|
|
338
|
-
const
|
|
339
|
-
|
|
340
|
-
WHERE completed_at IS NOT NULL
|
|
341
|
-
ORDER BY completed_at DESC
|
|
342
|
-
LIMIT 1 OFFSET $1`, [rowsThreshold - 1]));
|
|
343
|
-
if (result.rows.length > 0) {
|
|
344
|
-
const rowsBasedCutoff = Number(result.rows[0].completed_at);
|
|
345
|
-
// 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) {
|
|
346
331
|
if (cutoffEpochTimestampMs === undefined ||
|
|
347
332
|
cutoffEpochTimestampMs === null ||
|
|
348
333
|
rowsBasedCutoff > cutoffEpochTimestampMs) {
|
|
@@ -353,34 +338,22 @@ async function collectStatuses(sysdb, cutoffEpochTimestampMs, rowsThreshold, opt
|
|
|
353
338
|
if (cutoffEpochTimestampMs === undefined || cutoffEpochTimestampMs === null) {
|
|
354
339
|
return undefined;
|
|
355
340
|
}
|
|
356
|
-
// Narrowed to a constant so the closures below keep it.
|
|
357
341
|
const cutoff = cutoffEpochTimestampMs;
|
|
358
|
-
|
|
359
|
-
// history neither deletes in one transaction nor rescans what it already deleted.
|
|
360
|
-
const oldest = await retryOnSerializationError(async () => {
|
|
342
|
+
const oldest = await retryOnSerializationError(() => {
|
|
361
343
|
const params = [];
|
|
362
344
|
const scope = gcFilter(sysdb, cutoff, params);
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
WHERE ${scope}
|
|
366
|
-
ORDER BY completed_at
|
|
367
|
-
LIMIT 1`, params);
|
|
368
|
-
return rows.length > 0 ? Number(rows[0].completed_at) : undefined;
|
|
369
|
-
});
|
|
345
|
+
return kthValue(sysdb, sysdb.pool, 'completed_at', `"${sysdb.schemaName}".workflow_status`, scope, params, 1);
|
|
346
|
+
}, sysdb);
|
|
370
347
|
let watermark = oldest === undefined ? 0 : oldest - 1;
|
|
348
|
+
const windows = sysdb.sharded ? new WindowBatches(batchSize) : undefined;
|
|
371
349
|
for (;;) {
|
|
372
|
-
const next = await retryOnSerializationError(() => collectStatusBatch(sysdb, cutoff, batchSize, watermark));
|
|
373
|
-
// Fewer than a full batch remained, so that delete took the rest.
|
|
350
|
+
const next = await retryOnSerializationError(() => collectStatusBatch(sysdb, cutoff, batchSize, watermark, windows), sysdb);
|
|
374
351
|
if (next === undefined)
|
|
375
352
|
return cutoff;
|
|
376
353
|
watermark = next;
|
|
377
354
|
}
|
|
378
355
|
}
|
|
379
356
|
exports.collectStatuses = collectStatuses;
|
|
380
|
-
/**
|
|
381
|
-
* IDs of this application's in-flight workflows created at or before the cutoff.
|
|
382
|
-
* Claiming-scoped, so an upgrade still times out its own unclaimed workflows.
|
|
383
|
-
*/
|
|
384
357
|
async function listTimedOutWorkflowIds(sysdb, cutoffEpochTimestampMs) {
|
|
385
358
|
return (0, system_database_1.withDbRetry)(async () => {
|
|
386
359
|
const params = [
|
|
@@ -390,17 +363,20 @@ async function listTimedOutWorkflowIds(sysdb, cutoffEpochTimestampMs) {
|
|
|
390
363
|
workflow_1.StatusString.DELAYED,
|
|
391
364
|
];
|
|
392
365
|
const scope = sysdb.appNameFilter('application_name', sysdb.appName, params);
|
|
393
|
-
const
|
|
366
|
+
const key = sysdb.keyColumn(undefined);
|
|
367
|
+
const { rows } = await sysdb.pool.query(`SELECT workflow_uuid, ${key ?? 'NULL'} AS shard_key
|
|
394
368
|
FROM "${sysdb.schemaName}".workflow_status
|
|
395
369
|
WHERE created_at <= $1
|
|
396
370
|
AND status IN ($2, $3, $4)
|
|
397
371
|
AND ${scope}`, params);
|
|
398
|
-
return rows.map((row) => row.workflow_uuid);
|
|
372
|
+
return rows.map((row) => [row.workflow_uuid, row.shard_key ?? undefined]);
|
|
399
373
|
});
|
|
400
374
|
}
|
|
401
375
|
exports.listTimedOutWorkflowIds = listTimedOutWorkflowIds;
|
|
402
|
-
/** Enforce retention across the entire system database. */
|
|
403
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
|
+
}
|
|
404
380
|
if ((cutoffEpochTimestampMs === undefined || cutoffEpochTimestampMs === null) &&
|
|
405
381
|
(rowsThreshold === undefined || rowsThreshold === null)) {
|
|
406
382
|
return;
|
|
@@ -411,14 +387,11 @@ async function garbageCollect(sysdb, cutoffEpochTimestampMs, rowsThreshold, opti
|
|
|
411
387
|
return;
|
|
412
388
|
}
|
|
413
389
|
try {
|
|
414
|
-
// Both sweeps take the same batch size, and both default it the same way when unset.
|
|
415
390
|
const batchSize = options.batchSize ?? undefined;
|
|
416
391
|
const cutoff = await collectStatuses(sysdb, cutoffEpochTimestampMs, rowsThreshold, { batchSize });
|
|
417
392
|
if (cutoff === undefined) {
|
|
418
393
|
return;
|
|
419
394
|
}
|
|
420
|
-
// Strictly after the status sweep: the payload sweep only takes orphans, so this round's
|
|
421
|
-
// are only visible to it once that sweep has committed.
|
|
422
395
|
await collectPayloads(sysdb, cutoff, batchSize);
|
|
423
396
|
}
|
|
424
397
|
finally {
|
|
@@ -427,9 +400,8 @@ async function garbageCollect(sysdb, cutoffEpochTimestampMs, rowsThreshold, opti
|
|
|
427
400
|
}
|
|
428
401
|
exports.garbageCollect = garbageCollect;
|
|
429
402
|
async function globalTimeout(sysdb, cutoffEpochTimestampMs) {
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
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]));
|
|
433
405
|
}
|
|
434
406
|
}
|
|
435
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":";;;;;;;;;;AAEA,2CAA0C;AAC1C,6EAAyE;AACzE,6DAA8D;AAE9D,uEAAuE;AACvE,mCAA6D;AAC7D,iFAOqD;AACrD,6DAA4D;AAC5D,mEAAoE;AAMpE,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC;IAC3C,OAAO;IACP,OAAO;CACR,CAAC,CAAC;AAEH,SAAS,oBAAoB,CAAC,GAAY,EAAE,KAAqB;IAC/D,KAAK,MAAM,CAAC,IAAI,IAAA,8BAAY,EAAC,GAAG,CAAC,EAAE,CAAC;QAElC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAA,mCAAiB,EAAC,CAAC,CAAC,IAAI,4BAA4B,CAAC,GAAG,CAAC,CAAC,CAAC,IAAK,CAAC,EAAE,CAAC;YACtE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAGD,KAAK,UAAU,qBAAqB,CAAC,KAAqB;IACxD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IACrC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC;AAChB,CAAC;AAGD,SAAS,sBAAsB,CAAC,KAAqB,EAAE,MAAkB,EAAE,UAAmB,KAAK;IACjG,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAE1C,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAMM,KAAK,UAAU,yBAAyB,CAAI,SAA2B,EAAE,KAAqB;IACnG,MAAM,WAAW,GAAG,EAAE,CAAC;IACvB,MAAM,UAAU,GAAG,GAAG,CAAC;IACvB,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;gBACpC,MAAM,CAAC,CAAC;YACV,CAAC;YACD,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3D,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;gBAC5B,4BAAY,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,mCAAmC,WAAW,cAAc,OAAO,EAAE,CAAC,CAAC;gBAChH,MAAM,CAAC,CAAC;YACV,CAAC;YAED,MAAM,aAAa,GAAG,OAAO,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACtD,4BAAY,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CACtC,mEAAmE,OAAO,IAAI;gBAC5E,eAAe,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,OAAO,GAAG,CAClE,CAAC;YACF,MAAM,IAAA,eAAO,EAAC,aAAa,GAAG,IAAI,CAAC,CAAC;YACpC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;AACH,CAAC;AA1BD,8DA0BC;AAQD,SAAgB,gBAAgB,CAAC,UAAkB;IACjD,OAAO,IAAA,iCAAe,EAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC;AACzD,CAAC;AAFD,4CAEC;AAGY,QAAA,qBAAqB,GAAG,MAAM,CAAC;AAG5C,KAAK,UAAU,QAAQ,CACrB,KAAqB,EACrB,MAAyB,EACzB,MAAc,EACd,IAAY,EACZ,KAAa,EACb,MAAiB,EACjB,CAAS,EACT,aAAsB,KAAK;IAG3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,iBAAS,CAAC,mBAAmB,CAAC,wCAAwC,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,KAAK,GAAG,YAAY,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC/D,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CACjC,UAAU,MAAM,kBAAkB,IAAI,UAAU,KAAK,IAAI,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAC1G,MAAM,CACP,CAAC;QAEF,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CACjC,UAAU,MAAM,kBAAkB,IAAI,UAAU,KAAK,IAAI,KAAK,UAAU,CAAC,EAAE,EAC3E,MAAM,CACP,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjG,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC;AAGD,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAGtC,MAAa,aAAa;IAGH;IAFrB,KAAK,GAAG,uBAAuB,CAAC;IAEhC,YAAqB,SAAiB;QAAjB,cAAS,GAAT,SAAS,CAAQ;IAAG,CAAC;IAG1C,KAAK,CAAC,KAAK,CACT,MAAyB,EACzB,MAAc,EACd,IAAY,EACZ,QAAuC,EACvC,SAAiB,EACjB,MAAc;QAEd,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACzB,IAAI,EAAE,GAAG,SAAS,CAAC;QAEnB,IAAI,IAAI,GAAuB,SAAS,CAAC;QACzC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,SAAS,GAAuB,SAAS,CAAC;QAC9C,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,KAAc,CAAC;QACnB,IAAI,CAAS,CAAC;QACd,SAAS,CAAC;YACR,KAAK,GAAG,EAAE,IAAI,MAAM,CAAC;YACrB,MAAM,MAAM,GAAc,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACrE,IAAI,CAAC,KAAK;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,QAAQ,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CACjC,iCAAiC,IAAI,UAAU,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EACrE,MAAM,CACP,CAAC;YACF,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBAE7B,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBACjC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBACxB,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/C,IAAI,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;oBACrC,EAAE,GAAG,IAAI,CAAC;oBACV,CAAC,GAAG,SAAS,CAAC;oBACd,KAAK,GAAG,KAAK,CAAC;oBACd,MAAM;gBACR,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBAClC,IAAI,KAAK;oBAAE,OAAO,SAAS,CAAC;gBAE5B,MAAM,UAAU,GAAc,EAAE,CAAC;gBACjC,MAAM,SAAS,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ,MAAM,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBACpF,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CACvC,cAAc,MAAM,kBAAkB,IAAI,UAAU,SAAS,EAAE,EAC/D,UAAU,CACX,CAAC;gBACF,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,SAAS;oBAAE,OAAO,SAAS,CAAC;gBAC5E,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC9B,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;gBACrB,SAAS;YACX,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAExB,IAAI,GAAG,EAAE,CAAC;gBACV,SAAS,GAAG,CAAC,CAAC;gBACd,EAAE,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtF,IAAI,SAAS,KAAK,SAAS,IAAI,EAAE,IAAI,IAAI;oBAAE,MAAM;gBACjD,SAAS;YACX,CAAC;YACD,MAAM;QACR,CAAC;QACD,IAAI,KAAK;YAAE,OAAO,SAAS,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAElC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AA5ED,sCA4EC;AAQM,KAAK,UAAU,oBAAoB,CACxC,KAAqB;IAErB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,MAAM,IAAA,uBAAW,EAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IAC9C,CAAC;IACD,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,IAAkB,CAAC;IACvB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,IAAA,uBAAe,EAAC,MAAM,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACjH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAEX,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,CAAC;IACV,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QAEzB,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACxC,OAAO;QACT,CAAC;QAED,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,OAAO,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC;AAjCD,oDAiCC;AAGD,KAAK,UAAU,YAAY,CAAC,KAAqB,EAAE,MAAyB;IAC1E,IAAI,MAAM,IAAA,uBAAW,EAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,CAAC,MAA4B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACtF,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAE3B,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,CAAC,qDAAqD,KAAK,CAAC,UAAU,MAAM,KAAK,GAAG,CAAC,CAAC;YAC1G,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBACxC,MAAM,CAAC,CAAC;gBACV,CAAC;gBACD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,KAAK,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC1F,SAAS;YACX,CAAC;YAGD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,KAAK,KAAK,MAAM,EAAE,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1C,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAGD,KAAK,UAAU,mBAAmB,CAChC,KAAqB,EACrB,KAAa,EACb,MAAc,EACd,SAAiB;IAIjB,MAAM,QAAQ,GAAG;4BACS,KAAK,CAAC,UAAU;mBACzB,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;WAC/B,CAAC;IACV,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;IAG9C,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAC5C,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EACvG,KAAK,CACN,CAAC;IACF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,SAAS,CAAC;QACR,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAAC,KAAK,IAAI,EAAE;YAGvD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,CAAC;gBAGH,MAAM,IAAI,GACR,OAAO,KAAK,SAAS;oBACnB,CAAC,CAAC,MAAM,OAAO,CAAC,KAAK,CACjB,MAAM,EACN,qBAAqB,EACrB,IAAI,EACJ,CAAC,MAAM,EAAE,EAAE,CAAC,0BAA0B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAC3D,SAAS,EACT,MAAM,CACP;oBACH,CAAC,CAAC,MAAM,QAAQ,CACZ,KAAK,EACL,MAAM,EACN,qBAAqB,EACrB,IAAI,EACJ,uDAAuD,EACvD,CAAC,MAAM,EAAE,SAAS,CAAC,EACnB,SAAS,CACV,CAAC;gBACR,MAAM,MAAM,GAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAE9C,MAAM,UAAU,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iCAAiC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBACnG,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B,gBAAgB,KAAK,CAAC,UAAU,KAAK,KAAK;6EACyB,UAAU,OAAO,QAAQ,EAAE,EAC9F,MAAM,CACP,CAAC;gBACF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;YACjD,CAAC;oBAAS,CAAC;gBACT,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACxC,CAAC;QACH,CAAC,EAAE,KAAK,CAAC,CAAC;QACV,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC;QACvB,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;AACH,CAAC;AAOM,KAAK,UAAU,eAAe,CACnC,KAAqB,EACrB,MAAc,EACd,YAAoB,6BAAqB;IAGzC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,iBAAS,CAAC,6CAA6C,SAAS,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;IAG1E,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC,iBAAiB,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;IAK1D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,mCAAiB,CAAC;IAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IAEtE,MAAM,OAAO,GAAa,IAAI,KAAK,CAAS,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;QACvB,SAAS,CAAC;YACR,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM;gBAAE,OAAO;YAC/B,IAAI,CAAC;gBACH,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YAC9E,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAEtE,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtH,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,OAAO,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,CAAC,CAAC,iBAAiB,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrH,OAAO,OAAO,CAAC;AACjB,CAAC;AA9CD,0CA8CC;AAOD,SAAS,QAAQ,CAAC,KAAqB,EAAE,sBAA8B,EAAE,MAAiB;IACxF,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACpC,OAAO,mBAAmB,MAAM,CAAC,MAAM,EAAE,CAAC;AAC5C,CAAC;AAOD,KAAK,UAAU,kBAAkB,CAC/B,KAAqB,EACrB,sBAA8B,EAC9B,SAAiB,EACjB,SAAiB,EACjB,OAAkC;IAIlC,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,UAAU,mBAAmB,CAAC;QACrD,IAAI,IAAwB,CAAC;QAC7B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CACxB,MAAM,EACN,cAAc,EACd,IAAI,EACJ,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAC3D,SAAS,EACT,sBAAsB,CACvB,CAAC;QACJ,CAAC;aAAM,CAAC;YAEN,MAAM,UAAU,GAAc,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,sBAAsB,EAAE,UAAU,CAAC,CAAC;YACtE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3B,IAAI,GAAG,MAAM,QAAQ,CACnB,KAAK,EACL,MAAM,EACN,cAAc,EACd,IAAI,EACJ,GAAG,SAAS,wBAAwB,UAAU,CAAC,MAAM,EAAE,EACvD,UAAU,EACV,SAAS,CACV,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAc,EAAE,CAAC;QACnC,IAAI,WAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,sBAAsB,EAAE,YAAY,CAAC,CAAC;QACxE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAEvB,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACnC,WAAW,GAAG,GAAG,WAAW,wBAAwB,YAAY,CAAC,MAAM,GAAG,CAAC,yBAAyB,YAAY,CAAC,MAAM,EAAE,CAAC;QAC5H,CAAC;QAGD,MAAM,MAAM,CAAC,KAAK,CAAC,gBAAgB,KAAK,CAAC,UAAU,2BAA2B,WAAW,EAAE,EAAE,YAAY,CAAC,CAAC;QAE3G,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAQM,KAAK,UAAU,eAAe,CACnC,KAAqB,EACrB,sBAAsC,EACtC,aAA6B,EAC7B,UAAyC,EAAE;IAE3C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,6BAAqB,CAAC;IAE7D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,iBAAS,CAAC,6CAA6C,SAAS,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAE1D,MAAM,SAAS,GAAG,aAAa,CAAC;QAChC,MAAM,eAAe,GAAG,MAAM,yBAAyB,CACrD,GAAG,EAAE,CACH,QAAQ,CACN,KAAK,EACL,KAAK,CAAC,IAAI,EACV,cAAc,EACd,IAAI,KAAK,CAAC,UAAU,mBAAmB,EACvC,0BAA0B,EAC1B,EAAE,EACF,SAAS,EACT,IAAI,CACL,EACH,KAAK,CACN,CAAC;QAEF,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAElC,IACE,sBAAsB,KAAK,SAAS;gBACpC,sBAAsB,KAAK,IAAI;gBAC/B,eAAe,GAAG,sBAAsB,EACxC,CAAC;gBACD,sBAAsB,GAAG,eAAe,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,sBAAsB,KAAK,SAAS,IAAI,sBAAsB,KAAK,IAAI,EAAE,CAAC;QAC5E,OAAO,SAAS,CAAC;IACnB,CAAC;IAGD,MAAM,MAAM,GAAG,sBAAsB,CAAC;IAItC,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,GAAG,EAAE;QAClD,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,KAAK,CAAC,UAAU,mBAAmB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAChH,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,IAAI,SAAS,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,SAAS,CAAC;QACR,MAAM,IAAI,GAAG,MAAM,yBAAyB,CAC1C,GAAG,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,EACtE,KAAK,CACN,CAAC;QAEF,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACtC,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;AACH,CAAC;AApED,0CAoEC;AAMM,KAAK,UAAU,uBAAuB,CAC3C,KAAqB,EACrB,sBAA8B;IAE9B,OAAO,IAAA,6BAAW,EAAC,KAAK,IAAI,EAAE;QAC5B,MAAM,MAAM,GAAc;YACxB,sBAAsB;YACtB,uBAAY,CAAC,OAAO;YACpB,uBAAY,CAAC,QAAQ;YACrB,uBAAY,CAAC,OAAO;SACrB,CAAC;QACF,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,kBAAkB,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7E,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CACrC,yBAAyB,GAAG,IAAI,MAAM;eAC7B,KAAK,CAAC,UAAU;;;eAGhB,KAAK,EAAE,EAChB,MAAM,CACP,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC;AAvBD,0DAuBC;AAGM,KAAK,UAAU,cAAc,CAClC,KAAqB,EACrB,sBAAsC,EACtC,aAA6B,EAC7B,UAAyC,EAAE;IAE3C,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAE3E,MAAM,IAAI,iBAAS,CAAC,2FAA2F,CAAC,CAAC;IACnH,CAAC;IACD,IACE,CAAC,sBAAsB,KAAK,SAAS,IAAI,sBAAsB,KAAK,IAAI,CAAC;QACzE,CAAC,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,CAAC,EACvD,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAC;QACxG,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QAEH,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,sBAAsB,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAClG,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAGD,MAAM,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAClD,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAlCD,wCAkCC;AAEM,KAAK,UAAU,aAAa,CAAC,KAAqB,EAAE,sBAA8B;IAEvF,KAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,MAAM,uBAAuB,CAAC,KAAK,EAAE,sBAAsB,CAAC,EAAE,CAAC;QAClG,MAAM,IAAA,0BAAa,EAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC;AALD,sCAKC"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
+
"use strict";
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.ShardedSystemDatabase = void 0;
|
|
11
|
+
var sys_db_1 = require("./sys_db");
|
|
12
|
+
Object.defineProperty(exports, "ShardedSystemDatabase", { enumerable: true, get: function () { return sys_db_1.ShardedSystemDatabase; } });
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sharding/index.ts"],"names":[],"mappings":";;;;;;;;;;AAEA,mCAAiD;AAAxC,+GAAA,qBAAqB,OAAA"}
|