@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
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import type { RocksDatabase } from '@harperfast/rocksdb-js';
|
|
2
|
+
import type { Id } from './ResourceInterface.ts';
|
|
3
|
+
import type { RocksTransactionLogStore } from './RocksTransactionLogStore.ts';
|
|
4
|
+
export declare const DERIVED_INDEX_ACCEPTED = 1;
|
|
5
|
+
export declare const DERIVED_INDEX_DEFERRED = 0;
|
|
6
|
+
export declare const DERIVED_INDEX_FAILED = -1;
|
|
7
|
+
export type DerivedIndexDeliveryResult = typeof DERIVED_INDEX_ACCEPTED | typeof DERIVED_INDEX_DEFERRED | typeof DERIVED_INDEX_FAILED;
|
|
8
|
+
export type DerivedIndexCursor = {
|
|
9
|
+
format: 1;
|
|
10
|
+
logs: Record<string, number>;
|
|
11
|
+
coverage?: DerivedIndexPositions;
|
|
12
|
+
};
|
|
13
|
+
export type DerivedIndexPositions = Record<string, {
|
|
14
|
+
sequence: number;
|
|
15
|
+
offset: number;
|
|
16
|
+
} | null>;
|
|
17
|
+
export type DerivedIndexCoverage = {
|
|
18
|
+
state: 'current' | 'bounded' | 'unknown';
|
|
19
|
+
maxLagMilliseconds: number;
|
|
20
|
+
lagUpperBoundMilliseconds?: number;
|
|
21
|
+
};
|
|
22
|
+
export declare function derivedIndexTime(store: RocksDatabase): bigint;
|
|
23
|
+
export type DerivedIndexState = {
|
|
24
|
+
kind: 'record';
|
|
25
|
+
version: number;
|
|
26
|
+
projection: unknown;
|
|
27
|
+
} | {
|
|
28
|
+
kind: 'absent';
|
|
29
|
+
}
|
|
30
|
+
/** The projection rejected the record (a 4xx-classified error); the backend removes any entry and counts it. */
|
|
31
|
+
| {
|
|
32
|
+
kind: 'unindexable';
|
|
33
|
+
version: number;
|
|
34
|
+
reason: string;
|
|
35
|
+
};
|
|
36
|
+
export type DerivedIndexMutation = {
|
|
37
|
+
tableId: number;
|
|
38
|
+
recordId: Id;
|
|
39
|
+
logVersion: number;
|
|
40
|
+
state: DerivedIndexState;
|
|
41
|
+
};
|
|
42
|
+
export type DerivedIndexTransaction = {
|
|
43
|
+
logName: string;
|
|
44
|
+
timestamp: number;
|
|
45
|
+
mutations: DerivedIndexMutation[];
|
|
46
|
+
};
|
|
47
|
+
export type DerivedIndexBatch = {
|
|
48
|
+
ownerEpoch: bigint;
|
|
49
|
+
transactions: DerivedIndexTransaction[];
|
|
50
|
+
/**
|
|
51
|
+
* Last-write-wins view over the distinct `(tableId, writeKeyId(recordId))` keys of the batch, in
|
|
52
|
+
* first-occurrence order, each carrying the last `logVersion` and the same resolved `state`
|
|
53
|
+
* object as its occurrences in `transactions`.
|
|
54
|
+
*/
|
|
55
|
+
records: DerivedIndexMutation[];
|
|
56
|
+
/**
|
|
57
|
+
* Cursor vector this batch completes. Absent on a rebuild scan chunk: such a batch advances no
|
|
58
|
+
* cursor and the backend's durable cursor must stay `undefined` until a batch carrying `through`
|
|
59
|
+
* has been made durable.
|
|
60
|
+
*/
|
|
61
|
+
through?: DerivedIndexCursor;
|
|
62
|
+
bytes: number;
|
|
63
|
+
rebuild?: true;
|
|
64
|
+
};
|
|
65
|
+
export type DerivedIndexFlushReason = 'age' | 'threshold' | 'shutdown';
|
|
66
|
+
export type DerivedIndexReadinessState = 'unknown' | 'ready' | 'rebuilding' | 'needs-rebuild' | 'unavailable';
|
|
67
|
+
/**
|
|
68
|
+
* Why an index is not `ready`, as a code every worker can read from shared memory. The owner's log
|
|
69
|
+
* line carries the full message; the code is what a peer or a successor can act on.
|
|
70
|
+
*/
|
|
71
|
+
export type DerivedIndexReadinessReason = 'none' | 'cursor-missing' | 'cursor-unoffered' | 'log-missing' | 'log-retention' | 'log-corrupt' | 'reload' | 'backend-failed' | 'runner-failed' | 'condemned' | 'shutdown-failed' | 'rebuild-failed' | 'rebuild-exhausted' | 'rebuild-requested';
|
|
72
|
+
export type DerivedIndexReadiness = {
|
|
73
|
+
state: DerivedIndexReadinessState;
|
|
74
|
+
reason?: DerivedIndexReadinessReason;
|
|
75
|
+
/** The most recently minted owner epoch; a backend fences queued work against it through `isOwnerEpoch`. */
|
|
76
|
+
ownerEpoch: bigint;
|
|
77
|
+
rebuildAttempts: number;
|
|
78
|
+
};
|
|
79
|
+
export interface DerivedIndexBackendHost {
|
|
80
|
+
/** True while `epoch` is the most recently minted owner epoch for this backend. */
|
|
81
|
+
isOwnerEpoch(epoch: bigint): boolean;
|
|
82
|
+
getReadiness(): DerivedIndexReadiness;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* A backend queues expensive work and publishes durability later: `deliver()` may only enqueue, a
|
|
86
|
+
* barrier completes asynchronously, and the durable cursor trails delivery. Work that survives a
|
|
87
|
+
* method return is the safety boundary, so every backend provides the epoch fence, the barrier
|
|
88
|
+
* request and the quiescence handshake the handoff protocol needs, even one that happens to complete
|
|
89
|
+
* everything before returning.
|
|
90
|
+
*/
|
|
91
|
+
export interface DerivedIndexBackend {
|
|
92
|
+
readonly id: string;
|
|
93
|
+
/** Receives the epoch fence and readiness reader before any delivery. */
|
|
94
|
+
attach(host: DerivedIndexBackendHost): void;
|
|
95
|
+
getDurableCursor(): DerivedIndexCursor | undefined;
|
|
96
|
+
/** Persist coverage only after its offered cursor is durable; reset must remove it with the cursor. */
|
|
97
|
+
publishCoverage?(positions: DerivedIndexPositions, ownerEpoch: bigint): void;
|
|
98
|
+
deliver(batch: DerivedIndexBatch): DerivedIndexDeliveryResult;
|
|
99
|
+
/** Request a durability barrier; the backend completes it and wakes through `onStateChange`. */
|
|
100
|
+
flush(reason: DerivedIndexFlushReason): void | Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* Stop accepting work for `ownerEpoch`, settle or discard what is queued, and resolve once nothing
|
|
103
|
+
* further will be applied or published for it. A rejection keeps the runner lock held.
|
|
104
|
+
*/
|
|
105
|
+
shutdown(ownerEpoch: bigint): void | Promise<void>;
|
|
106
|
+
onStateChange(wake: (change?: DerivedIndexBackendStateChange) => void): () => void;
|
|
107
|
+
/**
|
|
108
|
+
* Destroy index state and the durable cursor; `getDurableCursor()` must return `undefined`
|
|
109
|
+
* afterwards. Crash safety is the backend's: its first durable action must invalidate the cursor
|
|
110
|
+
* (or the generation the cursor belongs to) before anything destructive, so an interrupted reset
|
|
111
|
+
* reopens as cursorless rather than as a valid cursor over partially destroyed state. Shared
|
|
112
|
+
* readiness is process memory and is no evidence after a restart.
|
|
113
|
+
*/
|
|
114
|
+
reset?(ownerEpoch: bigint): void | Promise<void>;
|
|
115
|
+
}
|
|
116
|
+
export type DerivedIndexBackendStateChange = 'changed' | 'accepted-work-lost' | 'failed';
|
|
117
|
+
export type DerivedIndexRunnerOptions = {
|
|
118
|
+
maxTransactionsPerTurn?: number;
|
|
119
|
+
maxBytesPerTurn?: number;
|
|
120
|
+
maxMillisecondsPerTurn?: number;
|
|
121
|
+
/** Hard bound on distinct records resolved per chunk; an oversized transaction is cut here. */
|
|
122
|
+
maxChunkRecords?: number;
|
|
123
|
+
/** Estimated payload bytes after which a chunk stops adding complete transactions. */
|
|
124
|
+
maxChunkBytes?: number;
|
|
125
|
+
maxAcceptedBatchesAhead?: number;
|
|
126
|
+
maxFlushAgeMilliseconds?: number;
|
|
127
|
+
flushAfterMutations?: number;
|
|
128
|
+
flushAfterBytes?: number;
|
|
129
|
+
rebuildBackoffMilliseconds?: number;
|
|
130
|
+
maxRebuildBackoffMilliseconds?: number;
|
|
131
|
+
maxRebuildAttempts?: number;
|
|
132
|
+
/**
|
|
133
|
+
* Cadence on which a non-owner re-tries the runner lock when no wake reaches it: the fallback for
|
|
134
|
+
* an owner that died without releasing, whose lock is released natively with nothing to notify.
|
|
135
|
+
*/
|
|
136
|
+
lockRetryMilliseconds?: number;
|
|
137
|
+
/**
|
|
138
|
+
* Opt-in writer backpressure: while the index is further behind than this, user writes to its
|
|
139
|
+
* tables fail with a retryable 503 on every worker. 0 (the default) means no policy.
|
|
140
|
+
*/
|
|
141
|
+
maxLagMilliseconds?: number;
|
|
142
|
+
};
|
|
143
|
+
export type DerivedIndexRegistration = {
|
|
144
|
+
backend: DerivedIndexBackend;
|
|
145
|
+
projections: ReadonlyMap<number, (record: unknown) => unknown>;
|
|
146
|
+
options?: DerivedIndexRunnerOptions;
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* `size` is the stored byte size of the record when known; it bounds the projection's size without
|
|
150
|
+
* serializing it. Resolve a missing, deleted or evicted record as `undefined`; a present entry is
|
|
151
|
+
* projected as-is, so an undecodable body fails closed instead of silently leaving the index.
|
|
152
|
+
*/
|
|
153
|
+
export type DerivedIndexRecord = {
|
|
154
|
+
version: number;
|
|
155
|
+
value: unknown;
|
|
156
|
+
size?: number;
|
|
157
|
+
} | undefined;
|
|
158
|
+
/** A scan record whose `value` is null or undefined is a tombstone, and one whose `recordId` is a symbol is a Harper-internal store entry; neither is indexed. */
|
|
159
|
+
export type DerivedIndexScanRecord = {
|
|
160
|
+
recordId: Id;
|
|
161
|
+
version: number;
|
|
162
|
+
value: unknown;
|
|
163
|
+
size?: number;
|
|
164
|
+
};
|
|
165
|
+
export type DerivedIndexRuntimeOptions = DerivedIndexRunnerOptions & {
|
|
166
|
+
idleGraceMilliseconds?: number;
|
|
167
|
+
now?: () => number;
|
|
168
|
+
/** Iterates every current record of a table for the rebuild scan; without it a rebuild cannot run. */
|
|
169
|
+
scanRecords?: (tableId: number) => Iterable<DerivedIndexScanRecord>;
|
|
170
|
+
};
|
|
171
|
+
export type DerivedIndexRunnerStatus = {
|
|
172
|
+
state: 'idle' | 'running' | 'deferred' | 'waiting-durable' | 'stopped' | 'rebuilding';
|
|
173
|
+
ownerEpoch?: bigint;
|
|
174
|
+
} | {
|
|
175
|
+
state: 'needs-rebuild' | 'unavailable';
|
|
176
|
+
reason: string;
|
|
177
|
+
ownerEpoch?: bigint;
|
|
178
|
+
};
|
|
179
|
+
export type DerivedIndexRunnerMetrics = {
|
|
180
|
+
readiness: DerivedIndexReadiness;
|
|
181
|
+
acceptedBatches: number;
|
|
182
|
+
acceptedBytes: number;
|
|
183
|
+
acceptedMutations: number;
|
|
184
|
+
deferredBytes: number;
|
|
185
|
+
oldestAcceptedAgeMilliseconds: number;
|
|
186
|
+
/** Lag between the latest transaction this runner has read and the durable cursor; blind while parked. */
|
|
187
|
+
cursorLagMilliseconds: number;
|
|
188
|
+
/** How long the runner has been parked on backend backpressure or the durability ceiling. */
|
|
189
|
+
stalledMilliseconds: number;
|
|
190
|
+
unindexableRecords: number;
|
|
191
|
+
rebuildAttempts: number;
|
|
192
|
+
rebuiltRecords: number;
|
|
193
|
+
/** How long the current epoch's quiescence (backend shutdown) has been pending. */
|
|
194
|
+
quiescenceAgeMilliseconds: number;
|
|
195
|
+
};
|
|
196
|
+
export declare const READINESS_BYTES: number;
|
|
197
|
+
export declare class DerivedIndexRuntime {
|
|
198
|
+
#private;
|
|
199
|
+
constructor(logStore: RocksTransactionLogStore, resolveRecord: (tableId: number, recordId: Id) => DerivedIndexRecord, options?: DerivedIndexRuntimeOptions);
|
|
200
|
+
register(registration: DerivedIndexRegistration): () => Promise<void>;
|
|
201
|
+
wake(): void;
|
|
202
|
+
getStatus(backendId: string): DerivedIndexRunnerStatus | undefined;
|
|
203
|
+
/** Shared readiness published by whichever worker owns the index; readable on every worker. */
|
|
204
|
+
getReadiness(backendId: string): DerivedIndexReadiness;
|
|
205
|
+
getMetrics(backendId: string): DerivedIndexRunnerMetrics | undefined;
|
|
206
|
+
waitForCoverage(backendId: string, since: bigint, timeout: number, signal?: AbortSignal): Promise<void>;
|
|
207
|
+
/** Force a rebuild (or retry one that became `unavailable`). Returns false when the backend cannot be rebuilt by the runtime. */
|
|
208
|
+
requestRebuild(backendId: string): boolean;
|
|
209
|
+
/** Resolves once every runner has released ownership and its backend shutdown has settled. */
|
|
210
|
+
stop(): Promise<void>;
|
|
211
|
+
}
|
|
212
|
+
/** Read an index's shared readiness on any worker, without a registered runtime. */
|
|
213
|
+
export declare function readDerivedIndexReadiness(logStore: RocksTransactionLogStore, backendId: string): DerivedIndexReadiness;
|
|
214
|
+
export declare function sameDerivedIndexPositions(left: DerivedIndexPositions, right: DerivedIndexPositions): boolean;
|
|
215
|
+
export declare function readDerivedIndexCoverage(logStore: RocksTransactionLogStore, backendId: string, loadCursor: () => DerivedIndexCursor | undefined, maxLagMilliseconds: number): DerivedIndexCoverage;
|