@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
|
@@ -5,55 +5,48 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.getSummaryForDatastores = exports.DataStores = void 0;
|
|
8
|
-
const container_utils_1 = require("@fluidframework/container-utils");
|
|
9
8
|
const datastore_1 = require("@fluidframework/datastore");
|
|
10
9
|
const runtime_definitions_1 = require("@fluidframework/runtime-definitions");
|
|
11
10
|
const runtime_utils_1 = require("@fluidframework/runtime-utils");
|
|
12
11
|
const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
|
|
13
12
|
const container_definitions_1 = require("@fluidframework/container-definitions");
|
|
14
13
|
const driver_utils_1 = require("@fluidframework/driver-utils");
|
|
15
|
-
const
|
|
14
|
+
const core_utils_1 = require("@fluidframework/core-utils");
|
|
16
15
|
const uuid_1 = require("uuid");
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const dataStoreContext_1 = require("./dataStoreContext");
|
|
20
|
-
const
|
|
21
|
-
const dataStore_1 = require("./dataStore");
|
|
22
|
-
const
|
|
16
|
+
const dataStoreContexts_1 = require("./dataStoreContexts.cjs");
|
|
17
|
+
const containerRuntime_1 = require("./containerRuntime.cjs");
|
|
18
|
+
const dataStoreContext_1 = require("./dataStoreContext.cjs");
|
|
19
|
+
const storageServiceWithAttachBlobs_1 = require("./storageServiceWithAttachBlobs.cjs");
|
|
20
|
+
const dataStore_1 = require("./dataStore.cjs");
|
|
21
|
+
const gc_1 = require("./gc/index.cjs");
|
|
22
|
+
const summary_1 = require("./summary/index.cjs");
|
|
23
23
|
/**
|
|
24
24
|
* This class encapsulates data store handling. Currently it is only used by the container runtime,
|
|
25
25
|
* but eventually could be hosted on any channel once we formalize the channel api boundary.
|
|
26
26
|
*/
|
|
27
27
|
class DataStores {
|
|
28
|
-
constructor(baseSnapshot, runtime, submitAttachFn, getCreateChildSummarizerNodeFn, deleteChildSummarizerNodeFn, baseLogger,
|
|
28
|
+
constructor(baseSnapshot, runtime, submitAttachFn, getCreateChildSummarizerNodeFn, deleteChildSummarizerNodeFn, baseLogger, gcNodeUpdated, isDataStoreDeleted, aliasMap, contexts = new dataStoreContexts_1.DataStoreContexts(baseLogger)) {
|
|
29
29
|
this.baseSnapshot = baseSnapshot;
|
|
30
30
|
this.runtime = runtime;
|
|
31
31
|
this.submitAttachFn = submitAttachFn;
|
|
32
32
|
this.getCreateChildSummarizerNodeFn = getCreateChildSummarizerNodeFn;
|
|
33
33
|
this.deleteChildSummarizerNodeFn = deleteChildSummarizerNodeFn;
|
|
34
34
|
this.gcNodeUpdated = gcNodeUpdated;
|
|
35
|
+
this.isDataStoreDeleted = isDataStoreDeleted;
|
|
35
36
|
this.aliasMap = aliasMap;
|
|
36
|
-
this.writeGCDataAtRoot = writeGCDataAtRoot;
|
|
37
37
|
this.contexts = contexts;
|
|
38
38
|
// Stores tracked by the Domain
|
|
39
39
|
this.pendingAttach = new Map();
|
|
40
40
|
// 0.24 back-compat attachingBeforeSummary
|
|
41
41
|
this.attachOpFiredForDataStore = new Set();
|
|
42
|
-
this.disposeOnce = new
|
|
42
|
+
this.disposeOnce = new core_utils_1.Lazy(() => this.contexts.dispose());
|
|
43
43
|
// Stores the ids of new data stores between two GC runs. This is used to notify the garbage collector of new
|
|
44
44
|
// root data stores that are added.
|
|
45
45
|
this.dataStoresSinceLastGC = [];
|
|
46
|
+
this.pendingAliasMap = new Map();
|
|
46
47
|
this.dispose = () => this.disposeOnce.value;
|
|
47
|
-
this.
|
|
48
|
+
this.mc = (0, telemetry_utils_1.createChildMonitoringContext)({ logger: baseLogger });
|
|
48
49
|
this.containerRuntimeHandle = new datastore_1.FluidObjectHandle(this.runtime, "/", this.runtime.IFluidHandleContext);
|
|
49
|
-
const baseGCDetailsP = new common_utils_1.LazyPromise(async () => {
|
|
50
|
-
return getBaseGCDetails();
|
|
51
|
-
});
|
|
52
|
-
// Returns the base GC details for the data store with the given id.
|
|
53
|
-
const dataStoreBaseGCDetails = async (dataStoreId) => {
|
|
54
|
-
const baseGCDetails = await baseGCDetailsP;
|
|
55
|
-
return baseGCDetails.get(dataStoreId);
|
|
56
|
-
};
|
|
57
50
|
// Extract stores stored inside the snapshot
|
|
58
51
|
const fluidDataStores = new Map();
|
|
59
52
|
if (baseSnapshot) {
|
|
@@ -74,13 +67,12 @@ class DataStores {
|
|
|
74
67
|
dataStoreContext = new dataStoreContext_1.RemoteFluidDataStoreContext({
|
|
75
68
|
id: key,
|
|
76
69
|
snapshotTree: value,
|
|
77
|
-
getBaseGCDetails: async () => dataStoreBaseGCDetails(key),
|
|
78
70
|
runtime: this.runtime,
|
|
79
71
|
storage: this.runtime.storage,
|
|
80
72
|
scope: this.runtime.scope,
|
|
81
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
82
|
-
|
|
83
|
-
|
|
73
|
+
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
74
|
+
type: runtime_definitions_1.CreateSummarizerNodeSource.FromSummary,
|
|
75
|
+
}),
|
|
84
76
|
});
|
|
85
77
|
}
|
|
86
78
|
else {
|
|
@@ -94,12 +86,12 @@ class DataStores {
|
|
|
94
86
|
runtime: this.runtime,
|
|
95
87
|
storage: this.runtime.storage,
|
|
96
88
|
scope: this.runtime.scope,
|
|
97
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
89
|
+
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
90
|
+
type: runtime_definitions_1.CreateSummarizerNodeSource.FromSummary,
|
|
91
|
+
}),
|
|
98
92
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(key),
|
|
99
93
|
snapshotTree,
|
|
100
94
|
isRootDataStore: undefined,
|
|
101
|
-
writeGCDataAtRoot: this.writeGCDataAtRoot,
|
|
102
|
-
disableIsolatedChannels: this.runtime.disableIsolatedChannels,
|
|
103
95
|
});
|
|
104
96
|
}
|
|
105
97
|
this.contexts.addBoundOrRemoted(dataStoreContext);
|
|
@@ -109,35 +101,41 @@ class DataStores {
|
|
|
109
101
|
referencedDataStoreCount: fluidDataStores.size - unreferencedDataStoreCount,
|
|
110
102
|
};
|
|
111
103
|
}
|
|
112
|
-
aliases() {
|
|
104
|
+
get aliases() {
|
|
113
105
|
return this.aliasMap;
|
|
114
106
|
}
|
|
107
|
+
get pendingAliases() {
|
|
108
|
+
return this.pendingAliasMap;
|
|
109
|
+
}
|
|
110
|
+
async waitIfPendingAlias(maybeAlias) {
|
|
111
|
+
const pendingAliasPromise = this.pendingAliases.get(maybeAlias);
|
|
112
|
+
return pendingAliasPromise ?? "Success";
|
|
113
|
+
}
|
|
115
114
|
processAttachMessage(message, local) {
|
|
116
|
-
var _a, _b;
|
|
117
115
|
const attachMessage = message.contents;
|
|
118
116
|
this.dataStoresSinceLastGC.push(attachMessage.id);
|
|
119
117
|
// The local object has already been attached
|
|
120
118
|
if (local) {
|
|
121
|
-
(0,
|
|
122
|
-
|
|
119
|
+
(0, core_utils_1.assert)(this.pendingAttach.has(attachMessage.id), 0x15e /* "Local object does not have matching attach message id" */);
|
|
120
|
+
this.contexts.get(attachMessage.id)?.emit("attached");
|
|
123
121
|
this.pendingAttach.delete(attachMessage.id);
|
|
124
122
|
return;
|
|
125
123
|
}
|
|
126
124
|
// If a non-local operation then go and create the object, otherwise mark it as officially attached.
|
|
127
125
|
if (this.alreadyProcessed(attachMessage.id)) {
|
|
128
126
|
// TODO: dataStoreId may require a different tag from PackageData #7488
|
|
129
|
-
const error = new
|
|
127
|
+
const error = new telemetry_utils_1.DataCorruptionError(
|
|
130
128
|
// pre-0.58 error message: duplicateDataStoreCreatedWithExistingId
|
|
131
|
-
"Duplicate DataStore created with existing id",
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
129
|
+
"Duplicate DataStore created with existing id", {
|
|
130
|
+
...(0, telemetry_utils_1.extractSafePropertiesFromMessage)(message),
|
|
131
|
+
...(0, telemetry_utils_1.tagCodeArtifacts)({ dataStoreId: attachMessage.id }),
|
|
132
|
+
});
|
|
135
133
|
throw error;
|
|
136
134
|
}
|
|
137
|
-
const
|
|
135
|
+
const flatAttachBlobs = new Map();
|
|
138
136
|
let snapshotTree;
|
|
139
137
|
if (attachMessage.snapshot) {
|
|
140
|
-
snapshotTree = (0, driver_utils_1.buildSnapshotTree)(attachMessage.snapshot.entries,
|
|
138
|
+
snapshotTree = (0, driver_utils_1.buildSnapshotTree)(attachMessage.snapshot.entries, flatAttachBlobs);
|
|
141
139
|
}
|
|
142
140
|
// Include the type of attach message which is the pkg of the store to be
|
|
143
141
|
// used by RemoteFluidDataStoreContext in case it is not in the snapshot.
|
|
@@ -145,20 +143,16 @@ class DataStores {
|
|
|
145
143
|
const remoteFluidDataStoreContext = new dataStoreContext_1.RemoteFluidDataStoreContext({
|
|
146
144
|
id: attachMessage.id,
|
|
147
145
|
snapshotTree,
|
|
148
|
-
// New data stores begin with empty GC details since GC hasn't run on them yet.
|
|
149
|
-
getBaseGCDetails: async () => { return {}; },
|
|
150
146
|
runtime: this.runtime,
|
|
151
|
-
storage: new
|
|
147
|
+
storage: new storageServiceWithAttachBlobs_1.StorageServiceWithAttachBlobs(this.runtime.storage, flatAttachBlobs),
|
|
152
148
|
scope: this.runtime.scope,
|
|
153
149
|
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(attachMessage.id, {
|
|
154
150
|
type: runtime_definitions_1.CreateSummarizerNodeSource.FromAttach,
|
|
155
151
|
sequenceNumber: message.sequenceNumber,
|
|
156
|
-
snapshot:
|
|
157
|
-
entries: [(0, dataStoreContext_1.createAttributesBlob)(pkg, true /* isRootDataStore
|
|
152
|
+
snapshot: attachMessage.snapshot ?? {
|
|
153
|
+
entries: [(0, dataStoreContext_1.createAttributesBlob)(pkg, true /* isRootDataStore */)],
|
|
158
154
|
},
|
|
159
155
|
}),
|
|
160
|
-
writeGCDataAtRoot: this.writeGCDataAtRoot,
|
|
161
|
-
disableIsolatedChannels: this.runtime.disableIsolatedChannels,
|
|
162
156
|
pkg,
|
|
163
157
|
});
|
|
164
158
|
this.contexts.addBoundOrRemoted(remoteFluidDataStoreContext);
|
|
@@ -166,7 +160,9 @@ class DataStores {
|
|
|
166
160
|
processAliasMessage(message, localOpMetadata, local) {
|
|
167
161
|
const aliasMessage = message.contents;
|
|
168
162
|
if (!(0, dataStore_1.isDataStoreAliasMessage)(aliasMessage)) {
|
|
169
|
-
throw new
|
|
163
|
+
throw new telemetry_utils_1.DataCorruptionError("malformedDataStoreAliasMessage", {
|
|
164
|
+
...(0, telemetry_utils_1.extractSafePropertiesFromMessage)(message),
|
|
165
|
+
});
|
|
170
166
|
}
|
|
171
167
|
const resolve = localOpMetadata;
|
|
172
168
|
const aliasResult = this.processAliasMessageCore(aliasMessage);
|
|
@@ -179,8 +175,13 @@ class DataStores {
|
|
|
179
175
|
return false;
|
|
180
176
|
}
|
|
181
177
|
const context = this.contexts.get(aliasMessage.internalId);
|
|
178
|
+
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
179
|
+
// corruption in case a deleted data store accidentally submitted a signal.
|
|
180
|
+
if (this.checkAndLogIfDeleted(aliasMessage.internalId, context, "Changed", "processAliasMessageCore")) {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
182
183
|
if (context === undefined) {
|
|
183
|
-
this.logger.sendErrorEvent({
|
|
184
|
+
this.mc.logger.sendErrorEvent({
|
|
184
185
|
eventName: "AliasFluidDataStoreNotFound",
|
|
185
186
|
fluidDataStoreId: aliasMessage.internalId,
|
|
186
187
|
});
|
|
@@ -202,7 +203,7 @@ class DataStores {
|
|
|
202
203
|
*/
|
|
203
204
|
makeDataStoreLocallyVisible(id) {
|
|
204
205
|
const localContext = this.contexts.getUnbound(id);
|
|
205
|
-
(0,
|
|
206
|
+
(0, core_utils_1.assert)(!!localContext, 0x15f /* "Could not find unbound context to bind" */);
|
|
206
207
|
/**
|
|
207
208
|
* If the container is not detached, it is globally visible to all clients. This data store should also be
|
|
208
209
|
* globally visible. Move it to attaching state and send an "attach" op for it.
|
|
@@ -218,59 +219,79 @@ class DataStores {
|
|
|
218
219
|
this.contexts.bind(id);
|
|
219
220
|
}
|
|
220
221
|
createDetachedDataStoreCore(pkg, isRoot, id = (0, uuid_1.v4)()) {
|
|
221
|
-
(0,
|
|
222
|
+
(0, core_utils_1.assert)(!id.includes("/"), 0x30c /* Id cannot contain slashes */);
|
|
222
223
|
const context = new dataStoreContext_1.LocalDetachedFluidDataStoreContext({
|
|
223
224
|
id,
|
|
224
225
|
pkg,
|
|
225
226
|
runtime: this.runtime,
|
|
226
227
|
storage: this.runtime.storage,
|
|
227
228
|
scope: this.runtime.scope,
|
|
228
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
229
|
+
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
230
|
+
type: runtime_definitions_1.CreateSummarizerNodeSource.Local,
|
|
231
|
+
}),
|
|
229
232
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
|
|
230
233
|
snapshotTree: undefined,
|
|
231
234
|
isRootDataStore: isRoot,
|
|
232
|
-
writeGCDataAtRoot: this.writeGCDataAtRoot,
|
|
233
|
-
disableIsolatedChannels: this.runtime.disableIsolatedChannels,
|
|
234
235
|
});
|
|
235
236
|
this.contexts.addUnbound(context);
|
|
236
237
|
return context;
|
|
237
238
|
}
|
|
238
|
-
_createFluidDataStoreContext(pkg, id,
|
|
239
|
-
(0,
|
|
239
|
+
_createFluidDataStoreContext(pkg, id, props) {
|
|
240
|
+
(0, core_utils_1.assert)(!id.includes("/"), 0x30d /* Id cannot contain slashes */);
|
|
240
241
|
const context = new dataStoreContext_1.LocalFluidDataStoreContext({
|
|
241
242
|
id,
|
|
242
243
|
pkg,
|
|
243
244
|
runtime: this.runtime,
|
|
244
245
|
storage: this.runtime.storage,
|
|
245
246
|
scope: this.runtime.scope,
|
|
246
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
247
|
+
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
248
|
+
type: runtime_definitions_1.CreateSummarizerNodeSource.Local,
|
|
249
|
+
}),
|
|
247
250
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
|
|
248
251
|
snapshotTree: undefined,
|
|
249
|
-
isRootDataStore:
|
|
250
|
-
writeGCDataAtRoot: this.writeGCDataAtRoot,
|
|
251
|
-
disableIsolatedChannels: this.runtime.disableIsolatedChannels,
|
|
252
|
+
isRootDataStore: false,
|
|
252
253
|
createProps: props,
|
|
253
254
|
});
|
|
254
255
|
this.contexts.addUnbound(context);
|
|
255
256
|
return context;
|
|
256
257
|
}
|
|
257
|
-
get disposed() {
|
|
258
|
-
|
|
259
|
-
|
|
258
|
+
get disposed() {
|
|
259
|
+
return this.disposeOnce.evaluated;
|
|
260
|
+
}
|
|
261
|
+
resubmitDataStoreOp(envelope, localOpMetadata) {
|
|
260
262
|
const context = this.contexts.get(envelope.address);
|
|
261
|
-
|
|
263
|
+
// If the data store has been deleted, log an error and throw an error. If there are local changes for a
|
|
264
|
+
// deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
|
|
265
|
+
if (this.checkAndLogIfDeleted(envelope.address, context, "Changed", "resubmitDataStoreOp")) {
|
|
266
|
+
throw new telemetry_utils_1.DataCorruptionError("Context is deleted!", {
|
|
267
|
+
callSite: "resubmitDataStoreOp",
|
|
268
|
+
...(0, telemetry_utils_1.tagCodeArtifacts)({ id: envelope.address }),
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
(0, core_utils_1.assert)(!!context, 0x160 /* "There should be a store context for the op" */);
|
|
262
272
|
context.reSubmit(envelope.contents, localOpMetadata);
|
|
263
273
|
}
|
|
264
|
-
rollbackDataStoreOp(
|
|
265
|
-
const envelope = content;
|
|
274
|
+
rollbackDataStoreOp(envelope, localOpMetadata) {
|
|
266
275
|
const context = this.contexts.get(envelope.address);
|
|
267
|
-
|
|
276
|
+
// If the data store has been deleted, log an error and throw an error. If there are local changes for a
|
|
277
|
+
// deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
|
|
278
|
+
if (this.checkAndLogIfDeleted(envelope.address, context, "Changed", "rollbackDataStoreOp")) {
|
|
279
|
+
throw new telemetry_utils_1.DataCorruptionError("Context is deleted!", {
|
|
280
|
+
callSite: "rollbackDataStoreOp",
|
|
281
|
+
...(0, telemetry_utils_1.tagCodeArtifacts)({ id: envelope.address }),
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
(0, core_utils_1.assert)(!!context, 0x2e8 /* "There should be a store context for the op" */);
|
|
268
285
|
context.rollback(envelope.contents, localOpMetadata);
|
|
269
286
|
}
|
|
270
|
-
async applyStashedOp(
|
|
271
|
-
const envelope = content;
|
|
287
|
+
async applyStashedOp(envelope) {
|
|
272
288
|
const context = this.contexts.get(envelope.address);
|
|
273
|
-
|
|
289
|
+
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
290
|
+
// corruption in case the data store that stashed the op is deleted.
|
|
291
|
+
if (this.checkAndLogIfDeleted(envelope.address, context, "Changed", "applyStashedOp")) {
|
|
292
|
+
return undefined;
|
|
293
|
+
}
|
|
294
|
+
(0, core_utils_1.assert)(!!context, 0x161 /* "There should be a store context for the op" */);
|
|
274
295
|
return context.applyStashedOp(envelope.contents);
|
|
275
296
|
}
|
|
276
297
|
async applyStashedAttachOp(message) {
|
|
@@ -280,16 +301,27 @@ class DataStores {
|
|
|
280
301
|
}
|
|
281
302
|
processFluidDataStoreOp(message, local, localMessageMetadata) {
|
|
282
303
|
const envelope = message.contents;
|
|
283
|
-
const transformed =
|
|
304
|
+
const transformed = { ...message, contents: envelope.contents };
|
|
284
305
|
const context = this.contexts.get(envelope.address);
|
|
285
|
-
|
|
306
|
+
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
307
|
+
// corruption in case a deleted data store accidentally submitted an op.
|
|
308
|
+
if (this.checkAndLogIfDeleted(envelope.address, context, "Changed", "processFluidDataStoreOp")) {
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
(0, core_utils_1.assert)(!!context, 0x162 /* "There should be a store context for the op" */);
|
|
286
312
|
context.process(transformed, local, localMessageMetadata);
|
|
287
313
|
// Notify that a GC node for the data store changed. This is used to detect if a deleted data store is
|
|
288
314
|
// being used.
|
|
289
315
|
this.gcNodeUpdated(`/${envelope.address}`, message.timestamp, context.isLoaded ? context.packagePath : undefined);
|
|
290
316
|
}
|
|
291
|
-
async getDataStore(id,
|
|
292
|
-
const
|
|
317
|
+
async getDataStore(id, requestHeaderData) {
|
|
318
|
+
const headerData = { ...containerRuntime_1.defaultRuntimeHeaderData, ...requestHeaderData };
|
|
319
|
+
if (this.checkAndLogIfDeleted(id, this.contexts.get(id), "Requested", "getDataStore", requestHeaderData)) {
|
|
320
|
+
// The requested data store has been deleted by gc. Create a 404 response exception.
|
|
321
|
+
const request = { url: id };
|
|
322
|
+
throw (0, runtime_utils_1.responseToException)((0, runtime_utils_1.createResponseError)(404, "DataStore was deleted", request), request);
|
|
323
|
+
}
|
|
324
|
+
const context = await this.contexts.getBoundOrRemoted(id, headerData.wait);
|
|
293
325
|
if (context === undefined) {
|
|
294
326
|
// The requested data store does not exits. Throw a 404 response exception.
|
|
295
327
|
const request = { url: id };
|
|
@@ -297,44 +329,85 @@ class DataStores {
|
|
|
297
329
|
}
|
|
298
330
|
return context;
|
|
299
331
|
}
|
|
300
|
-
|
|
301
|
-
|
|
332
|
+
/**
|
|
333
|
+
* Returns the data store requested with the given id if available. Otherwise, returns undefined.
|
|
334
|
+
*/
|
|
335
|
+
async getDataStoreIfAvailable(id, requestHeaderData) {
|
|
336
|
+
// If the data store has been deleted, log an error and return undefined.
|
|
337
|
+
if (this.checkAndLogIfDeleted(id, this.contexts.get(id), "Requested", "getDataStoreIfAvailable", requestHeaderData)) {
|
|
338
|
+
return undefined;
|
|
339
|
+
}
|
|
340
|
+
const headerData = { ...containerRuntime_1.defaultRuntimeHeaderData, ...requestHeaderData };
|
|
341
|
+
const context = await this.contexts.getBoundOrRemoted(id, headerData.wait);
|
|
342
|
+
if (context === undefined) {
|
|
343
|
+
return undefined;
|
|
344
|
+
}
|
|
345
|
+
return context;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Checks if the data store has been deleted by GC. If so, log an error.
|
|
349
|
+
* @param id - The data store's id.
|
|
350
|
+
* @param context - The data store context.
|
|
351
|
+
* @param callSite - The function name this is called from.
|
|
352
|
+
* @param requestHeaderData - The request header information to log if the data store is deleted.
|
|
353
|
+
* @returns true if the data store is deleted. Otherwise, returns false.
|
|
354
|
+
*/
|
|
355
|
+
checkAndLogIfDeleted(id, context, deletedLogSuffix, callSite, requestHeaderData) {
|
|
356
|
+
const dataStoreNodePath = `/${id}`;
|
|
357
|
+
if (!this.isDataStoreDeleted(dataStoreNodePath)) {
|
|
358
|
+
return false;
|
|
359
|
+
}
|
|
360
|
+
this.mc.logger.sendErrorEvent({
|
|
361
|
+
eventName: `GC_Deleted_DataStore_${deletedLogSuffix}`,
|
|
362
|
+
...(0, telemetry_utils_1.tagCodeArtifacts)({ id }),
|
|
363
|
+
callSite,
|
|
364
|
+
headers: JSON.stringify(requestHeaderData),
|
|
365
|
+
exists: context !== undefined,
|
|
366
|
+
});
|
|
367
|
+
return true;
|
|
368
|
+
}
|
|
369
|
+
processSignal(fluidDataStoreId, message, local) {
|
|
370
|
+
const context = this.contexts.get(fluidDataStoreId);
|
|
371
|
+
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
372
|
+
// corruption in case a deleted data store accidentally submitted a signal.
|
|
373
|
+
if (this.checkAndLogIfDeleted(fluidDataStoreId, context, "Changed", "processSignal")) {
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
302
376
|
if (!context) {
|
|
303
377
|
// Attach message may not have been processed yet
|
|
304
|
-
(0,
|
|
305
|
-
this.logger.sendTelemetryEvent({
|
|
378
|
+
(0, core_utils_1.assert)(!local, 0x163 /* "Missing datastore for local signal" */);
|
|
379
|
+
this.mc.logger.sendTelemetryEvent({
|
|
306
380
|
eventName: "SignalFluidDataStoreNotFound",
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
},
|
|
381
|
+
...(0, telemetry_utils_1.tagCodeArtifacts)({
|
|
382
|
+
fluidDataStoreId,
|
|
383
|
+
}),
|
|
311
384
|
});
|
|
312
385
|
return;
|
|
313
386
|
}
|
|
314
387
|
context.processSignal(message, local);
|
|
315
388
|
}
|
|
316
389
|
setConnectionState(connected, clientId) {
|
|
317
|
-
for (const [
|
|
390
|
+
for (const [fluidDataStoreId, context] of this.contexts) {
|
|
318
391
|
try {
|
|
319
392
|
context.setConnectionState(connected, clientId);
|
|
320
393
|
}
|
|
321
394
|
catch (error) {
|
|
322
|
-
this.logger.sendErrorEvent({
|
|
395
|
+
this.mc.logger.sendErrorEvent({
|
|
323
396
|
eventName: "SetConnectionStateError",
|
|
324
397
|
clientId,
|
|
325
|
-
|
|
398
|
+
...(0, telemetry_utils_1.tagCodeArtifacts)({
|
|
399
|
+
fluidDataStoreId,
|
|
400
|
+
}),
|
|
401
|
+
details: JSON.stringify({
|
|
402
|
+
runtimeConnected: this.runtime.connected,
|
|
403
|
+
connected,
|
|
404
|
+
}),
|
|
326
405
|
}, error);
|
|
327
406
|
}
|
|
328
407
|
}
|
|
329
408
|
}
|
|
330
409
|
setAttachState(attachState) {
|
|
331
|
-
|
|
332
|
-
if (attachState === container_definitions_1.AttachState.Attaching) {
|
|
333
|
-
eventName = "attaching";
|
|
334
|
-
}
|
|
335
|
-
else {
|
|
336
|
-
eventName = "attached";
|
|
337
|
-
}
|
|
410
|
+
const eventName = attachState === container_definitions_1.AttachState.Attaching ? "attaching" : "attached";
|
|
338
411
|
for (const [, context] of this.contexts) {
|
|
339
412
|
// Fire only for bounded stores.
|
|
340
413
|
if (!this.contexts.isNotBound(context.id)) {
|
|
@@ -350,10 +423,17 @@ class DataStores {
|
|
|
350
423
|
// Iterate over each store and ask it to snapshot
|
|
351
424
|
await Promise.all(Array.from(this.contexts)
|
|
352
425
|
.filter(([_, context]) => {
|
|
353
|
-
// Summarizer works only with clients with no local changes
|
|
354
|
-
|
|
426
|
+
// Summarizer works only with clients with no local changes. A data store in attaching
|
|
427
|
+
// state indicates an op was sent to attach a local data store, and the the attach op
|
|
428
|
+
// had not yet round tripped back to the client.
|
|
429
|
+
if (context.attachState === container_definitions_1.AttachState.Attaching) {
|
|
430
|
+
// Formerly assert 0x588
|
|
431
|
+
const error = telemetry_utils_1.DataProcessingError.create("Local data store detected in attaching state during summarize", "summarize");
|
|
432
|
+
throw error;
|
|
433
|
+
}
|
|
355
434
|
return context.attachState === container_definitions_1.AttachState.Attached;
|
|
356
|
-
})
|
|
435
|
+
})
|
|
436
|
+
.map(async ([contextId, context]) => {
|
|
357
437
|
const contextSummary = await context.summarize(fullTree, trackState, telemetryContext);
|
|
358
438
|
summaryBuilder.addWithStats(contextId, contextSummary);
|
|
359
439
|
}));
|
|
@@ -373,9 +453,9 @@ class DataStores {
|
|
|
373
453
|
// Take summary of bounded data stores only, make sure we haven't summarized them already
|
|
374
454
|
// and no attach op has been fired for that data store because for loader versions <= 0.24
|
|
375
455
|
// we set attach state as "attaching" before taking createNew summary.
|
|
376
|
-
!(this.contexts.isNotBound(key)
|
|
377
|
-
|
|
378
|
-
|
|
456
|
+
!(this.contexts.isNotBound(key) ||
|
|
457
|
+
builderTree[key] ||
|
|
458
|
+
this.attachOpFiredForDataStore.has(key)))
|
|
379
459
|
.map(([key, value]) => {
|
|
380
460
|
let dataStoreSummary;
|
|
381
461
|
if (value.isLoaded) {
|
|
@@ -385,7 +465,7 @@ class DataStores {
|
|
|
385
465
|
else {
|
|
386
466
|
// If this data store is not yet loaded, then there should be no changes in the snapshot from
|
|
387
467
|
// which it was created as it is detached container. So just use the previous snapshot.
|
|
388
|
-
(0,
|
|
468
|
+
(0, core_utils_1.assert)(!!this.baseSnapshot, 0x166 /* "BaseSnapshot should be there as detached container loaded from snapshot" */);
|
|
389
469
|
dataStoreSummary = (0, runtime_utils_1.convertSnapshotTreeToSummaryTree)(this.baseSnapshot.trees[key]);
|
|
390
470
|
}
|
|
391
471
|
builder.addWithStats(key, dataStoreSummary);
|
|
@@ -401,7 +481,7 @@ class DataStores {
|
|
|
401
481
|
async updateStateBeforeGC() {
|
|
402
482
|
for (const id of this.dataStoresSinceLastGC) {
|
|
403
483
|
const context = this.contexts.get(id);
|
|
404
|
-
(0,
|
|
484
|
+
(0, core_utils_1.assert)(context !== undefined, 0x2b6 /* Missing data store context */);
|
|
405
485
|
if (await context.isRoot()) {
|
|
406
486
|
// A root data store is basically a reference from the container runtime to the data store.
|
|
407
487
|
const handle = new datastore_1.FluidObjectHandle(context, id, this.runtime.IFluidHandleContext);
|
|
@@ -412,22 +492,33 @@ class DataStores {
|
|
|
412
492
|
}
|
|
413
493
|
/**
|
|
414
494
|
* Generates data used for garbage collection. It does the following:
|
|
495
|
+
*
|
|
415
496
|
* 1. Calls into each child data store context to get its GC data.
|
|
497
|
+
*
|
|
416
498
|
* 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
|
|
417
|
-
*
|
|
499
|
+
* identified as belonging to the child.
|
|
500
|
+
*
|
|
418
501
|
* 3. Adds a GC node for this channel to the nodes received from the children. All these nodes together represent
|
|
419
|
-
*
|
|
502
|
+
* the GC data of this channel.
|
|
503
|
+
*
|
|
420
504
|
* @param fullGC - true to bypass optimizations and force full generation of GC data.
|
|
421
505
|
*/
|
|
422
506
|
async getGCData(fullGC = false) {
|
|
423
|
-
const builder = new
|
|
507
|
+
const builder = new runtime_utils_1.GCDataBuilder();
|
|
424
508
|
// Iterate over each store and get their GC data.
|
|
425
509
|
await Promise.all(Array.from(this.contexts)
|
|
426
510
|
.filter(([_, context]) => {
|
|
427
|
-
//
|
|
428
|
-
//
|
|
511
|
+
// Summarizer client and hence GC works only with clients with no local changes. A data store in
|
|
512
|
+
// attaching state indicates an op was sent to attach a local data store, and the the attach op
|
|
513
|
+
// had not yet round tripped back to the client.
|
|
514
|
+
// Formerly assert 0x589
|
|
515
|
+
if (context.attachState === container_definitions_1.AttachState.Attaching) {
|
|
516
|
+
const error = telemetry_utils_1.DataProcessingError.create("Local data store detected in attaching state while running GC", "getGCData");
|
|
517
|
+
throw error;
|
|
518
|
+
}
|
|
429
519
|
return context.attachState === container_definitions_1.AttachState.Attached;
|
|
430
|
-
})
|
|
520
|
+
})
|
|
521
|
+
.map(async ([contextId, context]) => {
|
|
431
522
|
const contextGCData = await context.getGCData(fullGC);
|
|
432
523
|
// Prefix the child's id to the ids of its GC nodes so they can be identified as belonging to the child.
|
|
433
524
|
// This also gradually builds the id of each node to be a path from the root.
|
|
@@ -440,28 +531,24 @@ class DataStores {
|
|
|
440
531
|
/**
|
|
441
532
|
* After GC has run, called to notify this Container's data stores of routes that are used in it.
|
|
442
533
|
* @param usedRoutes - The routes that are used in all data stores in this Container.
|
|
443
|
-
* @param gcTimestamp - The time when GC was run that generated these used routes. If any node node becomes
|
|
444
|
-
* unreferenced as part of this GC run, this should be used to update the time when it happens.
|
|
445
534
|
*/
|
|
446
|
-
updateUsedRoutes(usedRoutes
|
|
447
|
-
var _a;
|
|
535
|
+
updateUsedRoutes(usedRoutes) {
|
|
448
536
|
// Get a map of data store ids to routes used in it.
|
|
449
|
-
const usedDataStoreRoutes = (0,
|
|
537
|
+
const usedDataStoreRoutes = (0, runtime_utils_1.unpackChildNodesUsedRoutes)(usedRoutes);
|
|
450
538
|
// Verify that the used routes are correct.
|
|
451
539
|
for (const [id] of usedDataStoreRoutes) {
|
|
452
|
-
(0,
|
|
540
|
+
(0, core_utils_1.assert)(this.contexts.has(id), 0x167 /* "Used route does not belong to any known data store" */);
|
|
453
541
|
}
|
|
454
542
|
// Update the used routes in each data store. Used routes is empty for unused data stores.
|
|
455
543
|
for (const [contextId, context] of this.contexts) {
|
|
456
|
-
context.updateUsedRoutes(
|
|
544
|
+
context.updateUsedRoutes(usedDataStoreRoutes.get(contextId) ?? []);
|
|
457
545
|
}
|
|
458
546
|
}
|
|
459
547
|
/**
|
|
460
|
-
*
|
|
461
|
-
* scenarios with accessing deleted content.
|
|
548
|
+
* This is called to update objects whose routes are unused. The unused objects are deleted.
|
|
462
549
|
* @param unusedRoutes - The routes that are unused in all data stores in this Container.
|
|
463
550
|
*/
|
|
464
|
-
|
|
551
|
+
updateUnusedRoutes(unusedRoutes) {
|
|
465
552
|
for (const route of unusedRoutes) {
|
|
466
553
|
const pathParts = route.split("/");
|
|
467
554
|
// Delete data store only if its route (/datastoreId) is in unusedRoutes. We don't want to delete a data
|
|
@@ -470,13 +557,73 @@ class DataStores {
|
|
|
470
557
|
continue;
|
|
471
558
|
}
|
|
472
559
|
const dataStoreId = pathParts[1];
|
|
473
|
-
(0,
|
|
560
|
+
(0, core_utils_1.assert)(this.contexts.has(dataStoreId), 0x2d7 /* No data store with specified id */);
|
|
474
561
|
// Delete the contexts of unused data stores.
|
|
475
562
|
this.contexts.delete(dataStoreId);
|
|
476
563
|
// Delete the summarizer node of the unused data stores.
|
|
477
564
|
this.deleteChildSummarizerNodeFn(dataStoreId);
|
|
478
565
|
}
|
|
479
566
|
}
|
|
567
|
+
/**
|
|
568
|
+
* Delete data stores and its objects that are sweep ready.
|
|
569
|
+
* @param sweepReadyDataStoreRoutes - The routes of data stores and its objects that are sweep ready and should
|
|
570
|
+
* be deleted.
|
|
571
|
+
* @returns The routes of data stores and its objects that were deleted.
|
|
572
|
+
*/
|
|
573
|
+
deleteSweepReadyNodes(sweepReadyDataStoreRoutes) {
|
|
574
|
+
// If sweep for data stores is not enabled, return empty list indicating nothing is deleted.
|
|
575
|
+
if (this.mc.config.getBoolean(gc_1.disableDatastoreSweepKey) === true) {
|
|
576
|
+
return [];
|
|
577
|
+
}
|
|
578
|
+
for (const route of sweepReadyDataStoreRoutes) {
|
|
579
|
+
const pathParts = route.split("/");
|
|
580
|
+
const dataStoreId = pathParts[1];
|
|
581
|
+
// Ignore sub-data store routes because a data store and its sub-routes are deleted together, so, we only
|
|
582
|
+
// need to delete the data store.
|
|
583
|
+
if (pathParts.length > 2) {
|
|
584
|
+
continue;
|
|
585
|
+
}
|
|
586
|
+
const dataStoreContext = this.contexts.get(dataStoreId);
|
|
587
|
+
if (dataStoreContext === undefined) {
|
|
588
|
+
this.mc.logger.sendErrorEvent({
|
|
589
|
+
eventName: "DeletedDataStoreNotFound",
|
|
590
|
+
...(0, telemetry_utils_1.tagCodeArtifacts)({ id: dataStoreId }),
|
|
591
|
+
details: {
|
|
592
|
+
alreadyDeleted: this.isDataStoreDeleted(dataStoreId),
|
|
593
|
+
},
|
|
594
|
+
});
|
|
595
|
+
continue;
|
|
596
|
+
}
|
|
597
|
+
dataStoreContext.delete();
|
|
598
|
+
// Delete the contexts of sweep ready data stores.
|
|
599
|
+
this.contexts.delete(dataStoreId);
|
|
600
|
+
// Delete the summarizer node of the sweep ready data stores.
|
|
601
|
+
this.deleteChildSummarizerNodeFn(dataStoreId);
|
|
602
|
+
}
|
|
603
|
+
return Array.from(sweepReadyDataStoreRoutes);
|
|
604
|
+
}
|
|
605
|
+
/**
|
|
606
|
+
* This is called to update objects whose routes are tombstones. Tombstoned datastore contexts enable testing
|
|
607
|
+
* scenarios with accessing deleted content without actually deleting content from summaries.
|
|
608
|
+
* @param tombstonedRoutes - The routes that are tombstones in all data stores in this Container.
|
|
609
|
+
*/
|
|
610
|
+
updateTombstonedRoutes(tombstonedRoutes) {
|
|
611
|
+
const tombstonedDataStoresSet = new Set();
|
|
612
|
+
for (const route of tombstonedRoutes) {
|
|
613
|
+
const pathParts = route.split("/");
|
|
614
|
+
// Tombstone data store only if its route (/datastoreId) is directly in tombstoneRoutes.
|
|
615
|
+
if (pathParts.length > 2) {
|
|
616
|
+
continue;
|
|
617
|
+
}
|
|
618
|
+
const dataStoreId = pathParts[1];
|
|
619
|
+
(0, core_utils_1.assert)(this.contexts.has(dataStoreId), 0x510 /* No data store with specified id */);
|
|
620
|
+
tombstonedDataStoresSet.add(dataStoreId);
|
|
621
|
+
}
|
|
622
|
+
// Update the used routes in each data store. Used routes is empty for unused data stores.
|
|
623
|
+
for (const [contextId, context] of this.contexts) {
|
|
624
|
+
context.setTombstone(tombstonedDataStoresSet.has(contextId));
|
|
625
|
+
}
|
|
626
|
+
}
|
|
480
627
|
/**
|
|
481
628
|
* Returns the outbound routes of this channel. Only root data stores are considered referenced and their paths are
|
|
482
629
|
* part of outbound routes.
|
|
@@ -495,11 +642,10 @@ class DataStores {
|
|
|
495
642
|
* Called by GC to retrieve the package path of a data store node with the given path.
|
|
496
643
|
*/
|
|
497
644
|
async getDataStorePackagePath(nodePath) {
|
|
498
|
-
var _a;
|
|
499
645
|
// If the node belongs to a data store, return its package path. For DDSes, we return the package path of the
|
|
500
646
|
// data store that contains it.
|
|
501
647
|
const context = this.contexts.get(nodePath.split("/")[1]);
|
|
502
|
-
return (
|
|
648
|
+
return (await context?.getInitialSnapshotDetails())?.pkg;
|
|
503
649
|
}
|
|
504
650
|
/**
|
|
505
651
|
* 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).
|
|
@@ -513,9 +659,9 @@ class DataStores {
|
|
|
513
659
|
// Data stores paths are of the format "/dataStoreId".
|
|
514
660
|
// Sub data store paths are of the format "/dataStoreId/subPath/...".
|
|
515
661
|
if (pathParts.length === 2) {
|
|
516
|
-
return
|
|
662
|
+
return gc_1.GCNodeType.DataStore;
|
|
517
663
|
}
|
|
518
|
-
return
|
|
664
|
+
return gc_1.GCNodeType.SubDataStore;
|
|
519
665
|
}
|
|
520
666
|
}
|
|
521
667
|
exports.DataStores = DataStores;
|
|
@@ -523,21 +669,24 @@ function getSummaryForDatastores(snapshot, metadata) {
|
|
|
523
669
|
if (!snapshot) {
|
|
524
670
|
return undefined;
|
|
525
671
|
}
|
|
526
|
-
if ((0,
|
|
672
|
+
if ((0, summary_1.rootHasIsolatedChannels)(metadata)) {
|
|
527
673
|
const datastoresSnapshot = snapshot.trees[runtime_definitions_1.channelsTreeName];
|
|
528
|
-
(0,
|
|
674
|
+
(0, core_utils_1.assert)(!!datastoresSnapshot, 0x168 /* Expected tree in snapshot not found */);
|
|
529
675
|
return datastoresSnapshot;
|
|
530
676
|
}
|
|
531
677
|
else {
|
|
532
678
|
// back-compat: strip out all non-datastore paths before giving to DataStores object.
|
|
533
679
|
const datastoresTrees = {};
|
|
534
680
|
for (const [key, value] of Object.entries(snapshot.trees)) {
|
|
535
|
-
if (!
|
|
681
|
+
if (!summary_1.nonDataStorePaths.includes(key)) {
|
|
536
682
|
datastoresTrees[key] = value;
|
|
537
683
|
}
|
|
538
684
|
}
|
|
539
|
-
return
|
|
685
|
+
return {
|
|
686
|
+
...snapshot,
|
|
687
|
+
trees: datastoresTrees,
|
|
688
|
+
};
|
|
540
689
|
}
|
|
541
690
|
}
|
|
542
691
|
exports.getSummaryForDatastores = getSummaryForDatastores;
|
|
543
|
-
//# sourceMappingURL=dataStores.
|
|
692
|
+
//# sourceMappingURL=dataStores.cjs.map
|