@harperfast/harper-pro 5.0.25 → 5.0.26

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.
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "harper",
3
- "version": "5.0.25",
3
+ "version": "5.0.26",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "harper",
9
- "version": "5.0.25",
9
+ "version": "5.0.26",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "@aws-sdk/client-s3": "^3.1012.0",
@@ -18,7 +18,7 @@
18
18
  "@fastify/cors": "^11.2.0",
19
19
  "@fastify/static": "^9.1.3",
20
20
  "@harperfast/extended-iterable": "^1.0.1",
21
- "@harperfast/rocksdb-js": "^1.4.1",
21
+ "@harperfast/rocksdb-js": "^1.4.2",
22
22
  "@turf/area": "6.5.0",
23
23
  "@turf/boolean-contains": "6.5.0",
24
24
  "@turf/boolean-disjoint": "6.5.0",
@@ -2218,9 +2218,9 @@
2218
2218
  "license": "Apache-2.0"
2219
2219
  },
2220
2220
  "node_modules/@harperfast/rocksdb-js": {
2221
- "version": "1.4.1",
2222
- "resolved": "https://registry.npmjs.org/@harperfast/rocksdb-js/-/rocksdb-js-1.4.1.tgz",
2223
- "integrity": "sha512-AZuIqtDiiSrnVvbupDsNlRGpJSpsONCVDKZYgXGREUTH5OzKuZ22i9elNeL6D05bXOXDaexptn2LVyDd/kUAAA==",
2221
+ "version": "1.4.2",
2222
+ "resolved": "https://registry.npmjs.org/@harperfast/rocksdb-js/-/rocksdb-js-1.4.2.tgz",
2223
+ "integrity": "sha512-wQ0buhmNVcw6jPn5VOoYDsGmO1IAmtithcSgaKrnBRicf+ATvQSCB1I7ljEBuqqzWG6HcJXeCgPhFpas3kRwOw==",
2224
2224
  "license": "Apache-2.0",
2225
2225
  "dependencies": {
2226
2226
  "@harperfast/extended-iterable": "1.0.3",
@@ -2234,20 +2234,20 @@
2234
2234
  "node": ">=18"
2235
2235
  },
2236
2236
  "optionalDependencies": {
2237
- "@harperfast/rocksdb-js-darwin-arm64": "1.4.1",
2238
- "@harperfast/rocksdb-js-darwin-x64": "1.4.1",
2239
- "@harperfast/rocksdb-js-linux-arm64-glibc": "1.4.1",
2240
- "@harperfast/rocksdb-js-linux-arm64-musl": "1.4.1",
2241
- "@harperfast/rocksdb-js-linux-x64-glibc": "1.4.1",
2242
- "@harperfast/rocksdb-js-linux-x64-musl": "1.4.1",
2243
- "@harperfast/rocksdb-js-win32-arm64": "1.4.1",
2244
- "@harperfast/rocksdb-js-win32-x64": "1.4.1"
2237
+ "@harperfast/rocksdb-js-darwin-arm64": "1.4.2",
2238
+ "@harperfast/rocksdb-js-darwin-x64": "1.4.2",
2239
+ "@harperfast/rocksdb-js-linux-arm64-glibc": "1.4.2",
2240
+ "@harperfast/rocksdb-js-linux-arm64-musl": "1.4.2",
2241
+ "@harperfast/rocksdb-js-linux-x64-glibc": "1.4.2",
2242
+ "@harperfast/rocksdb-js-linux-x64-musl": "1.4.2",
2243
+ "@harperfast/rocksdb-js-win32-arm64": "1.4.2",
2244
+ "@harperfast/rocksdb-js-win32-x64": "1.4.2"
2245
2245
  }
2246
2246
  },
2247
2247
  "node_modules/@harperfast/rocksdb-js-darwin-arm64": {
2248
- "version": "1.4.1",
2249
- "resolved": "https://registry.npmjs.org/@harperfast/rocksdb-js-darwin-arm64/-/rocksdb-js-darwin-arm64-1.4.1.tgz",
2250
- "integrity": "sha512-915APRLAUVO6g0eHvhsYJwhciUZS2R+/eNcvB3FxCenrdAzhnsvC5R3luHkrsv3BUAuvDG7xV0PSy9fb/IrHCQ==",
2248
+ "version": "1.4.2",
2249
+ "resolved": "https://registry.npmjs.org/@harperfast/rocksdb-js-darwin-arm64/-/rocksdb-js-darwin-arm64-1.4.2.tgz",
2250
+ "integrity": "sha512-qQyv8BNCjvZQayhoTd7iqt1CLNEFHfqe8/SDZk8ztAR0ZAIyHIFkmNnaQ/Izn6p3HrNCRp6lNdwO4TKPWHj4SQ==",
2251
2251
  "cpu": [
2252
2252
  "arm64"
2253
2253
  ],
@@ -2261,9 +2261,9 @@
2261
2261
  }
2262
2262
  },
2263
2263
  "node_modules/@harperfast/rocksdb-js-darwin-x64": {
2264
- "version": "1.4.1",
2265
- "resolved": "https://registry.npmjs.org/@harperfast/rocksdb-js-darwin-x64/-/rocksdb-js-darwin-x64-1.4.1.tgz",
2266
- "integrity": "sha512-6BUhuYh2bPcRAWbxbWnbKtQwJkzTq7XRa5uVLYxyTG/1VtbmI7zq4ScQl1rn0Q6tRlkoEjPY66fKLlygAPJT3w==",
2264
+ "version": "1.4.2",
2265
+ "resolved": "https://registry.npmjs.org/@harperfast/rocksdb-js-darwin-x64/-/rocksdb-js-darwin-x64-1.4.2.tgz",
2266
+ "integrity": "sha512-cPCsB7IVeuDhNjFcb/nqUkwtBI9BlaFNecJ/OjkG8hUpYAhd5rdNHFMt1vpu4sAYFaorFrMZoNKGbq43v14+hQ==",
2267
2267
  "cpu": [
2268
2268
  "x64"
2269
2269
  ],
@@ -2277,9 +2277,9 @@
2277
2277
  }
2278
2278
  },
2279
2279
  "node_modules/@harperfast/rocksdb-js-linux-arm64-glibc": {
2280
- "version": "1.4.1",
2281
- "resolved": "https://registry.npmjs.org/@harperfast/rocksdb-js-linux-arm64-glibc/-/rocksdb-js-linux-arm64-glibc-1.4.1.tgz",
2282
- "integrity": "sha512-eG7HO/PgOZeqy2yj9AKl4asGHQCNoGTqn83uK2z/Ek26oYp7Boa8jv4gmjneYXY3stKq2GQlUtfJiKXpgkIOYg==",
2280
+ "version": "1.4.2",
2281
+ "resolved": "https://registry.npmjs.org/@harperfast/rocksdb-js-linux-arm64-glibc/-/rocksdb-js-linux-arm64-glibc-1.4.2.tgz",
2282
+ "integrity": "sha512-NquwD+7Gxu3BYAIQhvSThjIRlZRBieDZKXGEmrc0gfcxcORbgOjMCdxDzhjF6l1nR4ODlfJfbKqGyF8JtmnIjA==",
2283
2283
  "cpu": [
2284
2284
  "arm64"
2285
2285
  ],
@@ -2296,9 +2296,9 @@
2296
2296
  }
2297
2297
  },
2298
2298
  "node_modules/@harperfast/rocksdb-js-linux-arm64-musl": {
2299
- "version": "1.4.1",
2300
- "resolved": "https://registry.npmjs.org/@harperfast/rocksdb-js-linux-arm64-musl/-/rocksdb-js-linux-arm64-musl-1.4.1.tgz",
2301
- "integrity": "sha512-5v4mkf31JdZ7Or6H52FuBuBLcGgLpPre5bmsxo5roBEzCYobSN8jvH3XwsrGUIgO1Rvm1ZDSjXiBQs6ZVpOlPw==",
2299
+ "version": "1.4.2",
2300
+ "resolved": "https://registry.npmjs.org/@harperfast/rocksdb-js-linux-arm64-musl/-/rocksdb-js-linux-arm64-musl-1.4.2.tgz",
2301
+ "integrity": "sha512-hp2IOXYBvloJEkZ/+bCI/AsQPtzza51Pkz+U+JkaAaayZ6+zsXdVp5GuGYPnCiH4O6QnOihKkgBW8msFhR0ogA==",
2302
2302
  "cpu": [
2303
2303
  "arm64"
2304
2304
  ],
@@ -2315,9 +2315,9 @@
2315
2315
  }
2316
2316
  },
2317
2317
  "node_modules/@harperfast/rocksdb-js-linux-x64-glibc": {
2318
- "version": "1.4.1",
2319
- "resolved": "https://registry.npmjs.org/@harperfast/rocksdb-js-linux-x64-glibc/-/rocksdb-js-linux-x64-glibc-1.4.1.tgz",
2320
- "integrity": "sha512-9yaLdOKL6ibdIHnWvahEJM0h+VWjl95mjfanF97W6+iwoFydgKgm/LamBmb7ZevrOINprMUdZDl5LgZ6QNnrVw==",
2318
+ "version": "1.4.2",
2319
+ "resolved": "https://registry.npmjs.org/@harperfast/rocksdb-js-linux-x64-glibc/-/rocksdb-js-linux-x64-glibc-1.4.2.tgz",
2320
+ "integrity": "sha512-zEkBHRoLanN9MTVY1mFRGDdAGyXBUrk962xvtf0sGj/wIK2M3c2KL39FftWHgtm/BHA3uGHssWk6B7O2O/Dlig==",
2321
2321
  "cpu": [
2322
2322
  "x64"
2323
2323
  ],
@@ -2334,9 +2334,9 @@
2334
2334
  }
2335
2335
  },
2336
2336
  "node_modules/@harperfast/rocksdb-js-linux-x64-musl": {
2337
- "version": "1.4.1",
2338
- "resolved": "https://registry.npmjs.org/@harperfast/rocksdb-js-linux-x64-musl/-/rocksdb-js-linux-x64-musl-1.4.1.tgz",
2339
- "integrity": "sha512-2K3jAXwozZLxsiTwMf/CtoYZ+9mWb5gXAvWMfXNKFpBGjVs5tIB9u5LvD+ShmAlQ8zkFFYImy3DKyFR0vgNGGg==",
2337
+ "version": "1.4.2",
2338
+ "resolved": "https://registry.npmjs.org/@harperfast/rocksdb-js-linux-x64-musl/-/rocksdb-js-linux-x64-musl-1.4.2.tgz",
2339
+ "integrity": "sha512-K7y1CC+LJma2E+wEqFq67jk7+hZW+oPdKcqxyDxrIRKO3jyn0Dtr/fwQf3cFuU8cRnZBmZTAcnr5LeNJrUuYRw==",
2340
2340
  "cpu": [
2341
2341
  "x64"
2342
2342
  ],
@@ -2353,9 +2353,9 @@
2353
2353
  }
2354
2354
  },
2355
2355
  "node_modules/@harperfast/rocksdb-js-win32-arm64": {
2356
- "version": "1.4.1",
2357
- "resolved": "https://registry.npmjs.org/@harperfast/rocksdb-js-win32-arm64/-/rocksdb-js-win32-arm64-1.4.1.tgz",
2358
- "integrity": "sha512-RqL7eFuqvXEof0MRbCdmLcucWWT12zbTrsAw/1Ye0rigentKKx/B3c3R2EhqDmYqsXJFQtthmLnHzhGTmJK1+A==",
2356
+ "version": "1.4.2",
2357
+ "resolved": "https://registry.npmjs.org/@harperfast/rocksdb-js-win32-arm64/-/rocksdb-js-win32-arm64-1.4.2.tgz",
2358
+ "integrity": "sha512-xc4oav0zTLfnjBIan1wlgB3g0NeWrzUPxR0Vq5HkLc4BGyAlPql+v1FwtQ4X6AwcAOHnS/QeYSGDQOZn6Ac1Ow==",
2359
2359
  "cpu": [
2360
2360
  "arm64"
2361
2361
  ],
@@ -2369,9 +2369,9 @@
2369
2369
  }
2370
2370
  },
2371
2371
  "node_modules/@harperfast/rocksdb-js-win32-x64": {
2372
- "version": "1.4.1",
2373
- "resolved": "https://registry.npmjs.org/@harperfast/rocksdb-js-win32-x64/-/rocksdb-js-win32-x64-1.4.1.tgz",
2374
- "integrity": "sha512-SnyfEhAieoWADIzMQYKjsZrgEDOOUKA47M4ZQJWF7Y1IySpFPOfSAcokXORmMeyLuxOuABgS/RDpNqsEVIpMNw==",
2372
+ "version": "1.4.2",
2373
+ "resolved": "https://registry.npmjs.org/@harperfast/rocksdb-js-win32-x64/-/rocksdb-js-win32-x64-1.4.2.tgz",
2374
+ "integrity": "sha512-60vqTYJdw0ysvHeFHoxZ/sHNesdfvri+jWIyU5TTua2s20LmLZ4hKLglnsa0LP7/IA5JutZsxJiyUUMCoG3PDw==",
2375
2375
  "cpu": [
2376
2376
  "x64"
2377
2377
  ],
@@ -236,35 +236,53 @@ export class RocksTransactionLogStore extends EventEmitter {
236
236
 
237
237
  aggregateIterator = {
238
238
  next() {
239
- if (nextEntries.length === 0) {
240
- // on the first iteration and any time we finished all the iterators, we re-retrieve all
241
- // the next entries (in case we are resuming after being done)
242
- updateIterators();
243
- }
244
- let earliest: TransactionEntry;
245
- let earliestIndex = -1;
246
- for (let i = 0; i < nextEntries.length; i++) {
247
- const result = nextEntries[i];
248
- // skip any that are done
249
- if (result.done) {
250
- continue;
239
+ // We get up to two passes: the normal find-earliest pass, plus one retry that
240
+ // forces nextEntries.length = 0 to re-poll every per-log iterator (each picks
241
+ // up new entries when its log file has grown since the last `.next()` returned
242
+ // done) and to let updateIterators pick up any new logs added since the last
243
+ // call (e.g. a peer's log created by replication). Without the retry, a
244
+ // `{ done: true }` slot in nextEntries carried over from a previous call
245
+ // persists across a burst of commits that all coalesce into a single
246
+ // notifyFromTransactionData wake-up the find-earliest loop keeps skipping
247
+ // the stale done slot, never re-polls the underlying iterator, and the entire
248
+ // burst is silently dropped (no further 'committed' arrives to unstick us).
249
+ // This was the fingerprint of the cloneNode topology bug where peer rows
250
+ // landed in hdb_nodes via system-DB replication but subscribeToNodeUpdates
251
+ // never received the events, so onNodeUpdate never opened replication
252
+ // connections to those peers.
253
+ for (let attempt = 0; attempt < 2; attempt++) {
254
+ if (nextEntries.length === 0) {
255
+ // on the first iteration and any time we finished all the iterators,
256
+ // we re-retrieve all the next entries (in case we are resuming after
257
+ // being done)
258
+ updateIterators();
259
+ }
260
+ let earliest: TransactionEntry;
261
+ let earliestIndex = -1;
262
+ for (let i = 0; i < nextEntries.length; i++) {
263
+ const result = nextEntries[i];
264
+ // skip any that are done
265
+ if (result.done) {
266
+ continue;
267
+ }
268
+ // find the earliest one that is not done
269
+ const next = result.value;
270
+ if (!earliest || earliest.timestamp > next.timestamp) {
271
+ earliest = next;
272
+ earliestIndex = i;
273
+ }
251
274
  }
252
- // find the earliest one that is not done
253
- const next = result.value;
254
- if (!earliest || earliest.timestamp > next.timestamp) {
255
- earliest = next;
256
- earliestIndex = i;
275
+ if (earliestIndex >= 0) {
276
+ // replace the entry with the next one from the iterator we pulled from
277
+ nextEntries[earliestIndex] = iterators[earliestIndex].next();
278
+ return {
279
+ value: onlyKeys ? earliest.timestamp : earliest,
280
+ done: false,
281
+ };
257
282
  }
283
+ // All current entries are done; force the retry pass to re-poll
284
+ nextEntries.length = 0;
258
285
  }
259
- if (earliestIndex >= 0) {
260
- // replace the entry with the next one from the iterator we pulled from
261
- nextEntries[earliestIndex] = iterators[earliestIndex].next();
262
- return {
263
- value: onlyKeys ? earliest.timestamp : earliest,
264
- done: false,
265
- };
266
- } // else we are done
267
- nextEntries.length = 0; // reset so if this iterator is restarted, we can re-query
268
286
  return { value: undefined, done: true };
269
287
  },
270
288
  addLog(logName: string) {
@@ -100,6 +100,11 @@ const TEST_WRITE_KEY_BUFFER = Buffer.allocUnsafeSlow(8192);
100
100
  const MAX_KEY_BYTES = 1978;
101
101
  const EVENT_HIGH_WATER_MARK = 100;
102
102
  const REPLAY_YIELD_INTERVAL = 100; // yield to the event loop every N records during subscription replay
103
+ // Cap for the out-of-order write reconciliation audit-chain walk in commit(). A pathologically deep
104
+ // audit history (e.g. a replication full-copy of a large-history database) would otherwise walk and
105
+ // buffer the entire backward chain per record, synchronously, on every worker — pinning the JS heap
106
+ // until the worker OOMs (issue #1114). Beyond this depth we fall back to a bounded reconciliation.
107
+ const MAX_OUT_OF_ORDER_AUDIT_DEPTH = 1000;
103
108
  const FULL_PERMISSIONS = {
104
109
  read: true,
105
110
  insert: true,
@@ -1739,8 +1744,18 @@ export function makeTable(options) {
1739
1744
  }
1740
1745
  let addedAuditRef = false;
1741
1746
  let nextRef: { localTime: number; nodeId: number };
1747
+ let walkSteps = 0;
1748
+ let auditWalkCapped = false;
1742
1749
  do {
1743
1750
  while (localTime > txnTime || (auditedVersion >= txnTime && localTime > 0)) {
1751
+ // Bound the walk only for RocksDB, where the OOM was observed (issue #1114): each step
1752
+ // is a transaction-log range scan + msgpackr decode, and the per-node logs can be huge.
1753
+ // LMDB audit entries are keyed by local audit time (not version), so the duplicate
1754
+ // shortcut below would not apply — keep its exact, unbounded reconciliation.
1755
+ if (isRocksDB && ++walkSteps > MAX_OUT_OF_ORDER_AUDIT_DEPTH) {
1756
+ auditWalkCapped = true;
1757
+ break;
1758
+ }
1744
1759
  const auditRecord = auditStore.get(localTime, tableId, id, nodeId);
1745
1760
  if (!auditRecord) break;
1746
1761
  auditedVersion = auditRecord.version;
@@ -1768,8 +1783,11 @@ export function makeTable(options) {
1768
1783
  }
1769
1784
  if (auditRecord.type === 'patch') {
1770
1785
  logger.debug?.('out of order patch will be applied', id, auditRecord);
1771
- // record patches so we can reply in order
1772
- succeedingUpdates.push(auditRecord);
1786
+ // Materialize the patch value now and keep only { version, value } rather than the
1787
+ // audit record itself, so its backing transaction-log buffer and decoders can be
1788
+ // reclaimed immediately. Only these two fields are needed for the ordered fold below;
1789
+ // retaining the full records is what pins the heap on a deep chain (issue #1114).
1790
+ succeedingUpdates.push({ version: auditedVersion, value: auditRecord.getValue(primaryStore) });
1773
1791
  auditRecordToStore = recordUpdate; // use the original update for the audit record
1774
1792
  } else if (auditRecord.type === 'put' || auditRecord.type === 'delete') {
1775
1793
  // There is newer full record update, so this incremental update is completely superseded
@@ -1801,6 +1819,7 @@ export function makeTable(options) {
1801
1819
  nodeId = auditRecord.previousNodeId;
1802
1820
  }
1803
1821
  // Check if we need to scan additional audit refs from this record
1822
+ if (auditWalkCapped) break;
1804
1823
  nextRef = auditRefsToVisit.shift();
1805
1824
  if (nextRef) {
1806
1825
  localTime = auditedVersion = nextRef.localTime;
@@ -1808,7 +1827,7 @@ export function makeTable(options) {
1808
1827
  logger.debug?.('Following additional audit ref to continue scanning', { localTime, nodeId });
1809
1828
  }
1810
1829
  } while (nextRef);
1811
- if (!localTime) {
1830
+ if (!localTime && !auditWalkCapped) {
1812
1831
  // if we reached the end of the audit trail, we can just apply the update
1813
1832
  logger.debug?.(
1814
1833
  'No further audit history, applying incremental updates based on available history',
@@ -1817,15 +1836,45 @@ export function makeTable(options) {
1817
1836
  existingEntry
1818
1837
  );
1819
1838
  }
1820
- succeedingUpdates.sort((a, b) => a.version - b.version); // order the patches
1821
- for (const auditRecord of succeedingUpdates) {
1822
- const newerUpdate = auditRecord.getValue(primaryStore);
1823
- logger.debug?.(
1824
- 'Rebuilding update with future patch:',
1825
- new Date(auditRecord.version),
1826
- newerUpdate,
1827
- auditRecord
1839
+ if (auditWalkCapped) {
1840
+ // The out-of-order audit chain exceeded MAX_OUT_OF_ORDER_AUDIT_DEPTH (a pathologically deep
1841
+ // history, seen during a replication full-copy of a large-history database — issue #1114).
1842
+ // Walking and buffering the whole chain per record OOMs the worker, so we stopped at the cap
1843
+ // and reconcile against only the most recent MAX_OUT_OF_ORDER_AUDIT_DEPTH updates (the fold
1844
+ // below). That is an approximation for histories deeper than the cap — updates older than the
1845
+ // retained window are not layered in — but the authoritative full-copy record restores exact
1846
+ // convergence. Because we stopped before reaching txnTime, the inline duplicate detection in
1847
+ // the walk never ran; full-copy audit-replay re-delivers writes, and re-applying one would
1848
+ // double-apply its commutative ops, so rule that out here with a single O(1) lookup at txnTime
1849
+ // (RocksDB audit logs are keyed by version, and the cap is RocksDB-only).
1850
+ logger.warn?.(
1851
+ 'Out-of-order audit reconciliation exceeded depth cap; reconciling against most recent updates only',
1852
+ {
1853
+ table: tableName,
1854
+ id,
1855
+ depth: walkSteps,
1856
+ }
1828
1857
  );
1858
+ const duplicate = auditStore.get(txnTime, tableId, id, options?.nodeId);
1859
+ if (
1860
+ duplicate &&
1861
+ duplicate.version === txnTime &&
1862
+ precedesExistingVersion(
1863
+ txnTime,
1864
+ { version: txnTime, localTime: txnTime, key: id, nodeId: duplicate.nodeId },
1865
+ options?.nodeId
1866
+ ) === 0
1867
+ ) {
1868
+ write.skipped = true;
1869
+ return; // duplicate write already applied
1870
+ }
1871
+ }
1872
+ // Fold the retained succeeding updates (the full chain, or — when capped — the most recent
1873
+ // window) onto this older write so newer fields win; for a capped walk this layers in only
1874
+ // what we collected before the cap.
1875
+ succeedingUpdates.sort((a, b) => a.version - b.version); // order the patches
1876
+ for (const { version: patchVersion, value: newerUpdate } of succeedingUpdates) {
1877
+ logger.debug?.('Rebuilding update with future patch:', new Date(patchVersion), newerUpdate);
1829
1878
  incrementalUpdateToApply = rebuildUpdateBefore(
1830
1879
  incrementalUpdateToApply ?? recordUpdate,
1831
1880
  newerUpdate,
@@ -259,6 +259,19 @@ export function setAuditRetention(retentionTime, defaultDelay = DEFAULT_AUDIT_CL
259
259
  DEFAULT_AUDIT_CLEANUP_DELAY = defaultDelay;
260
260
  }
261
261
 
262
+ /**
263
+ * One-shot purge of transaction-log files already older than the audit retention window,
264
+ * intended to run during startup/recovery before transaction-log replay. The steady-state
265
+ * cleanup loop (scheduleAuditCleanup) only starts once a worker reaches steady state, so a node
266
+ * that crash-loops during recovery never purges and its aged backlog only grows, enlarging the
267
+ * next replay/full-copy. Safe to run before replay: the native purge only deletes log files
268
+ * entirely before the last-flushed-to-RocksDB position, so unflushed entries that replay still
269
+ * needs are never removed. Returns the names of the purged files. See harper#1115.
270
+ */
271
+ export function purgeAgedLogs(rootStore: RocksDatabase): string[] {
272
+ return rootStore.purgeLogs({ before: Date.now() - auditRetention });
273
+ }
274
+
262
275
  const HAS_RECORD = 16;
263
276
  const HAS_PARTIAL_RECORD = 32; // will be used for CRDTs
264
277
  const PUT = 1;
@@ -7,6 +7,7 @@ import { RocksTransactionLogStore } from './RocksTransactionLogStore.ts';
7
7
  import { isMainThread } from 'node:worker_threads';
8
8
  import { RequestTarget } from './RequestTarget.ts';
9
9
  import { classifyAuditEntryForReplay } from './replayLogsGuards.ts';
10
+ import { purgeAgedLogs } from './auditStore.ts';
10
11
 
11
12
  let warnedReplayHappening = false;
12
13
  export function replayLogs(rootStore: RocksDatabase, tables: any): Promise<void> {
@@ -16,6 +17,25 @@ export function replayLogs(rootStore: RocksDatabase, tables: any): Promise<void>
16
17
  resolve();
17
18
  });
18
19
  if (!acquired) return;
20
+ // Shed transaction-log files already older than the audit retention window before
21
+ // replaying. A node that crash-loops during recovery never reaches the steady-state
22
+ // cleanup loop, so without this its aged backlog only grows and enlarges each subsequent
23
+ // replay/full-copy. The native purge keeps any file holding unflushed entries, so this
24
+ // never drops data the replay below still needs. See harper#1115.
25
+ // Purging is a non-critical optimization, so a purge failure (filesystem/permission/native
26
+ // error) must never block the critical replay path that follows — especially here, during
27
+ // the recovery this fix is meant to harden.
28
+ let purgedLogs: string[] = [];
29
+ try {
30
+ purgedLogs = purgeAgedLogs(rootStore);
31
+ } catch (error) {
32
+ logger.warn(`Failed to purge aged transaction logs before replay in ${rootStore.databaseName} database`, error);
33
+ }
34
+ if (purgedLogs.length > 0) {
35
+ logger.info(
36
+ `Purged ${purgedLogs.length} aged transaction-log file(s) before replay in ${rootStore.databaseName} database`
37
+ );
38
+ }
19
39
  const tableById = new Map<number, typeof Resource>();
20
40
  for (const tableName in tables) {
21
41
  const table = tables[tableName];
@@ -254,35 +254,53 @@ class RocksTransactionLogStore extends node_events_1.EventEmitter {
254
254
  updateIterators();
255
255
  aggregateIterator = {
256
256
  next() {
257
- if (nextEntries.length === 0) {
258
- // on the first iteration and any time we finished all the iterators, we re-retrieve all
259
- // the next entries (in case we are resuming after being done)
260
- updateIterators();
261
- }
262
- let earliest;
263
- let earliestIndex = -1;
264
- for (let i = 0; i < nextEntries.length; i++) {
265
- const result = nextEntries[i];
266
- // skip any that are done
267
- if (result.done) {
268
- continue;
257
+ // We get up to two passes: the normal find-earliest pass, plus one retry that
258
+ // forces nextEntries.length = 0 to re-poll every per-log iterator (each picks
259
+ // up new entries when its log file has grown since the last `.next()` returned
260
+ // done) and to let updateIterators pick up any new logs added since the last
261
+ // call (e.g. a peer's log created by replication). Without the retry, a
262
+ // `{ done: true }` slot in nextEntries carried over from a previous call
263
+ // persists across a burst of commits that all coalesce into a single
264
+ // notifyFromTransactionData wake-up the find-earliest loop keeps skipping
265
+ // the stale done slot, never re-polls the underlying iterator, and the entire
266
+ // burst is silently dropped (no further 'committed' arrives to unstick us).
267
+ // This was the fingerprint of the cloneNode topology bug where peer rows
268
+ // landed in hdb_nodes via system-DB replication but subscribeToNodeUpdates
269
+ // never received the events, so onNodeUpdate never opened replication
270
+ // connections to those peers.
271
+ for (let attempt = 0; attempt < 2; attempt++) {
272
+ if (nextEntries.length === 0) {
273
+ // on the first iteration and any time we finished all the iterators,
274
+ // we re-retrieve all the next entries (in case we are resuming after
275
+ // being done)
276
+ updateIterators();
277
+ }
278
+ let earliest;
279
+ let earliestIndex = -1;
280
+ for (let i = 0; i < nextEntries.length; i++) {
281
+ const result = nextEntries[i];
282
+ // skip any that are done
283
+ if (result.done) {
284
+ continue;
285
+ }
286
+ // find the earliest one that is not done
287
+ const next = result.value;
288
+ if (!earliest || earliest.timestamp > next.timestamp) {
289
+ earliest = next;
290
+ earliestIndex = i;
291
+ }
269
292
  }
270
- // find the earliest one that is not done
271
- const next = result.value;
272
- if (!earliest || earliest.timestamp > next.timestamp) {
273
- earliest = next;
274
- earliestIndex = i;
293
+ if (earliestIndex >= 0) {
294
+ // replace the entry with the next one from the iterator we pulled from
295
+ nextEntries[earliestIndex] = iterators[earliestIndex].next();
296
+ return {
297
+ value: onlyKeys ? earliest.timestamp : earliest,
298
+ done: false,
299
+ };
275
300
  }
301
+ // All current entries are done; force the retry pass to re-poll
302
+ nextEntries.length = 0;
276
303
  }
277
- if (earliestIndex >= 0) {
278
- // replace the entry with the next one from the iterator we pulled from
279
- nextEntries[earliestIndex] = iterators[earliestIndex].next();
280
- return {
281
- value: onlyKeys ? earliest.timestamp : earliest,
282
- done: false,
283
- };
284
- } // else we are done
285
- nextEntries.length = 0; // reset so if this iterator is restarted, we can re-query
286
304
  return { value: undefined, done: true };
287
305
  },
288
306
  addLog(logName) {
@@ -1 +1 @@
1
- {"version":3,"file":"RocksTransactionLogStore.js","sourceRoot":"","sources":["../../../core/resources/RocksTransactionLogStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RocksTransactionLogStore.js","sourceRoot":"","sources":["../../../core/resources/RocksTransactionLogStore.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAAwG;AACxG,qEAAiE;AACjE,yDAAuD;AACvD,mDAAyG;AACzG,6DAAmD;AACnD,6CAA2C;AAC3C,+BAAgC;AAChC,kFAAoE;AAEpE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,kCAAY,EAAE,CAAC;IAC1D,wCAAwC;IACxC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAA,qBAAQ,GAAE,CAAC,CAAC;AACtC,CAAC;AAED,wGAAwG;AACxG,MAAM,yBAAyB,GAAG,UAAU,CAAC;AAC7C,MAAM,oBAAoB,GAAG,UAAU,CAAC;AAOxC;;;;;GAKG;AACH,MAAa,wBAAyB,SAAQ,0BAAY;IACzD,GAAG,CAAiB;IACpB,QAAQ,CAAoB,CAAC,uCAAuC;IACpE,SAAS,GAAgC,IAAI,GAAG,EAAE,CAAC;IACnD,OAAO,GAAG,CAAC,CAAC,CAAC,+DAA+D;IAC5E,SAAS,CAAgB;IACzB,gBAAgB,GAAG,IAAI,CAAC,CAAC,oFAAoF;IAC7G,YAAY,YAA2B;QACtC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,YAAiB,EAAE,WAAqC,EAAE,OAAY;QACzE,IAAI,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACjC,6CAA6C;YAC7C,OAAO;QACR,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC;QACxF,IAAI,WAAuB,CAAC;QAC5B,IAAI,WAAW,YAAY,UAAU;YAAE,WAAW,GAAG,WAAW,CAAC;aAC5D,CAAC;YACL,MAAM,uBAAuB,GAC5B,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjE,WAAW,CAAC,gBAAgB,CAAC;YAC9B,8BAAc,CAAC,SAAS,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC;YACrD,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,WAAW,CAAC,mBAAmB,EAAE,CAAC;gBACrC,8BAAc,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,mBAAmB,CAAC,CAAC;gBAC7D,QAAQ,GAAG,CAAC,CAAC;YACd,CAAC;YACD,IAAI,WAAW,CAAC,cAAc,EAAE,CAAC;gBAChC,8BAAc,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;gBAC/D,QAAQ,IAAI,CAAC,CAAC;YACf,CAAC;YACD,WAAW,GAAG,IAAA,gCAAgB,EAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;gBACrC,OAAO,CAAC,WAAW,CAAC,UAAU,GAAG,EAAE,CAAC;gBACpC,OAAO,CAAC,WAAW,CAAC,QAAQ,GAAG,GAAG,EAAE;oBACnC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBAC1D,CAAC,CAAC;YACH,CAAC;YACD,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;QACD,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,CAAC,MAAc;QACrB,OAAO,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvF,CAAC;IAED,OAAO,CAAC,YAAiB,EAAE,KAAU,EAAE,OAAY;QAClD,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,IAAA,eAAQ,EAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;IACF,CAAC;IACD,GAAG,CAAC,GAAQ,EAAE,OAAe,EAAE,QAAa,EAAE,MAAc;QAC3D,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,CAAC,GAAQ,EAAE,OAAe,EAAE,QAAa,EAAE,MAAc;QAC/D,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC7E,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC9C,CAAC;YACD,4DAA4D;YAC5D,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;gBAClF,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;oBAC9D,OAAO,KAAK,CAAC;gBACd,CAAC;gBACD,IAAI,KAAK,CAAC,OAAO,KAAK,GAAG;oBAAE,OAAO,CAAC,gCAAgC;YACpE,CAAC;QACF,CAAC;aAAM,CAAC;YACP,6FAA6F;YAC7F,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;IACF,CAAC;IACD,SAAS,CAAC,GAAQ;QACjB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,QAAQ;QACP,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;IACD,YAAY,CAAC,OAAe,EAAE,GAAmB;QAChD,MAAM,MAAM,GAAG,CAAC,IAAA,oCAAiB,EAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAW,CAAC;QACjE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAS,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACjC,OAAO,MAAM,CAAC;IACf,CAAC;IAED,QAAQ;QACP,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,iFAAiF;YACjF,OAAO,IAAI,CAAC,QAAQ,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,OAAO,EAAE,EAAE;YACpD,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,OAAO,CAAC,gBAAgB;YACzD,uBAAuB;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAED,eAAe,CAAC,OAAe;QAC9B,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,OAUR;QACA,IAAI,QAAQ,GAAG,IAAI,oCAAgB,EAAoB,CAAC;QACxD,IAAI,iBAAyC,CAAC;QAC9C,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,GAAG,GAAG,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3G,IAAI,CAAC,GAAG,EAAE,CAAC;gBACV,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;oBACrC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACpC,CAAC;qBAAM,CAAC;oBACP,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACvC,CAAC;gBACD,IAAI,CAAC,GAAG,EAAE,CAAC;oBACV,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC1C,CAAC;YACF,CAAC;YACD,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACzC,QAAQ,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC;QACxC,CAAC;aAAM,CAAC;YACP,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YAClC,IAAI,IAAI,GAAqB,EAAE,CAAC;YAChC,qDAAqD;YACrD,IAAI,WAAkB,CAAC;YACvB,IAAI,aAAqB,CAAC;YAC1B,MAAM,SAAS,GAAyC,EAAE,CAAC;YAC3D,MAAM,eAAe,GAAG,GAAG,EAAE;gBAC5B,IAAI,aAAa,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;oBACpC,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAC3D,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CACjD,CAAC;oBACF,KAAK,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;wBAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;4BACzB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BACf,IAAI,YAAY,GAAG,OAAO,CAAC;4BAC3B,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gCACxB,6CAA6C;gCAC7C,YAAY,GAAG,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;4BAC7E,CAAC;iCAAM,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;gCAC/B,yGAAyG;gCACzG,yGAAyG;gCACzG,qDAAqD;gCACrD,YAAY,GAAG,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;4BAC1D,CAAC;4BACD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;wBACzC,CAAC;oBACF,CAAC;oBACD,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC;oBAC7B,IAAI,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;wBACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BACtC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;4BAClB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gCAC/B,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gCAClB,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;4BAC1B,CAAC;wBACF,CAAC;oBACF,CAAC;gBACF,CAAC;gBACD,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5D,CAAC,CAAC;YACF,eAAe,EAAE,CAAC;YAElB,iBAAiB,GAAG;gBACnB,IAAI;oBACH,8EAA8E;oBAC9E,8EAA8E;oBAC9E,+EAA+E;oBAC/E,6EAA6E;oBAC7E,wEAAwE;oBACxE,yEAAyE;oBACzE,qEAAqE;oBACrE,4EAA4E;oBAC5E,8EAA8E;oBAC9E,4EAA4E;oBAC5E,yEAAyE;oBACzE,2EAA2E;oBAC3E,sEAAsE;oBACtE,8BAA8B;oBAC9B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;wBAC9C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BAC9B,qEAAqE;4BACrE,qEAAqE;4BACrE,cAAc;4BACd,eAAe,EAAE,CAAC;wBACnB,CAAC;wBACD,IAAI,QAA0B,CAAC;wBAC/B,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;wBACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;4BAC9B,yBAAyB;4BACzB,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gCACjB,SAAS;4BACV,CAAC;4BACD,yCAAyC;4BACzC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;4BAC1B,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gCACtD,QAAQ,GAAG,IAAI,CAAC;gCAChB,aAAa,GAAG,CAAC,CAAC;4BACnB,CAAC;wBACF,CAAC;wBACD,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;4BACxB,uEAAuE;4BACvE,WAAW,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC;4BAC7D,OAAO;gCACN,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;gCAC/C,IAAI,EAAE,KAAK;6BACX,CAAC;wBACH,CAAC;wBACD,gEAAgE;wBAChE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;oBACxB,CAAC;oBACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;gBACzC,CAAC;gBACD,MAAM,CAAC,OAAe;oBACrB,IAAI,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;oBAClD,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;wBAChB,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBACtC,CAAC;gBACF,CAAC;gBACD,SAAS,EAAE,CAAC,OAAe,EAAE,EAAE;oBAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBACxC,IAAI,CAAC,GAAG;wBAAE,OAAO,CAAC,YAAY;oBAE9B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;oBAC/C,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;wBAChB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;wBACtB,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;wBAC3B,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;wBAC7B,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACnC,CAAC;gBACF,CAAC;aACD,CAAC;YACF,QAAQ,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC;QAC5C,CAAC;QACD,MAAM,uBAAuB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAoB,EAAE,EAAE;YAC9F,kFAAkF;YAClF,6EAA6E;YAC7E,qEAAqE;YACrE,2EAA2E;YAC3E,8EAA8E;YAC9E,yEAAyE;YACzE,sEAAsE;YACtE,IAAI,CAAC;gBACJ,MAAM,OAAO,GAAG,IAAI,uBAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC1E,IAAY,CAAC,QAAQ,GAAG,OAAO,CAAC;gBACjC,yEAAyE;gBACzE,IAAI,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC5C,IAAI,QAAQ,GAAG,CAAC,CAAC;gBACjB,IAAI,mBAA2B,CAAC;gBAChC,IAAI,eAAuB,CAAC;gBAC5B,IAAI,gBAAgB,GAAG,yBAAyB,EAAE,CAAC;oBAClD,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;oBAClD,QAAQ,IAAI,CAAC,CAAC;gBACf,CAAC;gBACD,IAAI,gBAAgB,GAAG,oBAAoB,EAAE,CAAC;oBAC7C,0EAA0E;oBAC1E,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBAC/C,QAAQ,IAAI,CAAC,CAAC;gBACf,CAAC;gBACD,MAAM,WAAW,GAAG,IAAA,8BAAc,EAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;gBAC9D,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC;gBAChC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;gBAC5B,WAAW,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;gBACtD,WAAW,CAAC,eAAe,GAAG,eAAe,CAAC;gBAC9C,WAAW,CAAC,gBAAgB,GAAG,gBAAgB,GAAG,UAAU,CAAC;gBAC7D,OAAO,WAAW,CAAC;YACpB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,YAAY,CAAC,KAAK,CAAC,wDAAwD,EAAE,KAAK,EAAE;oBACnF,SAAS;oBACT,UAAU,EAAE,IAAI,EAAE,UAAU;iBAC5B,CAAC,CAAC;gBACH,OAAO;oBACN,OAAO,EAAE,SAAS;oBAClB,MAAM;oBACN,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,SAAS;oBAClB,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS;oBACzB,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;oBAC/B,iBAAiB,EAAE,GAAG,EAAE,CAAC,SAAS;iBACR,CAAC;YAC7B,CAAC;QACF,CAAC,CAAC,CAAC;QACH,sEAAsE;QACtE,IAAI,iBAAiB,EAAE,MAAM,EAAE,CAAC;YAC/B,uBAAuB,CAAC,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC;YAC1D,uBAAuB,CAAC,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAC;QACjE,CAAC;QACD,OAAO,uBAAuB,CAAC;IAChC,CAAC;IACD,OAAO,CAAC,QAAc;QACrB,OAAO,EAAE,CAAC,CAAC,uBAAuB;QAClC,2BAA2B;QAC3B,iCAAiC;IAClC,CAAC;IACD,QAAQ;QACP,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,MAAM,IAAI,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;YAClC,SAAS,IAAI,IAAI,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,OAAO;YACN,IAAI;YACJ,SAAS;SACT,CAAC;IACH,CAAC;IAED,mBAAmB,CAAC,GAAoB,EAAE,aAA0B,EAAE,OAAmC;QACxG,OAAO,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;IACD,EAAE,CAAC,SAAiB,EAAE,QAAa;QAClC,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACP,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;IACF,CAAC;IACD,OAAO,CAAC,GAAQ,EAAE,UAAuB;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,CAAC,GAAQ;QACd,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,MAAM;QACX,yEAAyE;QACzE,mCAAmC;IACpC,CAAC;CACD;AA3XD,4DA2XC"}