@fluidframework/container-runtime 1.4.0-121020 → 2.0.0-dev-rc.1.0.0.224419
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/.eslintrc.js +19 -29
- package/.mocharc.js +12 -0
- package/CHANGELOG.md +427 -0
- package/README.md +69 -0
- package/api-extractor-lint.json +4 -0
- package/api-extractor.json +2 -2
- package/api-report/container-runtime.api.md +863 -0
- package/dist/{batchTracker.js → batchTracker.cjs} +9 -8
- package/dist/batchTracker.cjs.map +1 -0
- package/dist/batchTracker.d.ts +6 -5
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/blobManager.cjs +704 -0
- package/dist/blobManager.cjs.map +1 -0
- package/dist/blobManager.d.ts +135 -39
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/connectionTelemetry.cjs +230 -0
- package/dist/connectionTelemetry.cjs.map +1 -0
- package/dist/connectionTelemetry.d.ts +2 -2
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/container-runtime-alpha.d.ts +1677 -0
- package/dist/container-runtime-beta.d.ts +250 -0
- package/dist/container-runtime-public.d.ts +250 -0
- package/dist/container-runtime-untrimmed.d.ts +1792 -0
- package/dist/{containerHandleContext.js → containerHandleContext.cjs} +4 -2
- package/dist/containerHandleContext.cjs.map +1 -0
- package/dist/containerHandleContext.d.ts.map +1 -1
- package/dist/containerRuntime.cjs +2531 -0
- package/dist/containerRuntime.cjs.map +1 -0
- package/dist/containerRuntime.d.ts +454 -256
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/{dataStore.js → dataStore.cjs} +54 -45
- package/dist/dataStore.cjs.map +1 -0
- package/dist/dataStore.d.ts +2 -2
- package/dist/dataStore.d.ts.map +1 -1
- package/dist/{dataStoreContext.js → dataStoreContext.cjs} +343 -247
- package/dist/dataStoreContext.cjs.map +1 -0
- package/dist/dataStoreContext.d.ts +73 -41
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/{dataStoreContexts.js → dataStoreContexts.cjs} +19 -15
- package/dist/dataStoreContexts.cjs.map +1 -0
- package/dist/dataStoreContexts.d.ts +1 -1
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/{dataStoreRegistry.js → dataStoreRegistry.cjs} +9 -4
- package/dist/dataStoreRegistry.cjs.map +1 -0
- package/dist/dataStoreRegistry.d.ts +3 -0
- package/dist/dataStoreRegistry.d.ts.map +1 -1
- package/dist/{dataStores.js → dataStores.cjs} +273 -124
- package/dist/dataStores.cjs.map +1 -0
- package/dist/dataStores.d.ts +53 -23
- package/dist/dataStores.d.ts.map +1 -1
- package/dist/deltaManagerProxyBase.cjs +77 -0
- package/dist/deltaManagerProxyBase.cjs.map +1 -0
- package/dist/deltaManagerProxyBase.d.ts +35 -0
- package/dist/deltaManagerProxyBase.d.ts.map +1 -0
- package/dist/deltaManagerSummarizerProxy.cjs +42 -0
- package/dist/deltaManagerSummarizerProxy.cjs.map +1 -0
- package/dist/deltaManagerSummarizerProxy.d.ts +19 -0
- package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -0
- package/dist/{deltaScheduler.js → deltaScheduler.cjs} +25 -18
- package/dist/deltaScheduler.cjs.map +1 -0
- package/dist/deltaScheduler.d.ts +8 -6
- package/dist/deltaScheduler.d.ts.map +1 -1
- package/dist/error.cjs +21 -0
- package/dist/error.cjs.map +1 -0
- package/dist/error.d.ts +14 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/gc/garbageCollection.cjs +861 -0
- package/dist/gc/garbageCollection.cjs.map +1 -0
- package/dist/gc/garbageCollection.d.ts +224 -0
- package/dist/gc/garbageCollection.d.ts.map +1 -0
- package/dist/gc/gcConfigs.cjs +153 -0
- package/dist/gc/gcConfigs.cjs.map +1 -0
- package/dist/gc/gcConfigs.d.ts +23 -0
- package/dist/gc/gcConfigs.d.ts.map +1 -0
- package/dist/gc/gcDefinitions.cjs +96 -0
- package/dist/gc/gcDefinitions.cjs.map +1 -0
- package/dist/gc/gcDefinitions.d.ts +437 -0
- package/dist/gc/gcDefinitions.d.ts.map +1 -0
- package/dist/gc/gcHelpers.cjs +235 -0
- package/dist/gc/gcHelpers.cjs.map +1 -0
- package/dist/gc/gcHelpers.d.ts +71 -0
- package/dist/gc/gcHelpers.d.ts.map +1 -0
- package/dist/gc/gcReferenceGraphAlgorithm.cjs +49 -0
- package/dist/gc/gcReferenceGraphAlgorithm.cjs.map +1 -0
- package/dist/gc/gcReferenceGraphAlgorithm.d.ts +16 -0
- package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
- package/dist/{summarizerTypes.js → gc/gcSummaryDefinitions.cjs} +1 -6
- package/dist/gc/gcSummaryDefinitions.cjs.map +1 -0
- package/dist/gc/gcSummaryDefinitions.d.ts +52 -0
- package/dist/gc/gcSummaryDefinitions.d.ts.map +1 -0
- package/dist/gc/gcSummaryStateTracker.cjs +213 -0
- package/dist/gc/gcSummaryStateTracker.cjs.map +1 -0
- package/dist/gc/gcSummaryStateTracker.d.ts +94 -0
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -0
- package/dist/gc/gcTelemetry.cjs +298 -0
- package/dist/gc/gcTelemetry.cjs.map +1 -0
- package/dist/gc/gcTelemetry.d.ts +92 -0
- package/dist/gc/gcTelemetry.d.ts.map +1 -0
- package/dist/gc/gcUnreferencedStateTracker.cjs +118 -0
- package/dist/gc/gcUnreferencedStateTracker.cjs.map +1 -0
- package/dist/gc/gcUnreferencedStateTracker.d.ts +40 -0
- package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
- package/dist/gc/index.cjs +44 -0
- package/dist/gc/index.cjs.map +1 -0
- package/dist/gc/index.d.ts +13 -0
- package/dist/gc/index.d.ts.map +1 -0
- package/dist/index.cjs +47 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +19 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/messageTypes.cjs +37 -0
- package/dist/messageTypes.cjs.map +1 -0
- package/dist/messageTypes.d.ts +142 -0
- package/dist/messageTypes.d.ts.map +1 -0
- package/dist/metadata.cjs +7 -0
- package/dist/metadata.cjs.map +1 -0
- package/dist/metadata.d.ts +24 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/opLifecycle/batchManager.cjs +139 -0
- package/dist/opLifecycle/batchManager.cjs.map +1 -0
- package/dist/opLifecycle/batchManager.d.ts +48 -0
- package/dist/opLifecycle/batchManager.d.ts.map +1 -0
- package/dist/opLifecycle/definitions.cjs +7 -0
- package/dist/opLifecycle/definitions.cjs.map +1 -0
- package/dist/opLifecycle/definitions.d.ts +83 -0
- package/dist/opLifecycle/definitions.d.ts.map +1 -0
- package/dist/opLifecycle/index.cjs +26 -0
- package/dist/opLifecycle/index.cjs.map +1 -0
- package/dist/opLifecycle/index.d.ts +13 -0
- package/dist/opLifecycle/index.d.ts.map +1 -0
- package/dist/opLifecycle/opCompressor.cjs +84 -0
- package/dist/opLifecycle/opCompressor.cjs.map +1 -0
- package/dist/opLifecycle/opCompressor.d.ts +18 -0
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -0
- package/dist/opLifecycle/opDecompressor.cjs +132 -0
- package/dist/opLifecycle/opDecompressor.cjs.map +1 -0
- package/dist/opLifecycle/opDecompressor.d.ts +25 -0
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -0
- package/dist/opLifecycle/opGroupingManager.cjs +95 -0
- package/dist/opLifecycle/opGroupingManager.cjs.map +1 -0
- package/dist/opLifecycle/opGroupingManager.d.ts +22 -0
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -0
- package/dist/opLifecycle/opSplitter.cjs +202 -0
- package/dist/opLifecycle/opSplitter.cjs.map +1 -0
- package/dist/opLifecycle/opSplitter.d.ts +61 -0
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -0
- package/dist/opLifecycle/outbox.cjs +323 -0
- package/dist/opLifecycle/outbox.cjs.map +1 -0
- package/dist/opLifecycle/outbox.d.ts +104 -0
- package/dist/opLifecycle/outbox.d.ts.map +1 -0
- package/dist/opLifecycle/remoteMessageProcessor.cjs +136 -0
- package/dist/opLifecycle/remoteMessageProcessor.cjs.map +1 -0
- package/dist/opLifecycle/remoteMessageProcessor.d.ts +47 -0
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
- package/dist/opProperties.cjs +17 -0
- package/dist/opProperties.cjs.map +1 -0
- package/dist/opProperties.d.ts +7 -0
- package/dist/opProperties.d.ts.map +1 -0
- package/dist/{packageVersion.js → packageVersion.cjs} +2 -2
- package/dist/packageVersion.cjs.map +1 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/pendingStateManager.cjs +282 -0
- package/dist/pendingStateManager.cjs.map +1 -0
- package/dist/pendingStateManager.d.ts +32 -69
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/scheduleManager.cjs +258 -0
- package/dist/scheduleManager.cjs.map +1 -0
- package/dist/scheduleManager.d.ts +31 -0
- package/dist/scheduleManager.d.ts.map +1 -0
- package/dist/storageServiceWithAttachBlobs.cjs +32 -0
- package/dist/storageServiceWithAttachBlobs.cjs.map +1 -0
- package/dist/storageServiceWithAttachBlobs.d.ts +17 -0
- package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -0
- package/dist/summary/index.cjs +51 -0
- package/dist/summary/index.cjs.map +1 -0
- package/dist/summary/index.d.ts +17 -0
- package/dist/summary/index.d.ts.map +1 -0
- package/dist/{orderedClientElection.js → summary/orderedClientElection.cjs} +100 -84
- package/dist/summary/orderedClientElection.cjs.map +1 -0
- package/{lib → dist/summary}/orderedClientElection.d.ts +41 -18
- package/dist/summary/orderedClientElection.d.ts.map +1 -0
- package/dist/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.cjs} +12 -10
- package/dist/summary/runWhileConnectedCoordinator.cjs.map +1 -0
- package/{lib → dist/summary}/runWhileConnectedCoordinator.d.ts +8 -2
- package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
- package/dist/summary/runningSummarizer.cjs +679 -0
- package/dist/summary/runningSummarizer.cjs.map +1 -0
- package/dist/summary/runningSummarizer.d.ts +128 -0
- package/dist/summary/runningSummarizer.d.ts.map +1 -0
- package/dist/summary/summarizer.cjs +263 -0
- package/dist/summary/summarizer.cjs.map +1 -0
- package/dist/{summarizer.d.ts → summary/summarizer.d.ts} +18 -33
- package/dist/summary/summarizer.d.ts.map +1 -0
- package/dist/{summarizerClientElection.js → summary/summarizerClientElection.cjs} +15 -46
- package/dist/summary/summarizerClientElection.cjs.map +1 -0
- package/{lib → dist/summary}/summarizerClientElection.d.ts +4 -4
- package/dist/summary/summarizerClientElection.d.ts.map +1 -0
- package/dist/summary/summarizerHeuristics.cjs +156 -0
- package/dist/summary/summarizerHeuristics.cjs.map +1 -0
- package/{lib → dist/summary}/summarizerHeuristics.d.ts +28 -6
- package/dist/summary/summarizerHeuristics.d.ts.map +1 -0
- package/dist/summary/summarizerNode/index.cjs +12 -0
- package/dist/summary/summarizerNode/index.cjs.map +1 -0
- package/dist/summary/summarizerNode/index.d.ts +8 -0
- package/dist/summary/summarizerNode/index.d.ts.map +1 -0
- package/dist/summary/summarizerNode/summarizerNode.cjs +526 -0
- package/dist/summary/summarizerNode/summarizerNode.cjs.map +1 -0
- package/dist/summary/summarizerNode/summarizerNode.d.ts +167 -0
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.cjs +130 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.cjs.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +121 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.cjs +375 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.cjs.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +153 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
- package/dist/summary/summarizerTypes.cjs +7 -0
- package/dist/summary/summarizerTypes.cjs.map +1 -0
- package/{lib → dist/summary}/summarizerTypes.d.ts +233 -83
- package/dist/summary/summarizerTypes.d.ts.map +1 -0
- package/dist/{summaryCollection.js → summary/summaryCollection.cjs} +80 -49
- package/dist/summary/summaryCollection.cjs.map +1 -0
- package/dist/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +23 -5
- package/dist/summary/summaryCollection.d.ts.map +1 -0
- package/dist/{summaryFormat.js → summary/summaryFormat.cjs} +29 -26
- package/dist/summary/summaryFormat.cjs.map +1 -0
- package/{lib → dist/summary}/summaryFormat.d.ts +25 -30
- package/dist/summary/summaryFormat.d.ts.map +1 -0
- package/dist/{summaryGenerator.js → summary/summaryGenerator.cjs} +162 -74
- package/dist/summary/summaryGenerator.cjs.map +1 -0
- package/dist/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +53 -11
- package/dist/summary/summaryGenerator.d.ts.map +1 -0
- package/dist/{summaryManager.js → summary/summaryManager.cjs} +98 -55
- package/dist/summary/summaryManager.cjs.map +1 -0
- package/{lib → dist/summary}/summaryManager.d.ts +13 -11
- package/dist/summary/summaryManager.d.ts.map +1 -0
- package/dist/{throttler.js → throttler.cjs} +21 -21
- package/dist/throttler.cjs.map +1 -0
- package/dist/throttler.d.ts +2 -2
- package/dist/throttler.d.ts.map +1 -1
- package/dist/tsdoc-metadata.json +11 -0
- package/lib/{batchTracker.d.ts → batchTracker.d.mts} +6 -5
- package/lib/batchTracker.d.mts.map +1 -0
- package/lib/{batchTracker.js → batchTracker.mjs} +9 -8
- package/lib/batchTracker.mjs.map +1 -0
- package/lib/blobManager.d.mts +191 -0
- package/lib/blobManager.d.mts.map +1 -0
- package/lib/blobManager.mjs +699 -0
- package/lib/blobManager.mjs.map +1 -0
- package/lib/{connectionTelemetry.d.ts → connectionTelemetry.d.mts} +2 -2
- package/lib/connectionTelemetry.d.mts.map +1 -0
- package/lib/connectionTelemetry.mjs +226 -0
- package/lib/connectionTelemetry.mjs.map +1 -0
- package/lib/container-runtime-alpha.d.mts +1677 -0
- package/lib/container-runtime-beta.d.mts +250 -0
- package/lib/container-runtime-public.d.mts +250 -0
- package/lib/container-runtime-untrimmed.d.mts +1792 -0
- package/lib/{containerHandleContext.d.ts → containerHandleContext.d.mts} +1 -1
- package/lib/containerHandleContext.d.mts.map +1 -0
- package/lib/{containerHandleContext.js → containerHandleContext.mjs} +4 -2
- package/lib/containerHandleContext.mjs.map +1 -0
- package/lib/containerRuntime.d.mts +809 -0
- package/lib/containerRuntime.d.mts.map +1 -0
- package/lib/containerRuntime.mjs +2526 -0
- package/lib/containerRuntime.mjs.map +1 -0
- package/lib/{dataStore.d.ts → dataStore.d.mts} +4 -4
- package/lib/dataStore.d.mts.map +1 -0
- package/lib/{dataStore.js → dataStore.mjs} +52 -43
- package/lib/dataStore.mjs.map +1 -0
- package/lib/{dataStoreContext.d.ts → dataStoreContext.d.mts} +74 -42
- package/lib/dataStoreContext.d.mts.map +1 -0
- package/lib/{dataStoreContext.js → dataStoreContext.mjs} +309 -213
- package/lib/dataStoreContext.mjs.map +1 -0
- package/lib/{dataStoreContexts.d.ts → dataStoreContexts.d.mts} +2 -2
- package/lib/dataStoreContexts.d.mts.map +1 -0
- package/lib/{dataStoreContexts.js → dataStoreContexts.mjs} +12 -8
- package/lib/dataStoreContexts.mjs.map +1 -0
- package/lib/{dataStoreRegistry.d.ts → dataStoreRegistry.d.mts} +3 -0
- package/lib/dataStoreRegistry.d.mts.map +1 -0
- package/lib/{dataStoreRegistry.js → dataStoreRegistry.mjs} +7 -6
- package/lib/dataStoreRegistry.mjs.map +1 -0
- package/lib/{dataStores.d.ts → dataStores.d.mts} +56 -26
- package/lib/dataStores.d.mts.map +1 -0
- package/lib/{dataStores.js → dataStores.mjs} +254 -105
- package/lib/dataStores.mjs.map +1 -0
- package/lib/deltaManagerProxyBase.d.mts +35 -0
- package/lib/deltaManagerProxyBase.d.mts.map +1 -0
- package/lib/deltaManagerProxyBase.mjs +73 -0
- package/lib/deltaManagerProxyBase.mjs.map +1 -0
- package/lib/deltaManagerSummarizerProxy.d.mts +19 -0
- package/lib/deltaManagerSummarizerProxy.d.mts.map +1 -0
- package/lib/deltaManagerSummarizerProxy.mjs +38 -0
- package/lib/deltaManagerSummarizerProxy.mjs.map +1 -0
- package/lib/{deltaScheduler.d.ts → deltaScheduler.d.mts} +8 -6
- package/lib/deltaScheduler.d.mts.map +1 -0
- package/lib/{deltaScheduler.js → deltaScheduler.mjs} +22 -15
- package/lib/deltaScheduler.mjs.map +1 -0
- package/lib/error.d.mts +14 -0
- package/lib/error.d.mts.map +1 -0
- package/lib/error.mjs +17 -0
- package/lib/error.mjs.map +1 -0
- package/lib/gc/garbageCollection.d.mts +224 -0
- package/lib/gc/garbageCollection.d.mts.map +1 -0
- package/lib/gc/garbageCollection.mjs +857 -0
- package/lib/gc/garbageCollection.mjs.map +1 -0
- package/lib/gc/gcConfigs.d.mts +23 -0
- package/lib/gc/gcConfigs.d.mts.map +1 -0
- package/lib/gc/gcConfigs.mjs +149 -0
- package/lib/gc/gcConfigs.mjs.map +1 -0
- package/lib/gc/gcDefinitions.d.mts +437 -0
- package/lib/gc/gcDefinitions.d.mts.map +1 -0
- package/lib/gc/gcDefinitions.mjs +93 -0
- package/lib/gc/gcDefinitions.mjs.map +1 -0
- package/lib/gc/gcHelpers.d.mts +71 -0
- package/lib/gc/gcHelpers.d.mts.map +1 -0
- package/lib/gc/gcHelpers.mjs +222 -0
- package/lib/gc/gcHelpers.mjs.map +1 -0
- package/lib/gc/gcReferenceGraphAlgorithm.d.mts +16 -0
- package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +1 -0
- package/lib/gc/gcReferenceGraphAlgorithm.mjs +45 -0
- package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +1 -0
- package/lib/gc/gcSummaryDefinitions.d.mts +52 -0
- package/lib/gc/gcSummaryDefinitions.d.mts.map +1 -0
- package/lib/gc/gcSummaryDefinitions.mjs +6 -0
- package/lib/gc/gcSummaryDefinitions.mjs.map +1 -0
- package/lib/gc/gcSummaryStateTracker.d.mts +94 -0
- package/lib/gc/gcSummaryStateTracker.d.mts.map +1 -0
- package/lib/gc/gcSummaryStateTracker.mjs +209 -0
- package/lib/gc/gcSummaryStateTracker.mjs.map +1 -0
- package/lib/gc/gcTelemetry.d.mts +92 -0
- package/lib/gc/gcTelemetry.d.mts.map +1 -0
- package/lib/gc/gcTelemetry.mjs +293 -0
- package/lib/gc/gcTelemetry.mjs.map +1 -0
- package/lib/gc/gcUnreferencedStateTracker.d.mts +40 -0
- package/lib/gc/gcUnreferencedStateTracker.d.mts.map +1 -0
- package/lib/gc/gcUnreferencedStateTracker.mjs +114 -0
- package/lib/gc/gcUnreferencedStateTracker.mjs.map +1 -0
- package/lib/gc/index.d.mts +13 -0
- package/lib/gc/index.d.mts.map +1 -0
- package/lib/gc/index.mjs +12 -0
- package/lib/gc/index.mjs.map +1 -0
- package/lib/index.d.mts +25 -0
- package/lib/index.d.mts.map +1 -0
- package/lib/index.mjs +24 -0
- package/lib/index.mjs.map +1 -0
- package/lib/messageTypes.d.mts +142 -0
- package/lib/messageTypes.d.mts.map +1 -0
- package/lib/messageTypes.mjs +34 -0
- package/lib/messageTypes.mjs.map +1 -0
- package/lib/metadata.d.mts +24 -0
- package/lib/metadata.d.mts.map +1 -0
- package/lib/metadata.mjs +6 -0
- package/lib/metadata.mjs.map +1 -0
- package/lib/opLifecycle/batchManager.d.mts +48 -0
- package/lib/opLifecycle/batchManager.d.mts.map +1 -0
- package/lib/opLifecycle/batchManager.mjs +133 -0
- package/lib/opLifecycle/batchManager.mjs.map +1 -0
- package/lib/opLifecycle/definitions.d.mts +83 -0
- package/lib/opLifecycle/definitions.d.mts.map +1 -0
- package/lib/opLifecycle/definitions.mjs +6 -0
- package/lib/opLifecycle/definitions.mjs.map +1 -0
- package/lib/opLifecycle/index.d.mts +13 -0
- package/lib/opLifecycle/index.d.mts.map +1 -0
- package/lib/opLifecycle/index.mjs +12 -0
- package/lib/opLifecycle/index.mjs.map +1 -0
- package/lib/opLifecycle/opCompressor.d.mts +18 -0
- package/lib/opLifecycle/opCompressor.d.mts.map +1 -0
- package/lib/opLifecycle/opCompressor.mjs +80 -0
- package/lib/opLifecycle/opCompressor.mjs.map +1 -0
- package/lib/opLifecycle/opDecompressor.d.mts +25 -0
- package/lib/opLifecycle/opDecompressor.d.mts.map +1 -0
- package/lib/opLifecycle/opDecompressor.mjs +128 -0
- package/lib/opLifecycle/opDecompressor.mjs.map +1 -0
- package/lib/opLifecycle/opGroupingManager.d.mts +22 -0
- package/lib/opLifecycle/opGroupingManager.d.mts.map +1 -0
- package/lib/opLifecycle/opGroupingManager.mjs +91 -0
- package/lib/opLifecycle/opGroupingManager.mjs.map +1 -0
- package/lib/opLifecycle/opSplitter.d.mts +61 -0
- package/lib/opLifecycle/opSplitter.d.mts.map +1 -0
- package/lib/opLifecycle/opSplitter.mjs +197 -0
- package/lib/opLifecycle/opSplitter.mjs.map +1 -0
- package/lib/opLifecycle/outbox.d.mts +104 -0
- package/lib/opLifecycle/outbox.d.mts.map +1 -0
- package/lib/opLifecycle/outbox.mjs +318 -0
- package/lib/opLifecycle/outbox.mjs.map +1 -0
- package/lib/opLifecycle/remoteMessageProcessor.d.mts +47 -0
- package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +1 -0
- package/lib/opLifecycle/remoteMessageProcessor.mjs +131 -0
- package/lib/opLifecycle/remoteMessageProcessor.mjs.map +1 -0
- package/lib/opProperties.d.mts +7 -0
- package/lib/opProperties.d.mts.map +1 -0
- package/lib/opProperties.mjs +13 -0
- package/lib/opProperties.mjs.map +1 -0
- package/lib/{packageVersion.d.ts → packageVersion.d.mts} +1 -1
- package/lib/{packageVersion.d.ts.map → packageVersion.d.mts.map} +1 -1
- package/lib/{packageVersion.js → packageVersion.mjs} +2 -2
- package/lib/packageVersion.mjs.map +1 -0
- package/lib/{pendingStateManager.d.ts → pendingStateManager.d.mts} +32 -69
- package/lib/pendingStateManager.d.mts.map +1 -0
- package/lib/pendingStateManager.mjs +275 -0
- package/lib/pendingStateManager.mjs.map +1 -0
- package/lib/scheduleManager.d.mts +27 -0
- package/lib/scheduleManager.d.mts.map +1 -0
- package/lib/scheduleManager.mjs +254 -0
- package/lib/scheduleManager.mjs.map +1 -0
- package/lib/storageServiceWithAttachBlobs.d.mts +17 -0
- package/lib/storageServiceWithAttachBlobs.d.mts.map +1 -0
- package/lib/storageServiceWithAttachBlobs.mjs +28 -0
- package/lib/storageServiceWithAttachBlobs.mjs.map +1 -0
- package/lib/summary/index.d.mts +17 -0
- package/lib/summary/index.d.mts.map +1 -0
- package/lib/summary/index.mjs +16 -0
- package/lib/summary/index.mjs.map +1 -0
- package/{dist/orderedClientElection.d.ts → lib/summary/orderedClientElection.d.mts} +41 -22
- package/lib/summary/orderedClientElection.d.mts.map +1 -0
- package/lib/{orderedClientElection.js → summary/orderedClientElection.mjs} +95 -79
- package/lib/summary/orderedClientElection.mjs.map +1 -0
- package/{dist/runWhileConnectedCoordinator.d.ts → lib/summary/runWhileConnectedCoordinator.d.mts} +9 -3
- package/lib/summary/runWhileConnectedCoordinator.d.mts.map +1 -0
- package/lib/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.mjs} +12 -10
- package/lib/summary/runWhileConnectedCoordinator.mjs.map +1 -0
- package/lib/summary/runningSummarizer.d.mts +128 -0
- package/lib/summary/runningSummarizer.d.mts.map +1 -0
- package/lib/summary/runningSummarizer.mjs +675 -0
- package/lib/summary/runningSummarizer.mjs.map +1 -0
- package/lib/{summarizer.d.ts → summary/summarizer.d.mts} +20 -35
- package/lib/summary/summarizer.d.mts.map +1 -0
- package/lib/summary/summarizer.mjs +257 -0
- package/lib/summary/summarizer.mjs.map +1 -0
- package/{dist/summarizerClientElection.d.ts → lib/summary/summarizerClientElection.d.mts} +6 -6
- package/lib/summary/summarizerClientElection.d.mts.map +1 -0
- package/lib/{summarizerClientElection.js → summary/summarizerClientElection.mjs} +14 -45
- package/lib/summary/summarizerClientElection.mjs.map +1 -0
- package/{dist/summarizerHeuristics.d.ts → lib/summary/summarizerHeuristics.d.mts} +29 -7
- package/lib/summary/summarizerHeuristics.d.mts.map +1 -0
- package/lib/summary/summarizerHeuristics.mjs +151 -0
- package/lib/summary/summarizerHeuristics.mjs.map +1 -0
- package/lib/summary/summarizerNode/index.d.mts +8 -0
- package/lib/summary/summarizerNode/index.d.mts.map +1 -0
- package/lib/summary/summarizerNode/index.mjs +7 -0
- package/lib/summary/summarizerNode/index.mjs.map +1 -0
- package/lib/summary/summarizerNode/summarizerNode.d.mts +167 -0
- package/lib/summary/summarizerNode/summarizerNode.d.mts.map +1 -0
- package/lib/summary/summarizerNode/summarizerNode.mjs +521 -0
- package/lib/summary/summarizerNode/summarizerNode.mjs.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts +121 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.mjs +123 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts +153 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs +370 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +1 -0
- package/{dist/summarizerTypes.d.ts → lib/summary/summarizerTypes.d.mts} +234 -84
- package/lib/summary/summarizerTypes.d.mts.map +1 -0
- package/lib/summary/summarizerTypes.mjs +6 -0
- package/lib/summary/summarizerTypes.mjs.map +1 -0
- package/lib/{summaryCollection.d.ts → summary/summaryCollection.d.mts} +23 -5
- package/lib/summary/summaryCollection.d.mts.map +1 -0
- package/lib/{summaryCollection.js → summary/summaryCollection.mjs} +76 -45
- package/lib/summary/summaryCollection.mjs.map +1 -0
- package/{dist/summaryFormat.d.ts → lib/summary/summaryFormat.d.mts} +25 -30
- package/lib/summary/summaryFormat.d.mts.map +1 -0
- package/lib/{summaryFormat.js → summary/summaryFormat.mjs} +30 -26
- package/lib/summary/summaryFormat.mjs.map +1 -0
- package/lib/summary/summaryGenerator.d.mts +127 -0
- package/lib/summary/summaryGenerator.d.mts.map +1 -0
- package/lib/{summaryGenerator.js → summary/summaryGenerator.mjs} +153 -67
- package/lib/summary/summaryGenerator.mjs.map +1 -0
- package/{dist/summaryManager.d.ts → lib/summary/summaryManager.d.mts} +15 -13
- package/lib/summary/summaryManager.d.mts.map +1 -0
- package/lib/{summaryManager.js → summary/summaryManager.mjs} +94 -51
- package/lib/summary/summaryManager.mjs.map +1 -0
- package/lib/{throttler.d.ts → throttler.d.mts} +2 -2
- package/lib/throttler.d.mts.map +1 -0
- package/lib/{throttler.js → throttler.mjs} +21 -21
- package/lib/throttler.mjs.map +1 -0
- package/package.json +173 -72
- package/prettier.config.cjs +8 -0
- package/src/batchTracker.ts +59 -54
- package/src/blobManager.ts +937 -294
- package/src/connectionTelemetry.ts +342 -252
- package/src/containerHandleContext.ts +27 -29
- package/src/containerRuntime.ts +3879 -3143
- package/src/dataStore.ts +170 -140
- package/src/dataStoreContext.ts +1166 -986
- package/src/dataStoreContexts.ts +176 -163
- package/src/dataStoreRegistry.ts +29 -21
- package/src/dataStores.ts +921 -678
- package/src/deltaManagerProxyBase.ts +111 -0
- package/src/deltaManagerSummarizerProxy.ts +49 -0
- package/src/deltaScheduler.ts +161 -156
- package/src/error.ts +21 -0
- package/src/gc/garbageCollection.md +106 -0
- package/src/gc/garbageCollection.ts +1153 -0
- package/src/gc/gcConfigs.ts +216 -0
- package/src/gc/gcDefinitions.ts +502 -0
- package/src/gc/gcHelpers.ts +284 -0
- package/src/gc/gcReferenceGraphAlgorithm.ts +52 -0
- package/src/gc/gcSummaryDefinitions.ts +54 -0
- package/src/gc/gcSummaryStateTracker.ts +299 -0
- package/src/gc/gcTelemetry.ts +423 -0
- package/src/gc/gcUnreferencedStateTracker.ts +153 -0
- package/src/gc/index.ts +59 -0
- package/src/index.ts +101 -74
- package/src/messageTypes.ts +238 -0
- package/src/metadata.ts +26 -0
- package/src/opLifecycle/README.md +321 -0
- package/src/opLifecycle/batchManager.ts +179 -0
- package/src/opLifecycle/definitions.ts +89 -0
- package/src/opLifecycle/index.ts +19 -0
- package/src/opLifecycle/opCompressor.ts +99 -0
- package/src/opLifecycle/opDecompressor.ts +190 -0
- package/src/opLifecycle/opGroupingManager.ts +133 -0
- package/src/opLifecycle/opSplitter.ts +279 -0
- package/src/opLifecycle/outbox.ts +471 -0
- package/src/opLifecycle/remoteMessageProcessor.ts +175 -0
- package/src/opProperties.ts +21 -0
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +396 -465
- package/src/scheduleManager.ts +358 -0
- package/src/storageServiceWithAttachBlobs.ts +38 -0
- package/src/summary/index.ts +109 -0
- package/src/summary/orderedClientElection.ts +571 -0
- package/src/summary/runWhileConnectedCoordinator.ts +117 -0
- package/src/summary/runningSummarizer.ts +920 -0
- package/src/summary/summarizer.ts +352 -0
- package/src/summary/summarizerClientElection.ts +140 -0
- package/src/summary/summarizerHeuristics.ts +227 -0
- package/src/summary/summarizerNode/index.ts +12 -0
- package/src/summary/summarizerNode/summarizerNode.ts +725 -0
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +206 -0
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +571 -0
- package/src/summary/summarizerTypes.ts +631 -0
- package/src/summary/summaryCollection.ts +474 -0
- package/src/summary/summaryFormat.ts +249 -0
- package/src/summary/summaryGenerator.ts +539 -0
- package/src/summary/summaryManager.ts +452 -0
- package/src/throttler.ts +131 -122
- package/tsc-multi.test.json +4 -0
- package/tsconfig.json +11 -13
- package/dist/batchTracker.js.map +0 -1
- package/dist/blobManager.js +0 -249
- package/dist/blobManager.js.map +0 -1
- package/dist/connectionTelemetry.js +0 -178
- package/dist/connectionTelemetry.js.map +0 -1
- package/dist/containerHandleContext.js.map +0 -1
- package/dist/containerRuntime.js +0 -2174
- package/dist/containerRuntime.js.map +0 -1
- package/dist/dataStore.js.map +0 -1
- package/dist/dataStoreContext.js.map +0 -1
- package/dist/dataStoreContexts.js.map +0 -1
- package/dist/dataStoreRegistry.js.map +0 -1
- package/dist/dataStores.js.map +0 -1
- package/dist/deltaScheduler.js.map +0 -1
- package/dist/garbageCollection.d.ts +0 -319
- package/dist/garbageCollection.d.ts.map +0 -1
- package/dist/garbageCollection.js +0 -993
- package/dist/garbageCollection.js.map +0 -1
- package/dist/index.js +0 -33
- package/dist/index.js.map +0 -1
- package/dist/opTelemetry.d.ts +0 -22
- package/dist/opTelemetry.d.ts.map +0 -1
- package/dist/opTelemetry.js +0 -60
- package/dist/opTelemetry.js.map +0 -1
- package/dist/orderedClientElection.d.ts.map +0 -1
- package/dist/orderedClientElection.js.map +0 -1
- package/dist/packageVersion.js.map +0 -1
- package/dist/pendingStateManager.js +0 -346
- package/dist/pendingStateManager.js.map +0 -1
- package/dist/runWhileConnectedCoordinator.d.ts.map +0 -1
- package/dist/runWhileConnectedCoordinator.js.map +0 -1
- package/dist/runningSummarizer.d.ts +0 -93
- package/dist/runningSummarizer.d.ts.map +0 -1
- package/dist/runningSummarizer.js +0 -384
- package/dist/runningSummarizer.js.map +0 -1
- package/dist/serializedSnapshotStorage.d.ts +0 -58
- package/dist/serializedSnapshotStorage.d.ts.map +0 -1
- package/dist/serializedSnapshotStorage.js +0 -108
- package/dist/serializedSnapshotStorage.js.map +0 -1
- package/dist/summarizer.d.ts.map +0 -1
- package/dist/summarizer.js +0 -348
- package/dist/summarizer.js.map +0 -1
- package/dist/summarizerClientElection.d.ts.map +0 -1
- package/dist/summarizerClientElection.js.map +0 -1
- package/dist/summarizerHandle.d.ts +0 -12
- package/dist/summarizerHandle.d.ts.map +0 -1
- package/dist/summarizerHandle.js +0 -22
- package/dist/summarizerHandle.js.map +0 -1
- package/dist/summarizerHeuristics.d.ts.map +0 -1
- package/dist/summarizerHeuristics.js +0 -84
- package/dist/summarizerHeuristics.js.map +0 -1
- package/dist/summarizerTypes.d.ts.map +0 -1
- package/dist/summarizerTypes.js.map +0 -1
- package/dist/summaryCollection.d.ts.map +0 -1
- package/dist/summaryCollection.js.map +0 -1
- package/dist/summaryFormat.d.ts.map +0 -1
- package/dist/summaryFormat.js.map +0 -1
- package/dist/summaryGenerator.d.ts.map +0 -1
- package/dist/summaryGenerator.js.map +0 -1
- package/dist/summaryManager.d.ts.map +0 -1
- package/dist/summaryManager.js.map +0 -1
- package/dist/throttler.js.map +0 -1
- package/garbageCollection.md +0 -41
- package/lib/batchTracker.d.ts.map +0 -1
- package/lib/batchTracker.js.map +0 -1
- package/lib/blobManager.d.ts +0 -95
- package/lib/blobManager.d.ts.map +0 -1
- package/lib/blobManager.js +0 -244
- package/lib/blobManager.js.map +0 -1
- package/lib/connectionTelemetry.d.ts.map +0 -1
- package/lib/connectionTelemetry.js +0 -174
- package/lib/connectionTelemetry.js.map +0 -1
- package/lib/containerHandleContext.d.ts.map +0 -1
- package/lib/containerHandleContext.js.map +0 -1
- package/lib/containerRuntime.d.ts +0 -615
- package/lib/containerRuntime.d.ts.map +0 -1
- package/lib/containerRuntime.js +0 -2166
- package/lib/containerRuntime.js.map +0 -1
- package/lib/dataStore.d.ts.map +0 -1
- package/lib/dataStore.js.map +0 -1
- package/lib/dataStoreContext.d.ts.map +0 -1
- package/lib/dataStoreContext.js.map +0 -1
- package/lib/dataStoreContexts.d.ts.map +0 -1
- package/lib/dataStoreContexts.js.map +0 -1
- package/lib/dataStoreRegistry.d.ts.map +0 -1
- package/lib/dataStoreRegistry.js.map +0 -1
- package/lib/dataStores.d.ts.map +0 -1
- package/lib/dataStores.js.map +0 -1
- package/lib/deltaScheduler.d.ts.map +0 -1
- package/lib/deltaScheduler.js.map +0 -1
- package/lib/garbageCollection.d.ts +0 -319
- package/lib/garbageCollection.d.ts.map +0 -1
- package/lib/garbageCollection.js +0 -989
- package/lib/garbageCollection.js.map +0 -1
- package/lib/index.d.ts +0 -14
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -13
- package/lib/index.js.map +0 -1
- package/lib/opTelemetry.d.ts +0 -22
- package/lib/opTelemetry.d.ts.map +0 -1
- package/lib/opTelemetry.js +0 -56
- package/lib/opTelemetry.js.map +0 -1
- package/lib/orderedClientElection.d.ts.map +0 -1
- package/lib/orderedClientElection.js.map +0 -1
- package/lib/packageVersion.js.map +0 -1
- package/lib/pendingStateManager.d.ts.map +0 -1
- package/lib/pendingStateManager.js +0 -339
- package/lib/pendingStateManager.js.map +0 -1
- package/lib/runWhileConnectedCoordinator.d.ts.map +0 -1
- package/lib/runWhileConnectedCoordinator.js.map +0 -1
- package/lib/runningSummarizer.d.ts +0 -93
- package/lib/runningSummarizer.d.ts.map +0 -1
- package/lib/runningSummarizer.js +0 -380
- package/lib/runningSummarizer.js.map +0 -1
- package/lib/serializedSnapshotStorage.d.ts +0 -58
- package/lib/serializedSnapshotStorage.d.ts.map +0 -1
- package/lib/serializedSnapshotStorage.js +0 -104
- package/lib/serializedSnapshotStorage.js.map +0 -1
- package/lib/summarizer.d.ts.map +0 -1
- package/lib/summarizer.js +0 -342
- package/lib/summarizer.js.map +0 -1
- package/lib/summarizerClientElection.d.ts.map +0 -1
- package/lib/summarizerClientElection.js.map +0 -1
- package/lib/summarizerHandle.d.ts +0 -12
- package/lib/summarizerHandle.d.ts.map +0 -1
- package/lib/summarizerHandle.js +0 -18
- package/lib/summarizerHandle.js.map +0 -1
- package/lib/summarizerHeuristics.d.ts.map +0 -1
- package/lib/summarizerHeuristics.js +0 -79
- package/lib/summarizerHeuristics.js.map +0 -1
- package/lib/summarizerTypes.d.ts.map +0 -1
- package/lib/summarizerTypes.js +0 -9
- package/lib/summarizerTypes.js.map +0 -1
- package/lib/summaryCollection.d.ts.map +0 -1
- package/lib/summaryCollection.js.map +0 -1
- package/lib/summaryFormat.d.ts.map +0 -1
- package/lib/summaryFormat.js.map +0 -1
- package/lib/summaryGenerator.d.ts +0 -85
- package/lib/summaryGenerator.d.ts.map +0 -1
- package/lib/summaryGenerator.js.map +0 -1
- package/lib/summaryManager.d.ts.map +0 -1
- package/lib/summaryManager.js.map +0 -1
- package/lib/throttler.d.ts.map +0 -1
- package/lib/throttler.js.map +0 -1
- package/src/garbageCollection.ts +0 -1434
- package/src/opTelemetry.ts +0 -71
- package/src/orderedClientElection.ts +0 -511
- package/src/runWhileConnectedCoordinator.ts +0 -106
- package/src/runningSummarizer.ts +0 -550
- package/src/serializedSnapshotStorage.ts +0 -146
- package/src/summarizer.ts +0 -438
- package/src/summarizerClientElection.ts +0 -161
- package/src/summarizerHandle.ts +0 -21
- package/src/summarizerHeuristics.ts +0 -108
- package/src/summarizerTypes.ts +0 -462
- package/src/summaryCollection.ts +0 -406
- package/src/summaryFormat.ts +0 -239
- package/src/summaryGenerator.ts +0 -427
- package/src/summaryManager.ts +0 -368
- package/tsconfig.esnext.json +0 -7
|
@@ -2,35 +2,35 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
import { DataCorruptionError, extractSafePropertiesFromMessage } from "@fluidframework/container-utils";
|
|
6
5
|
import { FluidObjectHandle } from "@fluidframework/datastore";
|
|
7
6
|
import { channelsTreeName, CreateSummarizerNodeSource, } from "@fluidframework/runtime-definitions";
|
|
8
|
-
import { convertSnapshotTreeToSummaryTree, convertToSummaryTree, create404Response, responseToException, SummaryTreeBuilder, } from "@fluidframework/runtime-utils";
|
|
9
|
-
import {
|
|
7
|
+
import { convertSnapshotTreeToSummaryTree, convertToSummaryTree, create404Response, createResponseError, GCDataBuilder, responseToException, SummaryTreeBuilder, unpackChildNodesUsedRoutes, } from "@fluidframework/runtime-utils";
|
|
8
|
+
import { createChildMonitoringContext, DataCorruptionError, DataProcessingError, extractSafePropertiesFromMessage, LoggingError, tagCodeArtifacts, } from "@fluidframework/telemetry-utils";
|
|
10
9
|
import { AttachState } from "@fluidframework/container-definitions";
|
|
11
|
-
import {
|
|
12
|
-
import { assert, Lazy
|
|
10
|
+
import { buildSnapshotTree } from "@fluidframework/driver-utils";
|
|
11
|
+
import { assert, Lazy } from "@fluidframework/core-utils";
|
|
13
12
|
import { v4 as uuid } from "uuid";
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import { RemoteFluidDataStoreContext, LocalFluidDataStoreContext, createAttributesBlob, LocalDetachedFluidDataStoreContext, } from "./dataStoreContext";
|
|
17
|
-
import {
|
|
18
|
-
import { isDataStoreAliasMessage } from "./dataStore";
|
|
19
|
-
import { GCNodeType } from "./
|
|
13
|
+
import { DataStoreContexts } from "./dataStoreContexts.mjs";
|
|
14
|
+
import { defaultRuntimeHeaderData } from "./containerRuntime.mjs";
|
|
15
|
+
import { RemoteFluidDataStoreContext, LocalFluidDataStoreContext, createAttributesBlob, LocalDetachedFluidDataStoreContext, } from "./dataStoreContext.mjs";
|
|
16
|
+
import { StorageServiceWithAttachBlobs } from "./storageServiceWithAttachBlobs.mjs";
|
|
17
|
+
import { isDataStoreAliasMessage } from "./dataStore.mjs";
|
|
18
|
+
import { GCNodeType, disableDatastoreSweepKey } from "./gc/index.mjs";
|
|
19
|
+
import { nonDataStorePaths, rootHasIsolatedChannels } from "./summary/index.mjs";
|
|
20
20
|
/**
|
|
21
21
|
* This class encapsulates data store handling. Currently it is only used by the container runtime,
|
|
22
22
|
* but eventually could be hosted on any channel once we formalize the channel api boundary.
|
|
23
23
|
*/
|
|
24
24
|
export class DataStores {
|
|
25
|
-
constructor(baseSnapshot, runtime, submitAttachFn, getCreateChildSummarizerNodeFn, deleteChildSummarizerNodeFn, baseLogger,
|
|
25
|
+
constructor(baseSnapshot, runtime, submitAttachFn, getCreateChildSummarizerNodeFn, deleteChildSummarizerNodeFn, baseLogger, gcNodeUpdated, isDataStoreDeleted, aliasMap, contexts = new DataStoreContexts(baseLogger)) {
|
|
26
26
|
this.baseSnapshot = baseSnapshot;
|
|
27
27
|
this.runtime = runtime;
|
|
28
28
|
this.submitAttachFn = submitAttachFn;
|
|
29
29
|
this.getCreateChildSummarizerNodeFn = getCreateChildSummarizerNodeFn;
|
|
30
30
|
this.deleteChildSummarizerNodeFn = deleteChildSummarizerNodeFn;
|
|
31
31
|
this.gcNodeUpdated = gcNodeUpdated;
|
|
32
|
+
this.isDataStoreDeleted = isDataStoreDeleted;
|
|
32
33
|
this.aliasMap = aliasMap;
|
|
33
|
-
this.writeGCDataAtRoot = writeGCDataAtRoot;
|
|
34
34
|
this.contexts = contexts;
|
|
35
35
|
// Stores tracked by the Domain
|
|
36
36
|
this.pendingAttach = new Map();
|
|
@@ -40,17 +40,10 @@ export class DataStores {
|
|
|
40
40
|
// Stores the ids of new data stores between two GC runs. This is used to notify the garbage collector of new
|
|
41
41
|
// root data stores that are added.
|
|
42
42
|
this.dataStoresSinceLastGC = [];
|
|
43
|
+
this.pendingAliasMap = new Map();
|
|
43
44
|
this.dispose = () => this.disposeOnce.value;
|
|
44
|
-
this.
|
|
45
|
+
this.mc = createChildMonitoringContext({ logger: baseLogger });
|
|
45
46
|
this.containerRuntimeHandle = new FluidObjectHandle(this.runtime, "/", this.runtime.IFluidHandleContext);
|
|
46
|
-
const baseGCDetailsP = new LazyPromise(async () => {
|
|
47
|
-
return getBaseGCDetails();
|
|
48
|
-
});
|
|
49
|
-
// Returns the base GC details for the data store with the given id.
|
|
50
|
-
const dataStoreBaseGCDetails = async (dataStoreId) => {
|
|
51
|
-
const baseGCDetails = await baseGCDetailsP;
|
|
52
|
-
return baseGCDetails.get(dataStoreId);
|
|
53
|
-
};
|
|
54
47
|
// Extract stores stored inside the snapshot
|
|
55
48
|
const fluidDataStores = new Map();
|
|
56
49
|
if (baseSnapshot) {
|
|
@@ -71,13 +64,12 @@ export class DataStores {
|
|
|
71
64
|
dataStoreContext = new RemoteFluidDataStoreContext({
|
|
72
65
|
id: key,
|
|
73
66
|
snapshotTree: value,
|
|
74
|
-
getBaseGCDetails: async () => dataStoreBaseGCDetails(key),
|
|
75
67
|
runtime: this.runtime,
|
|
76
68
|
storage: this.runtime.storage,
|
|
77
69
|
scope: this.runtime.scope,
|
|
78
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
79
|
-
|
|
80
|
-
|
|
70
|
+
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
71
|
+
type: CreateSummarizerNodeSource.FromSummary,
|
|
72
|
+
}),
|
|
81
73
|
});
|
|
82
74
|
}
|
|
83
75
|
else {
|
|
@@ -91,12 +83,12 @@ export class DataStores {
|
|
|
91
83
|
runtime: this.runtime,
|
|
92
84
|
storage: this.runtime.storage,
|
|
93
85
|
scope: this.runtime.scope,
|
|
94
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
86
|
+
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
87
|
+
type: CreateSummarizerNodeSource.FromSummary,
|
|
88
|
+
}),
|
|
95
89
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(key),
|
|
96
90
|
snapshotTree,
|
|
97
91
|
isRootDataStore: undefined,
|
|
98
|
-
writeGCDataAtRoot: this.writeGCDataAtRoot,
|
|
99
|
-
disableIsolatedChannels: this.runtime.disableIsolatedChannels,
|
|
100
92
|
});
|
|
101
93
|
}
|
|
102
94
|
this.contexts.addBoundOrRemoted(dataStoreContext);
|
|
@@ -106,17 +98,23 @@ export class DataStores {
|
|
|
106
98
|
referencedDataStoreCount: fluidDataStores.size - unreferencedDataStoreCount,
|
|
107
99
|
};
|
|
108
100
|
}
|
|
109
|
-
aliases() {
|
|
101
|
+
get aliases() {
|
|
110
102
|
return this.aliasMap;
|
|
111
103
|
}
|
|
104
|
+
get pendingAliases() {
|
|
105
|
+
return this.pendingAliasMap;
|
|
106
|
+
}
|
|
107
|
+
async waitIfPendingAlias(maybeAlias) {
|
|
108
|
+
const pendingAliasPromise = this.pendingAliases.get(maybeAlias);
|
|
109
|
+
return pendingAliasPromise ?? "Success";
|
|
110
|
+
}
|
|
112
111
|
processAttachMessage(message, local) {
|
|
113
|
-
var _a, _b;
|
|
114
112
|
const attachMessage = message.contents;
|
|
115
113
|
this.dataStoresSinceLastGC.push(attachMessage.id);
|
|
116
114
|
// The local object has already been attached
|
|
117
115
|
if (local) {
|
|
118
116
|
assert(this.pendingAttach.has(attachMessage.id), 0x15e /* "Local object does not have matching attach message id" */);
|
|
119
|
-
|
|
117
|
+
this.contexts.get(attachMessage.id)?.emit("attached");
|
|
120
118
|
this.pendingAttach.delete(attachMessage.id);
|
|
121
119
|
return;
|
|
122
120
|
}
|
|
@@ -125,16 +123,16 @@ export class DataStores {
|
|
|
125
123
|
// TODO: dataStoreId may require a different tag from PackageData #7488
|
|
126
124
|
const error = new DataCorruptionError(
|
|
127
125
|
// pre-0.58 error message: duplicateDataStoreCreatedWithExistingId
|
|
128
|
-
"Duplicate DataStore created with existing id",
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
126
|
+
"Duplicate DataStore created with existing id", {
|
|
127
|
+
...extractSafePropertiesFromMessage(message),
|
|
128
|
+
...tagCodeArtifacts({ dataStoreId: attachMessage.id }),
|
|
129
|
+
});
|
|
132
130
|
throw error;
|
|
133
131
|
}
|
|
134
|
-
const
|
|
132
|
+
const flatAttachBlobs = new Map();
|
|
135
133
|
let snapshotTree;
|
|
136
134
|
if (attachMessage.snapshot) {
|
|
137
|
-
snapshotTree = buildSnapshotTree(attachMessage.snapshot.entries,
|
|
135
|
+
snapshotTree = buildSnapshotTree(attachMessage.snapshot.entries, flatAttachBlobs);
|
|
138
136
|
}
|
|
139
137
|
// Include the type of attach message which is the pkg of the store to be
|
|
140
138
|
// used by RemoteFluidDataStoreContext in case it is not in the snapshot.
|
|
@@ -142,20 +140,16 @@ export class DataStores {
|
|
|
142
140
|
const remoteFluidDataStoreContext = new RemoteFluidDataStoreContext({
|
|
143
141
|
id: attachMessage.id,
|
|
144
142
|
snapshotTree,
|
|
145
|
-
// New data stores begin with empty GC details since GC hasn't run on them yet.
|
|
146
|
-
getBaseGCDetails: async () => { return {}; },
|
|
147
143
|
runtime: this.runtime,
|
|
148
|
-
storage: new
|
|
144
|
+
storage: new StorageServiceWithAttachBlobs(this.runtime.storage, flatAttachBlobs),
|
|
149
145
|
scope: this.runtime.scope,
|
|
150
146
|
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(attachMessage.id, {
|
|
151
147
|
type: CreateSummarizerNodeSource.FromAttach,
|
|
152
148
|
sequenceNumber: message.sequenceNumber,
|
|
153
|
-
snapshot:
|
|
154
|
-
entries: [createAttributesBlob(pkg, true /* isRootDataStore
|
|
149
|
+
snapshot: attachMessage.snapshot ?? {
|
|
150
|
+
entries: [createAttributesBlob(pkg, true /* isRootDataStore */)],
|
|
155
151
|
},
|
|
156
152
|
}),
|
|
157
|
-
writeGCDataAtRoot: this.writeGCDataAtRoot,
|
|
158
|
-
disableIsolatedChannels: this.runtime.disableIsolatedChannels,
|
|
159
153
|
pkg,
|
|
160
154
|
});
|
|
161
155
|
this.contexts.addBoundOrRemoted(remoteFluidDataStoreContext);
|
|
@@ -163,7 +157,9 @@ export class DataStores {
|
|
|
163
157
|
processAliasMessage(message, localOpMetadata, local) {
|
|
164
158
|
const aliasMessage = message.contents;
|
|
165
159
|
if (!isDataStoreAliasMessage(aliasMessage)) {
|
|
166
|
-
throw new DataCorruptionError("malformedDataStoreAliasMessage",
|
|
160
|
+
throw new DataCorruptionError("malformedDataStoreAliasMessage", {
|
|
161
|
+
...extractSafePropertiesFromMessage(message),
|
|
162
|
+
});
|
|
167
163
|
}
|
|
168
164
|
const resolve = localOpMetadata;
|
|
169
165
|
const aliasResult = this.processAliasMessageCore(aliasMessage);
|
|
@@ -176,8 +172,13 @@ export class DataStores {
|
|
|
176
172
|
return false;
|
|
177
173
|
}
|
|
178
174
|
const context = this.contexts.get(aliasMessage.internalId);
|
|
175
|
+
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
176
|
+
// corruption in case a deleted data store accidentally submitted a signal.
|
|
177
|
+
if (this.checkAndLogIfDeleted(aliasMessage.internalId, context, "Changed", "processAliasMessageCore")) {
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
179
180
|
if (context === undefined) {
|
|
180
|
-
this.logger.sendErrorEvent({
|
|
181
|
+
this.mc.logger.sendErrorEvent({
|
|
181
182
|
eventName: "AliasFluidDataStoreNotFound",
|
|
182
183
|
fluidDataStoreId: aliasMessage.internalId,
|
|
183
184
|
});
|
|
@@ -222,17 +223,17 @@ export class DataStores {
|
|
|
222
223
|
runtime: this.runtime,
|
|
223
224
|
storage: this.runtime.storage,
|
|
224
225
|
scope: this.runtime.scope,
|
|
225
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
226
|
+
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
227
|
+
type: CreateSummarizerNodeSource.Local,
|
|
228
|
+
}),
|
|
226
229
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
|
|
227
230
|
snapshotTree: undefined,
|
|
228
231
|
isRootDataStore: isRoot,
|
|
229
|
-
writeGCDataAtRoot: this.writeGCDataAtRoot,
|
|
230
|
-
disableIsolatedChannels: this.runtime.disableIsolatedChannels,
|
|
231
232
|
});
|
|
232
233
|
this.contexts.addUnbound(context);
|
|
233
234
|
return context;
|
|
234
235
|
}
|
|
235
|
-
_createFluidDataStoreContext(pkg, id,
|
|
236
|
+
_createFluidDataStoreContext(pkg, id, props) {
|
|
236
237
|
assert(!id.includes("/"), 0x30d /* Id cannot contain slashes */);
|
|
237
238
|
const context = new LocalFluidDataStoreContext({
|
|
238
239
|
id,
|
|
@@ -240,33 +241,53 @@ export class DataStores {
|
|
|
240
241
|
runtime: this.runtime,
|
|
241
242
|
storage: this.runtime.storage,
|
|
242
243
|
scope: this.runtime.scope,
|
|
243
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
244
|
+
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
245
|
+
type: CreateSummarizerNodeSource.Local,
|
|
246
|
+
}),
|
|
244
247
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
|
|
245
248
|
snapshotTree: undefined,
|
|
246
|
-
isRootDataStore:
|
|
247
|
-
writeGCDataAtRoot: this.writeGCDataAtRoot,
|
|
248
|
-
disableIsolatedChannels: this.runtime.disableIsolatedChannels,
|
|
249
|
+
isRootDataStore: false,
|
|
249
250
|
createProps: props,
|
|
250
251
|
});
|
|
251
252
|
this.contexts.addUnbound(context);
|
|
252
253
|
return context;
|
|
253
254
|
}
|
|
254
|
-
get disposed() {
|
|
255
|
-
|
|
256
|
-
|
|
255
|
+
get disposed() {
|
|
256
|
+
return this.disposeOnce.evaluated;
|
|
257
|
+
}
|
|
258
|
+
resubmitDataStoreOp(envelope, localOpMetadata) {
|
|
257
259
|
const context = this.contexts.get(envelope.address);
|
|
260
|
+
// If the data store has been deleted, log an error and throw an error. If there are local changes for a
|
|
261
|
+
// deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
|
|
262
|
+
if (this.checkAndLogIfDeleted(envelope.address, context, "Changed", "resubmitDataStoreOp")) {
|
|
263
|
+
throw new DataCorruptionError("Context is deleted!", {
|
|
264
|
+
callSite: "resubmitDataStoreOp",
|
|
265
|
+
...tagCodeArtifacts({ id: envelope.address }),
|
|
266
|
+
});
|
|
267
|
+
}
|
|
258
268
|
assert(!!context, 0x160 /* "There should be a store context for the op" */);
|
|
259
269
|
context.reSubmit(envelope.contents, localOpMetadata);
|
|
260
270
|
}
|
|
261
|
-
rollbackDataStoreOp(
|
|
262
|
-
const envelope = content;
|
|
271
|
+
rollbackDataStoreOp(envelope, localOpMetadata) {
|
|
263
272
|
const context = this.contexts.get(envelope.address);
|
|
273
|
+
// If the data store has been deleted, log an error and throw an error. If there are local changes for a
|
|
274
|
+
// deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
|
|
275
|
+
if (this.checkAndLogIfDeleted(envelope.address, context, "Changed", "rollbackDataStoreOp")) {
|
|
276
|
+
throw new DataCorruptionError("Context is deleted!", {
|
|
277
|
+
callSite: "rollbackDataStoreOp",
|
|
278
|
+
...tagCodeArtifacts({ id: envelope.address }),
|
|
279
|
+
});
|
|
280
|
+
}
|
|
264
281
|
assert(!!context, 0x2e8 /* "There should be a store context for the op" */);
|
|
265
282
|
context.rollback(envelope.contents, localOpMetadata);
|
|
266
283
|
}
|
|
267
|
-
async applyStashedOp(
|
|
268
|
-
const envelope = content;
|
|
284
|
+
async applyStashedOp(envelope) {
|
|
269
285
|
const context = this.contexts.get(envelope.address);
|
|
286
|
+
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
287
|
+
// corruption in case the data store that stashed the op is deleted.
|
|
288
|
+
if (this.checkAndLogIfDeleted(envelope.address, context, "Changed", "applyStashedOp")) {
|
|
289
|
+
return undefined;
|
|
290
|
+
}
|
|
270
291
|
assert(!!context, 0x161 /* "There should be a store context for the op" */);
|
|
271
292
|
return context.applyStashedOp(envelope.contents);
|
|
272
293
|
}
|
|
@@ -277,16 +298,27 @@ export class DataStores {
|
|
|
277
298
|
}
|
|
278
299
|
processFluidDataStoreOp(message, local, localMessageMetadata) {
|
|
279
300
|
const envelope = message.contents;
|
|
280
|
-
const transformed =
|
|
301
|
+
const transformed = { ...message, contents: envelope.contents };
|
|
281
302
|
const context = this.contexts.get(envelope.address);
|
|
303
|
+
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
304
|
+
// corruption in case a deleted data store accidentally submitted an op.
|
|
305
|
+
if (this.checkAndLogIfDeleted(envelope.address, context, "Changed", "processFluidDataStoreOp")) {
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
282
308
|
assert(!!context, 0x162 /* "There should be a store context for the op" */);
|
|
283
309
|
context.process(transformed, local, localMessageMetadata);
|
|
284
310
|
// Notify that a GC node for the data store changed. This is used to detect if a deleted data store is
|
|
285
311
|
// being used.
|
|
286
312
|
this.gcNodeUpdated(`/${envelope.address}`, message.timestamp, context.isLoaded ? context.packagePath : undefined);
|
|
287
313
|
}
|
|
288
|
-
async getDataStore(id,
|
|
289
|
-
const
|
|
314
|
+
async getDataStore(id, requestHeaderData) {
|
|
315
|
+
const headerData = { ...defaultRuntimeHeaderData, ...requestHeaderData };
|
|
316
|
+
if (this.checkAndLogIfDeleted(id, this.contexts.get(id), "Requested", "getDataStore", requestHeaderData)) {
|
|
317
|
+
// The requested data store has been deleted by gc. Create a 404 response exception.
|
|
318
|
+
const request = { url: id };
|
|
319
|
+
throw responseToException(createResponseError(404, "DataStore was deleted", request), request);
|
|
320
|
+
}
|
|
321
|
+
const context = await this.contexts.getBoundOrRemoted(id, headerData.wait);
|
|
290
322
|
if (context === undefined) {
|
|
291
323
|
// The requested data store does not exits. Throw a 404 response exception.
|
|
292
324
|
const request = { url: id };
|
|
@@ -294,44 +326,85 @@ export class DataStores {
|
|
|
294
326
|
}
|
|
295
327
|
return context;
|
|
296
328
|
}
|
|
297
|
-
|
|
298
|
-
|
|
329
|
+
/**
|
|
330
|
+
* Returns the data store requested with the given id if available. Otherwise, returns undefined.
|
|
331
|
+
*/
|
|
332
|
+
async getDataStoreIfAvailable(id, requestHeaderData) {
|
|
333
|
+
// If the data store has been deleted, log an error and return undefined.
|
|
334
|
+
if (this.checkAndLogIfDeleted(id, this.contexts.get(id), "Requested", "getDataStoreIfAvailable", requestHeaderData)) {
|
|
335
|
+
return undefined;
|
|
336
|
+
}
|
|
337
|
+
const headerData = { ...defaultRuntimeHeaderData, ...requestHeaderData };
|
|
338
|
+
const context = await this.contexts.getBoundOrRemoted(id, headerData.wait);
|
|
339
|
+
if (context === undefined) {
|
|
340
|
+
return undefined;
|
|
341
|
+
}
|
|
342
|
+
return context;
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Checks if the data store has been deleted by GC. If so, log an error.
|
|
346
|
+
* @param id - The data store's id.
|
|
347
|
+
* @param context - The data store context.
|
|
348
|
+
* @param callSite - The function name this is called from.
|
|
349
|
+
* @param requestHeaderData - The request header information to log if the data store is deleted.
|
|
350
|
+
* @returns true if the data store is deleted. Otherwise, returns false.
|
|
351
|
+
*/
|
|
352
|
+
checkAndLogIfDeleted(id, context, deletedLogSuffix, callSite, requestHeaderData) {
|
|
353
|
+
const dataStoreNodePath = `/${id}`;
|
|
354
|
+
if (!this.isDataStoreDeleted(dataStoreNodePath)) {
|
|
355
|
+
return false;
|
|
356
|
+
}
|
|
357
|
+
this.mc.logger.sendErrorEvent({
|
|
358
|
+
eventName: `GC_Deleted_DataStore_${deletedLogSuffix}`,
|
|
359
|
+
...tagCodeArtifacts({ id }),
|
|
360
|
+
callSite,
|
|
361
|
+
headers: JSON.stringify(requestHeaderData),
|
|
362
|
+
exists: context !== undefined,
|
|
363
|
+
});
|
|
364
|
+
return true;
|
|
365
|
+
}
|
|
366
|
+
processSignal(fluidDataStoreId, message, local) {
|
|
367
|
+
const context = this.contexts.get(fluidDataStoreId);
|
|
368
|
+
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
369
|
+
// corruption in case a deleted data store accidentally submitted a signal.
|
|
370
|
+
if (this.checkAndLogIfDeleted(fluidDataStoreId, context, "Changed", "processSignal")) {
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
299
373
|
if (!context) {
|
|
300
374
|
// Attach message may not have been processed yet
|
|
301
375
|
assert(!local, 0x163 /* "Missing datastore for local signal" */);
|
|
302
|
-
this.logger.sendTelemetryEvent({
|
|
376
|
+
this.mc.logger.sendTelemetryEvent({
|
|
303
377
|
eventName: "SignalFluidDataStoreNotFound",
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
},
|
|
378
|
+
...tagCodeArtifacts({
|
|
379
|
+
fluidDataStoreId,
|
|
380
|
+
}),
|
|
308
381
|
});
|
|
309
382
|
return;
|
|
310
383
|
}
|
|
311
384
|
context.processSignal(message, local);
|
|
312
385
|
}
|
|
313
386
|
setConnectionState(connected, clientId) {
|
|
314
|
-
for (const [
|
|
387
|
+
for (const [fluidDataStoreId, context] of this.contexts) {
|
|
315
388
|
try {
|
|
316
389
|
context.setConnectionState(connected, clientId);
|
|
317
390
|
}
|
|
318
391
|
catch (error) {
|
|
319
|
-
this.logger.sendErrorEvent({
|
|
392
|
+
this.mc.logger.sendErrorEvent({
|
|
320
393
|
eventName: "SetConnectionStateError",
|
|
321
394
|
clientId,
|
|
322
|
-
|
|
395
|
+
...tagCodeArtifacts({
|
|
396
|
+
fluidDataStoreId,
|
|
397
|
+
}),
|
|
398
|
+
details: JSON.stringify({
|
|
399
|
+
runtimeConnected: this.runtime.connected,
|
|
400
|
+
connected,
|
|
401
|
+
}),
|
|
323
402
|
}, error);
|
|
324
403
|
}
|
|
325
404
|
}
|
|
326
405
|
}
|
|
327
406
|
setAttachState(attachState) {
|
|
328
|
-
|
|
329
|
-
if (attachState === AttachState.Attaching) {
|
|
330
|
-
eventName = "attaching";
|
|
331
|
-
}
|
|
332
|
-
else {
|
|
333
|
-
eventName = "attached";
|
|
334
|
-
}
|
|
407
|
+
const eventName = attachState === AttachState.Attaching ? "attaching" : "attached";
|
|
335
408
|
for (const [, context] of this.contexts) {
|
|
336
409
|
// Fire only for bounded stores.
|
|
337
410
|
if (!this.contexts.isNotBound(context.id)) {
|
|
@@ -347,10 +420,17 @@ export class DataStores {
|
|
|
347
420
|
// Iterate over each store and ask it to snapshot
|
|
348
421
|
await Promise.all(Array.from(this.contexts)
|
|
349
422
|
.filter(([_, context]) => {
|
|
350
|
-
// Summarizer works only with clients with no local changes
|
|
351
|
-
|
|
423
|
+
// Summarizer works only with clients with no local changes. A data store in attaching
|
|
424
|
+
// state indicates an op was sent to attach a local data store, and the the attach op
|
|
425
|
+
// had not yet round tripped back to the client.
|
|
426
|
+
if (context.attachState === AttachState.Attaching) {
|
|
427
|
+
// Formerly assert 0x588
|
|
428
|
+
const error = DataProcessingError.create("Local data store detected in attaching state during summarize", "summarize");
|
|
429
|
+
throw error;
|
|
430
|
+
}
|
|
352
431
|
return context.attachState === AttachState.Attached;
|
|
353
|
-
})
|
|
432
|
+
})
|
|
433
|
+
.map(async ([contextId, context]) => {
|
|
354
434
|
const contextSummary = await context.summarize(fullTree, trackState, telemetryContext);
|
|
355
435
|
summaryBuilder.addWithStats(contextId, contextSummary);
|
|
356
436
|
}));
|
|
@@ -370,9 +450,9 @@ export class DataStores {
|
|
|
370
450
|
// Take summary of bounded data stores only, make sure we haven't summarized them already
|
|
371
451
|
// and no attach op has been fired for that data store because for loader versions <= 0.24
|
|
372
452
|
// we set attach state as "attaching" before taking createNew summary.
|
|
373
|
-
!(this.contexts.isNotBound(key)
|
|
374
|
-
|
|
375
|
-
|
|
453
|
+
!(this.contexts.isNotBound(key) ||
|
|
454
|
+
builderTree[key] ||
|
|
455
|
+
this.attachOpFiredForDataStore.has(key)))
|
|
376
456
|
.map(([key, value]) => {
|
|
377
457
|
let dataStoreSummary;
|
|
378
458
|
if (value.isLoaded) {
|
|
@@ -409,11 +489,15 @@ export class DataStores {
|
|
|
409
489
|
}
|
|
410
490
|
/**
|
|
411
491
|
* Generates data used for garbage collection. It does the following:
|
|
492
|
+
*
|
|
412
493
|
* 1. Calls into each child data store context to get its GC data.
|
|
494
|
+
*
|
|
413
495
|
* 2. Prefixes the child context's id to the GC nodes in the child's GC data. This makes sure that the node can be
|
|
414
|
-
*
|
|
496
|
+
* identified as belonging to the child.
|
|
497
|
+
*
|
|
415
498
|
* 3. Adds a GC node for this channel to the nodes received from the children. All these nodes together represent
|
|
416
|
-
*
|
|
499
|
+
* the GC data of this channel.
|
|
500
|
+
*
|
|
417
501
|
* @param fullGC - true to bypass optimizations and force full generation of GC data.
|
|
418
502
|
*/
|
|
419
503
|
async getGCData(fullGC = false) {
|
|
@@ -421,10 +505,17 @@ export class DataStores {
|
|
|
421
505
|
// Iterate over each store and get their GC data.
|
|
422
506
|
await Promise.all(Array.from(this.contexts)
|
|
423
507
|
.filter(([_, context]) => {
|
|
424
|
-
//
|
|
425
|
-
//
|
|
508
|
+
// Summarizer client and hence GC works only with clients with no local changes. A data store in
|
|
509
|
+
// attaching state indicates an op was sent to attach a local data store, and the the attach op
|
|
510
|
+
// had not yet round tripped back to the client.
|
|
511
|
+
// Formerly assert 0x589
|
|
512
|
+
if (context.attachState === AttachState.Attaching) {
|
|
513
|
+
const error = DataProcessingError.create("Local data store detected in attaching state while running GC", "getGCData");
|
|
514
|
+
throw error;
|
|
515
|
+
}
|
|
426
516
|
return context.attachState === AttachState.Attached;
|
|
427
|
-
})
|
|
517
|
+
})
|
|
518
|
+
.map(async ([contextId, context]) => {
|
|
428
519
|
const contextGCData = await context.getGCData(fullGC);
|
|
429
520
|
// Prefix the child's id to the ids of its GC nodes so they can be identified as belonging to the child.
|
|
430
521
|
// This also gradually builds the id of each node to be a path from the root.
|
|
@@ -437,11 +528,8 @@ export class DataStores {
|
|
|
437
528
|
/**
|
|
438
529
|
* After GC has run, called to notify this Container's data stores of routes that are used in it.
|
|
439
530
|
* @param usedRoutes - The routes that are used in all data stores in this Container.
|
|
440
|
-
* @param gcTimestamp - The time when GC was run that generated these used routes. If any node node becomes
|
|
441
|
-
* unreferenced as part of this GC run, this should be used to update the time when it happens.
|
|
442
531
|
*/
|
|
443
|
-
updateUsedRoutes(usedRoutes
|
|
444
|
-
var _a;
|
|
532
|
+
updateUsedRoutes(usedRoutes) {
|
|
445
533
|
// Get a map of data store ids to routes used in it.
|
|
446
534
|
const usedDataStoreRoutes = unpackChildNodesUsedRoutes(usedRoutes);
|
|
447
535
|
// Verify that the used routes are correct.
|
|
@@ -450,15 +538,14 @@ export class DataStores {
|
|
|
450
538
|
}
|
|
451
539
|
// Update the used routes in each data store. Used routes is empty for unused data stores.
|
|
452
540
|
for (const [contextId, context] of this.contexts) {
|
|
453
|
-
context.updateUsedRoutes(
|
|
541
|
+
context.updateUsedRoutes(usedDataStoreRoutes.get(contextId) ?? []);
|
|
454
542
|
}
|
|
455
543
|
}
|
|
456
544
|
/**
|
|
457
|
-
*
|
|
458
|
-
* scenarios with accessing deleted content.
|
|
545
|
+
* This is called to update objects whose routes are unused. The unused objects are deleted.
|
|
459
546
|
* @param unusedRoutes - The routes that are unused in all data stores in this Container.
|
|
460
547
|
*/
|
|
461
|
-
|
|
548
|
+
updateUnusedRoutes(unusedRoutes) {
|
|
462
549
|
for (const route of unusedRoutes) {
|
|
463
550
|
const pathParts = route.split("/");
|
|
464
551
|
// Delete data store only if its route (/datastoreId) is in unusedRoutes. We don't want to delete a data
|
|
@@ -474,6 +561,66 @@ export class DataStores {
|
|
|
474
561
|
this.deleteChildSummarizerNodeFn(dataStoreId);
|
|
475
562
|
}
|
|
476
563
|
}
|
|
564
|
+
/**
|
|
565
|
+
* Delete data stores and its objects that are sweep ready.
|
|
566
|
+
* @param sweepReadyDataStoreRoutes - The routes of data stores and its objects that are sweep ready and should
|
|
567
|
+
* be deleted.
|
|
568
|
+
* @returns The routes of data stores and its objects that were deleted.
|
|
569
|
+
*/
|
|
570
|
+
deleteSweepReadyNodes(sweepReadyDataStoreRoutes) {
|
|
571
|
+
// If sweep for data stores is not enabled, return empty list indicating nothing is deleted.
|
|
572
|
+
if (this.mc.config.getBoolean(disableDatastoreSweepKey) === true) {
|
|
573
|
+
return [];
|
|
574
|
+
}
|
|
575
|
+
for (const route of sweepReadyDataStoreRoutes) {
|
|
576
|
+
const pathParts = route.split("/");
|
|
577
|
+
const dataStoreId = pathParts[1];
|
|
578
|
+
// Ignore sub-data store routes because a data store and its sub-routes are deleted together, so, we only
|
|
579
|
+
// need to delete the data store.
|
|
580
|
+
if (pathParts.length > 2) {
|
|
581
|
+
continue;
|
|
582
|
+
}
|
|
583
|
+
const dataStoreContext = this.contexts.get(dataStoreId);
|
|
584
|
+
if (dataStoreContext === undefined) {
|
|
585
|
+
this.mc.logger.sendErrorEvent({
|
|
586
|
+
eventName: "DeletedDataStoreNotFound",
|
|
587
|
+
...tagCodeArtifacts({ id: dataStoreId }),
|
|
588
|
+
details: {
|
|
589
|
+
alreadyDeleted: this.isDataStoreDeleted(dataStoreId),
|
|
590
|
+
},
|
|
591
|
+
});
|
|
592
|
+
continue;
|
|
593
|
+
}
|
|
594
|
+
dataStoreContext.delete();
|
|
595
|
+
// Delete the contexts of sweep ready data stores.
|
|
596
|
+
this.contexts.delete(dataStoreId);
|
|
597
|
+
// Delete the summarizer node of the sweep ready data stores.
|
|
598
|
+
this.deleteChildSummarizerNodeFn(dataStoreId);
|
|
599
|
+
}
|
|
600
|
+
return Array.from(sweepReadyDataStoreRoutes);
|
|
601
|
+
}
|
|
602
|
+
/**
|
|
603
|
+
* This is called to update objects whose routes are tombstones. Tombstoned datastore contexts enable testing
|
|
604
|
+
* scenarios with accessing deleted content without actually deleting content from summaries.
|
|
605
|
+
* @param tombstonedRoutes - The routes that are tombstones in all data stores in this Container.
|
|
606
|
+
*/
|
|
607
|
+
updateTombstonedRoutes(tombstonedRoutes) {
|
|
608
|
+
const tombstonedDataStoresSet = new Set();
|
|
609
|
+
for (const route of tombstonedRoutes) {
|
|
610
|
+
const pathParts = route.split("/");
|
|
611
|
+
// Tombstone data store only if its route (/datastoreId) is directly in tombstoneRoutes.
|
|
612
|
+
if (pathParts.length > 2) {
|
|
613
|
+
continue;
|
|
614
|
+
}
|
|
615
|
+
const dataStoreId = pathParts[1];
|
|
616
|
+
assert(this.contexts.has(dataStoreId), 0x510 /* No data store with specified id */);
|
|
617
|
+
tombstonedDataStoresSet.add(dataStoreId);
|
|
618
|
+
}
|
|
619
|
+
// Update the used routes in each data store. Used routes is empty for unused data stores.
|
|
620
|
+
for (const [contextId, context] of this.contexts) {
|
|
621
|
+
context.setTombstone(tombstonedDataStoresSet.has(contextId));
|
|
622
|
+
}
|
|
623
|
+
}
|
|
477
624
|
/**
|
|
478
625
|
* Returns the outbound routes of this channel. Only root data stores are considered referenced and their paths are
|
|
479
626
|
* part of outbound routes.
|
|
@@ -492,11 +639,10 @@ export class DataStores {
|
|
|
492
639
|
* Called by GC to retrieve the package path of a data store node with the given path.
|
|
493
640
|
*/
|
|
494
641
|
async getDataStorePackagePath(nodePath) {
|
|
495
|
-
var _a;
|
|
496
642
|
// If the node belongs to a data store, return its package path. For DDSes, we return the package path of the
|
|
497
643
|
// data store that contains it.
|
|
498
644
|
const context = this.contexts.get(nodePath.split("/")[1]);
|
|
499
|
-
return (
|
|
645
|
+
return (await context?.getInitialSnapshotDetails())?.pkg;
|
|
500
646
|
}
|
|
501
647
|
/**
|
|
502
648
|
* Called by GC to determine if a node is for a data store or for an object within a data store (for e.g. DDS).
|
|
@@ -532,7 +678,10 @@ export function getSummaryForDatastores(snapshot, metadata) {
|
|
|
532
678
|
datastoresTrees[key] = value;
|
|
533
679
|
}
|
|
534
680
|
}
|
|
535
|
-
return
|
|
681
|
+
return {
|
|
682
|
+
...snapshot,
|
|
683
|
+
trees: datastoresTrees,
|
|
684
|
+
};
|
|
536
685
|
}
|
|
537
686
|
}
|
|
538
|
-
//# sourceMappingURL=dataStores.
|
|
687
|
+
//# sourceMappingURL=dataStores.mjs.map
|