@harperfast/harper 5.2.13 → 5.3.0-beta.1
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/agent/mcpTools.ts +1 -1
- package/agent/session.ts +25 -14
- package/bin/cliOperations.ts +58 -9
- package/bin/copyDb.ts +282 -59
- package/bin/deploySetup.ts +16 -5
- package/bin/harper.ts +1 -1
- package/bin/help.ts +4 -1
- package/bin/lite.ts +4 -1
- package/bin/restart.ts +120 -4
- package/bin/run.ts +6 -11
- package/bin/upgrade.js +7 -3
- package/bin/workloadIdentity.ts +119 -0
- package/components/Application.ts +3436 -242
- package/components/ApplicationScope.ts +8 -0
- package/components/EntryHandler.ts +59 -39
- package/components/OptionsWatcher.ts +440 -98
- package/components/RuntimeModuleTracker.ts +38 -7
- package/components/Scope.ts +56 -15
- package/components/awaitRestart.ts +84 -0
- package/components/componentLoader.ts +381 -32
- package/components/componentPreparationLock.ts +16 -5
- package/components/deploymentOperations.ts +4 -1
- package/components/deploymentRecorder.ts +9 -2
- package/components/mcp/adapters/harperHttp.ts +4 -0
- package/components/mcp/listChanged.ts +4 -0
- package/components/mcp/toolRegistry.ts +2 -0
- package/components/mcp/tools/operations.ts +9 -0
- package/components/mcp/tools/schemas/operationDescriptions.ts +2 -2
- package/components/operations.js +537 -113
- package/components/operationsValidation.js +98 -3
- package/components/packageComponent.ts +25 -1
- package/components/requestRestart.ts +11 -0
- package/components/status/ComponentStatusRegistry.ts +59 -0
- package/config/RootConfigWatcher.ts +240 -40
- package/config/configReadRetry.ts +62 -0
- package/config/configUtils.ts +357 -48
- package/config/harperConfigEnvVars.ts +170 -27
- package/config/parseConfigFile.ts +34 -0
- package/config/readConfigFileSync.ts +44 -0
- package/config/watcherArming.ts +59 -0
- package/config-root.schema.json +33 -0
- package/dataLayer/blobBackup.ts +160 -50
- package/dataLayer/delete.ts +6 -1
- package/dataLayer/harperBridge/ResourceBridge.ts +80 -10
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js +3 -1
- package/dataLayer/hdbInfoController.ts +34 -1
- package/dataLayer/insert.ts +44 -1
- package/dataLayer/rocksdbBackup.ts +53 -10
- package/dataLayer/schema.ts +11 -1
- package/dataLayer/schemaDescribe.ts +8 -1
- package/dist/agent/mcpTools.js +1 -1
- package/dist/agent/mcpTools.js.map +1 -1
- package/dist/agent/session.d.ts +22 -0
- package/dist/agent/session.js +26 -15
- package/dist/agent/session.js.map +1 -1
- package/dist/bin/cliOperations.js +61 -9
- package/dist/bin/cliOperations.js.map +1 -1
- package/dist/bin/copyDb.d.ts +12 -1
- package/dist/bin/copyDb.js +248 -60
- package/dist/bin/copyDb.js.map +1 -1
- package/dist/bin/deploySetup.d.ts +2 -0
- package/dist/bin/deploySetup.js +11 -3
- package/dist/bin/deploySetup.js.map +1 -1
- package/dist/bin/harper.js +1 -1
- package/dist/bin/harper.js.map +1 -1
- package/dist/bin/help.js +4 -1
- package/dist/bin/help.js.map +1 -1
- package/dist/bin/lite.js +4 -1
- package/dist/bin/lite.js.map +1 -1
- package/dist/bin/restart.js +91 -6
- package/dist/bin/restart.js.map +1 -1
- package/dist/bin/run.js +4 -10
- package/dist/bin/run.js.map +1 -1
- package/dist/bin/upgrade.js +4 -3
- package/dist/bin/upgrade.js.map +1 -1
- package/dist/bin/workloadIdentity.d.ts +18 -0
- package/dist/bin/workloadIdentity.js +100 -0
- package/dist/bin/workloadIdentity.js.map +1 -0
- package/dist/components/Application.d.ts +235 -17
- package/dist/components/Application.js +3038 -238
- package/dist/components/Application.js.map +1 -1
- package/dist/components/ApplicationScope.d.ts +8 -0
- package/dist/components/ApplicationScope.js +7 -0
- package/dist/components/ApplicationScope.js.map +1 -1
- package/dist/components/EntryHandler.js +26 -10
- package/dist/components/EntryHandler.js.map +1 -1
- package/dist/components/OptionsWatcher.d.ts +4 -0
- package/dist/components/OptionsWatcher.js +440 -99
- package/dist/components/OptionsWatcher.js.map +1 -1
- package/dist/components/RuntimeModuleTracker.js +40 -6
- package/dist/components/RuntimeModuleTracker.js.map +1 -1
- package/dist/components/Scope.js +52 -13
- package/dist/components/Scope.js.map +1 -1
- package/dist/components/awaitRestart.d.ts +33 -0
- package/dist/components/awaitRestart.js +61 -0
- package/dist/components/awaitRestart.js.map +1 -0
- package/dist/components/componentLoader.d.ts +38 -1
- package/dist/components/componentLoader.js +313 -24
- package/dist/components/componentLoader.js.map +1 -1
- package/dist/components/componentPreparationLock.d.ts +5 -0
- package/dist/components/componentPreparationLock.js +14 -6
- package/dist/components/componentPreparationLock.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/adapters/harperHttp.js +4 -0
- package/dist/components/mcp/adapters/harperHttp.js.map +1 -1
- package/dist/components/mcp/listChanged.js +5 -0
- package/dist/components/mcp/listChanged.js.map +1 -1
- package/dist/components/mcp/toolRegistry.d.ts +1 -0
- package/dist/components/mcp/toolRegistry.js.map +1 -1
- package/dist/components/mcp/tools/operations.d.ts +5 -0
- package/dist/components/mcp/tools/operations.js +9 -0
- package/dist/components/mcp/tools/operations.js.map +1 -1
- package/dist/components/mcp/tools/schemas/operationDescriptions.js +2 -2
- package/dist/components/mcp/tools/schemas/operationDescriptions.js.map +1 -1
- package/dist/components/operations.d.ts +28 -0
- package/dist/components/operations.js +476 -113
- package/dist/components/operations.js.map +1 -1
- package/dist/components/operationsValidation.js +97 -3
- 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/components/status/ComponentStatusRegistry.d.ts +0 -4
- package/dist/components/status/ComponentStatusRegistry.js +63 -0
- package/dist/components/status/ComponentStatusRegistry.js.map +1 -1
- package/dist/config/RootConfigWatcher.d.ts +9 -1
- package/dist/config/RootConfigWatcher.js +228 -37
- 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 +11 -2
- package/dist/config/configUtils.js +304 -47
- package/dist/config/configUtils.js.map +1 -1
- package/dist/config/harperConfigEnvVars.d.ts +16 -0
- package/dist/config/harperConfigEnvVars.js +162 -25
- package/dist/config/harperConfigEnvVars.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/blobBackup.d.ts +49 -20
- package/dist/dataLayer/blobBackup.js +139 -50
- package/dist/dataLayer/blobBackup.js.map +1 -1
- package/dist/dataLayer/delete.js +1 -1
- package/dist/dataLayer/delete.js.map +1 -1
- package/dist/dataLayer/harperBridge/ResourceBridge.d.ts +14 -1
- package/dist/dataLayer/harperBridge/ResourceBridge.js +72 -12
- package/dist/dataLayer/harperBridge/ResourceBridge.js.map +1 -1
- package/dist/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.d.ts +3 -1
- package/dist/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js +3 -1
- package/dist/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js.map +1 -1
- package/dist/dataLayer/hdbInfoController.d.ts +10 -0
- package/dist/dataLayer/hdbInfoController.js +30 -1
- package/dist/dataLayer/hdbInfoController.js.map +1 -1
- package/dist/dataLayer/insert.d.ts +9 -1
- package/dist/dataLayer/insert.js +30 -0
- package/dist/dataLayer/insert.js.map +1 -1
- package/dist/dataLayer/rocksdbBackup.d.ts +2 -2
- package/dist/dataLayer/rocksdbBackup.js +45 -8
- package/dist/dataLayer/rocksdbBackup.js.map +1 -1
- package/dist/dataLayer/schema.js +8 -0
- package/dist/dataLayer/schema.js.map +1 -1
- package/dist/dataLayer/schemaDescribe.js +8 -1
- package/dist/dataLayer/schemaDescribe.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/json/systemSchema.json +55 -0
- package/dist/resources/DatabaseTransaction.d.ts +77 -0
- package/dist/resources/DatabaseTransaction.js +586 -54
- package/dist/resources/DatabaseTransaction.js.map +1 -1
- package/dist/resources/LMDBTransaction.d.ts +2 -1
- package/dist/resources/LMDBTransaction.js +43 -6
- package/dist/resources/LMDBTransaction.js.map +1 -1
- package/dist/resources/PrimaryRocksDatabase.d.ts +1 -0
- package/dist/resources/PrimaryRocksDatabase.js +49 -5
- package/dist/resources/PrimaryRocksDatabase.js.map +1 -1
- package/dist/resources/RecordEncoder.d.ts +20 -0
- package/dist/resources/RecordEncoder.js +110 -9
- package/dist/resources/RecordEncoder.js.map +1 -1
- package/dist/resources/RequestTarget.d.ts +2 -0
- package/dist/resources/RequestTarget.js.map +1 -1
- package/dist/resources/Resource.js +117 -24
- package/dist/resources/Resource.js.map +1 -1
- package/dist/resources/ResourceInterface.d.ts +28 -1
- package/dist/resources/ResourceInterface.js.map +1 -1
- package/dist/resources/RocksIndexStore.d.ts +6 -1
- package/dist/resources/RocksIndexStore.js +24 -9
- package/dist/resources/RocksIndexStore.js.map +1 -1
- package/dist/resources/RocksTransactionLogStore.d.ts +24 -1
- package/dist/resources/RocksTransactionLogStore.js +160 -49
- package/dist/resources/RocksTransactionLogStore.js.map +1 -1
- package/dist/resources/Table.d.ts +165 -10
- package/dist/resources/Table.js +1805 -303
- package/dist/resources/Table.js.map +1 -1
- package/dist/resources/analytics/write.js +10 -3
- package/dist/resources/analytics/write.js.map +1 -1
- package/dist/resources/auditStore.d.ts +181 -2
- package/dist/resources/auditStore.js +640 -29
- package/dist/resources/auditStore.js.map +1 -1
- package/dist/resources/blob.d.ts +129 -9
- package/dist/resources/blob.js +992 -114
- package/dist/resources/blob.js.map +1 -1
- package/dist/resources/branchDatabase.d.ts +48 -0
- package/dist/resources/branchDatabase.js +892 -0
- package/dist/resources/branchDatabase.js.map +1 -0
- package/dist/resources/crdt.js +50 -12
- 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 +157 -14
- package/dist/resources/databases.js +1462 -325
- package/dist/resources/databases.js.map +1 -1
- package/dist/resources/defineTable.d.ts +10 -2
- package/dist/resources/defineTable.js +9 -1
- package/dist/resources/defineTable.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.d.ts +1 -1
- package/dist/resources/graphql.js +52 -16
- package/dist/resources/graphql.js.map +1 -1
- package/dist/resources/indexes/HierarchicalNavigableSmallWorld.d.ts +103 -9
- package/dist/resources/indexes/HierarchicalNavigableSmallWorld.js +854 -41
- package/dist/resources/indexes/HierarchicalNavigableSmallWorld.js.map +1 -1
- 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/longLivedTransactions.d.ts +71 -0
- package/dist/resources/longLivedTransactions.js +358 -0
- package/dist/resources/longLivedTransactions.js.map +1 -0
- package/dist/resources/models/backendRegistry.d.ts +26 -0
- package/dist/resources/models/backendRegistry.js +60 -2
- package/dist/resources/models/backendRegistry.js.map +1 -1
- package/dist/resources/models/bootstrap.d.ts +33 -1
- package/dist/resources/models/bootstrap.js +416 -31
- package/dist/resources/models/bootstrap.js.map +1 -1
- 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 +123 -0
- package/dist/resources/recordLock.js +315 -0
- package/dist/resources/recordLock.js.map +1 -0
- package/dist/resources/recordLockCoordinator.d.ts +557 -0
- package/dist/resources/recordLockCoordinator.js +2565 -0
- package/dist/resources/recordLockCoordinator.js.map +1 -0
- package/dist/resources/replayLogs.d.ts +14 -1
- package/dist/resources/replayLogs.js +157 -24
- package/dist/resources/replayLogs.js.map +1 -1
- package/dist/resources/replayLogsGuards.d.ts +94 -7
- package/dist/resources/replayLogsGuards.js +111 -7
- package/dist/resources/replayLogsGuards.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 +283 -37
- 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.d.ts +1 -1
- package/dist/resources/transactionBroadcast.js +2 -2
- package/dist/resources/transactionBroadcast.js.map +1 -1
- package/dist/security/auth.js +61 -30
- package/dist/security/auth.js.map +1 -1
- package/dist/security/authn/oidc/claims.d.ts +22 -0
- package/dist/security/authn/oidc/claims.js +71 -0
- package/dist/security/authn/oidc/claims.js.map +1 -0
- package/dist/security/authn/oidc/identityToken.d.ts +27 -0
- package/dist/security/authn/oidc/identityToken.js +111 -0
- package/dist/security/authn/oidc/identityToken.js.map +1 -0
- package/dist/security/authn/oidc/jwks.d.ts +25 -0
- package/dist/security/authn/oidc/jwks.js +261 -0
- package/dist/security/authn/oidc/jwks.js.map +1 -0
- package/dist/security/authn/oidc/providers/generic.d.ts +13 -0
- package/dist/security/authn/oidc/providers/generic.js +34 -0
- package/dist/security/authn/oidc/providers/generic.js.map +1 -0
- package/dist/security/authn/oidc/providers/githubActions.d.ts +11 -0
- package/dist/security/authn/oidc/providers/githubActions.js +129 -0
- package/dist/security/authn/oidc/providers/githubActions.js.map +1 -0
- package/dist/security/authn/oidc/providers/index.d.ts +37 -0
- package/dist/security/authn/oidc/providers/index.js +24 -0
- package/dist/security/authn/oidc/providers/index.js.map +1 -0
- package/dist/security/authn/oidc/tokenExchange.d.ts +12 -0
- package/dist/security/authn/oidc/tokenExchange.js +306 -0
- package/dist/security/authn/oidc/tokenExchange.js.map +1 -0
- package/dist/security/authn/oidc/trustPolicyOperations.d.ts +49 -0
- package/dist/security/authn/oidc/trustPolicyOperations.js +358 -0
- package/dist/security/authn/oidc/trustPolicyOperations.js.map +1 -0
- package/dist/security/authn/oidc/types.d.ts +38 -0
- package/dist/security/authn/oidc/types.js +6 -0
- package/dist/security/authn/oidc/types.js.map +1 -0
- package/dist/security/certificateVerification/index.js +40 -11
- package/dist/security/certificateVerification/index.js.map +1 -1
- package/dist/security/certificateVerification/trustedIssuers.d.ts +24 -0
- package/dist/security/certificateVerification/trustedIssuers.js +79 -0
- package/dist/security/certificateVerification/trustedIssuers.js.map +1 -0
- package/dist/security/certificateVerification/types.d.ts +1 -0
- package/dist/security/credentialProvenance.d.ts +35 -0
- package/dist/security/credentialProvenance.js +51 -0
- package/dist/security/credentialProvenance.js.map +1 -0
- package/dist/security/credentialRejection.d.ts +4 -0
- package/dist/security/credentialRejection.js +24 -0
- package/dist/security/credentialRejection.js.map +1 -0
- package/dist/security/deferredAuthentication.d.ts +36 -0
- package/dist/security/deferredAuthentication.js +70 -0
- package/dist/security/deferredAuthentication.js.map +1 -0
- package/dist/security/impersonation.d.ts +21 -0
- package/dist/security/impersonation.js +108 -9
- package/dist/security/impersonation.js.map +1 -1
- package/dist/security/jsLoader.d.ts +6 -0
- package/dist/security/jsLoader.js +77 -15
- package/dist/security/jsLoader.js.map +1 -1
- package/dist/security/keys.js +301 -71
- package/dist/security/keys.js.map +1 -1
- package/dist/security/operationScope.d.ts +21 -0
- package/dist/security/operationScope.js +36 -0
- package/dist/security/operationScope.js.map +1 -0
- package/dist/security/permissionsTranslator.js +21 -0
- package/dist/security/permissionsTranslator.js.map +1 -1
- package/dist/security/tokenAuthentication.d.ts +19 -1
- package/dist/security/tokenAuthentication.js +191 -10
- package/dist/security/tokenAuthentication.js.map +1 -1
- package/dist/security/user.js +4 -3
- package/dist/security/user.js.map +1 -1
- package/dist/server/DurableSubscriptionsSession.d.ts +2 -2
- package/dist/server/DurableSubscriptionsSession.js +67 -10
- package/dist/server/DurableSubscriptionsSession.js.map +1 -1
- package/dist/server/REST.js +106 -2
- package/dist/server/REST.js.map +1 -1
- package/dist/server/graphqlQuerying.js +4 -0
- package/dist/server/graphqlQuerying.js.map +1 -1
- package/dist/server/http.d.ts +16 -1
- package/dist/server/http.js +122 -17
- package/dist/server/http.js.map +1 -1
- package/dist/server/itc/serverHandlers.js +8 -1
- package/dist/server/itc/serverHandlers.js.map +1 -1
- package/dist/server/jobs/jobProcess.js +6 -2
- package/dist/server/jobs/jobProcess.js.map +1 -1
- package/dist/server/jobs/jobs.js +4 -1
- package/dist/server/jobs/jobs.js.map +1 -1
- package/dist/server/liveSubscriptionAuth.d.ts +26 -4
- package/dist/server/liveSubscriptionAuth.js +105 -39
- package/dist/server/liveSubscriptionAuth.js.map +1 -1
- package/dist/server/loadRootComponents.js +49 -10
- package/dist/server/loadRootComponents.js.map +1 -1
- package/dist/server/mqtt.d.ts +2 -0
- package/dist/server/mqtt.js +165 -30
- package/dist/server/mqtt.js.map +1 -1
- package/dist/server/nodeName.d.ts +2 -0
- package/dist/server/nodeName.js +107 -23
- package/dist/server/nodeName.js.map +1 -1
- package/dist/server/serverHelpers/Headers.d.ts +27 -0
- package/dist/server/serverHelpers/Headers.js +145 -1
- 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 +11 -0
- package/dist/server/serverHelpers/contentTypes.js +221 -40
- package/dist/server/serverHelpers/contentTypes.js.map +1 -1
- package/dist/server/serverHelpers/deployValidationState.d.ts +3 -0
- package/dist/server/serverHelpers/deployValidationState.js +9 -19
- package/dist/server/serverHelpers/deployValidationState.js.map +1 -1
- package/dist/server/serverHelpers/operationAuthorizationState.d.ts +12 -0
- package/dist/server/serverHelpers/operationAuthorizationState.js +24 -2
- package/dist/server/serverHelpers/operationAuthorizationState.js.map +1 -1
- package/dist/server/serverHelpers/registeredOperations.d.ts +5 -4
- package/dist/server/serverHelpers/registeredOperations.js +74 -21
- package/dist/server/serverHelpers/registeredOperations.js.map +1 -1
- package/dist/server/serverHelpers/requestSanitization.d.ts +11 -0
- package/dist/server/serverHelpers/requestSanitization.js +20 -0
- package/dist/server/serverHelpers/requestSanitization.js.map +1 -0
- package/dist/server/serverHelpers/serverHandlers.js +6 -3
- package/dist/server/serverHelpers/serverHandlers.js.map +1 -1
- package/dist/server/serverHelpers/serverUtilities.d.ts +18 -0
- package/dist/server/serverHelpers/serverUtilities.js +178 -29
- package/dist/server/serverHelpers/serverUtilities.js.map +1 -1
- package/dist/server/serverHelpers/sharedMessageEncoding.d.ts +67 -0
- package/dist/server/serverHelpers/sharedMessageEncoding.js +280 -0
- package/dist/server/serverHelpers/sharedMessageEncoding.js.map +1 -0
- package/dist/server/serverHelpers/uwsServer.js +19 -1
- package/dist/server/serverHelpers/uwsServer.js.map +1 -1
- package/dist/server/static.js +24 -28
- package/dist/server/static.js.map +1 -1
- package/dist/server/storageReclamation.d.ts +5 -0
- package/dist/server/storageReclamation.js +17 -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/itc.d.ts +7 -2
- package/dist/server/threads/itc.js +5 -1
- package/dist/server/threads/itc.js.map +1 -1
- 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 +83 -3
- package/dist/server/threads/manageThreads.js +769 -75
- package/dist/server/threads/manageThreads.js.map +1 -1
- package/dist/server/threads/socketRouter.d.ts +1 -0
- package/dist/server/threads/socketRouter.js +277 -31
- package/dist/server/threads/socketRouter.js.map +1 -1
- package/dist/server/threads/threadHeapMemory.d.ts +2 -0
- package/dist/server/threads/threadHeapMemory.js +31 -0
- package/dist/server/threads/threadHeapMemory.js.map +1 -0
- package/dist/server/threads/threadServer.js +76 -22
- package/dist/server/threads/threadServer.js.map +1 -1
- package/dist/sqlEngine/config.d.ts +1 -3
- package/dist/sqlEngine/config.js +19 -16
- package/dist/sqlEngine/config.js.map +1 -1
- package/dist/sqlTranslator/index.d.ts +1 -1
- package/dist/sqlTranslator/index.js +30 -7
- package/dist/sqlTranslator/index.js.map +1 -1
- package/dist/upgrade/directives/5-3-0.d.ts +7 -0
- package/dist/upgrade/directives/5-3-0.js +148 -0
- package/dist/upgrade/directives/5-3-0.js.map +1 -0
- package/dist/upgrade/directives/directivesController.js +2 -1
- package/dist/upgrade/directives/directivesController.js.map +1 -1
- package/dist/utility/OperationFunctionCaller.js +2 -1
- package/dist/utility/OperationFunctionCaller.js.map +1 -1
- package/dist/utility/common_utils.d.ts +16 -0
- package/dist/utility/common_utils.js +32 -6
- package/dist/utility/common_utils.js.map +1 -1
- package/dist/utility/componentNames.d.ts +8 -0
- package/dist/utility/componentNames.js +12 -1
- package/dist/utility/componentNames.js.map +1 -1
- package/dist/utility/environment/environmentManager.js +3 -6
- package/dist/utility/environment/environmentManager.js.map +1 -1
- package/dist/utility/environment/systemInformation.d.ts +1 -0
- package/dist/utility/environment/systemInformation.js +1 -0
- package/dist/utility/environment/systemInformation.js.map +1 -1
- package/dist/utility/errors/commonErrors.d.ts +2 -0
- package/dist/utility/errors/commonErrors.js +2 -0
- package/dist/utility/errors/commonErrors.js.map +1 -1
- package/dist/utility/errors/hdbError.d.ts +33 -0
- package/dist/utility/errors/hdbError.js +58 -1
- package/dist/utility/errors/hdbError.js.map +1 -1
- package/dist/utility/globalSchema.d.ts +18 -0
- package/dist/utility/hdbTerms.d.ts +18 -0
- package/dist/utility/hdbTerms.js +20 -2
- package/dist/utility/hdbTerms.js.map +1 -1
- package/dist/utility/logging/harper_logger.d.ts +2 -0
- package/dist/utility/logging/harper_logger.js +286 -30
- 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 +192 -85
- package/dist/utility/logging/logRotator.js.map +1 -1
- package/dist/utility/nodeIdentity.d.ts +9 -0
- package/dist/utility/nodeIdentity.js +58 -0
- package/dist/utility/nodeIdentity.js.map +1 -0
- package/dist/utility/npmUtilities.js +11 -7
- package/dist/utility/npmUtilities.js.map +1 -1
- package/dist/utility/operationPermissions.d.ts +3 -1
- package/dist/utility/operationPermissions.js +16 -1
- package/dist/utility/operationPermissions.js.map +1 -1
- package/dist/utility/operation_authorization.d.ts +10 -7
- package/dist/utility/operation_authorization.js +212 -41
- package/dist/utility/operation_authorization.js.map +1 -1
- package/dist/utility/watchPath.d.ts +29 -0
- package/dist/utility/watchPath.js +68 -0
- package/dist/utility/watchPath.js.map +1 -0
- package/dist/utility/watcherFallback.d.ts +41 -0
- package/dist/utility/watcherFallback.js +153 -0
- package/dist/utility/watcherFallback.js.map +1 -1
- package/dist/validation/configValidator.d.ts +12 -0
- package/dist/validation/configValidator.js +205 -75
- package/dist/validation/configValidator.js.map +1 -1
- package/dist/validation/installValidator.js +12 -0
- package/dist/validation/installValidator.js.map +1 -1
- package/dist/validation/validationWrapper.d.ts +11 -0
- package/dist/validation/validationWrapper.js +16 -3
- package/dist/validation/validationWrapper.js.map +1 -1
- package/index.ts +8 -0
- package/json/systemSchema.json +55 -0
- package/npm-shrinkwrap.json +286 -194
- package/package.json +15 -7
- package/resources/DESIGN.md +219 -52
- package/resources/DatabaseTransaction.ts +657 -52
- package/resources/LMDBTransaction.ts +46 -6
- package/resources/PrimaryRocksDatabase.ts +46 -7
- package/resources/RecordEncoder.ts +124 -9
- package/resources/RequestTarget.ts +2 -0
- package/resources/Resource.ts +114 -22
- package/resources/ResourceInterface.ts +31 -0
- package/resources/RocksIndexStore.ts +30 -9
- package/resources/RocksTransactionLogStore.ts +188 -51
- package/resources/Table.ts +1960 -301
- package/resources/analytics/write.ts +10 -3
- package/resources/auditStore.ts +647 -32
- package/resources/blob.ts +1029 -110
- package/resources/branchDatabase.ts +941 -0
- package/resources/crdt.ts +76 -12
- package/resources/dataLoader.ts +3 -4
- package/resources/databases.ts +1584 -320
- package/resources/defineTable.ts +18 -2
- package/resources/derivedIndexRegistry.ts +56 -0
- package/resources/derivedIndexRuntime.ts +2292 -0
- package/resources/graphql.ts +72 -17
- package/resources/indexes/HierarchicalNavigableSmallWorld.ts +911 -48
- package/resources/indexes/hnswDerivedIndex.ts +531 -0
- package/resources/indexes/hnswPlaneBinding.ts +174 -0
- package/resources/longLivedTransactions.ts +360 -0
- package/resources/models/backendRegistry.ts +84 -2
- package/resources/models/bootstrap.ts +473 -28
- package/resources/nodeIdMapping.ts +50 -0
- package/resources/recordLock.ts +419 -0
- package/resources/recordLockCoordinator.ts +3043 -0
- package/resources/replayLogs.ts +152 -26
- package/resources/replayLogsGuards.ts +171 -8
- package/resources/replicatedApplyFailure.ts +77 -0
- package/resources/scheduler/scheduler.ts +4 -4
- package/resources/search.ts +288 -46
- package/resources/tracked.ts +73 -22
- package/resources/transactionBroadcast.ts +3 -3
- package/security/auth.ts +68 -29
- package/security/authn/oidc/claims.ts +72 -0
- package/security/authn/oidc/identityToken.ts +129 -0
- package/security/authn/oidc/jwks.ts +260 -0
- package/security/authn/oidc/providers/generic.ts +40 -0
- package/security/authn/oidc/providers/githubActions.ts +137 -0
- package/security/authn/oidc/providers/index.ts +52 -0
- package/security/authn/oidc/tokenExchange.ts +300 -0
- package/security/authn/oidc/trustPolicyOperations.ts +343 -0
- package/security/authn/oidc/types.ts +41 -0
- package/security/certificateVerification/index.ts +54 -13
- package/security/certificateVerification/trustedIssuers.ts +76 -0
- package/security/certificateVerification/types.ts +1 -0
- package/security/credentialProvenance.ts +47 -0
- package/security/credentialRejection.ts +22 -0
- package/security/deferredAuthentication.ts +71 -0
- package/security/impersonation.ts +117 -12
- package/security/jsLoader.ts +83 -18
- package/security/keys.ts +298 -72
- package/security/operationScope.ts +33 -0
- package/security/permissionsTranslator.js +23 -0
- package/security/tokenAuthentication.ts +233 -12
- package/security/user.ts +4 -3
- package/server/DESIGN.md +194 -16
- package/server/DurableSubscriptionsSession.ts +71 -11
- package/server/REST.ts +115 -4
- package/server/graphqlQuerying.ts +4 -0
- package/server/http.ts +133 -20
- package/server/itc/serverHandlers.js +8 -1
- package/server/jobs/jobProcess.ts +8 -2
- package/server/jobs/jobs.ts +4 -1
- package/server/liveSubscriptionAuth.ts +129 -46
- package/server/loadRootComponents.js +50 -8
- package/server/mqtt.ts +179 -38
- package/server/nodeName.ts +103 -21
- package/server/serverHelpers/Headers.ts +135 -0
- package/server/serverHelpers/NodeAdapterResponse.ts +221 -0
- package/server/serverHelpers/Request.ts +33 -131
- package/server/serverHelpers/contentTypes.ts +217 -36
- package/server/serverHelpers/deployValidationState.ts +24 -13
- package/server/serverHelpers/operationAuthorizationState.ts +34 -3
- package/server/serverHelpers/registeredOperations.ts +79 -22
- package/server/serverHelpers/requestSanitization.ts +15 -0
- package/server/serverHelpers/serverHandlers.js +6 -3
- package/server/serverHelpers/serverUtilities.ts +232 -40
- package/server/serverHelpers/sharedMessageEncoding.ts +307 -0
- package/server/serverHelpers/uwsServer.ts +17 -2
- package/server/static.ts +23 -29
- package/server/storageReclamation.ts +15 -2
- package/server/threads/isolatedApplications.ts +157 -0
- package/server/threads/itc.js +11 -1
- package/server/threads/logRotationTransport.ts +40 -0
- package/server/threads/manageThreads.js +771 -66
- package/server/threads/socketRouter.ts +291 -30
- package/server/threads/threadHeapMemory.ts +26 -0
- package/server/threads/threadServer.js +73 -22
- package/sqlTranslator/index.ts +31 -8
- package/studio/web/assets/{Chat-4RrB5134.js → Chat-D3j-1yY1.js} +1 -1
- package/studio/web/assets/{FloatingChat-omlNMDcJ.js → FloatingChat-BxJGYcfB.js} +3 -3
- package/studio/web/assets/{apiToken-Bke3wvfZ.js → apiToken-CT55oWOe.js} +1 -1
- package/studio/web/assets/{applications-DvFDYJgK.js → applications-D9Ct9_vm.js} +1 -1
- package/studio/web/assets/{cssMode-C1vRa7zh.js → cssMode-DV8H7VwA.js} +1 -1
- package/studio/web/assets/{editor-3XRWEDWX.js → editor-uatc0unt.js} +1 -1
- package/studio/web/assets/{html-CTY5tdMr.js → html-Bm6D6paN.js} +1 -1
- package/studio/web/assets/{htmlMode-CG1vSD9t.js → htmlMode-CEn7tpLG.js} +1 -1
- package/studio/web/assets/{index-Dfpeofdu.js → index-BIXW6Pu4.js} +5 -5
- package/studio/web/assets/{index.lazy-B1VOIv-t.js → index.lazy-UI7L-Vrk.js} +1 -1
- package/studio/web/assets/{javascript-CJeJzGnI.js → javascript-CJ0G3AFZ.js} +1 -1
- package/studio/web/assets/{jsonMode-CYPBwM82.js → jsonMode-DQADAYEa.js} +1 -1
- package/studio/web/assets/{languageServices-IKH4GUHl.js → languageServices-CAQJXWcI.js} +1 -1
- package/studio/web/assets/{lspLanguageFeatures-BC8_gxKG.js → lspLanguageFeatures-CCQ8P5sY.js} +1 -1
- package/studio/web/assets/{notifications-BfKBpYcq.js → notifications-BbxTU6Aw.js} +1 -1
- package/studio/web/assets/{notifications-DFbArTfC.js → notifications-Cvb3P1lB.js} +1 -1
- package/studio/web/assets/{profile-Q4-T6c-S.js → profile-Yyb7gsvL.js} +1 -1
- package/studio/web/assets/{regions-CtkV0xje.js → regions-OgjGHlU5.js} +1 -1
- package/studio/web/assets/{register-1ZZuMsiA.js → register-6qwNEOY3.js} +2 -2
- package/studio/web/assets/{setComponentFile-ZWLcWv5X.js → setComponentFile-BilDMtgB.js} +1 -1
- package/studio/web/assets/{setup-DWprJyJy.js → setup-J6qJ7OIU.js} +2 -2
- package/studio/web/assets/{status--aNm8isn.js → status-0RWGcfyD.js} +1 -1
- package/studio/web/assets/{toggleHighContrast-Cq_lt3XD.js → toggleHighContrast-BIn-vErT.js} +1 -1
- package/studio/web/assets/{tsMode-pjgytARx.js → tsMode-DgUXku4d.js} +1 -1
- package/studio/web/assets/{typescript-Cdg0mqUh.js → typescript-C9orXcsM.js} +1 -1
- package/studio/web/assets/{useEntityRestURL-RZhaY8Rn.js → useEntityRestURL-BEoXXbUB.js} +1 -1
- package/studio/web/assets/{workers-BgoXIqQe.js → workers-JVzSDmgx.js} +1 -1
- package/studio/web/assets/{xml-BwSeDMiP.js → xml-Cq-S8S4X.js} +1 -1
- package/studio/web/assets/{yaml-DotCUG5l.js → yaml-sfoRdh1M.js} +1 -1
- package/studio/web/index.html +1 -1
- package/upgrade/directives/5-3-0.ts +132 -0
- package/upgrade/directives/directivesController.ts +2 -1
- package/utility/OperationFunctionCaller.ts +2 -1
- package/utility/common_utils.ts +30 -5
- package/utility/componentNames.ts +12 -0
- package/utility/environment/environmentManager.ts +3 -7
- package/utility/environment/systemInformation.ts +7 -0
- package/utility/errors/commonErrors.ts +4 -0
- package/utility/errors/hdbError.ts +57 -0
- package/utility/hdbTerms.ts +19 -0
- package/utility/logging/harper_logger.ts +278 -26
- package/utility/logging/logGenerationCoordinator.ts +196 -0
- package/utility/logging/logRotation.ts +367 -0
- package/utility/logging/logRotator.ts +213 -81
- package/utility/nodeIdentity.ts +45 -0
- package/utility/npmUtilities.ts +12 -8
- package/utility/operationPermissions.ts +18 -1
- package/utility/operation_authorization.ts +231 -42
- package/utility/watchPath.ts +63 -0
- package/utility/watcherFallback.ts +148 -0
- package/validation/configValidator.ts +215 -75
- package/validation/installValidator.ts +15 -0
- package/validation/validationWrapper.ts +18 -4
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readConfigFileSync = readConfigFileSync;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
// Why root config reads must not be async, and why this budget is shared rather than per call:
|
|
6
|
+
// see "Root config watchers must read synchronously" in DESIGN.md (harper#2191).
|
|
7
|
+
const READ_RETRY_BUDGET_MS = 500;
|
|
8
|
+
const READ_RETRY_INITIAL_DELAY_MS = 10;
|
|
9
|
+
const READ_RETRY_MAX_DELAY_MS = 100;
|
|
10
|
+
const readRetrySleepBuffer = new Int32Array(new SharedArrayBuffer(4));
|
|
11
|
+
const retryDeadlines = new Map();
|
|
12
|
+
// A caller that already owns a retry ladder passes `waitForLock` false, so one lock costs one
|
|
13
|
+
// blocking window in total rather than one per rung.
|
|
14
|
+
function readConfigFileSync(filePath, waitForLock = true) {
|
|
15
|
+
let delayMs = READ_RETRY_INITIAL_DELAY_MS;
|
|
16
|
+
while (true) {
|
|
17
|
+
try {
|
|
18
|
+
const contents = (0, node_fs_1.readFileSync)(filePath, 'utf-8');
|
|
19
|
+
retryDeadlines.delete(filePath);
|
|
20
|
+
return contents;
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
const remainingBudgetMs = waitForLock && isSharingViolation(error) ? remainingRetryBudgetMs(filePath) : 0;
|
|
24
|
+
if (remainingBudgetMs <= 0)
|
|
25
|
+
throw error;
|
|
26
|
+
Atomics.wait(readRetrySleepBuffer, 0, 0, Math.min(delayMs, remainingBudgetMs));
|
|
27
|
+
delayMs = Math.min(delayMs * 2, READ_RETRY_MAX_DELAY_MS);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function isSharingViolation(error) {
|
|
32
|
+
if (process.platform !== 'win32')
|
|
33
|
+
return false;
|
|
34
|
+
const code = error?.code;
|
|
35
|
+
return code === 'EPERM' || code === 'EACCES' || code === 'EBUSY';
|
|
36
|
+
}
|
|
37
|
+
function remainingRetryBudgetMs(filePath) {
|
|
38
|
+
const now = performance.now();
|
|
39
|
+
let deadline = retryDeadlines.get(filePath);
|
|
40
|
+
// A deadline more than one budget past its expiry belongs to an earlier burst, not this one.
|
|
41
|
+
if (deadline === undefined || now - deadline > READ_RETRY_BUDGET_MS) {
|
|
42
|
+
deadline = now + READ_RETRY_BUDGET_MS;
|
|
43
|
+
retryDeadlines.set(filePath, deadline);
|
|
44
|
+
}
|
|
45
|
+
return deadline - now;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=readConfigFileSync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readConfigFileSync.js","sourceRoot":"","sources":["../../config/readConfigFileSync.ts"],"names":[],"mappings":";;AAYA,gDAcC;AA1BD,qCAAuC;AAEvC,+FAA+F;AAC/F,iFAAiF;AACjF,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,2BAA2B,GAAG,EAAE,CAAC;AACvC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AACpC,MAAM,oBAAoB,GAAG,IAAI,UAAU,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEjD,8FAA8F;AAC9F,qDAAqD;AACrD,SAAgB,kBAAkB,CAAC,QAAgB,EAAE,cAAuB,IAAI;IAC/E,IAAI,OAAO,GAAG,2BAA2B,CAAC;IAC1C,OAAO,IAAI,EAAE,CAAC;QACb,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,IAAA,sBAAY,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACjD,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAChC,OAAO,QAAQ,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,iBAAiB,GAAG,WAAW,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1G,IAAI,iBAAiB,IAAI,CAAC;gBAAE,MAAM,KAAK,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;YAC/E,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,uBAAuB,CAAC,CAAC;QAC1D,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACzC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAC/C,MAAM,IAAI,GAAI,KAAkC,EAAE,IAAI,CAAC;IACvD,OAAO,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,OAAO,CAAC;AAClE,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAgB;IAC/C,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAC9B,IAAI,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5C,6FAA6F;IAC7F,IAAI,QAAQ,KAAK,SAAS,IAAI,GAAG,GAAG,QAAQ,GAAG,oBAAoB,EAAE,CAAC;QACrE,QAAQ,GAAG,GAAG,GAAG,oBAAoB,CAAC;QACtC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,QAAQ,GAAG,GAAG,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare function armGraceMs(platform?: string): number;
|
|
2
|
+
/**
|
|
3
|
+
* The gate a config watcher opens when its chokidar watcher is really watching: the initial scan
|
|
4
|
+
* has finished *and* the platform's kernel-side warm-up has had its grace. Shared by
|
|
5
|
+
* `RootConfigWatcher` and `OptionsWatcher` because both read the config synchronously, which is
|
|
6
|
+
* what exposes the unarmed window in the first place.
|
|
7
|
+
*/
|
|
8
|
+
export declare class ArmGate {
|
|
9
|
+
#private;
|
|
10
|
+
constructor(graceMs?: number);
|
|
11
|
+
get armed(): boolean;
|
|
12
|
+
arm(onArmed: () => void): void;
|
|
13
|
+
cancel(): void;
|
|
14
|
+
reset(): void;
|
|
15
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ArmGate = void 0;
|
|
4
|
+
exports.armGraceMs = armGraceMs;
|
|
5
|
+
// See DESIGN.md, "`ready` means the watcher is armed". Platform is a parameter so a test on any
|
|
6
|
+
// host can pin the darwin value, rather than only observing its own.
|
|
7
|
+
function armGraceMs(platform = process.platform) {
|
|
8
|
+
return platform === 'darwin' ? 20 : 0;
|
|
9
|
+
}
|
|
10
|
+
const ARM_GRACE_MS = armGraceMs();
|
|
11
|
+
/**
|
|
12
|
+
* The gate a config watcher opens when its chokidar watcher is really watching: the initial scan
|
|
13
|
+
* has finished *and* the platform's kernel-side warm-up has had its grace. Shared by
|
|
14
|
+
* `RootConfigWatcher` and `OptionsWatcher` because both read the config synchronously, which is
|
|
15
|
+
* what exposes the unarmed window in the first place.
|
|
16
|
+
*/
|
|
17
|
+
class ArmGate {
|
|
18
|
+
#armed = false;
|
|
19
|
+
#timer;
|
|
20
|
+
#graceMs;
|
|
21
|
+
// Taken as an argument, not read from the module constant, so the timer branch below is
|
|
22
|
+
// reachable from a host whose own platform has no grace — unit tests are ubuntu-only.
|
|
23
|
+
constructor(graceMs = ARM_GRACE_MS) {
|
|
24
|
+
this.#graceMs = graceMs;
|
|
25
|
+
}
|
|
26
|
+
get armed() {
|
|
27
|
+
return this.#armed;
|
|
28
|
+
}
|
|
29
|
+
// Synchronous where the platform needs no grace, so a watcher with no warm-up to wait out
|
|
30
|
+
// keeps reading inside chokidar's own dispatch.
|
|
31
|
+
arm(onArmed) {
|
|
32
|
+
if (this.#armed || this.#timer)
|
|
33
|
+
return;
|
|
34
|
+
if (!this.#graceMs) {
|
|
35
|
+
this.#armed = true;
|
|
36
|
+
onArmed();
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
this.#timer = setTimeout(() => {
|
|
40
|
+
this.#timer = undefined;
|
|
41
|
+
this.#armed = true;
|
|
42
|
+
onArmed();
|
|
43
|
+
}, this.#graceMs);
|
|
44
|
+
}
|
|
45
|
+
// Drops a grace still counting down, for a watcher that is closing.
|
|
46
|
+
cancel() {
|
|
47
|
+
clearTimeout(this.#timer);
|
|
48
|
+
this.#timer = undefined;
|
|
49
|
+
}
|
|
50
|
+
// A replacement watcher has its own scan and its own unarmed window, so the gate arms again
|
|
51
|
+
// with it: for a file that is *absent* when the replacement scans, chokidar reports `ready` and
|
|
52
|
+
// nothing else, and the arming re-read is the only thing that would notice.
|
|
53
|
+
reset() {
|
|
54
|
+
this.cancel();
|
|
55
|
+
this.#armed = false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.ArmGate = ArmGate;
|
|
59
|
+
//# sourceMappingURL=watcherArming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcherArming.js","sourceRoot":"","sources":["../../config/watcherArming.ts"],"names":[],"mappings":";;;AAEA,gCAEC;AAJD,gGAAgG;AAChG,qEAAqE;AACrE,SAAgB,UAAU,CAAC,WAAmB,OAAO,CAAC,QAAQ;IAC7D,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,YAAY,GAAG,UAAU,EAAE,CAAC;AAElC;;;;;GAKG;AACH,MAAa,OAAO;IACnB,MAAM,GAAY,KAAK,CAAC;IACxB,MAAM,CAA6B;IACnC,QAAQ,CAAS;IAEjB,wFAAwF;IACxF,sFAAsF;IACtF,YAAY,UAAkB,YAAY;QACzC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,0FAA0F;IAC1F,gDAAgD;IAChD,GAAG,CAAC,OAAmB;QACtB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,OAAO,EAAE,CAAC;YACV,OAAO;QACR,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE;YAC7B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,OAAO,EAAE,CAAC;QACX,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC;IAED,oEAAoE;IACpE,MAAM;QACL,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IACzB,CAAC;IAED,4FAA4F;IAC5F,gGAAgG;IAChG,4EAA4E;IAC5E,KAAK;QACJ,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACrB,CAAC;CACD;AA5CD,0BA4CC"}
|
|
@@ -13,39 +13,68 @@
|
|
|
13
13
|
* possible (cheap, no extra space on the same filesystem) and copied otherwise (never symlinked, so
|
|
14
14
|
* a snapshot is a standalone set of files that survives independent of the live blob).
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
16
|
+
* Harper does not freeze blob writes for a backup, and a blob is written in place at its final path,
|
|
17
|
+
* so the walk can meet one that is still growing. Hard-linking that inode would put bytes in the
|
|
18
|
+
* snapshot that keep changing after it was taken. Every entry returned by the walk is therefore
|
|
19
|
+
* classified (`captureBlobFile`): a complete blob is linked, and one that becomes unavailable or is
|
|
20
|
+
* not yet complete is replaced by a marker rather than dropped. This closes the classify-to-capture
|
|
21
|
+
* race and keeps that file id reserved; a file reclaimed before its parent directory is read remains
|
|
22
|
+
* outside the snapshot.
|
|
21
23
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* bytes alive even after the live blob is deleted, and no in-place overwrite can retroactively alter
|
|
26
|
-
* a snapshot.
|
|
24
|
+
* Past that gate, hard-linking is safe against later mutation: each write takes a fresh monotonic
|
|
25
|
+
* file id, and an update, delete, or in-place repair replaces or unlinks the path rather than
|
|
26
|
+
* rewriting the inode.
|
|
27
27
|
*/
|
|
28
28
|
/** Directory holding all blob snapshots for a backup repository. */
|
|
29
29
|
export declare function blobsRootDir(backupDir: string): string;
|
|
30
30
|
/** Directory holding a single backup id's blob snapshot. */
|
|
31
31
|
export declare function blobSnapshotDir(backupDir: string, backupId: number): string;
|
|
32
|
+
/** What a substituted marker says happened, so a branch clone doesn't report itself as a backup. */
|
|
33
|
+
export interface CaptureMarkerReasons {
|
|
34
|
+
gone: string;
|
|
35
|
+
pending: string;
|
|
36
|
+
}
|
|
32
37
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
38
|
+
* Recursively copy every file under `srcRoot` into `destRoot` (hard-link-else-copy), preserving the
|
|
39
|
+
* relative directory structure. Missing `srcRoot` is a no-op (a database with no blobs yet).
|
|
40
|
+
*
|
|
41
|
+
* `classify` substitutes a marker for a file that is mid-write or already gone, so the destination
|
|
42
|
+
* fails loudly on that blob rather than carrying a truncated one. It belongs to the capture direction
|
|
43
|
+
* only; restore must replace exactly what the snapshot holds.
|
|
44
|
+
*
|
|
45
|
+
* Also used by branch materialization (harper#644), which clones a base's blob roots into the
|
|
46
|
+
* branch's own so the OS inode refcount does the reference counting. Its walk runs inside a window
|
|
47
|
+
* other threads wait on, which is what `onProgress` is for.
|
|
48
|
+
*/
|
|
49
|
+
export declare function copyTree(srcRoot: string, destRoot: string, classify?: boolean, reasons?: CaptureMarkerReasons, onProgress?: () => void): Promise<{
|
|
50
|
+
substituted: number;
|
|
51
|
+
captured: number;
|
|
52
|
+
copied: number;
|
|
53
|
+
}>;
|
|
54
|
+
/**
|
|
55
|
+
* Copy every blob root into `destDir` as `<rootIndex>/<relpath>`, hard-linking where possible.
|
|
56
|
+
* Writes to a temporary sibling and atomically renames into place so a run that fails mid-copy never
|
|
57
|
+
* leaves a partial directory a later restore would trust, and replaces any pre-existing `destDir`.
|
|
58
|
+
* Shared by managed-backup snapshots and `copy-db`'s standalone blob copy (harper#2048).
|
|
59
|
+
*/
|
|
60
|
+
export declare function copyBlobRootsByIndex(destDir: string, blobRoots: string[]): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Snapshot a database's blob roots into a backup's blob directory. Overwrites any pre-existing
|
|
63
|
+
* snapshot for the same id (create_backup always produces a fresh id, so this only matters on a
|
|
64
|
+
* retried offline run).
|
|
37
65
|
*/
|
|
38
66
|
export declare function snapshotBlobs(backupDir: string, backupId: number, blobRoots: string[]): Promise<void>;
|
|
39
67
|
/**
|
|
40
68
|
* Build the `blobs/README.md` documenting the blob snapshot layout, so an operator inspecting or
|
|
41
|
-
* hand-recovering a backup can decode the numeric directories.
|
|
42
|
-
* - managed (default): a create_backup repository, where snapshots are keyed by backup id
|
|
69
|
+
* hand-recovering a backup can decode the numeric directories. Three variants:
|
|
70
|
+
* - `managed` (default): a create_backup repository, where snapshots are keyed by backup id
|
|
43
71
|
* (`<backupId>/<rootIndex>/…`) and restore is automatic via `restore_backup`.
|
|
44
|
-
* -
|
|
45
|
-
*
|
|
72
|
+
* - `archive`: a downloaded `get_backup` tar, which holds a single snapshot with no backup-id level
|
|
73
|
+
* (`<rootIndex>/…`) and is restored by extracting the files back into the roots.
|
|
74
|
+
* - `copy`: the companion directory `copy-db` writes beside a database copy, restored by hand.
|
|
46
75
|
*/
|
|
47
|
-
export declare function blobsReadmeContent(blobRoots: string[], {
|
|
48
|
-
|
|
76
|
+
export declare function blobsReadmeContent(blobRoots: string[], { variant }?: {
|
|
77
|
+
variant?: 'managed' | 'archive' | 'copy';
|
|
49
78
|
}): string;
|
|
50
79
|
/**
|
|
51
80
|
* Write the `blobs/README.md` into a managed backup's `blobs/` directory. Best-effort: a failure to
|
|
@@ -5,6 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.blobsRootDir = blobsRootDir;
|
|
7
7
|
exports.blobSnapshotDir = blobSnapshotDir;
|
|
8
|
+
exports.copyTree = copyTree;
|
|
9
|
+
exports.copyBlobRootsByIndex = copyBlobRootsByIndex;
|
|
8
10
|
exports.snapshotBlobs = snapshotBlobs;
|
|
9
11
|
exports.blobsReadmeContent = blobsReadmeContent;
|
|
10
12
|
exports.writeBlobsReadme = writeBlobsReadme;
|
|
@@ -17,6 +19,7 @@ const promises_1 = require("node:fs/promises");
|
|
|
17
19
|
const node_path_1 = require("node:path");
|
|
18
20
|
const hdbError_ts_1 = require("../utility/errors/hdbError.js");
|
|
19
21
|
const harper_logger_ts_1 = __importDefault(require("../utility/logging/harper_logger.js"));
|
|
22
|
+
const blob_ts_1 = require("../resources/blob.js");
|
|
20
23
|
/**
|
|
21
24
|
* Managed-backup snapshotting of a database's file-backed blobs.
|
|
22
25
|
*
|
|
@@ -32,17 +35,17 @@ const harper_logger_ts_1 = __importDefault(require("../utility/logging/harper_lo
|
|
|
32
35
|
* possible (cheap, no extra space on the same filesystem) and copied otherwise (never symlinked, so
|
|
33
36
|
* a snapshot is a standalone set of files that survives independent of the live blob).
|
|
34
37
|
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
38
|
+
* Harper does not freeze blob writes for a backup, and a blob is written in place at its final path,
|
|
39
|
+
* so the walk can meet one that is still growing. Hard-linking that inode would put bytes in the
|
|
40
|
+
* snapshot that keep changing after it was taken. Every entry returned by the walk is therefore
|
|
41
|
+
* classified (`captureBlobFile`): a complete blob is linked, and one that becomes unavailable or is
|
|
42
|
+
* not yet complete is replaced by a marker rather than dropped. This closes the classify-to-capture
|
|
43
|
+
* race and keeps that file id reserved; a file reclaimed before its parent directory is read remains
|
|
44
|
+
* outside the snapshot.
|
|
40
45
|
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* bytes alive even after the live blob is deleted, and no in-place overwrite can retroactively alter
|
|
45
|
-
* a snapshot.
|
|
46
|
+
* Past that gate, hard-linking is safe against later mutation: each write takes a fresh monotonic
|
|
47
|
+
* file id, and an update, delete, or in-place repair replaces or unlinks the path rather than
|
|
48
|
+
* rewriting the inode.
|
|
46
49
|
*/
|
|
47
50
|
/** Directory holding all blob snapshots for a backup repository. */
|
|
48
51
|
function blobsRootDir(backupDir) {
|
|
@@ -54,19 +57,19 @@ function blobSnapshotDir(backupDir, backupId) {
|
|
|
54
57
|
}
|
|
55
58
|
/**
|
|
56
59
|
* Hard-link `src` to `dest`, falling back to a copy when the two are on different filesystems (or
|
|
57
|
-
* the filesystem does not support additional hard links). Never creates a symlink.
|
|
58
|
-
*
|
|
60
|
+
* the filesystem does not support additional hard links). Never creates a symlink. Returns false
|
|
61
|
+
* when the source vanishes so the caller can substitute a marker for it. `counts.copied` is what a
|
|
62
|
+
* caller on a latency budget needs: the fallback turns a constant-time clone into an O(bytes) one.
|
|
59
63
|
*/
|
|
60
|
-
async function linkOrCopy(src, dest) {
|
|
64
|
+
async function linkOrCopy(src, dest, counts) {
|
|
61
65
|
await (0, promises_1.mkdir)((0, node_path_1.dirname)(dest), { recursive: true });
|
|
62
66
|
try {
|
|
63
67
|
await (0, promises_1.link)(src, dest);
|
|
64
68
|
}
|
|
65
69
|
catch (error) {
|
|
66
70
|
if (error.code === 'ENOENT') {
|
|
67
|
-
// src disappeared (concurrent delete) — nothing to snapshot
|
|
68
71
|
if (!(0, node_fs_1.existsSync)(src))
|
|
69
|
-
return;
|
|
72
|
+
return false; // vanished since it was classified
|
|
70
73
|
throw error;
|
|
71
74
|
}
|
|
72
75
|
if (error.code === 'EXDEV' || // cross-device link
|
|
@@ -74,24 +77,74 @@ async function linkOrCopy(src, dest) {
|
|
|
74
77
|
error.code === 'EPERM' || // filesystem forbids hard links
|
|
75
78
|
error.code === 'ENOTSUP' ||
|
|
76
79
|
error.code === 'EOPNOTSUPP') {
|
|
77
|
-
|
|
78
|
-
|
|
80
|
+
try {
|
|
81
|
+
await (0, promises_1.copyFile)(src, dest);
|
|
82
|
+
}
|
|
83
|
+
catch (copyError) {
|
|
84
|
+
if (copyError.code === 'ENOENT')
|
|
85
|
+
return false;
|
|
86
|
+
throw copyError;
|
|
87
|
+
}
|
|
88
|
+
if (counts)
|
|
89
|
+
counts.copied++;
|
|
90
|
+
return true;
|
|
79
91
|
}
|
|
80
92
|
if (error.code === 'EEXIST') {
|
|
81
93
|
await (0, promises_1.unlink)(dest);
|
|
82
|
-
|
|
83
|
-
return;
|
|
94
|
+
return linkOrCopy(src, dest, counts);
|
|
84
95
|
}
|
|
85
96
|
throw error;
|
|
86
97
|
}
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
const BACKUP_MARKER_REASONS = {
|
|
101
|
+
gone: 'blob was deleted while this backup was being taken',
|
|
102
|
+
pending: 'blob was not yet complete when this backup was taken',
|
|
103
|
+
};
|
|
104
|
+
/** Put one blob file into the destination, returning how the entry was captured. */
|
|
105
|
+
async function captureBlobFile(srcPath, destPath, reasons = BACKUP_MARKER_REASONS, counts) {
|
|
106
|
+
let disposition;
|
|
107
|
+
try {
|
|
108
|
+
disposition = await (0, blob_ts_1.classifyBlobFileForCapture)(srcPath);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
// This rethrow is unverified: only the membership of SYSTEMIC_IO_ERRORS is tested, because
|
|
112
|
+
// reaching it needs a real host-level fault no test here can produce.
|
|
113
|
+
if ((0, blob_ts_1.isSystemicIoError)(error))
|
|
114
|
+
throw error;
|
|
115
|
+
// Fall back to what this walk did before it classified anything. `link()` needs no read permission
|
|
116
|
+
// on the source, so a blob this failed to *read* may still be perfectly capturable; substituting
|
|
117
|
+
// here would turn an unreadable-but-valid root into a backup of nothing but stubs.
|
|
118
|
+
harper_logger_ts_1.default.warn(`Could not verify blob ${srcPath} for snapshot; capturing it unverified`, error);
|
|
119
|
+
disposition = 'capture';
|
|
120
|
+
}
|
|
121
|
+
if (disposition === 'skip')
|
|
122
|
+
return disposition;
|
|
123
|
+
if (disposition === 'capture') {
|
|
124
|
+
if (await linkOrCopy(srcPath, destPath, counts))
|
|
125
|
+
return disposition;
|
|
126
|
+
disposition = 'gone';
|
|
127
|
+
}
|
|
128
|
+
await (0, promises_1.mkdir)((0, node_path_1.dirname)(destPath), { recursive: true });
|
|
129
|
+
await (0, promises_1.writeFile)(destPath, (0, blob_ts_1.createCaptureMarker)(disposition, disposition === 'gone' ? reasons.gone : reasons.pending));
|
|
130
|
+
return disposition;
|
|
87
131
|
}
|
|
88
132
|
/**
|
|
89
133
|
* Recursively copy every file under `srcRoot` into `destRoot` (hard-link-else-copy), preserving the
|
|
90
134
|
* relative directory structure. Missing `srcRoot` is a no-op (a database with no blobs yet).
|
|
135
|
+
*
|
|
136
|
+
* `classify` substitutes a marker for a file that is mid-write or already gone, so the destination
|
|
137
|
+
* fails loudly on that blob rather than carrying a truncated one. It belongs to the capture direction
|
|
138
|
+
* only; restore must replace exactly what the snapshot holds.
|
|
139
|
+
*
|
|
140
|
+
* Also used by branch materialization (harper#644), which clones a base's blob roots into the
|
|
141
|
+
* branch's own so the OS inode refcount does the reference counting. Its walk runs inside a window
|
|
142
|
+
* other threads wait on, which is what `onProgress` is for.
|
|
91
143
|
*/
|
|
92
|
-
async function copyTree(srcRoot, destRoot) {
|
|
144
|
+
async function copyTree(srcRoot, destRoot, classify = false, reasons, onProgress) {
|
|
145
|
+
const counts = { substituted: 0, captured: 0, copied: 0 };
|
|
93
146
|
if (!(0, node_fs_1.existsSync)(srcRoot))
|
|
94
|
-
return;
|
|
147
|
+
return counts;
|
|
95
148
|
const stack = [srcRoot];
|
|
96
149
|
while (stack.length > 0) {
|
|
97
150
|
const dir = stack.pop();
|
|
@@ -110,61 +163,95 @@ async function copyTree(srcRoot, destRoot) {
|
|
|
110
163
|
stack.push(srcPath);
|
|
111
164
|
}
|
|
112
165
|
else if (entry.isFile()) {
|
|
113
|
-
|
|
166
|
+
const destPath = (0, node_path_1.join)(destRoot, (0, node_path_1.relative)(srcRoot, srcPath));
|
|
167
|
+
if (classify) {
|
|
168
|
+
const disposition = await captureBlobFile(srcPath, destPath, reasons, counts);
|
|
169
|
+
if (disposition === 'pending' || disposition === 'gone')
|
|
170
|
+
counts.substituted++;
|
|
171
|
+
else if (disposition === 'capture')
|
|
172
|
+
counts.captured++;
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
await linkOrCopy(srcPath, destPath, counts);
|
|
176
|
+
}
|
|
177
|
+
onProgress?.();
|
|
114
178
|
}
|
|
115
179
|
// symlinks/other node types in a blob root are not expected and are intentionally skipped
|
|
116
180
|
}
|
|
117
181
|
}
|
|
182
|
+
return counts;
|
|
118
183
|
}
|
|
119
184
|
/**
|
|
120
|
-
*
|
|
121
|
-
* and atomically renames into place so a
|
|
122
|
-
*
|
|
123
|
-
*
|
|
185
|
+
* Copy every blob root into `destDir` as `<rootIndex>/<relpath>`, hard-linking where possible.
|
|
186
|
+
* Writes to a temporary sibling and atomically renames into place so a run that fails mid-copy never
|
|
187
|
+
* leaves a partial directory a later restore would trust, and replaces any pre-existing `destDir`.
|
|
188
|
+
* Shared by managed-backup snapshots and `copy-db`'s standalone blob copy (harper#2048).
|
|
124
189
|
*/
|
|
125
|
-
async function
|
|
126
|
-
const
|
|
127
|
-
const tempDir = (0, node_path_1.join)(blobsRootDir(backupDir), `.tmp-${backupId}`);
|
|
190
|
+
async function copyBlobRootsByIndex(destDir, blobRoots) {
|
|
191
|
+
const tempDir = destDir + '.tmp';
|
|
128
192
|
await (0, promises_1.rm)(tempDir, { recursive: true, force: true });
|
|
129
193
|
await (0, promises_1.mkdir)(tempDir, { recursive: true });
|
|
130
194
|
try {
|
|
195
|
+
let substituted = 0;
|
|
196
|
+
let captured = 0;
|
|
131
197
|
for (let index = 0; index < blobRoots.length; index++) {
|
|
132
|
-
await copyTree(blobRoots[index], (0, node_path_1.join)(tempDir, String(index)));
|
|
198
|
+
const counts = await copyTree(blobRoots[index], (0, node_path_1.join)(tempDir, String(index)), true);
|
|
199
|
+
substituted += counts.substituted;
|
|
200
|
+
captured += counts.captured;
|
|
201
|
+
}
|
|
202
|
+
if (substituted > 0) {
|
|
203
|
+
harper_logger_ts_1.default.warn(`Blob copy into ${destDir} substituted ${substituted} of ${substituted + captured} blob ` +
|
|
204
|
+
`file(s) with PENDING or ERROR markers because they were not capturable whole.`);
|
|
133
205
|
}
|
|
134
|
-
await (0, promises_1.rm)(
|
|
135
|
-
await (0, promises_1.rename)(tempDir,
|
|
206
|
+
await (0, promises_1.rm)(destDir, { recursive: true, force: true });
|
|
207
|
+
await (0, promises_1.rename)(tempDir, destDir);
|
|
136
208
|
}
|
|
137
209
|
catch (error) {
|
|
138
210
|
await (0, promises_1.rm)(tempDir, { recursive: true, force: true }).catch(() => { });
|
|
139
211
|
throw error;
|
|
140
212
|
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Snapshot a database's blob roots into a backup's blob directory. Overwrites any pre-existing
|
|
216
|
+
* snapshot for the same id (create_backup always produces a fresh id, so this only matters on a
|
|
217
|
+
* retried offline run).
|
|
218
|
+
*/
|
|
219
|
+
async function snapshotBlobs(backupDir, backupId, blobRoots) {
|
|
220
|
+
await copyBlobRootsByIndex(blobSnapshotDir(backupDir, backupId), blobRoots);
|
|
141
221
|
await writeBlobsReadme(backupDir, blobRoots);
|
|
142
222
|
}
|
|
143
223
|
/**
|
|
144
224
|
* Build the `blobs/README.md` documenting the blob snapshot layout, so an operator inspecting or
|
|
145
|
-
* hand-recovering a backup can decode the numeric directories.
|
|
146
|
-
* - managed (default): a create_backup repository, where snapshots are keyed by backup id
|
|
225
|
+
* hand-recovering a backup can decode the numeric directories. Three variants:
|
|
226
|
+
* - `managed` (default): a create_backup repository, where snapshots are keyed by backup id
|
|
147
227
|
* (`<backupId>/<rootIndex>/…`) and restore is automatic via `restore_backup`.
|
|
148
|
-
* -
|
|
149
|
-
*
|
|
228
|
+
* - `archive`: a downloaded `get_backup` tar, which holds a single snapshot with no backup-id level
|
|
229
|
+
* (`<rootIndex>/…`) and is restored by extracting the files back into the roots.
|
|
230
|
+
* - `copy`: the companion directory `copy-db` writes beside a database copy, restored by hand.
|
|
150
231
|
*/
|
|
151
|
-
function blobsReadmeContent(blobRoots, {
|
|
232
|
+
function blobsReadmeContent(blobRoots, { variant = 'managed' } = {}) {
|
|
152
233
|
const rootMapping = blobRoots.length > 0 ? blobRoots.map((root, index) => ` ${index} -> ${root}`).join('\n') : ' (none)';
|
|
153
|
-
const layout =
|
|
154
|
-
? '<rootIndex>/<shard1>/<shard2>/<fileId>'
|
|
155
|
-
: '<
|
|
156
|
-
const intro =
|
|
157
|
-
? `This directory holds
|
|
234
|
+
const layout = variant === 'managed'
|
|
235
|
+
? '<backupId>/<rootIndex>/<shard1>/<shard2>/<fileId>'
|
|
236
|
+
: '<rootIndex>/<shard1>/<shard2>/<fileId>';
|
|
237
|
+
const intro = variant === 'copy'
|
|
238
|
+
? `This directory holds the file-backed blobs of a \`copy-db\` database copy; the database file itself
|
|
239
|
+
is the sibling \`.mdb\` this directory is named after. Blobs are addressed by database NAME and the
|
|
240
|
+
configured blob roots — never by the database file's path — so a copy is only restorable with these
|
|
241
|
+
files: put each \`<rootIndex>/\` tree into the matching blob root of whatever database name you
|
|
242
|
+
restore the copy as (mapping below).`
|
|
243
|
+
: variant === 'archive'
|
|
244
|
+
? `This directory holds this database's file-backed blobs within a downloaded \`get_backup\` archive.
|
|
158
245
|
To restore them, extract each \`<rootIndex>/\` tree back into the matching blob root (see the mapping
|
|
159
246
|
below and ../README.md).`
|
|
160
|
-
|
|
247
|
+
: `This directory holds point-in-time snapshots of this database's file-backed blobs, captured
|
|
161
248
|
alongside each RocksDB managed backup. You do not restore these by hand — \`restore_backup\` puts
|
|
162
249
|
them back automatically (see ../README.md); this file just documents the layout.`;
|
|
163
|
-
const backupIdBullet =
|
|
164
|
-
?
|
|
165
|
-
: `- **<backupId>** matches the RocksDB backup id (\`harper list_backups\`). Each id is a full,
|
|
250
|
+
const backupIdBullet = variant === 'managed'
|
|
251
|
+
? `- **<backupId>** matches the RocksDB backup id (\`harper list_backups\`). Each id is a full,
|
|
166
252
|
independent snapshot (not incremental).
|
|
167
|
-
|
|
253
|
+
`
|
|
254
|
+
: '';
|
|
168
255
|
return `# Harper blob snapshots
|
|
169
256
|
|
|
170
257
|
${intro}
|
|
@@ -175,7 +262,7 @@ ${intro}
|
|
|
175
262
|
|
|
176
263
|
${backupIdBullet}- **<rootIndex>** is which of the database's blob roots the file came from — the index into
|
|
177
264
|
\`storage.blobPaths[n]\`. When \`storage.blobPaths\` is not configured there is a single default root
|
|
178
|
-
(\`<rootPath>/blobs/<db>\`) at index 0. Current mapping
|
|
265
|
+
(\`<rootPath>/blobs/<db>\`) at index 0. Current mapping:
|
|
179
266
|
|
|
180
267
|
${rootMapping}
|
|
181
268
|
|
|
@@ -184,8 +271,10 @@ ${rootMapping}
|
|
|
184
271
|
4096 entries per directory). E.g. a blob with id \`0x12345678\` lives at \`12/345/678\`; a short id
|
|
185
272
|
like \`0xc1a\` lives at \`0/0/c1a\`.
|
|
186
273
|
|
|
187
|
-
|
|
188
|
-
otherwise.
|
|
274
|
+
Complete blobs are hard links to the live blobs when the destination is on the same filesystem, and
|
|
275
|
+
copies otherwise. A blob that was not capturable whole is stored as a marker instead: header type
|
|
276
|
+
\`0xfe\` is retryable (PENDING), while \`0xff\` is terminal (ERROR). The marker preserves the file id
|
|
277
|
+
but does not contain the original blob bytes.
|
|
189
278
|
`;
|
|
190
279
|
}
|
|
191
280
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blobBackup.js","sourceRoot":"","sources":["../../dataLayer/blobBackup.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;
|
|
1
|
+
{"version":3,"file":"blobBackup.js","sourceRoot":"","sources":["../../dataLayer/blobBackup.ts"],"names":[],"mappings":"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"}
|
package/dist/dataLayer/delete.js
CHANGED
|
@@ -108,7 +108,7 @@ async function deleteAuditLogsBefore(deleteObj) {
|
|
|
108
108
|
await pGlobalSchema(deleteObj.schema, deleteObj.table);
|
|
109
109
|
harper_logger_ts_1.default.info(`Finished deleting audit logs before ${deleteObj.timestamp}`);
|
|
110
110
|
// `deleteTransactionLogsBefore` returns `entries_deleted`; the legacy result exposes it as `transactions_deleted`.
|
|
111
|
-
return new DeleteAuditLogsBeforeResults_js_1.default(results.start_timestamp, results.end_timestamp, results.entries_deleted);
|
|
111
|
+
return new DeleteAuditLogsBeforeResults_js_1.default(results.start_timestamp, results.end_timestamp, results.entries_deleted, results.log_files_deleted);
|
|
112
112
|
}
|
|
113
113
|
/**
|
|
114
114
|
* Calls the harper bridge to delete records.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../dataLayer/delete.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6Bb,8CAsCC;AASD,
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../dataLayer/delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,7 +42,20 @@ export declare class ResourceBridge extends BridgeMethods {
|
|
|
42
42
|
new_attributes: any;
|
|
43
43
|
skipped_hashes: any[];
|
|
44
44
|
}>;
|
|
45
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Create-or-replace: the stored record becomes exactly the submitted one, so an attribute the
|
|
47
|
+
* request omits is REMOVED rather than kept. `update`/`upsert` merge (`Table.patch`), which is the
|
|
48
|
+
* v4-compatible behaviour every existing client depends on and is why this is a separate operation
|
|
49
|
+
* rather than a flag on those. Equivalent to REST `PUT /Table/id` — same `Table.put`, so the same
|
|
50
|
+
* audit type, replication shape, and retained `__createdtime__`.
|
|
51
|
+
*/
|
|
52
|
+
putRecords(putObj: any): Promise<{
|
|
53
|
+
txn_time: any;
|
|
54
|
+
written_hashes: any[];
|
|
55
|
+
new_attributes: any;
|
|
56
|
+
skipped_hashes: any[];
|
|
57
|
+
}>;
|
|
58
|
+
upsertRecords(upsertObj: any, fullRecord?: boolean): Promise<{
|
|
46
59
|
txn_time: any;
|
|
47
60
|
written_hashes: any[];
|
|
48
61
|
new_attributes: any;
|