@harperfast/harper 5.0.0-alpha.10 → 5.0.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/bin/BinObjects.js +17 -0
- package/bin/cliOperations.js +157 -0
- package/bin/copyDb.ts +280 -0
- package/bin/harper.js +156 -0
- package/bin/install.js +15 -0
- package/bin/lite.js +5 -0
- package/bin/restart.js +201 -0
- package/bin/run.js +409 -0
- package/bin/status.js +65 -0
- package/bin/stop.js +22 -0
- package/bin/upgrade.js +134 -0
- package/components/Application.ts +646 -0
- package/components/ApplicationScope.ts +49 -0
- package/components/Component.ts +53 -0
- package/components/ComponentV1.ts +342 -0
- package/components/DEFAULT_CONFIG.ts +18 -0
- package/components/EntryHandler.ts +227 -0
- package/components/Logger.ts +14 -0
- package/components/OptionsWatcher.ts +354 -0
- package/components/PluginModule.ts +6 -0
- package/components/Scope.ts +329 -0
- package/components/componentLoader.ts +529 -0
- package/components/deriveCommonPatternBase.ts +31 -0
- package/components/deriveGlobOptions.ts +44 -0
- package/components/deriveURLPath.ts +57 -0
- package/components/operations.js +658 -0
- package/components/operationsValidation.js +246 -0
- package/components/packageComponent.ts +39 -0
- package/components/requestRestart.ts +26 -0
- package/components/resolveBaseURLPath.ts +38 -0
- package/components/status/ComponentStatus.ts +110 -0
- package/components/status/ComponentStatusRegistry.ts +251 -0
- package/components/status/api.ts +153 -0
- package/components/status/crossThread.ts +405 -0
- package/components/status/errors.ts +152 -0
- package/components/status/index.ts +44 -0
- package/components/status/internal.ts +65 -0
- package/components/status/registry.ts +12 -0
- package/components/status/types.ts +96 -0
- package/config/RootConfigWatcher.ts +59 -0
- package/config/configHelpers.ts +11 -0
- package/config/configUtils.js +967 -0
- package/config/harperConfigEnvVars.ts +641 -0
- package/dataLayer/CreateAttributeObject.js +25 -0
- package/dataLayer/CreateTableObject.js +11 -0
- package/dataLayer/DataLayerObjects.js +43 -0
- package/dataLayer/DeleteBeforeObject.js +22 -0
- package/dataLayer/DeleteObject.js +25 -0
- package/dataLayer/DropAttributeObject.js +11 -0
- package/dataLayer/GetBackupObject.js +22 -0
- package/dataLayer/InsertObject.js +24 -0
- package/dataLayer/ReadAuditLogObject.js +24 -0
- package/dataLayer/SQLSearch.js +1335 -0
- package/dataLayer/SearchByConditionsObject.js +61 -0
- package/dataLayer/SearchByHashObject.js +21 -0
- package/dataLayer/SearchObject.js +45 -0
- package/dataLayer/SqlSearchObject.js +14 -0
- package/dataLayer/UpdateObject.js +23 -0
- package/dataLayer/UpsertObject.js +23 -0
- package/dataLayer/bulkLoad.js +813 -0
- package/dataLayer/dataObjects/BulkLoadObjects.js +27 -0
- package/dataLayer/dataObjects/UpsertObject.js +23 -0
- package/dataLayer/delete.js +164 -0
- package/dataLayer/export.js +381 -0
- package/dataLayer/getBackup.js +40 -0
- package/dataLayer/harperBridge/BridgeMethods.js +81 -0
- package/dataLayer/harperBridge/ResourceBridge.ts +633 -0
- package/dataLayer/harperBridge/bridgeUtility/insertUpdateReturnObj.js +28 -0
- package/dataLayer/harperBridge/bridgeUtility/insertUpdateValidate.js +88 -0
- package/dataLayer/harperBridge/harperBridge.js +21 -0
- package/dataLayer/harperBridge/lmdbBridge/LMDBBridge.js +119 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js +19 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js +112 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js +67 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js +31 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js +94 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js +98 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteRecords.js +89 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js +109 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js +107 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js +137 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbFlush.js +35 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetBackup.js +111 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByHash.js +28 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js +29 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbReadAuditLog.js +207 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js +156 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByHash.js +21 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js +30 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbTransaction.js +19 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpdateRecords.js +64 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js +70 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js +22 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBDeleteTransactionObject.js +23 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBInsertTransactionObject.js +22 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBTransactionObject.js +23 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBUpdateTransactionObject.js +24 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBUpsertTransactionObject.js +24 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/TableSizeObject.js +25 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js +21 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js +157 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js +94 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js +39 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js +34 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js +100 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbSearch.js +371 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbWriteTransaction.js +109 -0
- package/dataLayer/hdbInfoController.js +254 -0
- package/dataLayer/insert.js +266 -0
- package/dataLayer/readAuditLog.js +59 -0
- package/dataLayer/schema.js +366 -0
- package/dataLayer/schemaDescribe.js +289 -0
- package/dataLayer/search.js +60 -0
- package/dataLayer/transaction.js +17 -0
- package/dataLayer/update.js +124 -0
- package/dist/components/Logger.d.ts +12 -0
- package/dist/components/Logger.js +3 -0
- package/dist/components/Logger.js.map +1 -0
- package/dist/components/Scope.d.ts +14 -4
- package/dist/components/Scope.js +18 -10
- package/dist/components/Scope.js.map +1 -1
- package/dist/components/componentLoader.js +16 -9
- package/dist/components/componentLoader.js.map +1 -1
- package/dist/components/operations.js +2 -2
- package/dist/components/operations.js.map +1 -1
- package/dist/config/configUtils.d.ts +1 -1
- package/dist/config/configUtils.js +1 -1
- package/dist/config/configUtils.js.map +1 -1
- package/dist/dataLayer/CreateTableObject.d.ts +2 -2
- package/dist/dataLayer/CreateTableObject.js +2 -2
- package/dist/dataLayer/CreateTableObject.js.map +1 -1
- package/dist/dataLayer/delete.d.ts +1 -1
- package/dist/dataLayer/schema.js +6 -5
- package/dist/dataLayer/schema.js.map +1 -1
- package/dist/dataLayer/schemaDescribe.js +1 -1
- package/dist/dataLayer/schemaDescribe.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/resources/DatabaseTransaction.d.ts +1 -1
- package/dist/resources/IterableEventQueue.d.ts +1 -1
- package/dist/resources/LMDBTransaction.d.ts +5 -1
- package/dist/resources/Resource.d.ts +1 -1
- package/dist/resources/RocksIndexStore.d.ts +3 -3
- package/dist/resources/RocksTransactionLogStore.d.ts +6 -3
- package/dist/resources/Table.d.ts +15 -6
- package/dist/resources/Table.js +4 -1
- package/dist/resources/Table.js.map +1 -1
- package/dist/resources/analytics/read.js +32 -22
- package/dist/resources/analytics/read.js.map +1 -1
- package/dist/resources/analytics/write.js +3 -6
- package/dist/resources/analytics/write.js.map +1 -1
- package/dist/resources/auditStore.d.ts +3 -3
- package/dist/resources/blob.d.ts +25 -2
- package/dist/resources/databases.d.ts +12 -2
- package/dist/resources/databases.js +22 -19
- package/dist/resources/databases.js.map +1 -1
- package/dist/resources/search.js +11 -5
- package/dist/resources/search.js.map +1 -1
- package/dist/resources/transaction.d.ts +2 -1
- package/dist/security/auth.js +1 -1
- package/dist/security/auth.js.map +1 -1
- package/dist/security/cryptoHash.d.ts +2 -2
- package/dist/security/jsLoader.js +243 -66
- package/dist/security/jsLoader.js.map +1 -1
- package/dist/security/keys.js +4 -5
- package/dist/security/keys.js.map +1 -1
- package/dist/security/user.js +3 -3
- package/dist/security/user.js.map +1 -1
- package/dist/server/REST.js +16 -2
- package/dist/server/REST.js.map +1 -1
- package/dist/server/Server.d.ts +2 -1
- package/dist/server/Server.js.map +1 -1
- package/dist/server/fastifyRoutes/plugins/hdbCore.d.ts +6 -1
- package/dist/server/fastifyRoutes.js +2 -0
- package/dist/server/fastifyRoutes.js.map +1 -1
- package/dist/server/http.js +12 -6
- package/dist/server/http.js.map +1 -1
- package/dist/server/jobs/JobObject.d.ts +3 -3
- package/dist/server/loadRootComponents.js +1 -0
- package/dist/server/loadRootComponents.js.map +1 -1
- package/dist/server/operationsServer.js +3 -1
- package/dist/server/operationsServer.js.map +1 -1
- package/dist/server/serverHelpers/JSONStream.d.ts +3 -3
- package/dist/server/serverHelpers/Request.d.ts +5 -5
- package/dist/server/serverHelpers/requestTimePlugin.d.ts +1 -1
- package/dist/server/threads/manageThreads.d.ts +2 -2
- package/dist/server/threads/manageThreads.js +50 -35
- package/dist/server/threads/manageThreads.js.map +1 -1
- package/dist/server/threads/socketRouter.d.ts +1 -1
- package/dist/sqlTranslator/deleteTranslator.d.ts +1 -1
- package/dist/utility/AWS/AWSConnector.d.ts +3 -2
- package/dist/utility/common_utils.d.ts +3 -3
- package/dist/utility/environment/systemInformation.d.ts +1 -0
- package/dist/utility/functions/date/dateFunctions.d.ts +11 -11
- package/dist/utility/globalSchema.d.ts +1 -1
- package/dist/utility/hdbTerms.d.ts +3 -0
- package/dist/utility/hdbTerms.js +3 -0
- package/dist/utility/hdbTerms.js.map +1 -1
- package/dist/utility/installation.d.ts +2 -4
- package/dist/utility/installation.js.map +1 -1
- package/dist/utility/lmdb/commonUtility.d.ts +1 -0
- package/dist/utility/lmdb/deleteUtility.d.ts +1 -0
- package/dist/utility/lmdb/environmentUtility.d.ts +1 -0
- package/dist/utility/lmdb/searchUtility.d.ts +2 -1
- package/dist/utility/lmdb/writeUtility.d.ts +1 -0
- package/dist/utility/logging/harper_logger.d.ts +6 -6
- package/dist/utility/processManagement/processManagement.d.ts +1 -1
- package/dist/utility/processManagement/servicesConfig.d.ts +12 -6
- package/dist/validation/common_validators.d.ts +4 -3
- package/dist/validation/configValidator.d.ts +3 -2
- package/index.d.ts +56 -0
- package/index.js +41 -0
- package/json/systemSchema.json +373 -0
- package/launchServiceScripts/launchHarperDB.js +3 -0
- package/launchServiceScripts/utility/checkNodeVersion.js +15 -0
- package/package.json +21 -3
- package/resources/DatabaseTransaction.ts +378 -0
- package/resources/ErrorResource.ts +57 -0
- package/resources/IterableEventQueue.ts +94 -0
- package/resources/LMDBTransaction.ts +349 -0
- package/resources/RecordEncoder.ts +702 -0
- package/resources/RequestTarget.ts +134 -0
- package/resources/Resource.ts +789 -0
- package/resources/ResourceInterface.ts +221 -0
- package/resources/ResourceInterfaceV2.ts +53 -0
- package/resources/ResourceV2.ts +67 -0
- package/resources/Resources.ts +162 -0
- package/resources/RocksIndexStore.ts +70 -0
- package/resources/RocksTransactionLogStore.ts +352 -0
- package/resources/Table.ts +4527 -0
- package/resources/analytics/hostnames.ts +72 -0
- package/resources/analytics/metadata.ts +10 -0
- package/resources/analytics/read.ts +252 -0
- package/resources/analytics/write.ts +803 -0
- package/resources/auditStore.ts +556 -0
- package/resources/blob.ts +1268 -0
- package/resources/crdt.ts +125 -0
- package/resources/dataLoader.ts +527 -0
- package/resources/databases.ts +1290 -0
- package/resources/graphql.ts +221 -0
- package/resources/indexes/HierarchicalNavigableSmallWorld.ts +638 -0
- package/resources/indexes/customIndexes.ts +7 -0
- package/resources/indexes/vector.ts +38 -0
- package/resources/jsResource.ts +86 -0
- package/resources/loadEnv.ts +22 -0
- package/resources/login.ts +18 -0
- package/resources/openApi.ts +409 -0
- package/resources/registrationDeprecated.ts +8 -0
- package/resources/replayLogs.ts +136 -0
- package/resources/roles.ts +98 -0
- package/resources/search.ts +1301 -0
- package/resources/tracked.ts +584 -0
- package/resources/transaction.ts +89 -0
- package/resources/transactionBroadcast.ts +258 -0
- package/security/auth.ts +376 -0
- package/security/certificateVerification/certificateVerificationSource.ts +84 -0
- package/security/certificateVerification/configValidation.ts +107 -0
- package/security/certificateVerification/crlVerification.ts +623 -0
- package/security/certificateVerification/index.ts +121 -0
- package/security/certificateVerification/ocspVerification.ts +148 -0
- package/security/certificateVerification/pkijs-ed25519-patch.ts +188 -0
- package/security/certificateVerification/types.ts +128 -0
- package/security/certificateVerification/verificationConfig.ts +138 -0
- package/security/certificateVerification/verificationUtils.ts +447 -0
- package/security/cryptoHash.js +42 -0
- package/security/data_objects/PermissionAttributeResponseObject.js +15 -0
- package/security/data_objects/PermissionResponseObject.js +115 -0
- package/security/data_objects/PermissionTableResponseObject.js +20 -0
- package/security/fastifyAuth.js +169 -0
- package/security/impersonation.ts +160 -0
- package/security/jsLoader.ts +716 -0
- package/security/keys.js +948 -0
- package/security/permissionsTranslator.js +300 -0
- package/security/role.js +218 -0
- package/security/tokenAuthentication.ts +228 -0
- package/security/user.ts +449 -0
- package/server/DurableSubscriptionsSession.ts +503 -0
- package/server/REST.ts +407 -0
- package/server/Server.ts +89 -0
- package/server/fastifyRoutes/helpers/getCORSOptions.js +36 -0
- package/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +15 -0
- package/server/fastifyRoutes/helpers/getServerOptions.js +33 -0
- package/server/fastifyRoutes/plugins/hdbCore.js +39 -0
- package/server/fastifyRoutes.ts +205 -0
- package/server/graphqlQuerying.ts +700 -0
- package/server/http.ts +640 -0
- package/server/itc/serverHandlers.js +161 -0
- package/server/itc/utility/ITCEventObject.js +10 -0
- package/server/jobs/JobObject.js +24 -0
- package/server/jobs/jobProcess.js +69 -0
- package/server/jobs/jobRunner.js +162 -0
- package/server/jobs/jobs.js +304 -0
- package/server/loadRootComponents.js +44 -0
- package/server/mqtt.ts +485 -0
- package/server/nodeName.ts +75 -0
- package/server/operationsServer.ts +313 -0
- package/server/serverHelpers/Headers.ts +108 -0
- package/server/serverHelpers/JSONStream.ts +269 -0
- package/server/serverHelpers/OperationFunctionObject.ts +13 -0
- package/server/serverHelpers/Request.ts +158 -0
- package/server/serverHelpers/contentTypes.ts +637 -0
- package/server/serverHelpers/requestTimePlugin.js +57 -0
- package/server/serverHelpers/serverHandlers.js +148 -0
- package/server/serverHelpers/serverUtilities.ts +473 -0
- package/server/serverRegistry.ts +8 -0
- package/server/static.ts +187 -0
- package/server/status/definitions.ts +37 -0
- package/server/status/index.ts +125 -0
- package/server/storageReclamation.ts +93 -0
- package/server/threads/itc.js +89 -0
- package/server/threads/manageThreads.js +594 -0
- package/server/threads/socketRouter.ts +360 -0
- package/server/threads/threadServer.js +279 -0
- package/server/throttle.ts +73 -0
- package/sqlTranslator/SelectValidator.js +330 -0
- package/sqlTranslator/alasqlFunctionImporter.js +62 -0
- package/sqlTranslator/deleteTranslator.js +67 -0
- package/sqlTranslator/index.js +242 -0
- package/sqlTranslator/sql_statement_bucket.js +472 -0
- package/static/defaultConfig.yaml +3 -0
- package/studio/web/HDBDogOnly.svg +78 -0
- package/studio/web/assets/PPRadioGrotesk-Bold-DDaUYG8E.woff +0 -0
- package/studio/web/assets/fa-brands-400-CEJbCg16.woff +0 -0
- package/studio/web/assets/fa-brands-400-CSYNqBb_.ttf +0 -0
- package/studio/web/assets/fa-brands-400-DnkPfk3o.eot +0 -0
- package/studio/web/assets/fa-brands-400-UxlILjvJ.woff2 +0 -0
- package/studio/web/assets/fa-brands-400-cH1MgKbP.svg +3717 -0
- package/studio/web/assets/fa-regular-400-BhTwtT8w.eot +0 -0
- package/studio/web/assets/fa-regular-400-D1vz6WBx.ttf +0 -0
- package/studio/web/assets/fa-regular-400-DFnMcJPd.woff +0 -0
- package/studio/web/assets/fa-regular-400-DGzu1beS.woff2 +0 -0
- package/studio/web/assets/fa-regular-400-gwj8Pxq-.svg +801 -0
- package/studio/web/assets/fa-solid-900-B4ZZ7kfP.svg +5034 -0
- package/studio/web/assets/fa-solid-900-B6Axprfb.eot +0 -0
- package/studio/web/assets/fa-solid-900-BUswJgRo.woff2 +0 -0
- package/studio/web/assets/fa-solid-900-DOXgCApm.woff +0 -0
- package/studio/web/assets/fa-solid-900-mxuxnBEa.ttf +0 -0
- package/studio/web/assets/index-BTgXJX9d.js +235 -0
- package/studio/web/assets/index-BTgXJX9d.js.map +1 -0
- package/studio/web/assets/index-C-GXfcup.js +37 -0
- package/studio/web/assets/index-C-GXfcup.js.map +1 -0
- package/studio/web/assets/index-PFlNdimM.js +2 -0
- package/studio/web/assets/index-PFlNdimM.js.map +1 -0
- package/studio/web/assets/index-Y2g_iFpU.css +1 -0
- package/studio/web/assets/index-jiPwkrsB.css +1 -0
- package/studio/web/assets/index.lazy-C3TJZJ4o.js +266 -0
- package/studio/web/assets/index.lazy-C3TJZJ4o.js.map +1 -0
- package/studio/web/assets/profiler-DotzgiCJ.js +2 -0
- package/studio/web/assets/profiler-DotzgiCJ.js.map +1 -0
- package/studio/web/assets/react-redux-VxUEx_mU.js +6 -0
- package/studio/web/assets/react-redux-VxUEx_mU.js.map +1 -0
- package/studio/web/assets/startRecording-B_9J9Csd.js +3 -0
- package/studio/web/assets/startRecording-B_9J9Csd.js.map +1 -0
- package/studio/web/fabric-signup-background.webp +0 -0
- package/studio/web/fabric-signup-text.png +0 -0
- package/studio/web/favicon_purple.png +0 -0
- package/studio/web/github-icon.svg +15 -0
- package/studio/web/harper-fabric_black.png +0 -0
- package/studio/web/harper-fabric_white.png +0 -0
- package/studio/web/harper-studio_white.png +0 -0
- package/studio/web/index.html +16 -0
- package/studio/web/running.css +148 -0
- package/studio/web/running.html +147 -0
- package/studio/web/running.js +111 -0
- package/upgrade/UpgradeObjects.js +13 -0
- package/upgrade/directives/directivesController.js +90 -0
- package/upgrade/directivesManager.js +139 -0
- package/upgrade/upgradePrompt.js +124 -0
- package/upgrade/upgradeUtilities.js +28 -0
- package/utility/AWS/AWSConnector.js +29 -0
- package/utility/OperationFunctionCaller.js +63 -0
- package/utility/assignCmdEnvVariables.js +62 -0
- package/utility/common_utils.js +867 -0
- package/utility/environment/environmentManager.js +208 -0
- package/utility/environment/systemInformation.js +355 -0
- package/utility/errors/commonErrors.js +267 -0
- package/utility/errors/hdbError.js +146 -0
- package/utility/functions/date/dateFunctions.js +65 -0
- package/utility/functions/geo.js +355 -0
- package/utility/functions/sql/alaSQLExtension.js +104 -0
- package/utility/globalSchema.js +35 -0
- package/utility/hdbTerms.ts +819 -0
- package/utility/install/checkJWTTokensExist.js +62 -0
- package/utility/install/harperdb.conf +15 -0
- package/utility/install/harperdb.service +14 -0
- package/utility/install/installer.js +635 -0
- package/utility/installation.ts +30 -0
- package/utility/lmdb/DBIDefinition.js +20 -0
- package/utility/lmdb/DeleteRecordsResponseObject.js +25 -0
- package/utility/lmdb/InsertRecordsResponseObject.js +22 -0
- package/utility/lmdb/OpenDBIObject.js +31 -0
- package/utility/lmdb/OpenEnvironmentObject.js +41 -0
- package/utility/lmdb/UpdateRecordsResponseObject.js +25 -0
- package/utility/lmdb/UpsertRecordsResponseObject.js +22 -0
- package/utility/lmdb/cleanLMDBMap.js +65 -0
- package/utility/lmdb/commonUtility.js +119 -0
- package/utility/lmdb/deleteUtility.js +128 -0
- package/utility/lmdb/environmentUtility.js +477 -0
- package/utility/lmdb/searchCursorFunctions.js +187 -0
- package/utility/lmdb/searchUtility.js +918 -0
- package/utility/lmdb/terms.js +57 -0
- package/utility/lmdb/writeUtility.js +407 -0
- package/utility/logging/harper_logger.js +876 -0
- package/utility/logging/logRotator.js +157 -0
- package/utility/logging/logger.ts +24 -0
- package/utility/logging/readLog.js +355 -0
- package/utility/logging/transactionLog.js +57 -0
- package/utility/mount_hdb.js +59 -0
- package/utility/npmUtilities.js +102 -0
- package/utility/operationPermissions.ts +112 -0
- package/utility/operation_authorization.js +836 -0
- package/utility/packageUtils.js +55 -0
- package/utility/password.ts +99 -0
- package/utility/processManagement/processManagement.js +187 -0
- package/utility/processManagement/servicesConfig.js +56 -0
- package/utility/scripts/restartHdb.js +24 -0
- package/utility/scripts/user_data.sh +13 -0
- package/utility/signalling.js +36 -0
- package/utility/terms/certificates.js +81 -0
- package/utility/when.ts +20 -0
- package/v1.d.ts +39 -0
- package/v1.js +41 -0
- package/v2.d.ts +39 -0
- package/v2.js +41 -0
- package/validation/bulkDeleteValidator.js +24 -0
- package/validation/check_permissions.js +19 -0
- package/validation/common_validators.js +95 -0
- package/validation/configValidator.js +331 -0
- package/validation/deleteValidator.js +15 -0
- package/validation/fileLoadValidator.js +153 -0
- package/validation/insertValidator.js +40 -0
- package/validation/installValidator.js +37 -0
- package/validation/readLogValidator.js +64 -0
- package/validation/role_validation.js +320 -0
- package/validation/schemaMetadataValidator.js +42 -0
- package/validation/searchValidator.js +166 -0
- package/validation/statusValidator.ts +66 -0
- package/validation/transactionLogValidator.js +33 -0
- package/validation/user_validation.js +55 -0
- package/validation/validationWrapper.js +105 -0
- package/dist/resources/analytics/profile.d.ts +0 -2
- package/dist/resources/analytics/profile.js +0 -144
- package/dist/resources/analytics/profile.js.map +0 -1
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const hdbUtils = require('../../../../utility/common_utils.js');
|
|
4
|
+
const deleteUtility = require('../../../../utility/lmdb/deleteUtility.js');
|
|
5
|
+
const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
|
|
6
|
+
const { getSchemaPath } = require('../lmdbUtility/initializePaths.js');
|
|
7
|
+
const writeTransaction = require('../lmdbUtility/lmdbWriteTransaction.js');
|
|
8
|
+
const logger = require('../../../../utility/logging/harper_logger.js');
|
|
9
|
+
|
|
10
|
+
module.exports = lmdbDeleteRecords;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Deletes a full table row at a certain hash.
|
|
14
|
+
* @param deleteObj
|
|
15
|
+
* @param writeToTxnLog {boolean}
|
|
16
|
+
*/
|
|
17
|
+
async function lmdbDeleteRecords(deleteObj, writeToTxnLog = true) {
|
|
18
|
+
let schemaTable = global.hdb_schema[deleteObj.schema][deleteObj.table];
|
|
19
|
+
let hash_attribute = schemaTable.hash_attribute;
|
|
20
|
+
if (hdbUtils.isEmpty(hash_attribute)) {
|
|
21
|
+
throw new Error(`could not retrieve hash attribute for schema:${deleteObj.schema} and table ${deleteObj.table}`);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
//this would happen for SQL delete
|
|
25
|
+
if (hdbUtils.isEmptyOrZeroLength(deleteObj.hash_values) && !hdbUtils.isEmptyOrZeroLength(deleteObj.records)) {
|
|
26
|
+
//reintitialize hash_values since it is empty we are not sure if the variable has been set to empty array yet
|
|
27
|
+
deleteObj.hash_values = [];
|
|
28
|
+
for (let k = 0; k < deleteObj.records.length; k++) {
|
|
29
|
+
let hashValue = deleteObj.records[k][hash_attribute];
|
|
30
|
+
if (!hdbUtils.isEmpty(hashValue)) {
|
|
31
|
+
deleteObj.hash_values.push(hashValue);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (hdbUtils.isEmptyOrZeroLength(deleteObj.hash_values)) {
|
|
37
|
+
return createDeleteResponse([], []);
|
|
38
|
+
} else if (!Array.isArray(deleteObj.hash_values)) {
|
|
39
|
+
throw new Error('hash_values must be an array');
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
//this is needed for clustering, right now clustering expects delete to have a records array and use that to get the hash_values.
|
|
43
|
+
if (hdbUtils.isEmptyOrZeroLength(deleteObj.records)) {
|
|
44
|
+
deleteObj.records = [];
|
|
45
|
+
for (let x = 0; x < deleteObj.hash_values.length; x++) {
|
|
46
|
+
deleteObj.records[x] = {
|
|
47
|
+
[hash_attribute]: deleteObj.hash_values[x],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
let envBasePath = getSchemaPath(deleteObj.schema, deleteObj.table);
|
|
52
|
+
let environment = await environmentUtility.openEnvironment(envBasePath, deleteObj.table);
|
|
53
|
+
|
|
54
|
+
let response = await deleteUtility.deleteRecords(
|
|
55
|
+
environment,
|
|
56
|
+
hash_attribute,
|
|
57
|
+
deleteObj.hash_values,
|
|
58
|
+
deleteObj.__origin?.timestamp
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
try {
|
|
62
|
+
if (writeToTxnLog === true) {
|
|
63
|
+
await writeTransaction(deleteObj, response);
|
|
64
|
+
}
|
|
65
|
+
} catch (e) {
|
|
66
|
+
logger.error(`unable to write transaction due to ${e.message}`);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return createDeleteResponse(response.deleted, response.skipped, response.txn_time);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* creates the response object for deletes based on the deleted & skipped hashes
|
|
74
|
+
* @param {[]} deleted - list of hash values successfully deleted
|
|
75
|
+
* @param {[]} skipped - list of hash values which did not get deleted
|
|
76
|
+
* @param {number} txnTime - the transaction timestamp
|
|
77
|
+
* @returns {{skipped_hashes: [], deleted_hashes: [], message: string}}
|
|
78
|
+
*/
|
|
79
|
+
function createDeleteResponse(deleted, skipped, txnTime) {
|
|
80
|
+
let total = deleted.length + skipped.length;
|
|
81
|
+
let plural = total === 1 ? 'record' : 'records';
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
message: `${deleted.length} of ${total} ${plural} successfully deleted`,
|
|
85
|
+
deleted_hashes: deleted,
|
|
86
|
+
skipped_hashes: skipped,
|
|
87
|
+
txn_time: txnTime,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const SearchObject = require('../../../SearchObject.js');
|
|
4
|
+
const DeleteObject = require('../../../DeleteObject.js');
|
|
5
|
+
// eslint-disable-next-line no-unused-vars
|
|
6
|
+
const DropAttributeObject = require('../../../DropAttributeObject.js');
|
|
7
|
+
const hdbTerms = require('../../../../utility/hdbTerms.ts');
|
|
8
|
+
const commonUtils = require('../../../../utility/common_utils.js');
|
|
9
|
+
const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
|
|
10
|
+
const systemSchema = require('../../../../json/systemSchema.json');
|
|
11
|
+
const searchByValue = require('./lmdbSearchByValue.js');
|
|
12
|
+
const deleteRecords = require('./lmdbDeleteRecords.js');
|
|
13
|
+
const { getSchemaPath } = require('../lmdbUtility/initializePaths.js');
|
|
14
|
+
|
|
15
|
+
module.exports = lmdbDropAttribute;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* First deletes the attribute/dbi from lmdb then removes its record from system table
|
|
19
|
+
* @param {DropAttributeObject} dropAttributeObj
|
|
20
|
+
* @param {Boolean} [removeData] - optional, defaults to false
|
|
21
|
+
* @returns {undefined}
|
|
22
|
+
*/
|
|
23
|
+
async function lmdbDropAttribute(dropAttributeObj, removeData = true) {
|
|
24
|
+
let tableInfo;
|
|
25
|
+
if (dropAttributeObj.schema === hdbTerms.SYSTEM_SCHEMA_NAME) {
|
|
26
|
+
tableInfo = systemSchema[dropAttributeObj.table];
|
|
27
|
+
} else {
|
|
28
|
+
tableInfo = global.hdb_schema[dropAttributeObj.schema][dropAttributeObj.table];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
//remove meta data
|
|
32
|
+
let deleteResults = await dropAttributeFromSystem(dropAttributeObj);
|
|
33
|
+
//drop dbi
|
|
34
|
+
let schemaPath = getSchemaPath(dropAttributeObj.schema, dropAttributeObj.table);
|
|
35
|
+
let env = await environmentUtility.openEnvironment(schemaPath, dropAttributeObj.table);
|
|
36
|
+
|
|
37
|
+
//in the scenario of drop table / schema we don't need to remove individual elements since we are removing entire environments
|
|
38
|
+
if (removeData === true) {
|
|
39
|
+
await removeAttributeFromAllObjects(dropAttributeObj, env, tableInfo.hash_attribute);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
environmentUtility.dropDBI(env, dropAttributeObj.attribute);
|
|
43
|
+
|
|
44
|
+
return deleteResults;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* iterates the hash attribute dbi and removes the attribute dropped
|
|
49
|
+
* @param {DropAttributeObject} dropAttributeObj
|
|
50
|
+
* @param {lmdb.RootDatabase} env
|
|
51
|
+
* @param {String} hash_attribute
|
|
52
|
+
*/
|
|
53
|
+
async function removeAttributeFromAllObjects(dropAttributeObj, env, hash_attribute) {
|
|
54
|
+
//get reference to hash attribute index (dbi)
|
|
55
|
+
let dbi = environmentUtility.openDBI(env, hash_attribute);
|
|
56
|
+
|
|
57
|
+
//declare just one promise for the bulk write, read the await below
|
|
58
|
+
let promise;
|
|
59
|
+
let attributeToDelete = dropAttributeObj.attribute;
|
|
60
|
+
//iterate the entire hash attribute index to remove the dropped attribute and update the entry
|
|
61
|
+
for (let { key, value, version } of dbi.getRange({ start: false, versions: true })) {
|
|
62
|
+
//delete the attribute being dropped from the record
|
|
63
|
+
let updatedValue = {};
|
|
64
|
+
for (let property in value) {
|
|
65
|
+
if (property !== attributeToDelete) updatedValue[property] = value[property];
|
|
66
|
+
}
|
|
67
|
+
// maintain the same version number as we re-save the data with the
|
|
68
|
+
// property dropped
|
|
69
|
+
promise = env.dbis[hash_attribute].put(key, updatedValue, version);
|
|
70
|
+
}
|
|
71
|
+
//since lmdb processes all promised writes in order we only need to wait for the last promise to execute to know all the previous ones have also finished
|
|
72
|
+
await promise;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Searches the system attributes table for attribute record then sends record to delete to be removed from system table.
|
|
77
|
+
* @param {DropAttributeObject} dropAttributeObj
|
|
78
|
+
* @returns {undefined}
|
|
79
|
+
*/
|
|
80
|
+
async function dropAttributeFromSystem(dropAttributeObj) {
|
|
81
|
+
let searchObj = new SearchObject(
|
|
82
|
+
hdbTerms.SYSTEM_SCHEMA_NAME,
|
|
83
|
+
hdbTerms.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,
|
|
84
|
+
hdbTerms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,
|
|
85
|
+
`${dropAttributeObj.schema}.${dropAttributeObj.table}`,
|
|
86
|
+
undefined,
|
|
87
|
+
[hdbTerms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY, hdbTerms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
let tableAttributes = Array.from(await searchByValue(searchObj));
|
|
91
|
+
let attribute = tableAttributes.filter(
|
|
92
|
+
(attr) => attr[hdbTerms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY] === dropAttributeObj.attribute
|
|
93
|
+
);
|
|
94
|
+
if (commonUtils.isEmptyOrZeroLength(attribute)) {
|
|
95
|
+
throw new Error(
|
|
96
|
+
`Attribute '${dropAttributeObj.attribute}' was not found in '${dropAttributeObj.schema}.${dropAttributeObj.table}'`
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
let id = attribute.map((attr) => attr[hdbTerms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]);
|
|
101
|
+
|
|
102
|
+
let deleteTableObj = new DeleteObject(
|
|
103
|
+
hdbTerms.SYSTEM_SCHEMA_NAME,
|
|
104
|
+
hdbTerms.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,
|
|
105
|
+
id
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
return deleteRecords(deleteTableObj);
|
|
109
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const fs = require('fs-extra');
|
|
4
|
+
const SearchObject = require('../../../SearchObject.js');
|
|
5
|
+
const SearchByHashObject = require('../../../SearchByHashObject.js');
|
|
6
|
+
const DeleteObject = require('../../../DeleteObject.js');
|
|
7
|
+
const dropTable = require('./lmdbDropTable.js');
|
|
8
|
+
const deleteRecords = require('./lmdbDeleteRecords.js');
|
|
9
|
+
const getDataByHash = require('./lmdbGetDataByHash.js');
|
|
10
|
+
const searchDataByValue = require('./lmdbSearchByValue.js');
|
|
11
|
+
const hdbTerms = require('../../../../utility/hdbTerms.ts');
|
|
12
|
+
const { getSchemaPath } = require('../lmdbUtility/initializePaths.js');
|
|
13
|
+
const { handleHDBError, hdbErrors } = require('../../../../utility/errors/hdbError.js');
|
|
14
|
+
const { HDB_ERROR_MSGS, HTTP_STATUS_CODES } = hdbErrors;
|
|
15
|
+
|
|
16
|
+
module.exports = lmdbDropSchema;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* deletes all environment files under the schema folder, deletes all schema/table/attribute meta data from system
|
|
20
|
+
* @param dropSchemaObj
|
|
21
|
+
*/
|
|
22
|
+
async function lmdbDropSchema(dropSchemaObj) {
|
|
23
|
+
let deleteSchema;
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
deleteSchema = await validateDropSchema(dropSchemaObj.schema);
|
|
27
|
+
|
|
28
|
+
//We search in system > hdbTable for tables with the schema to ensure we are deleting all schema datastores
|
|
29
|
+
const tableSearchObj = new SearchObject(
|
|
30
|
+
hdbTerms.SYSTEM_SCHEMA_NAME,
|
|
31
|
+
hdbTerms.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,
|
|
32
|
+
hdbTerms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,
|
|
33
|
+
deleteSchema,
|
|
34
|
+
undefined,
|
|
35
|
+
[hdbTerms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
let tables = Array.from(await searchDataByValue(tableSearchObj));
|
|
39
|
+
|
|
40
|
+
for (let x = 0; x < tables.length; x++) {
|
|
41
|
+
const deleteTableObj = {
|
|
42
|
+
schema: deleteSchema,
|
|
43
|
+
table: tables[x].name,
|
|
44
|
+
};
|
|
45
|
+
try {
|
|
46
|
+
await dropTable(deleteTableObj);
|
|
47
|
+
} catch (e) {
|
|
48
|
+
//this message would get thrown for an environment that doesn't exist
|
|
49
|
+
if (e.message !== 'invalid environment') {
|
|
50
|
+
throw e;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
//After all tables for schema are deleted, we can delete the schema
|
|
56
|
+
const deleteSchemaObj = new DeleteObject(
|
|
57
|
+
hdbTerms.SYSTEM_SCHEMA_NAME,
|
|
58
|
+
hdbTerms.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,
|
|
59
|
+
[deleteSchema]
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
// Delete the schema from the system > hdbSchema datastore
|
|
63
|
+
await deleteRecords(deleteSchemaObj);
|
|
64
|
+
let schemaPath = getSchemaPath(deleteSchema);
|
|
65
|
+
await fs.remove(schemaPath);
|
|
66
|
+
} catch (err) {
|
|
67
|
+
throw err;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async function validateDropSchema(dropSchema) {
|
|
72
|
+
let searchObj = new SearchByHashObject(
|
|
73
|
+
hdbTerms.SYSTEM_SCHEMA_NAME,
|
|
74
|
+
hdbTerms.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,
|
|
75
|
+
[dropSchema],
|
|
76
|
+
[hdbTerms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
let searchResult;
|
|
80
|
+
let deleteSchema;
|
|
81
|
+
|
|
82
|
+
try {
|
|
83
|
+
searchResult = Array.from(await getDataByHash(searchObj));
|
|
84
|
+
} catch (err) {
|
|
85
|
+
throw err;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Data found by the search function should match the dropSchema
|
|
89
|
+
for (let [, schema] of searchResult) {
|
|
90
|
+
if (schema.name === dropSchema) {
|
|
91
|
+
deleteSchema = dropSchema;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (!deleteSchema) {
|
|
96
|
+
throw handleHDBError(
|
|
97
|
+
new Error(),
|
|
98
|
+
HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(dropSchema),
|
|
99
|
+
HTTP_STATUS_CODES.NOT_FOUND,
|
|
100
|
+
undefined,
|
|
101
|
+
undefined,
|
|
102
|
+
true
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return deleteSchema;
|
|
107
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const SearchObject = require('../../../SearchObject.js');
|
|
4
|
+
const DeleteObject = require('../../../DeleteObject.js');
|
|
5
|
+
const searchByValue = require('./lmdbSearchByValue.js');
|
|
6
|
+
const deleteRecords = require('./lmdbDeleteRecords.js');
|
|
7
|
+
const hdbTerms = require('../../../../utility/hdbTerms.ts');
|
|
8
|
+
const hdbUtils = require('../../../../utility/common_utils.js');
|
|
9
|
+
const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
|
|
10
|
+
const { getTransactionAuditStorePath, getSchemaPath } = require('../lmdbUtility/initializePaths.js');
|
|
11
|
+
const log = require('../../../../utility/logging/harper_logger.js');
|
|
12
|
+
|
|
13
|
+
module.exports = lmdbDropTable;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Calls drops the table, all of it's attribute & deletes the environment
|
|
17
|
+
* @param dropTableObj
|
|
18
|
+
*/
|
|
19
|
+
async function lmdbDropTable(dropTableObj) {
|
|
20
|
+
try {
|
|
21
|
+
if (
|
|
22
|
+
hdbUtils.isEmpty(global.hdb_schema[dropTableObj.schema]) ||
|
|
23
|
+
hdbUtils.isEmpty(global.hdb_schema[dropTableObj.schema][dropTableObj.table])
|
|
24
|
+
) {
|
|
25
|
+
throw new Error(`unknown schema:${dropTableObj.schema} and table ${dropTableObj.table}`);
|
|
26
|
+
}
|
|
27
|
+
await deleteAttributesFromSystem(dropTableObj);
|
|
28
|
+
await dropTableFromSystem(dropTableObj);
|
|
29
|
+
|
|
30
|
+
let schemaPath = getSchemaPath(dropTableObj.schema, dropTableObj.table);
|
|
31
|
+
try {
|
|
32
|
+
await environmentUtility.deleteEnvironment(schemaPath, dropTableObj.table);
|
|
33
|
+
} catch (e) {
|
|
34
|
+
if (e.message === 'invalid environment') {
|
|
35
|
+
log.warn(`cannot delete environment for ${dropTableObj.schema}.${dropTableObj.table}, environment not found`);
|
|
36
|
+
} else {
|
|
37
|
+
throw e;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
try {
|
|
42
|
+
let transactionPath = getTransactionAuditStorePath(dropTableObj.schema, dropTableObj.table);
|
|
43
|
+
await environmentUtility.deleteEnvironment(transactionPath, dropTableObj.table, true);
|
|
44
|
+
} catch (e) {
|
|
45
|
+
if (e.message === 'invalid environment') {
|
|
46
|
+
log.warn(`cannot delete environment for ${dropTableObj.schema}.${dropTableObj.table}, environment not found`);
|
|
47
|
+
} else {
|
|
48
|
+
throw e;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
} catch (err) {
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
*
|
|
58
|
+
* @param dropTableObj
|
|
59
|
+
* @returns {Promise<void>}
|
|
60
|
+
*/
|
|
61
|
+
async function deleteAttributesFromSystem(dropTableObj) {
|
|
62
|
+
let searchObj = new SearchObject(
|
|
63
|
+
hdbTerms.SYSTEM_SCHEMA_NAME,
|
|
64
|
+
hdbTerms.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,
|
|
65
|
+
hdbTerms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,
|
|
66
|
+
`${dropTableObj.schema}.${dropTableObj.table}`,
|
|
67
|
+
undefined,
|
|
68
|
+
[hdbTerms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
let searchResult = Array.from(await searchByValue(searchObj));
|
|
72
|
+
|
|
73
|
+
let deleteIds = [];
|
|
74
|
+
for (let x = 0; x < searchResult.length; x++) {
|
|
75
|
+
let entry = searchResult[x];
|
|
76
|
+
deleteIds.push(entry.id);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (deleteIds.length === 0) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
let deleteTableObj = new DeleteObject(
|
|
84
|
+
hdbTerms.SYSTEM_SCHEMA_NAME,
|
|
85
|
+
hdbTerms.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,
|
|
86
|
+
deleteIds
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
await deleteRecords(deleteTableObj);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Searches the system table for the table hash, then uses hash to delete table from system.
|
|
94
|
+
* @param dropTableObj
|
|
95
|
+
*/
|
|
96
|
+
async function dropTableFromSystem(dropTableObj) {
|
|
97
|
+
let searchObj = new SearchObject(
|
|
98
|
+
hdbTerms.SYSTEM_SCHEMA_NAME,
|
|
99
|
+
hdbTerms.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,
|
|
100
|
+
hdbTerms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,
|
|
101
|
+
dropTableObj.table,
|
|
102
|
+
undefined,
|
|
103
|
+
[
|
|
104
|
+
hdbTerms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,
|
|
105
|
+
hdbTerms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,
|
|
106
|
+
hdbTerms.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,
|
|
107
|
+
]
|
|
108
|
+
);
|
|
109
|
+
let searchResult;
|
|
110
|
+
let deleteTable;
|
|
111
|
+
try {
|
|
112
|
+
searchResult = Array.from(await searchByValue(searchObj));
|
|
113
|
+
} catch (err) {
|
|
114
|
+
throw err;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Data found by the search function should match the dropTableObject
|
|
118
|
+
for (let x = 0; x < searchResult.length; x++) {
|
|
119
|
+
let item = searchResult[x];
|
|
120
|
+
if (item.name === dropTableObj.table && item.schema === dropTableObj.schema) {
|
|
121
|
+
deleteTable = item;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (!deleteTable) {
|
|
126
|
+
throw new Error(`${dropTableObj.schema}.${dropTableObj.table} was not found`);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
let deleteTableObj = new DeleteObject(hdbTerms.SYSTEM_SCHEMA_NAME, hdbTerms.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME, [
|
|
130
|
+
deleteTable.id,
|
|
131
|
+
]);
|
|
132
|
+
try {
|
|
133
|
+
await deleteRecords(deleteTableObj);
|
|
134
|
+
} catch (err) {
|
|
135
|
+
throw err;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { getSchemaPath } = require('../lmdbUtility/initializePaths.js');
|
|
4
|
+
const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
|
|
5
|
+
|
|
6
|
+
module.exports = {
|
|
7
|
+
flush,
|
|
8
|
+
resetReadTxn,
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* This is wrapper for sync/flush to disk
|
|
13
|
+
* @param schema
|
|
14
|
+
* @param table
|
|
15
|
+
* @returns {Promise<any>}
|
|
16
|
+
*/
|
|
17
|
+
async function flush(schema, table) {
|
|
18
|
+
let environment = await environmentUtility.openEnvironment(getSchemaPath(schema, table), table.toString());
|
|
19
|
+
return environment.flushed;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* This is wrapper for resetting the current read transaction to ensure it is the very latest
|
|
24
|
+
* @param schema
|
|
25
|
+
* @param table
|
|
26
|
+
* @returns {void}
|
|
27
|
+
*/
|
|
28
|
+
async function resetReadTxn(schema, table) {
|
|
29
|
+
try {
|
|
30
|
+
let environment = await environmentUtility.openEnvironment(getSchemaPath(schema, table), table.toString());
|
|
31
|
+
environment.resetReadTxn();
|
|
32
|
+
} catch {
|
|
33
|
+
// if no environment, then the read txn can't be out of date!
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { Readable } = require('stream');
|
|
4
|
+
const { getDatabases } = require('../../../../resources/databases.ts');
|
|
5
|
+
const { readSync, openSync, createReadStream } = require('fs');
|
|
6
|
+
const { open } = require('lmdb');
|
|
7
|
+
const { OpenDBIObject } = require('../../../../utility/lmdb/OpenDBIObject.js');
|
|
8
|
+
const OpenEnvironmentObject = require('../../../../utility/lmdb/OpenEnvironmentObject.js');
|
|
9
|
+
const { AUDIT_STORE_OPTIONS } = require('../../../../resources/auditStore.ts');
|
|
10
|
+
const { INTERNAL_DBIS_NAME, AUDIT_STORE_NAME } = require('../../../../utility/lmdb/terms.js');
|
|
11
|
+
|
|
12
|
+
module.exports = getBackup;
|
|
13
|
+
const META_SIZE = 32768;
|
|
14
|
+
const DELAY_ITERATIONS = 100;
|
|
15
|
+
/**
|
|
16
|
+
* function execute the readTransactionLog operation
|
|
17
|
+
* @param {GetBackupObject} getBackupObj
|
|
18
|
+
* @returns {Promise<[]>}
|
|
19
|
+
*/
|
|
20
|
+
async function getBackup(getBackupObj) {
|
|
21
|
+
const databaseName = getBackupObj.database || getBackupObj.schema || 'data';
|
|
22
|
+
const database = getDatabases()[databaseName];
|
|
23
|
+
const backupDate = new Date().toISOString();
|
|
24
|
+
let tables = getBackupObj.tables || (getBackupObj.table && [getBackupObj.table]);
|
|
25
|
+
if (tables) {
|
|
26
|
+
// if tables are specified, we have to copy the database with just the specified tables and then stream that
|
|
27
|
+
let tableClass = database[tables[0]];
|
|
28
|
+
if (!tableClass) throw new Error(`Can not find table ${tables[0]}`);
|
|
29
|
+
// we use the attribute store to drive this process, finding the right stores to duplicate
|
|
30
|
+
let attributeStore = tableClass.dbisDB;
|
|
31
|
+
let backupRoot = open({ noSync: true, maxDbs: OpenEnvironmentObject.MAX_DBS }); // open a temporary database (this
|
|
32
|
+
// will also cause it to
|
|
33
|
+
// close on completion)
|
|
34
|
+
let resolution;
|
|
35
|
+
let backupAttributeStore = backupRoot.openDB(INTERNAL_DBIS_NAME, new OpenDBIObject(false));
|
|
36
|
+
let readTxn = attributeStore.useReadTransaction();
|
|
37
|
+
let i = 0;
|
|
38
|
+
const copyDatabase = async function (storeName, options) {
|
|
39
|
+
options.encoding = 'binary'; // directly copy bytes
|
|
40
|
+
options.encoder = undefined;
|
|
41
|
+
let backupStore = backupRoot.openDB(storeName, options);
|
|
42
|
+
let sourceStore = attributeStore.openDB(storeName, options);
|
|
43
|
+
for (let { key, version, value } of sourceStore.getRange({
|
|
44
|
+
start: null,
|
|
45
|
+
transaction: readTxn,
|
|
46
|
+
versions: sourceStore.useVersions,
|
|
47
|
+
})) {
|
|
48
|
+
resolution = backupStore.put(key, value, version);
|
|
49
|
+
if (i++ % DELAY_ITERATIONS === 0) {
|
|
50
|
+
await new Promise((resolve) => setTimeout(resolve, 20));
|
|
51
|
+
if (readTxn.openTimer) readTxn.openTimer = 0; // reset any timer monitoring this
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
for (let { key, value: attributeInfo } of attributeStore.getRange({ transaction: readTxn, start: false })) {
|
|
56
|
+
if (tables.some((table) => key.startsWith?.(table + '/'))) {
|
|
57
|
+
// it is a store we need to copy
|
|
58
|
+
backupAttributeStore.put(key, attributeInfo);
|
|
59
|
+
const [, attribute] = key.split('/');
|
|
60
|
+
let isPrimaryKey = !attribute;
|
|
61
|
+
let options = new OpenDBIObject(!isPrimaryKey, isPrimaryKey);
|
|
62
|
+
await copyDatabase(key, options);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (getBackupObj.include_audit) {
|
|
66
|
+
await copyDatabase(AUDIT_STORE_NAME, { ...AUDIT_STORE_OPTIONS });
|
|
67
|
+
}
|
|
68
|
+
await resolution;
|
|
69
|
+
let stream = createReadStream(backupRoot.path);
|
|
70
|
+
stream.headers = getHeaders();
|
|
71
|
+
stream.on('close', () => {
|
|
72
|
+
readTxn.done();
|
|
73
|
+
backupRoot.close(); // this should delete it
|
|
74
|
+
});
|
|
75
|
+
return stream;
|
|
76
|
+
}
|
|
77
|
+
const firstTable = database[Object.keys(database)[0]];
|
|
78
|
+
const store = firstTable.primaryStore;
|
|
79
|
+
|
|
80
|
+
let fd = openSync(store.path);
|
|
81
|
+
return store.transaction(() => {
|
|
82
|
+
let metaBuffers = Buffer.alloc(META_SIZE);
|
|
83
|
+
readSync(fd, metaBuffers, 0, META_SIZE); // sync, need to do this as fast as possible since we are in a write txn
|
|
84
|
+
store.resetReadTxn(); // make sure we are not using a cached read transaction, force a fresh one
|
|
85
|
+
let readTxn = store.useReadTransaction(); // this guarantees the current transaction is preserved in the backup
|
|
86
|
+
// renew is necessary because normally renew is actually lazily called on the next db operation, but
|
|
87
|
+
// we are not performing any db operations
|
|
88
|
+
readTxn.renew();
|
|
89
|
+
// create a file stream that starts after the meta area
|
|
90
|
+
let fileStream = createReadStream(null, { fd, start: META_SIZE });
|
|
91
|
+
let stream = new Readable.from(
|
|
92
|
+
(async function* () {
|
|
93
|
+
yield metaBuffers; // return the meta area that was frozen inside the write transaction
|
|
94
|
+
for await (const chunk of fileStream) {
|
|
95
|
+
if (readTxn.openTimer) readTxn.openTimer = 0; // reset any timer monitoring this
|
|
96
|
+
yield chunk;
|
|
97
|
+
}
|
|
98
|
+
readTxn.done(); // done with the read txn
|
|
99
|
+
})()
|
|
100
|
+
);
|
|
101
|
+
stream.headers = getHeaders();
|
|
102
|
+
return stream;
|
|
103
|
+
});
|
|
104
|
+
function getHeaders() {
|
|
105
|
+
const headers = new Map();
|
|
106
|
+
headers.set('content-type', 'application/octet-stream');
|
|
107
|
+
headers.set('content-disposition', `attachment; filename="${databaseName}"`);
|
|
108
|
+
headers.set('date', backupDate);
|
|
109
|
+
return headers;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const searchUtility = require('../../../../utility/lmdb/searchUtility.js');
|
|
4
|
+
const hashSearchInit = require('../lmdbUtility/initializeHashSearch.js');
|
|
5
|
+
|
|
6
|
+
module.exports = lmdbGetDataByHash;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* fetches records by their hash values and returns a map of the results
|
|
10
|
+
* @param {SearchByHashObject} searchObject
|
|
11
|
+
*/
|
|
12
|
+
async function lmdbGetDataByHash(searchObject) {
|
|
13
|
+
let environment = await hashSearchInit(searchObject);
|
|
14
|
+
let transaction = environment.useReadTransaction();
|
|
15
|
+
transaction.database = environment;
|
|
16
|
+
|
|
17
|
+
const tableInfo = global.hdb_schema[searchObject.schema][searchObject.table];
|
|
18
|
+
try {
|
|
19
|
+
return searchUtility.batchSearchByHashToMap(
|
|
20
|
+
transaction,
|
|
21
|
+
tableInfo.hash_attribute,
|
|
22
|
+
searchObject.get_attributes,
|
|
23
|
+
searchObject.hash_values
|
|
24
|
+
);
|
|
25
|
+
} finally {
|
|
26
|
+
transaction.done();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const searchValidator = require('../../../../validation/searchValidator.js');
|
|
4
|
+
const commonUtils = require('../../../../utility/common_utils.js');
|
|
5
|
+
const hdbTerms = require('../../../../utility/hdbTerms.ts');
|
|
6
|
+
const lmdbSearch = require('../lmdbUtility/lmdbSearch.js');
|
|
7
|
+
|
|
8
|
+
module.exports = lmdbGetDataByValue;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* gets records by value returns a map of objects
|
|
12
|
+
* @param {SearchObject} searchObject
|
|
13
|
+
* @param {hdbTerms.VALUE_SEARCH_COMPARATORS} [comparator]
|
|
14
|
+
* @returns {{String|Number, Object}}
|
|
15
|
+
*/
|
|
16
|
+
function lmdbGetDataByValue(searchObject, comparator) {
|
|
17
|
+
let comparatorSearch = !commonUtils.isEmpty(comparator);
|
|
18
|
+
if (comparatorSearch && hdbTerms.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[comparator] === undefined) {
|
|
19
|
+
throw new Error(`Value search comparator - ${comparator} - is not valid`);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
let validationError = searchValidator(searchObject, 'value');
|
|
23
|
+
if (validationError) {
|
|
24
|
+
throw validationError;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
let returnMap = true;
|
|
28
|
+
return lmdbSearch.prepSearch(searchObject, comparator, returnMap);
|
|
29
|
+
}
|