@harperfast/harper 5.3.0-alpha.1 → 5.3.0-beta.2
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/bin/cliOperations.ts +12 -0
- package/bin/restart.ts +66 -6
- package/components/Application.ts +1134 -112
- package/components/DESIGN.md +421 -0
- package/components/OptionsWatcher.ts +368 -102
- package/components/Scope.ts +20 -1
- package/components/componentLoader.ts +43 -4
- package/components/deploymentOperations.ts +4 -1
- package/components/deploymentRecorder.ts +9 -2
- package/components/mcp/DESIGN.md +109 -0
- package/components/mcp/audit.ts +21 -17
- package/components/operations.js +284 -52
- package/components/operationsValidation.js +49 -2
- package/components/packageComponent.ts +25 -1
- package/components/requestRestart.ts +11 -0
- package/config/DESIGN.md +306 -0
- package/config/RootConfigWatcher.ts +191 -37
- package/config/configReadRetry.ts +62 -0
- package/config/configUtils.ts +78 -26
- package/config/parseConfigFile.ts +34 -0
- package/config/readConfigFileSync.ts +44 -0
- package/config/watcherArming.ts +59 -0
- package/config-root.schema.json +4 -0
- package/dataLayer/DESIGN.md +179 -0
- package/dataLayer/harperBridge/ResourceBridge.ts +28 -2
- package/dataLayer/restoreMarker.ts +92 -25
- package/dist/bin/cliOperations.js +13 -0
- package/dist/bin/cliOperations.js.map +1 -1
- package/dist/bin/restart.js +42 -6
- package/dist/bin/restart.js.map +1 -1
- package/dist/components/Application.d.ts +104 -9
- package/dist/components/Application.js +954 -102
- package/dist/components/Application.js.map +1 -1
- package/dist/components/OptionsWatcher.d.ts +4 -1
- package/dist/components/OptionsWatcher.js +378 -104
- package/dist/components/OptionsWatcher.js.map +1 -1
- package/dist/components/Scope.js +15 -1
- package/dist/components/Scope.js.map +1 -1
- package/dist/components/componentLoader.js +35 -3
- package/dist/components/componentLoader.js.map +1 -1
- package/dist/components/deploymentOperations.js +4 -1
- package/dist/components/deploymentOperations.js.map +1 -1
- package/dist/components/deploymentRecorder.d.ts +4 -2
- package/dist/components/deploymentRecorder.js +1 -0
- package/dist/components/deploymentRecorder.js.map +1 -1
- package/dist/components/mcp/audit.d.ts +2 -1
- package/dist/components/mcp/audit.js +21 -17
- package/dist/components/mcp/audit.js.map +1 -1
- package/dist/components/operations.d.ts +28 -0
- package/dist/components/operations.js +263 -54
- package/dist/components/operations.js.map +1 -1
- package/dist/components/operationsValidation.js +48 -2
- package/dist/components/operationsValidation.js.map +1 -1
- package/dist/components/packageComponent.js +24 -0
- package/dist/components/packageComponent.js.map +1 -1
- package/dist/components/requestRestart.d.ts +1 -0
- package/dist/components/requestRestart.js +7 -0
- package/dist/components/requestRestart.js.map +1 -1
- package/dist/config/RootConfigWatcher.d.ts +2 -0
- package/dist/config/RootConfigWatcher.js +189 -35
- package/dist/config/RootConfigWatcher.js.map +1 -1
- package/dist/config/configReadRetry.d.ts +8 -0
- package/dist/config/configReadRetry.js +62 -0
- package/dist/config/configReadRetry.js.map +1 -0
- package/dist/config/configUtils.d.ts +10 -9
- package/dist/config/configUtils.js +63 -27
- package/dist/config/configUtils.js.map +1 -1
- package/dist/config/parseConfigFile.d.ts +4 -0
- package/dist/config/parseConfigFile.js +35 -0
- package/dist/config/parseConfigFile.js.map +1 -0
- package/dist/config/readConfigFileSync.d.ts +1 -0
- package/dist/config/readConfigFileSync.js +47 -0
- package/dist/config/readConfigFileSync.js.map +1 -0
- package/dist/config/watcherArming.d.ts +15 -0
- package/dist/config/watcherArming.js +59 -0
- package/dist/config/watcherArming.js.map +1 -0
- package/dist/dataLayer/harperBridge/ResourceBridge.js +21 -2
- package/dist/dataLayer/harperBridge/ResourceBridge.js.map +1 -1
- package/dist/dataLayer/restoreMarker.d.ts +21 -8
- package/dist/dataLayer/restoreMarker.js +94 -27
- package/dist/dataLayer/restoreMarker.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/json/systemSchema.json +3 -0
- package/dist/resources/DatabaseTransaction.d.ts +25 -0
- package/dist/resources/DatabaseTransaction.js +224 -18
- package/dist/resources/DatabaseTransaction.js.map +1 -1
- package/dist/resources/LMDBTransaction.d.ts +2 -1
- package/dist/resources/LMDBTransaction.js +22 -3
- package/dist/resources/LMDBTransaction.js.map +1 -1
- package/dist/resources/PrimaryRocksDatabase.js +22 -6
- package/dist/resources/PrimaryRocksDatabase.js.map +1 -1
- package/dist/resources/RecordEncoder.d.ts +1 -1
- package/dist/resources/RecordEncoder.js +46 -10
- package/dist/resources/RecordEncoder.js.map +1 -1
- package/dist/resources/Resource.js +97 -13
- package/dist/resources/Resource.js.map +1 -1
- package/dist/resources/ResourceInterface.d.ts +8 -0
- package/dist/resources/RocksIndexStore.js +2 -1
- package/dist/resources/RocksIndexStore.js.map +1 -1
- package/dist/resources/RocksTransactionLogStore.d.ts +10 -0
- package/dist/resources/RocksTransactionLogStore.js +104 -33
- package/dist/resources/RocksTransactionLogStore.js.map +1 -1
- package/dist/resources/Table.d.ts +58 -7
- package/dist/resources/Table.js +1143 -348
- package/dist/resources/Table.js.map +1 -1
- package/dist/resources/analytics/write.d.ts +3 -0
- package/dist/resources/analytics/write.js +49 -16
- package/dist/resources/analytics/write.js.map +1 -1
- package/dist/resources/auditStore.d.ts +170 -0
- package/dist/resources/auditStore.js +457 -11
- package/dist/resources/auditStore.js.map +1 -1
- package/dist/resources/crdt.d.ts +10 -0
- package/dist/resources/crdt.js +22 -0
- package/dist/resources/crdt.js.map +1 -1
- package/dist/resources/dataLoader.js +3 -4
- package/dist/resources/dataLoader.js.map +1 -1
- package/dist/resources/databases.d.ts +16 -13
- package/dist/resources/databases.js +625 -177
- package/dist/resources/databases.js.map +1 -1
- package/dist/resources/derivedIndexRegistry.d.ts +5 -0
- package/dist/resources/derivedIndexRegistry.js +68 -0
- package/dist/resources/derivedIndexRegistry.js.map +1 -0
- package/dist/resources/derivedIndexRuntime.d.ts +215 -0
- package/dist/resources/derivedIndexRuntime.js +2027 -0
- package/dist/resources/derivedIndexRuntime.js.map +1 -0
- package/dist/resources/graphql.js +3 -2
- package/dist/resources/graphql.js.map +1 -1
- package/dist/resources/indexes/HierarchicalNavigableSmallWorld.d.ts +102 -9
- package/dist/resources/indexes/HierarchicalNavigableSmallWorld.js +867 -39
- package/dist/resources/indexes/HierarchicalNavigableSmallWorld.js.map +1 -1
- package/dist/resources/indexes/fullTextDerivedIndex.d.ts +81 -0
- package/dist/resources/indexes/fullTextDerivedIndex.js +1004 -0
- package/dist/resources/indexes/fullTextDerivedIndex.js.map +1 -0
- package/dist/resources/indexes/fullTextNativeBinding.d.ts +78 -0
- package/dist/resources/indexes/fullTextNativeBinding.js +85 -0
- package/dist/resources/indexes/fullTextNativeBinding.js.map +1 -0
- package/dist/resources/indexes/hnswDerivedIndex.d.ts +67 -0
- package/dist/resources/indexes/hnswDerivedIndex.js +464 -0
- package/dist/resources/indexes/hnswDerivedIndex.js.map +1 -0
- package/dist/resources/indexes/hnswPlaneBinding.d.ts +65 -0
- package/dist/resources/indexes/hnswPlaneBinding.js +91 -0
- package/dist/resources/indexes/hnswPlaneBinding.js.map +1 -0
- package/dist/resources/indexes/nativeFullTextDerivedIndexLifecycle.d.ts +24 -0
- package/dist/resources/indexes/nativeFullTextDerivedIndexLifecycle.js +149 -0
- package/dist/resources/indexes/nativeFullTextDerivedIndexLifecycle.js.map +1 -0
- package/dist/resources/nodeIdMapping.d.ts +5 -0
- package/dist/resources/nodeIdMapping.js +49 -0
- package/dist/resources/nodeIdMapping.js.map +1 -1
- package/dist/resources/recordLock.d.ts +47 -4
- package/dist/resources/recordLock.js +138 -7
- package/dist/resources/recordLock.js.map +1 -1
- package/dist/resources/recordLockCoordinator.d.ts +557 -0
- package/dist/resources/recordLockCoordinator.js +2597 -0
- package/dist/resources/recordLockCoordinator.js.map +1 -0
- package/dist/resources/replayLogs.js +5 -0
- package/dist/resources/replayLogs.js.map +1 -1
- package/dist/resources/replicatedApplyFailure.d.ts +16 -0
- package/dist/resources/replicatedApplyFailure.js +63 -0
- package/dist/resources/replicatedApplyFailure.js.map +1 -0
- package/dist/resources/scheduler/scheduler.js +3 -3
- package/dist/resources/scheduler/scheduler.js.map +1 -1
- package/dist/resources/search.d.ts +10 -4
- package/dist/resources/search.js +160 -40
- package/dist/resources/search.js.map +1 -1
- package/dist/resources/tracked.d.ts +5 -1
- package/dist/resources/tracked.js +74 -23
- package/dist/resources/tracked.js.map +1 -1
- package/dist/resources/transactionBroadcast.js +4 -6
- package/dist/resources/transactionBroadcast.js.map +1 -1
- package/dist/security/auth.js +59 -23
- package/dist/security/auth.js.map +1 -1
- package/dist/security/deferredAuthentication.d.ts +11 -0
- package/dist/security/deferredAuthentication.js +25 -3
- package/dist/security/deferredAuthentication.js.map +1 -1
- package/dist/security/jsLoader.js +9 -4
- package/dist/security/jsLoader.js.map +1 -1
- package/dist/server/REST.js +39 -5
- package/dist/server/REST.js.map +1 -1
- package/dist/server/http.d.ts +5 -1
- package/dist/server/http.js +34 -2
- package/dist/server/http.js.map +1 -1
- package/dist/server/mqtt.js +5 -1
- package/dist/server/mqtt.js.map +1 -1
- package/dist/server/serverHelpers/Headers.d.ts +2 -0
- package/dist/server/serverHelpers/Headers.js +6 -0
- package/dist/server/serverHelpers/Headers.js.map +1 -1
- package/dist/server/serverHelpers/NodeAdapterResponse.d.ts +48 -0
- package/dist/server/serverHelpers/NodeAdapterResponse.js +220 -0
- package/dist/server/serverHelpers/NodeAdapterResponse.js.map +1 -0
- package/dist/server/serverHelpers/Request.d.ts +5 -10
- package/dist/server/serverHelpers/Request.js +38 -136
- package/dist/server/serverHelpers/Request.js.map +1 -1
- package/dist/server/serverHelpers/contentTypes.d.ts +2 -0
- package/dist/server/serverHelpers/contentTypes.js +189 -15
- package/dist/server/serverHelpers/contentTypes.js.map +1 -1
- package/dist/server/serverHelpers/serverUtilities.d.ts +3 -3
- package/dist/server/serverHelpers/serverUtilities.js +110 -20
- package/dist/server/serverHelpers/serverUtilities.js.map +1 -1
- package/dist/server/serverHelpers/uwsServer.js +4 -1
- package/dist/server/serverHelpers/uwsServer.js.map +1 -1
- package/dist/server/serverHelpers/webSocketCloseReason.d.ts +2 -0
- package/dist/server/serverHelpers/webSocketCloseReason.js +29 -0
- package/dist/server/serverHelpers/webSocketCloseReason.js.map +1 -0
- package/dist/server/storageReclamation.js +1 -1
- package/dist/server/storageReclamation.js.map +1 -1
- package/dist/server/threads/isolatedApplications.d.ts +47 -0
- package/dist/server/threads/isolatedApplications.js +171 -0
- package/dist/server/threads/isolatedApplications.js.map +1 -0
- package/dist/server/threads/logRotationTransport.d.ts +1 -0
- package/dist/server/threads/logRotationTransport.js +33 -0
- package/dist/server/threads/logRotationTransport.js.map +1 -0
- package/dist/server/threads/manageThreads.d.ts +64 -6
- package/dist/server/threads/manageThreads.js +261 -12
- package/dist/server/threads/manageThreads.js.map +1 -1
- package/dist/server/threads/socketRouter.d.ts +1 -0
- package/dist/server/threads/socketRouter.js +196 -13
- package/dist/server/threads/socketRouter.js.map +1 -1
- package/dist/server/threads/threadServer.js +30 -7
- package/dist/server/threads/threadServer.js.map +1 -1
- package/dist/utility/errors/hdbError.d.ts +24 -0
- package/dist/utility/errors/hdbError.js +58 -1
- package/dist/utility/errors/hdbError.js.map +1 -1
- package/dist/utility/hdbTerms.d.ts +2 -0
- package/dist/utility/hdbTerms.js +2 -0
- package/dist/utility/hdbTerms.js.map +1 -1
- package/dist/utility/logging/harper_logger.js +218 -38
- package/dist/utility/logging/harper_logger.js.map +1 -1
- package/dist/utility/logging/logGenerationCoordinator.d.ts +35 -0
- package/dist/utility/logging/logGenerationCoordinator.js +184 -0
- package/dist/utility/logging/logGenerationCoordinator.js.map +1 -0
- package/dist/utility/logging/logRotation.d.ts +46 -0
- package/dist/utility/logging/logRotation.js +365 -0
- package/dist/utility/logging/logRotation.js.map +1 -0
- package/dist/utility/logging/logRotator.d.ts +1 -1
- package/dist/utility/logging/logRotator.js +172 -92
- package/dist/utility/logging/logRotator.js.map +1 -1
- package/dist/utility/npmUtilities.js +6 -4
- package/dist/utility/npmUtilities.js.map +1 -1
- package/dist/utility/watcherFallback.d.ts +0 -45
- package/dist/utility/watcherFallback.js +1 -125
- package/dist/utility/watcherFallback.js.map +1 -1
- package/dist/validation/configValidator.js +6 -3
- package/dist/validation/configValidator.js.map +1 -1
- package/index.ts +9 -0
- package/json/systemSchema.json +3 -0
- package/npm-shrinkwrap.json +177 -87
- package/package.json +13 -5
- package/resources/DESIGN.md +689 -19
- package/resources/DatabaseTransaction.ts +230 -17
- package/resources/LMDBTransaction.ts +21 -3
- package/resources/PrimaryRocksDatabase.ts +20 -7
- package/resources/RecordEncoder.ts +52 -10
- package/resources/Resource.ts +97 -13
- package/resources/ResourceInterface.ts +8 -0
- package/resources/RocksIndexStore.ts +2 -1
- package/resources/RocksTransactionLogStore.ts +111 -31
- package/resources/Table.ts +1273 -396
- package/resources/analytics/DESIGN.md +38 -0
- package/resources/analytics/write.ts +50 -17
- package/resources/auditStore.ts +460 -11
- package/resources/crdt.ts +22 -0
- package/resources/dataLoader.ts +3 -4
- package/resources/databases.ts +611 -147
- package/resources/derivedIndexRegistry.ts +56 -0
- package/resources/derivedIndexRuntime.ts +2292 -0
- package/resources/graphql.ts +3 -2
- package/resources/indexes/DESIGN.md +833 -0
- package/resources/indexes/HierarchicalNavigableSmallWorld.ts +924 -46
- package/resources/indexes/fullTextDerivedIndex.ts +1165 -0
- package/resources/indexes/fullTextNativeBinding.ts +146 -0
- package/resources/indexes/hnswDerivedIndex.ts +531 -0
- package/resources/indexes/hnswPlaneBinding.ts +174 -0
- package/resources/indexes/nativeFullTextDerivedIndexLifecycle.ts +181 -0
- package/resources/nodeIdMapping.ts +50 -0
- package/resources/record-locks.md +1407 -0
- package/resources/recordLock.ts +173 -7
- package/resources/recordLockCoordinator.ts +3082 -0
- package/resources/replayLogs.ts +5 -0
- package/resources/replicatedApplyFailure.ts +77 -0
- package/resources/scheduler/DESIGN.md +40 -0
- package/resources/scheduler/scheduler.ts +4 -4
- package/resources/search.ts +169 -49
- package/resources/tracked.ts +73 -22
- package/resources/transactionBroadcast.ts +4 -4
- package/security/DESIGN.md +175 -0
- package/security/auth.ts +53 -24
- package/security/deferredAuthentication.ts +24 -2
- package/security/jsLoader.ts +9 -4
- package/server/DESIGN.md +275 -0
- package/server/REST.ts +42 -6
- package/server/http.ts +34 -2
- package/server/mqtt.ts +6 -4
- package/server/serverHelpers/Headers.ts +5 -1
- package/server/serverHelpers/NodeAdapterResponse.ts +221 -0
- package/server/serverHelpers/Request.ts +33 -131
- package/server/serverHelpers/contentTypes.ts +188 -15
- package/server/serverHelpers/serverUtilities.ts +157 -27
- package/server/serverHelpers/uwsServer.ts +4 -1
- package/server/serverHelpers/webSocketCloseReason.ts +25 -0
- package/server/storageReclamation.ts +2 -2
- package/server/threads/isolatedApplications.ts +157 -0
- package/server/threads/logRotationTransport.ts +40 -0
- package/server/threads/manageThreads.js +254 -12
- package/server/threads/socketRouter.ts +217 -11
- package/server/threads/threadServer.js +30 -7
- package/studio/web/assets/{Chat-BnCBegQz.js → Chat-DADFFGe_.js} +1 -1
- package/studio/web/assets/{FloatingChat-CoDW1ySS.js → FloatingChat-D_mI-rZ7.js} +3 -3
- package/studio/web/assets/{apiToken-Bwk5BLXW.js → apiToken-c2NiSDHa.js} +1 -1
- package/studio/web/assets/{applications-DHxGi7JH.js → applications-DktUqh7G.js} +1 -1
- package/studio/web/assets/{cssMode-s0cWI-_M.js → cssMode-Cs_75Xhw.js} +1 -1
- package/studio/web/assets/{editor-DNcRHK54.js → editor-19b-Y1IN.js} +1 -1
- package/studio/web/assets/{html-Bdssedlg.js → html-DiYEQMpB.js} +1 -1
- package/studio/web/assets/{htmlMode-CoDlJ3fw.js → htmlMode-CmR0y7P_.js} +1 -1
- package/studio/web/assets/{index-D6sxmFLR.js → index-Dm0rfkJ7.js} +5 -5
- package/studio/web/assets/{index.lazy-tmU5BS8s.js → index.lazy-7vqt2CC3.js} +1 -1
- package/studio/web/assets/{javascript-B8meVSTH.js → javascript-BWtCFuOt.js} +1 -1
- package/studio/web/assets/{jsonMode-DpIPd35T.js → jsonMode-Buzzbv9y.js} +1 -1
- package/studio/web/assets/{languageServices-C_5FMJzQ.js → languageServices-SqsFWfTM.js} +1 -1
- package/studio/web/assets/{lspLanguageFeatures-BIzNBzPK.js → lspLanguageFeatures-EMV5cmjo.js} +1 -1
- package/studio/web/assets/{notifications-CvZivSbh.js → notifications-CAB-LZWT.js} +1 -1
- package/studio/web/assets/{notifications-CQf18QKb.js → notifications-DRzmSRxM.js} +1 -1
- package/studio/web/assets/{profile-DdOwtntb.js → profile-BNKAl79n.js} +1 -1
- package/studio/web/assets/{regions-n69fwagr.js → regions-CUow_Zw2.js} +1 -1
- package/studio/web/assets/{register-PfWTCXWB.js → register-Dkt3WUMp.js} +2 -2
- package/studio/web/assets/{setComponentFile-Bg6O7X0S.js → setComponentFile-BZRfMD0N.js} +1 -1
- package/studio/web/assets/{setup-CUx_aUDl.js → setup-D_yiEPO2.js} +2 -2
- package/studio/web/assets/{status-D7BVKqX9.js → status-DhHh1Ge-.js} +1 -1
- package/studio/web/assets/{toggleHighContrast-DBSyXzMr.js → toggleHighContrast-D7L1PDtV.js} +1 -1
- package/studio/web/assets/{tsMode-BByKCjBS.js → tsMode-CCwLk1YS.js} +1 -1
- package/studio/web/assets/{typescript-DDLnLpw9.js → typescript-BP1j1mjn.js} +1 -1
- package/studio/web/assets/{useEntityRestURL-31CHGaHk.js → useEntityRestURL-D7bnYxLw.js} +1 -1
- package/studio/web/assets/{workers-pR3jRY9D.js → workers-tOuCNT17.js} +1 -1
- package/studio/web/assets/{xml-2iRnMhQO.js → xml-BSG_3mQT.js} +1 -1
- package/studio/web/assets/{yaml-Bf92gJpd.js → yaml-DxiLprBB.js} +1 -1
- package/studio/web/index.html +1 -1
- package/utility/DESIGN.md +55 -0
- package/utility/errors/hdbError.ts +54 -0
- package/utility/hdbTerms.ts +2 -0
- package/utility/logging/harper_logger.ts +210 -30
- package/utility/logging/logGenerationCoordinator.ts +196 -0
- package/utility/logging/logRotation.ts +367 -0
- package/utility/logging/logRotator.ts +196 -91
- package/utility/npmUtilities.ts +6 -4
- package/utility/watcherFallback.ts +0 -122
- package/validation/configValidator.ts +6 -3
|
@@ -41,17 +41,26 @@ const rocksdb_js_1 = require("@harperfast/rocksdb-js");
|
|
|
41
41
|
* duration of a restore, and briefly by `dropDatabase` so the two serialize on the same primitive.
|
|
42
42
|
* Known limitation: the lock is owned by the process, so if the restore job's worker *thread*
|
|
43
43
|
* dies without the process exiting, the lock stays held (restores 409) until Harper restarts.
|
|
44
|
-
* - `<meta-dir>/<key>.restoring` — the completion marker.
|
|
45
|
-
* acquired and before the destructive restore begins; deleted only after
|
|
46
|
-
* successfully, while still holding the lock. Its *existence* means "a
|
|
47
|
-
* not finished successfully". Its first line records the database
|
|
48
|
-
*
|
|
44
|
+
* - `<meta-dir>/<key>.restoring` — the completion marker. Published (temp → fsync → rename → parent
|
|
45
|
+
* fsync) after the lock is acquired and before the destructive restore begins; deleted only after
|
|
46
|
+
* the restore completes successfully, while still holding the lock. Its *existence* means "a
|
|
47
|
+
* restore started and has not finished successfully". Its first line records the database
|
|
48
|
+
* directory name as a fallback so the startup scan can map a marker whose database directory is
|
|
49
|
+
* missing without decoding the hashed key.
|
|
50
|
+
*
|
|
51
|
+
* The rename is what makes the marker trustworthy: the marker path only ever holds the previous
|
|
52
|
+
* content or the complete new content, so a torn write can never replace a valid marker with one
|
|
53
|
+
* the scan reads as empty (and therefore honors as no block). An intact marker is also never
|
|
54
|
+
* rewritten at all — see `beginRestore`.
|
|
49
55
|
*/
|
|
50
56
|
// The backtick makes this an illegal database name (schemaRegex rejects `/` and backtick only), so
|
|
51
57
|
// it can never collide with a real database directory — see the module header.
|
|
52
58
|
exports.RESTORE_META_DIR = '`restore`';
|
|
53
59
|
exports.RESTORE_LOCK_SUFFIX = '.lock';
|
|
54
60
|
exports.RESTORING_MARKER_SUFFIX = '.restoring';
|
|
61
|
+
// Deliberately not a `.restoring` suffix: `scanBlockedRestores` selects markers by that suffix, and
|
|
62
|
+
// a half-written temp must never be mistaken for one.
|
|
63
|
+
const MARKER_TEMP_SUFFIX = '.tmp';
|
|
55
64
|
/**
|
|
56
65
|
* Directory holding the restore metadata for a database — the reserved `` `restore` `` sibling of
|
|
57
66
|
* the database directory (see the module header for why the name contains a backtick). Shared by
|
|
@@ -159,17 +168,29 @@ function releaseRestoreLock(lock) {
|
|
|
159
168
|
(0, rocksdb_js_1.fileLockRelease)(lock.token);
|
|
160
169
|
}
|
|
161
170
|
/**
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
* a
|
|
165
|
-
*
|
|
171
|
+
* Whether a marker on disk still blocks the database it belongs to. `scanBlockedRestores` maps a
|
|
172
|
+
* marker to a database by its first line, so the line has to be the whole name: a torn write that
|
|
173
|
+
* left a prefix of it ("ord" for "orders") is non-empty and reads as valid, but blocks a database
|
|
174
|
+
* that does not exist while the real one loads.
|
|
166
175
|
*/
|
|
167
|
-
function
|
|
168
|
-
const markerPath = restoringMarkerPath(dbPath);
|
|
169
|
-
const preexisting = (0, node_fs_1.existsSync)(markerPath);
|
|
170
|
-
const lock = acquireRestoreLock(dbPath);
|
|
176
|
+
function markerIsIntact(markerPath, dbPath) {
|
|
171
177
|
try {
|
|
172
|
-
|
|
178
|
+
return (0, node_fs_1.readFileSync)(markerPath, 'utf8').split('\n', 1)[0] === (0, node_path_1.basename)(dbPath);
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Publish the restoring marker atomically. The caller must already hold the restore lock, which is
|
|
186
|
+
* what makes the fixed temp name safe: only one writer per database can exist at a time, so a temp
|
|
187
|
+
* left by an earlier crash is this database's own debris and is simply overwritten.
|
|
188
|
+
*/
|
|
189
|
+
function publishRestoringMarker(dbPath) {
|
|
190
|
+
const metaDir = restoreMetaDir(dbPath);
|
|
191
|
+
const tempPath = (0, node_path_1.join)(metaDir, restoreMetaKey(dbPath) + MARKER_TEMP_SUFFIX);
|
|
192
|
+
try {
|
|
193
|
+
const fd = (0, node_fs_1.openSync)(tempPath, 'w');
|
|
173
194
|
try {
|
|
174
195
|
// first line is the database directory name so the startup scan can map this marker back to
|
|
175
196
|
// the database it blocks without reversing the hashed key
|
|
@@ -179,9 +200,47 @@ function beginRestore(dbPath) {
|
|
|
179
200
|
finally {
|
|
180
201
|
(0, node_fs_1.closeSync)(fd);
|
|
181
202
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
203
|
+
(0, node_fs_1.renameSync)(tempPath, restoringMarkerPath(dbPath));
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
try {
|
|
207
|
+
(0, node_fs_1.unlinkSync)(tempPath);
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
// debris either way; the write failure is the error worth reporting
|
|
211
|
+
}
|
|
212
|
+
throw error;
|
|
213
|
+
}
|
|
214
|
+
// fsync the metadata directory so the marker's directory entry is durable — without this a
|
|
215
|
+
// power loss can lose the entry, and a half-purged database would load as healthy
|
|
216
|
+
fsyncDir(metaDir);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Acquire the per-database restore lock and ensure the restoring marker is in place. Call before any
|
|
220
|
+
* destructive step. Returns the lock (with `preexisting` set when a marker was already present, so
|
|
221
|
+
* a failed recovery attempt knows not to clear it). Throws (statusCode 409) if another restore
|
|
222
|
+
* already holds the lock.
|
|
223
|
+
*
|
|
224
|
+
* An intact marker is left exactly as it is. A recovery attempt runs over a directory an earlier
|
|
225
|
+
* restore may have half-purged, so the marker it finds is the only thing keeping that directory
|
|
226
|
+
* from loading as healthy; rewriting it buys nothing (the content it would write is the content
|
|
227
|
+
* already there) and risks everything.
|
|
228
|
+
*/
|
|
229
|
+
function beginRestore(dbPath) {
|
|
230
|
+
const markerPath = restoringMarkerPath(dbPath);
|
|
231
|
+
const lock = acquireRestoreLock(dbPath);
|
|
232
|
+
// Sampled while holding the lock, not before it: a restore that waited out an earlier one would
|
|
233
|
+
// otherwise carry the earlier run's "no marker" reading, and on its own pre-destruction failure
|
|
234
|
+
// clear the marker protecting a directory that run had already half-purged.
|
|
235
|
+
const preexisting = (0, node_fs_1.existsSync)(markerPath);
|
|
236
|
+
try {
|
|
237
|
+
if (!preexisting || !markerIsIntact(markerPath, dbPath))
|
|
238
|
+
publishRestoringMarker(dbPath);
|
|
239
|
+
// An intact marker is kept, but its durability is not assumed: the publisher that wrote it may
|
|
240
|
+
// have been interrupted between the rename and this flush, which would leave the directory
|
|
241
|
+
// entry — the thing the startup scan reads — still only in the page cache.
|
|
242
|
+
else
|
|
243
|
+
fsyncDir(restoreMetaDir(dbPath));
|
|
185
244
|
}
|
|
186
245
|
catch (error) {
|
|
187
246
|
(0, rocksdb_js_1.fileLockRelease)(lock.token);
|
|
@@ -230,8 +289,10 @@ function clearRestoreMarker(lock) {
|
|
|
230
289
|
}
|
|
231
290
|
}
|
|
232
291
|
/**
|
|
233
|
-
* Scan a databases root's reserved `` `restore` `` metadata directory and report every database
|
|
234
|
-
*
|
|
292
|
+
* Scan a databases root's reserved `` `restore` `` metadata directory and report every database
|
|
293
|
+
* currently blocked from loading. Existing database entries are mapped to markers by their hashed
|
|
294
|
+
* keys, so corrupt marker contents cannot unblock them; the first line remains the fallback for a
|
|
295
|
+
* marker whose database directory is missing.
|
|
235
296
|
* Returns `[dbName, state]` pairs for markers whose state is `in-progress` or `incomplete`
|
|
236
297
|
* (a `clear` result means the marker was removed concurrently and the database is loadable).
|
|
237
298
|
*/
|
|
@@ -239,19 +300,25 @@ function scanBlockedRestores(databasesRoot) {
|
|
|
239
300
|
const metaDir = (0, node_path_1.join)(databasesRoot, exports.RESTORE_META_DIR);
|
|
240
301
|
if (!(0, node_fs_1.existsSync)(metaDir))
|
|
241
302
|
return [];
|
|
303
|
+
const databaseNamesByMarker = new Map((0, node_fs_1.readdirSync)(databasesRoot, { withFileTypes: true })
|
|
304
|
+
.filter((entry) => entry.name !== exports.RESTORE_META_DIR)
|
|
305
|
+
.map((entry) => [restoreMetaKey((0, node_path_1.join)(databasesRoot, entry.name)) + exports.RESTORING_MARKER_SUFFIX, entry.name]));
|
|
242
306
|
const blocked = [];
|
|
243
307
|
for (const entry of (0, node_fs_1.readdirSync)(metaDir, { withFileTypes: true })) {
|
|
244
308
|
if (!entry.isFile() || !entry.name.endsWith(exports.RESTORING_MARKER_SUFFIX))
|
|
245
309
|
continue;
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
310
|
+
const markerPath = (0, node_path_1.join)(metaDir, entry.name);
|
|
311
|
+
let dbName = databaseNamesByMarker.get(entry.name);
|
|
312
|
+
if (!dbName) {
|
|
313
|
+
try {
|
|
314
|
+
dbName = (0, node_fs_1.readFileSync)(markerPath, 'utf8').split('\n', 1)[0];
|
|
315
|
+
}
|
|
316
|
+
catch {
|
|
317
|
+
continue; // marker removed concurrently
|
|
318
|
+
}
|
|
319
|
+
if (!dbName || restoringMarkerPath((0, node_path_1.join)(databasesRoot, dbName)) !== markerPath)
|
|
320
|
+
continue;
|
|
252
321
|
}
|
|
253
|
-
if (!dbName)
|
|
254
|
-
continue;
|
|
255
322
|
const state = checkRestoreState((0, node_path_1.join)(databasesRoot, dbName));
|
|
256
323
|
if (state !== 'clear')
|
|
257
324
|
blocked.push([dbName, state]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restoreMarker.js","sourceRoot":"","sources":["../../dataLayer/restoreMarker.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;
|
|
1
|
+
{"version":3,"file":"restoreMarker.js","sourceRoot":"","sources":["../../dataLayer/restoreMarker.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { RequestTarget } from './resources/RequestTarget.ts';
|
|
2
2
|
export { flushDatabases } from './resources/databases.ts';
|
|
3
|
+
export { registerReplicatedApplyFailureListener, unregisterReplicatedApplyFailureListener, type ReplicatedApplyFailure, type ReplicatedApplyFailureListener, } from './resources/replicatedApplyFailure.ts';
|
|
3
4
|
export { getContext, getResponse, getUser } from './security/jsLoader.ts';
|
|
5
|
+
export { markCredentialRejection, credentialRejectionError } from './security/credentialRejection.ts';
|
|
4
6
|
export { defineTable, types } from './resources/defineTable.ts';
|
|
5
7
|
export { defineResource, t, schemaOf, projectTableFragment } from './resources/defineResource.ts';
|
|
6
8
|
export type { Query, Context, Session, SourceContext, SubscriptionRequest, RecordLockOptions, RequestTargetOrId, ResourceInterface, WritableRecord, } from './resources/ResourceInterface.ts';
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.projectTableFragment = exports.schemaOf = exports.t = exports.defineResource = exports.types = exports.defineTable = exports.getUser = exports.getResponse = exports.getContext = exports.flushDatabases = exports.RequestTarget = void 0;
|
|
6
|
+
exports.projectTableFragment = exports.schemaOf = exports.t = exports.defineResource = exports.types = exports.defineTable = exports.credentialRejectionError = exports.markCredentialRejection = exports.getUser = exports.getResponse = exports.getContext = exports.unregisterReplicatedApplyFailureListener = exports.registerReplicatedApplyFailureListener = exports.flushDatabases = exports.RequestTarget = void 0;
|
|
7
7
|
// Prevents server from starting in worker threads if this was directly imported from a non-server user thread
|
|
8
8
|
const node_worker_threads_1 = __importDefault(require("node:worker_threads"));
|
|
9
9
|
if (!node_worker_threads_1.default.isMainThread) {
|
|
@@ -17,10 +17,18 @@ var RequestTarget_ts_1 = require("./resources/RequestTarget.js");
|
|
|
17
17
|
Object.defineProperty(exports, "RequestTarget", { enumerable: true, get: function () { return RequestTarget_ts_1.RequestTarget; } });
|
|
18
18
|
var databases_ts_1 = require("./resources/databases.js");
|
|
19
19
|
Object.defineProperty(exports, "flushDatabases", { enumerable: true, get: function () { return databases_ts_1.flushDatabases; } });
|
|
20
|
+
var replicatedApplyFailure_ts_1 = require("./resources/replicatedApplyFailure.js");
|
|
21
|
+
Object.defineProperty(exports, "registerReplicatedApplyFailureListener", { enumerable: true, get: function () { return replicatedApplyFailure_ts_1.registerReplicatedApplyFailureListener; } });
|
|
22
|
+
Object.defineProperty(exports, "unregisterReplicatedApplyFailureListener", { enumerable: true, get: function () { return replicatedApplyFailure_ts_1.unregisterReplicatedApplyFailureListener; } });
|
|
20
23
|
var jsLoader_ts_1 = require("./security/jsLoader.js");
|
|
21
24
|
Object.defineProperty(exports, "getContext", { enumerable: true, get: function () { return jsLoader_ts_1.getContext; } });
|
|
22
25
|
Object.defineProperty(exports, "getResponse", { enumerable: true, get: function () { return jsLoader_ts_1.getResponse; } });
|
|
23
26
|
Object.defineProperty(exports, "getUser", { enumerable: true, get: function () { return jsLoader_ts_1.getUser; } });
|
|
27
|
+
// An untagged error from a `server.getUser` override is treated as an internal fault; these tag one
|
|
28
|
+
// as a rejected credential, which authentication defers to the route owner instead (#2703).
|
|
29
|
+
var credentialRejection_ts_1 = require("./security/credentialRejection.js");
|
|
30
|
+
Object.defineProperty(exports, "markCredentialRejection", { enumerable: true, get: function () { return credentialRejection_ts_1.markCredentialRejection; } });
|
|
31
|
+
Object.defineProperty(exports, "credentialRejectionError", { enumerable: true, get: function () { return credentialRejection_ts_1.credentialRejectionError; } });
|
|
24
32
|
// Code-first schema authoring: declare a table as a TypeScript value; the returned
|
|
25
33
|
// handle is the live, registered table class with per-verb shapes inferred from the definition.
|
|
26
34
|
var defineTable_ts_1 = require("./resources/defineTable.js");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;AAAA,8GAA8G;AAC9G,8EAAgD;AAChD,IAAI,CAAC,6BAAa,CAAC,YAAY,EAAE,CAAC;IACjC,4GAA4G;IAC5G,IAAI,CAAC,6BAAa,CAAC,UAAU;QAAE,6BAAa,CAAC,UAAU,GAAG,EAAE,CAAC;IAC7D,6BAAa,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC;AAC/C,CAAC;AAED,oGAAoG;AACpG,iEAA6D;AAApD,iHAAA,aAAa,OAAA;AACtB,yDAA0D;AAAjD,8GAAA,cAAc,OAAA;AACvB,sDAA0E;AAAjE,yGAAA,UAAU,OAAA;AAAE,0GAAA,WAAW,OAAA;AAAE,sGAAA,OAAO,OAAA;AACzC,mFAAmF;AACnF,gGAAgG;AAChG,6DAAgE;AAAvD,6GAAA,WAAW,OAAA;AAAE,uGAAA,KAAK,OAAA;AAE3B,+EAA+E;AAC/E,qGAAqG;AACrG,2FAA2F;AAC3F,mEAAkG;AAAzF,mHAAA,cAAc,OAAA;AAAE,sGAAA,CAAC,OAAA;AAAE,6GAAA,QAAQ,OAAA;AAAE,yHAAA,oBAAoB,OAAA;AAyJ1D,oEAAoE;AACpE,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;AAC5B,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;AAC/B,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;AACvB,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;AACpB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;AAC3B,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;AAC9B,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;AAC7B,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;AAC5B,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;AACpB,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;AACpB,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;AACrB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;AAEhC,yCAAyC;AACzC,gGAAgG;AAChG,oDAAoD;AACpD,sEAA2D;AAE3D,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,yBAAO,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;AAAA,8GAA8G;AAC9G,8EAAgD;AAChD,IAAI,CAAC,6BAAa,CAAC,YAAY,EAAE,CAAC;IACjC,4GAA4G;IAC5G,IAAI,CAAC,6BAAa,CAAC,UAAU;QAAE,6BAAa,CAAC,UAAU,GAAG,EAAE,CAAC;IAC7D,6BAAa,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC;AAC/C,CAAC;AAED,oGAAoG;AACpG,iEAA6D;AAApD,iHAAA,aAAa,OAAA;AACtB,yDAA0D;AAAjD,8GAAA,cAAc,OAAA;AACvB,mFAK+C;AAJ9C,mJAAA,sCAAsC,OAAA;AACtC,qJAAA,wCAAwC,OAAA;AAIzC,sDAA0E;AAAjE,yGAAA,UAAU,OAAA;AAAE,0GAAA,WAAW,OAAA;AAAE,sGAAA,OAAO,OAAA;AACzC,oGAAoG;AACpG,4FAA4F;AAC5F,4EAAsG;AAA7F,iIAAA,uBAAuB,OAAA;AAAE,kIAAA,wBAAwB,OAAA;AAC1D,mFAAmF;AACnF,gGAAgG;AAChG,6DAAgE;AAAvD,6GAAA,WAAW,OAAA;AAAE,uGAAA,KAAK,OAAA;AAE3B,+EAA+E;AAC/E,qGAAqG;AACrG,2FAA2F;AAC3F,mEAAkG;AAAzF,mHAAA,cAAc,OAAA;AAAE,sGAAA,CAAC,OAAA;AAAE,6GAAA,QAAQ,OAAA;AAAE,yHAAA,oBAAoB,OAAA;AAyJ1D,oEAAoE;AACpE,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;AAC5B,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;AAC/B,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;AACvB,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;AACpB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;AAC3B,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;AAC9B,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;AAC7B,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;AAC5B,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;AACpB,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;AACpB,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;AACrB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;AAEhC,yCAAyC;AACzC,gGAAgG;AAChG,oDAAoD;AACpD,sEAA2D;AAE3D,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,yBAAO,CAAC,CAAC"}
|
|
@@ -48,6 +48,8 @@ declare class StartedTransaction extends Error {
|
|
|
48
48
|
* transactions, while core keeps the consistency guarantee.
|
|
49
49
|
*/
|
|
50
50
|
export declare function transactionOpenTooLongError(): ServerError;
|
|
51
|
+
export declare function getReadTransactionGuard(transaction: ReadTransaction): (() => void) | undefined;
|
|
52
|
+
export declare function trackReadRange(transaction: ReadTransaction, createRange: () => any): any;
|
|
51
53
|
type MaybePromise<T> = T | Promise<T>;
|
|
52
54
|
export type CommitOptions = {
|
|
53
55
|
doneWriting?: boolean;
|
|
@@ -62,6 +64,10 @@ type ReadTransaction = (LMDBTransaction | RocksTransaction) & {
|
|
|
62
64
|
isDone?: boolean;
|
|
63
65
|
isCommitted?: boolean;
|
|
64
66
|
};
|
|
67
|
+
export type WriteGeneration = {
|
|
68
|
+
closed: boolean;
|
|
69
|
+
internalWrites: number;
|
|
70
|
+
};
|
|
65
71
|
export type TransactionWrite = {
|
|
66
72
|
key: Id;
|
|
67
73
|
store: any;
|
|
@@ -96,7 +102,12 @@ export type TransactionWrite = {
|
|
|
96
102
|
trackRecordVersion?: boolean;
|
|
97
103
|
recordVersionApplied?: boolean;
|
|
98
104
|
innerCommit?: MaybePromise<CommitResolution>;
|
|
105
|
+
reloadCommitBase?: boolean;
|
|
106
|
+
writeGeneration?: WriteGeneration;
|
|
107
|
+
instanceClosed?: boolean;
|
|
99
108
|
};
|
|
109
|
+
export declare function closeWriteInstance(operation: TransactionWrite | null | undefined): void;
|
|
110
|
+
export declare function validateWrite(operation: TransactionWrite, txnTime: number, transaction: DatabaseTransaction): any;
|
|
100
111
|
export declare function getAppliedWriteVersion(recordVersion: number | undefined, txnLogKey: number): number;
|
|
101
112
|
/**
|
|
102
113
|
* The state a preceding write in this transaction left for `operation`'s key, or undefined if this
|
|
@@ -128,6 +139,7 @@ export declare class DatabaseTransaction implements Transaction {
|
|
|
128
139
|
scopeOwned?: boolean;
|
|
129
140
|
});
|
|
130
141
|
writes: TransactionWrite[];
|
|
142
|
+
ownedWrites?: WeakSet<TransactionWrite>;
|
|
131
143
|
writesByKey?: Map<any, Map<unknown, TransactionWrite>>;
|
|
132
144
|
completions: Promise<void>[];
|
|
133
145
|
db: RootDatabaseKind;
|
|
@@ -169,8 +181,21 @@ export declare class DatabaseTransaction implements Transaction {
|
|
|
169
181
|
commitPhaseTicks: number;
|
|
170
182
|
commitChainHead?: DatabaseTransaction;
|
|
171
183
|
recordLocks?: Map<any, Map<unknown, RecordLockHandle>>;
|
|
184
|
+
/**
|
|
185
|
+
* Whether any staged write was made through a record lock handle. The commit-time lease fence
|
|
186
|
+
* below is skipped entirely when this is false, which is every transaction in a core-only
|
|
187
|
+
* deployment: without it a bulk transaction of 100,000 plain writes pays 100,000 property checks
|
|
188
|
+
* before submission, on a path that is supposed to be untouched when no lock is involved. It
|
|
189
|
+
* latches rather than tracking a count, because a write whose handle was released or expired after
|
|
190
|
+
* staging is exactly what the fence exists to catch.
|
|
191
|
+
*/
|
|
192
|
+
hasLeaseProtectedWrite?: boolean;
|
|
172
193
|
pendingLocks?: Map<any, Map<unknown, Promise<RecordLockHandle>>>;
|
|
173
194
|
setCommitPhase(committing: boolean): void;
|
|
195
|
+
rangeReadActive: boolean;
|
|
196
|
+
renewReadTimeout(): void;
|
|
197
|
+
renewIdleTimeout(): void;
|
|
198
|
+
renewChainForNativeCommit(): void;
|
|
174
199
|
getReadTxn(disableSnapshot?: boolean): ReadTransaction;
|
|
175
200
|
private attachOwnedTransaction;
|
|
176
201
|
/**
|