@fluidframework/container-runtime 2.0.0-rc.1.0.3 → 2.0.0-rc.2.0.0
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 → .eslintrc.cjs} +5 -5
- package/{.mocharc.js → .mocharc.cjs} +1 -1
- package/CHANGELOG.md +54 -0
- package/README.md +45 -0
- package/{api-extractor-esm.json → api-extractor-cjs.json} +5 -1
- package/api-extractor-lint.json +1 -1
- package/api-extractor.json +1 -1
- package/api-report/container-runtime.api.md +68 -30
- package/dist/batchTracker.d.ts +1 -2
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager.js.map +1 -1
- package/dist/channelCollection.d.ts +223 -0
- package/dist/channelCollection.d.ts.map +1 -0
- package/dist/{dataStores.js → channelCollection.js} +399 -83
- package/dist/channelCollection.js.map +1 -0
- package/dist/connectionTelemetry.d.ts +11 -1
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +42 -4
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/container-runtime-alpha.d.ts +98 -40
- package/dist/container-runtime-beta.d.ts +27 -9
- package/dist/container-runtime-public.d.ts +27 -9
- package/dist/container-runtime-untrimmed.d.ts +123 -40
- package/dist/containerHandleContext.d.ts +1 -1
- package/dist/containerHandleContext.d.ts.map +1 -1
- package/dist/containerHandleContext.js.map +1 -1
- package/dist/containerRuntime.d.ts +79 -55
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +541 -411
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.d.ts +2 -3
- package/dist/dataStore.d.ts.map +1 -1
- package/dist/dataStore.js +12 -11
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +71 -30
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +182 -141
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts +1 -1
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/deltaManagerSummarizerProxy.d.ts +29 -4
- package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
- package/dist/deltaManagerSummarizerProxy.js +91 -5
- package/dist/deltaManagerSummarizerProxy.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts +22 -5
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +134 -75
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.d.ts +2 -2
- package/dist/gc/gcConfigs.d.ts.map +1 -1
- package/dist/gc/gcConfigs.js +21 -21
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +29 -6
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js +5 -1
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcHelpers.d.ts +2 -2
- package/dist/gc/gcHelpers.d.ts.map +1 -1
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcReferenceGraphAlgorithm.d.ts +1 -1
- package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -1
- package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts +12 -5
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js +18 -6
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts +7 -7
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +20 -20
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.d.ts +6 -1
- package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.js +22 -11
- package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
- package/dist/gc/index.d.ts +8 -8
- package/dist/gc/index.d.ts.map +1 -1
- package/dist/gc/index.js +40 -38
- package/dist/gc/index.js.map +1 -1
- package/dist/index.d.ts +8 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -40
- package/dist/index.js.map +1 -1
- package/dist/messageTypes.d.ts +4 -4
- package/dist/messageTypes.d.ts.map +1 -1
- package/dist/messageTypes.js.map +1 -1
- package/dist/opLifecycle/batchManager.d.ts +2 -2
- package/dist/opLifecycle/batchManager.d.ts.map +1 -1
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/definitions.d.ts +2 -2
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -1
- package/dist/opLifecycle/index.d.ts +8 -8
- package/dist/opLifecycle/index.d.ts.map +1 -1
- package/dist/opLifecycle/index.js +18 -18
- package/dist/opLifecycle/index.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts +1 -1
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +4 -4
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +3 -3
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js +1 -10
- package/dist/opLifecycle/opGroupingManager.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts +1 -1
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +5 -5
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +7 -7
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +20 -12
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts +4 -4
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js +2 -2
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/dist/package.json +3 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/pendingStateManager.d.ts +2 -1
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +18 -10
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/scheduleManager.d.ts +1 -2
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js +5 -5
- package/dist/scheduleManager.js.map +1 -1
- package/dist/summary/index.d.ts +12 -12
- package/dist/summary/index.d.ts.map +1 -1
- package/dist/summary/index.js +43 -43
- package/dist/summary/index.js.map +1 -1
- package/dist/summary/orderedClientElection.js +8 -8
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -1
- package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/dist/summary/runningSummarizer.d.ts +11 -10
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +114 -81
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.d.ts +4 -4
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +6 -6
- package/dist/summary/summarizer.js.map +1 -1
- package/dist/summary/summarizerClientElection.d.ts +2 -2
- package/dist/summary/summarizerClientElection.d.ts.map +1 -1
- package/dist/summary/summarizerClientElection.js.map +1 -1
- package/dist/summary/summarizerHeuristics.d.ts +3 -3
- package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
- package/dist/summary/summarizerHeuristics.js.map +1 -1
- package/dist/summary/summarizerNode/index.d.ts +3 -3
- package/dist/summary/summarizerNode/index.d.ts.map +1 -1
- package/dist/summary/summarizerNode/index.js +4 -4
- package/dist/summary/summarizerNode/index.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.d.ts +17 -7
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js +45 -57
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +10 -19
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.js +1 -21
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +5 -6
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +16 -16
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +10 -21
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +15 -2
- package/dist/summary/summaryFormat.d.ts.map +1 -1
- package/dist/summary/summaryFormat.js.map +1 -1
- package/dist/summary/summaryGenerator.d.ts +6 -5
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +10 -1
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryManager.d.ts +5 -6
- package/dist/summary/summaryManager.d.ts.map +1 -1
- package/dist/summary/summaryManager.js +4 -5
- package/dist/summary/summaryManager.js.map +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/lib/{batchTracker.d.mts → batchTracker.d.ts} +2 -3
- package/lib/batchTracker.d.ts.map +1 -0
- package/lib/{batchTracker.mjs → batchTracker.js} +1 -1
- package/lib/batchTracker.js.map +1 -0
- package/lib/{blobManager.d.mts → blobManager.d.ts} +1 -1
- package/lib/blobManager.d.ts.map +1 -0
- package/lib/{blobManager.mjs → blobManager.js} +1 -1
- package/lib/blobManager.js.map +1 -0
- package/lib/channelCollection.d.ts +223 -0
- package/lib/channelCollection.d.ts.map +1 -0
- package/lib/{dataStores.mjs → channelCollection.js} +384 -71
- package/lib/channelCollection.js.map +1 -0
- package/lib/{connectionTelemetry.d.mts → connectionTelemetry.d.ts} +12 -2
- package/lib/connectionTelemetry.d.ts.map +1 -0
- package/lib/{connectionTelemetry.mjs → connectionTelemetry.js} +43 -5
- package/lib/connectionTelemetry.js.map +1 -0
- package/lib/{container-runtime-alpha.d.mts → container-runtime-alpha.d.ts} +98 -40
- package/lib/{container-runtime-public.d.mts → container-runtime-beta.d.ts} +27 -9
- package/lib/{container-runtime-beta.d.mts → container-runtime-public.d.ts} +27 -9
- package/lib/{container-runtime-untrimmed.d.mts → container-runtime-untrimmed.d.ts} +123 -40
- package/lib/{containerHandleContext.d.mts → containerHandleContext.d.ts} +2 -2
- package/lib/containerHandleContext.d.ts.map +1 -0
- package/lib/{containerHandleContext.mjs → containerHandleContext.js} +1 -1
- package/lib/containerHandleContext.js.map +1 -0
- package/lib/{containerRuntime.d.mts → containerRuntime.d.ts} +84 -56
- package/lib/containerRuntime.d.ts.map +1 -0
- package/lib/{containerRuntime.mjs → containerRuntime.js} +460 -332
- package/lib/containerRuntime.js.map +1 -0
- package/lib/{dataStore.d.mts → dataStore.d.ts} +3 -4
- package/lib/dataStore.d.ts.map +1 -0
- package/lib/{dataStore.mjs → dataStore.js} +13 -12
- package/lib/dataStore.js.map +1 -0
- package/lib/{dataStoreContext.d.mts → dataStoreContext.d.ts} +72 -31
- package/lib/dataStoreContext.d.ts.map +1 -0
- package/lib/{dataStoreContext.mjs → dataStoreContext.js} +174 -133
- package/lib/dataStoreContext.js.map +1 -0
- package/lib/{dataStoreContexts.d.mts → dataStoreContexts.d.ts} +2 -2
- package/lib/dataStoreContexts.d.ts.map +1 -0
- package/lib/{dataStoreContexts.mjs → dataStoreContexts.js} +1 -1
- package/lib/dataStoreContexts.js.map +1 -0
- package/lib/{dataStoreRegistry.d.mts → dataStoreRegistry.d.ts} +1 -1
- package/lib/dataStoreRegistry.d.ts.map +1 -0
- package/lib/{dataStoreRegistry.mjs → dataStoreRegistry.js} +5 -1
- package/lib/dataStoreRegistry.js.map +1 -0
- package/{dist/deltaManagerProxyBase.d.ts → lib/deltaManagerSummarizerProxy.d.ts} +16 -7
- package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -0
- package/lib/deltaManagerSummarizerProxy.js +124 -0
- package/lib/deltaManagerSummarizerProxy.js.map +1 -0
- package/lib/{deltaScheduler.d.mts → deltaScheduler.d.ts} +1 -1
- package/lib/deltaScheduler.d.ts.map +1 -0
- package/lib/{deltaScheduler.mjs → deltaScheduler.js} +1 -1
- package/lib/deltaScheduler.js.map +1 -0
- package/lib/{error.d.mts → error.d.ts} +1 -1
- package/lib/error.d.ts.map +1 -0
- package/lib/{error.mjs → error.js} +1 -1
- package/lib/error.js.map +1 -0
- package/lib/gc/{garbageCollection.d.mts → garbageCollection.d.ts} +23 -6
- package/lib/gc/garbageCollection.d.ts.map +1 -0
- package/lib/gc/{garbageCollection.mjs → garbageCollection.js} +103 -44
- package/lib/gc/garbageCollection.js.map +1 -0
- package/lib/gc/{gcConfigs.d.mts → gcConfigs.d.ts} +3 -3
- package/lib/gc/gcConfigs.d.ts.map +1 -0
- package/lib/gc/{gcConfigs.mjs → gcConfigs.js} +3 -3
- package/lib/gc/gcConfigs.js.map +1 -0
- package/lib/gc/{gcDefinitions.d.mts → gcDefinitions.d.ts} +30 -7
- package/lib/gc/gcDefinitions.d.ts.map +1 -0
- package/lib/gc/{gcDefinitions.mjs → gcDefinitions.js} +5 -1
- package/lib/gc/gcDefinitions.js.map +1 -0
- package/lib/gc/{gcHelpers.d.mts → gcHelpers.d.ts} +3 -3
- package/lib/gc/{gcHelpers.d.mts.map → gcHelpers.d.ts.map} +1 -1
- package/lib/gc/{gcHelpers.mjs → gcHelpers.js} +1 -1
- package/lib/gc/gcHelpers.js.map +1 -0
- package/lib/gc/{gcReferenceGraphAlgorithm.d.mts → gcReferenceGraphAlgorithm.d.ts} +2 -2
- package/lib/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
- package/lib/gc/{gcReferenceGraphAlgorithm.mjs → gcReferenceGraphAlgorithm.js} +1 -1
- package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -0
- package/lib/gc/{gcSummaryDefinitions.d.mts → gcSummaryDefinitions.d.ts} +1 -1
- package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -0
- package/lib/gc/{gcSummaryDefinitions.mjs → gcSummaryDefinitions.js} +1 -1
- package/lib/gc/gcSummaryDefinitions.js.map +1 -0
- package/lib/gc/{gcSummaryStateTracker.d.mts → gcSummaryStateTracker.d.ts} +13 -6
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
- package/lib/gc/{gcSummaryStateTracker.mjs → gcSummaryStateTracker.js} +17 -5
- package/lib/gc/gcSummaryStateTracker.js.map +1 -0
- package/lib/gc/{gcTelemetry.d.mts → gcTelemetry.d.ts} +8 -8
- package/lib/gc/gcTelemetry.d.ts.map +1 -0
- package/lib/gc/{gcTelemetry.mjs → gcTelemetry.js} +5 -5
- package/lib/gc/gcTelemetry.js.map +1 -0
- package/lib/gc/{gcUnreferencedStateTracker.d.mts → gcUnreferencedStateTracker.d.ts} +7 -2
- package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
- package/lib/gc/{gcUnreferencedStateTracker.mjs → gcUnreferencedStateTracker.js} +12 -2
- package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
- package/lib/gc/{index.d.mts → index.d.ts} +9 -9
- package/lib/gc/index.d.ts.map +1 -0
- package/lib/gc/{index.mjs → index.js} +8 -8
- package/lib/gc/index.js.map +1 -0
- package/lib/{index.d.mts → index.d.ts} +9 -21
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +12 -0
- package/lib/index.js.map +1 -0
- package/lib/{messageTypes.d.mts → messageTypes.d.ts} +5 -5
- package/lib/messageTypes.d.ts.map +1 -0
- package/lib/{messageTypes.mjs → messageTypes.js} +1 -1
- package/lib/messageTypes.js.map +1 -0
- package/lib/{metadata.d.mts → metadata.d.ts} +1 -1
- package/lib/metadata.d.ts.map +1 -0
- package/lib/{metadata.mjs → metadata.js} +1 -1
- package/lib/metadata.js.map +1 -0
- package/lib/opLifecycle/{batchManager.d.mts → batchManager.d.ts} +3 -3
- package/lib/opLifecycle/batchManager.d.ts.map +1 -0
- package/lib/opLifecycle/{batchManager.mjs → batchManager.js} +1 -1
- package/lib/opLifecycle/batchManager.js.map +1 -0
- package/lib/opLifecycle/{definitions.d.mts → definitions.d.ts} +3 -3
- package/lib/opLifecycle/definitions.d.ts.map +1 -0
- package/lib/opLifecycle/{definitions.mjs → definitions.js} +1 -1
- package/lib/opLifecycle/definitions.js.map +1 -0
- package/lib/opLifecycle/index.d.ts +13 -0
- package/lib/opLifecycle/index.d.ts.map +1 -0
- package/lib/opLifecycle/index.js +12 -0
- package/lib/opLifecycle/index.js.map +1 -0
- package/lib/opLifecycle/{opCompressor.d.mts → opCompressor.d.ts} +2 -2
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -0
- package/lib/opLifecycle/{opCompressor.mjs → opCompressor.js} +3 -3
- package/lib/opLifecycle/opCompressor.js.map +1 -0
- package/lib/opLifecycle/{opDecompressor.d.mts → opDecompressor.d.ts} +2 -2
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -0
- package/lib/opLifecycle/{opDecompressor.mjs → opDecompressor.js} +2 -2
- package/lib/opLifecycle/opDecompressor.js.map +1 -0
- package/lib/opLifecycle/{opGroupingManager.d.mts → opGroupingManager.d.ts} +2 -2
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -0
- package/lib/opLifecycle/{opGroupingManager.mjs → opGroupingManager.js} +2 -11
- package/lib/opLifecycle/opGroupingManager.js.map +1 -0
- package/lib/opLifecycle/{opSplitter.d.mts → opSplitter.d.ts} +2 -2
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -0
- package/lib/opLifecycle/{opSplitter.mjs → opSplitter.js} +3 -3
- package/lib/opLifecycle/opSplitter.js.map +1 -0
- package/lib/opLifecycle/{outbox.d.mts → outbox.d.ts} +8 -8
- package/lib/opLifecycle/outbox.d.ts.map +1 -0
- package/lib/opLifecycle/{outbox.mjs → outbox.js} +12 -4
- package/lib/opLifecycle/outbox.js.map +1 -0
- package/lib/opLifecycle/{remoteMessageProcessor.d.mts → remoteMessageProcessor.d.ts} +5 -5
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
- package/lib/opLifecycle/{remoteMessageProcessor.mjs → remoteMessageProcessor.js} +2 -2
- package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -0
- package/lib/{opProperties.d.mts → opProperties.d.ts} +1 -1
- package/lib/opProperties.d.ts.map +1 -0
- package/lib/{opProperties.mjs → opProperties.js} +1 -1
- package/lib/opProperties.js.map +1 -0
- package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
- package/lib/packageVersion.d.ts.map +1 -0
- package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
- package/lib/packageVersion.js.map +1 -0
- package/lib/{pendingStateManager.d.mts → pendingStateManager.d.ts} +3 -2
- package/lib/pendingStateManager.d.ts.map +1 -0
- package/lib/{pendingStateManager.mjs → pendingStateManager.js} +18 -10
- package/lib/pendingStateManager.js.map +1 -0
- package/lib/{scheduleManager.d.mts → scheduleManager.d.ts} +6 -3
- package/lib/scheduleManager.d.ts.map +1 -0
- package/lib/{scheduleManager.mjs → scheduleManager.js} +3 -3
- package/lib/scheduleManager.js.map +1 -0
- package/lib/{storageServiceWithAttachBlobs.d.mts → storageServiceWithAttachBlobs.d.ts} +1 -1
- package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -0
- package/lib/{storageServiceWithAttachBlobs.mjs → storageServiceWithAttachBlobs.js} +1 -1
- package/lib/storageServiceWithAttachBlobs.js.map +1 -0
- package/lib/summary/{index.d.mts → index.d.ts} +13 -13
- package/lib/summary/index.d.ts.map +1 -0
- package/lib/summary/{index.mjs → index.js} +12 -12
- package/lib/summary/index.js.map +1 -0
- package/lib/summary/{orderedClientElection.d.mts → orderedClientElection.d.ts} +5 -1
- package/lib/summary/orderedClientElection.d.ts.map +1 -0
- package/lib/summary/{orderedClientElection.mjs → orderedClientElection.js} +2 -2
- package/lib/summary/orderedClientElection.js.map +1 -0
- package/lib/summary/{runWhileConnectedCoordinator.d.mts → runWhileConnectedCoordinator.d.ts} +2 -2
- package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
- package/lib/summary/{runWhileConnectedCoordinator.mjs → runWhileConnectedCoordinator.js} +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
- package/lib/summary/{runningSummarizer.d.mts → runningSummarizer.d.ts} +12 -11
- package/lib/summary/runningSummarizer.d.ts.map +1 -0
- package/lib/summary/{runningSummarizer.mjs → runningSummarizer.js} +108 -75
- package/lib/summary/runningSummarizer.js.map +1 -0
- package/lib/summary/{summarizer.d.mts → summarizer.d.ts} +5 -5
- package/lib/summary/summarizer.d.ts.map +1 -0
- package/lib/summary/{summarizer.mjs → summarizer.js} +4 -4
- package/lib/summary/summarizer.js.map +1 -0
- package/lib/summary/{summarizerClientElection.d.mts → summarizerClientElection.d.ts} +3 -3
- package/lib/summary/summarizerClientElection.d.ts.map +1 -0
- package/lib/summary/{summarizerClientElection.mjs → summarizerClientElection.js} +1 -1
- package/lib/summary/summarizerClientElection.js.map +1 -0
- package/lib/summary/{summarizerHeuristics.d.mts → summarizerHeuristics.d.ts} +4 -4
- package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
- package/lib/summary/{summarizerHeuristics.mjs → summarizerHeuristics.js} +1 -1
- package/lib/summary/summarizerHeuristics.js.map +1 -0
- package/lib/summary/summarizerNode/{index.d.mts → index.d.ts} +4 -4
- package/lib/summary/summarizerNode/index.d.ts.map +1 -0
- package/lib/summary/summarizerNode/index.js +7 -0
- package/lib/summary/summarizerNode/index.js.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNode.d.mts → summarizerNode.d.ts} +18 -8
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNode.mjs → summarizerNode.js} +41 -53
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeUtils.d.mts → summarizerNodeUtils.d.ts} +11 -20
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeUtils.mjs → summarizerNodeUtils.js} +1 -20
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeWithGc.d.mts → summarizerNodeWithGc.d.ts} +6 -7
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeWithGc.mjs → summarizerNodeWithGc.js} +12 -12
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
- package/lib/summary/{summarizerTypes.d.mts → summarizerTypes.d.ts} +11 -22
- package/lib/summary/summarizerTypes.d.ts.map +1 -0
- package/lib/summary/{summarizerTypes.mjs → summarizerTypes.js} +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -0
- package/lib/summary/{summaryCollection.d.mts → summaryCollection.d.ts} +1 -1
- package/lib/summary/summaryCollection.d.ts.map +1 -0
- package/lib/summary/{summaryCollection.mjs → summaryCollection.js} +1 -1
- package/lib/summary/summaryCollection.js.map +1 -0
- package/lib/summary/{summaryFormat.d.mts → summaryFormat.d.ts} +16 -3
- package/lib/summary/summaryFormat.d.ts.map +1 -0
- package/lib/summary/{summaryFormat.mjs → summaryFormat.js} +1 -1
- package/lib/summary/summaryFormat.js.map +1 -0
- package/lib/summary/{summaryGenerator.d.mts → summaryGenerator.d.ts} +7 -6
- package/lib/summary/summaryGenerator.d.ts.map +1 -0
- package/lib/summary/{summaryGenerator.mjs → summaryGenerator.js} +11 -2
- package/lib/summary/summaryGenerator.js.map +1 -0
- package/lib/summary/{summaryManager.d.mts → summaryManager.d.ts} +6 -7
- package/lib/summary/summaryManager.d.ts.map +1 -0
- package/lib/summary/{summaryManager.mjs → summaryManager.js} +4 -5
- package/lib/summary/summaryManager.js.map +1 -0
- package/lib/test/batchTracker.spec.js +88 -0
- package/lib/test/batchTracker.spec.js.map +1 -0
- package/lib/test/blobManager.spec.js +835 -0
- package/lib/test/blobManager.spec.js.map +1 -0
- package/lib/test/channelCollection.spec.js +141 -0
- package/lib/test/channelCollection.spec.js.map +1 -0
- package/lib/test/containerRuntime.spec.js +1748 -0
- package/lib/test/containerRuntime.spec.js.map +1 -0
- package/lib/test/dataStoreContext.spec.js +801 -0
- package/lib/test/dataStoreContext.spec.js.map +1 -0
- package/lib/test/dataStoreCreation.spec.js +312 -0
- package/lib/test/dataStoreCreation.spec.js.map +1 -0
- package/lib/test/dataStoreRegistry.spec.js +26 -0
- package/lib/test/dataStoreRegistry.spec.js.map +1 -0
- package/lib/test/fuzz/fuzzUtils.js +66 -0
- package/lib/test/fuzz/fuzzUtils.js.map +1 -0
- package/lib/test/fuzz/summarizer.fuzz.spec.js +31 -0
- package/lib/test/fuzz/summarizer.fuzz.spec.js.map +1 -0
- package/lib/test/fuzz/summarizerFuzzMocks.js +162 -0
- package/lib/test/fuzz/summarizerFuzzMocks.js.map +1 -0
- package/lib/test/fuzz/summarizerFuzzSuite.js +106 -0
- package/lib/test/fuzz/summarizerFuzzSuite.js.map +1 -0
- package/lib/test/gc/garbageCollection.spec.js +1465 -0
- package/lib/test/gc/garbageCollection.spec.js.map +1 -0
- package/lib/test/gc/gcConfigs.spec.js +690 -0
- package/lib/test/gc/gcConfigs.spec.js.map +1 -0
- package/lib/test/gc/gcHelpers.spec.js +110 -0
- package/lib/test/gc/gcHelpers.spec.js.map +1 -0
- package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +68 -0
- package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +1 -0
- package/lib/test/gc/gcStats.spec.js +391 -0
- package/lib/test/gc/gcStats.spec.js.map +1 -0
- package/lib/test/gc/gcSummaryStateTracker.spec.js +228 -0
- package/lib/test/gc/gcSummaryStateTracker.spec.js.map +1 -0
- package/lib/test/gc/gcTelemetry.spec.js +530 -0
- package/lib/test/gc/gcTelemetry.spec.js.map +1 -0
- package/lib/test/gc/gcUnitTestHelpers.js +29 -0
- package/lib/test/gc/gcUnitTestHelpers.js.map +1 -0
- package/lib/test/gc/gcUnreferencedStateTracker.spec.js +192 -0
- package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +1 -0
- package/lib/test/getPendingBlobs.spec.js +193 -0
- package/lib/test/getPendingBlobs.spec.js.map +1 -0
- package/lib/test/hardwareStats.spec.js +93 -0
- package/lib/test/hardwareStats.spec.js.map +1 -0
- package/lib/test/index.js +6 -0
- package/lib/test/index.js.map +1 -0
- package/lib/test/opLifecycle/OpGroupingManager.spec.js +225 -0
- package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +1 -0
- package/lib/test/opLifecycle/batchManager.spec.js +189 -0
- package/lib/test/opLifecycle/batchManager.spec.js.map +1 -0
- package/lib/test/opLifecycle/opCompressor.spec.js +74 -0
- package/lib/test/opLifecycle/opCompressor.spec.js.map +1 -0
- package/lib/test/opLifecycle/opDecompressor.spec.js +218 -0
- package/lib/test/opLifecycle/opDecompressor.spec.js.map +1 -0
- package/lib/test/opLifecycle/opSplitter.spec.js +272 -0
- package/lib/test/opLifecycle/opSplitter.spec.js.map +1 -0
- package/lib/test/opLifecycle/outbox.spec.js +675 -0
- package/lib/test/opLifecycle/outbox.spec.js.map +1 -0
- package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +196 -0
- package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +1 -0
- package/lib/test/pendingStateManager.spec.js +329 -0
- package/lib/test/pendingStateManager.spec.js.map +1 -0
- package/lib/test/scheduleManager.spec.js +270 -0
- package/lib/test/scheduleManager.spec.js.map +1 -0
- package/lib/test/summarizerNode.spec.js +326 -0
- package/lib/test/summarizerNode.spec.js.map +1 -0
- package/lib/test/summarizerNodeWithGc.spec.js +318 -0
- package/lib/test/summarizerNodeWithGc.spec.js.map +1 -0
- package/lib/test/summary/orderedClientElection.spec.js +535 -0
- package/lib/test/summary/orderedClientElection.spec.js.map +1 -0
- package/lib/test/summary/runningSummarizer.spec.js +1349 -0
- package/lib/test/summary/runningSummarizer.spec.js.map +1 -0
- package/lib/test/summary/summarizer.spec.js +29 -0
- package/lib/test/summary/summarizer.spec.js.map +1 -0
- package/lib/test/summary/summarizerClientElection.spec.js +436 -0
- package/lib/test/summary/summarizerClientElection.spec.js.map +1 -0
- package/lib/test/summary/summarizerHeuristics.spec.js +289 -0
- package/lib/test/summary/summarizerHeuristics.spec.js.map +1 -0
- package/lib/test/summary/summaryCollection.spec.js +200 -0
- package/lib/test/summary/summaryCollection.spec.js.map +1 -0
- package/lib/test/summary/summaryManager.spec.js +430 -0
- package/lib/test/summary/summaryManager.spec.js.map +1 -0
- package/lib/test/summary/testQuorumClients.js +34 -0
- package/lib/test/summary/testQuorumClients.js.map +1 -0
- package/lib/test/throttler.spec.js +175 -0
- package/lib/test/throttler.spec.js.map +1 -0
- package/lib/test/types/validateContainerRuntimePrevious.generated.js +180 -0
- package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +1 -0
- package/lib/{throttler.d.mts → throttler.d.ts} +1 -1
- package/lib/throttler.d.ts.map +1 -0
- package/lib/{throttler.mjs → throttler.js} +1 -1
- package/lib/throttler.js.map +1 -0
- package/package.json +99 -88
- package/src/batchTracker.ts +1 -1
- package/src/blobManager.ts +1 -1
- package/src/{dataStores.ts → channelCollection.ts} +520 -84
- package/src/connectionTelemetry.ts +42 -3
- package/src/containerHandleContext.ts +1 -1
- package/src/containerRuntime.ts +661 -464
- package/src/dataStore.ts +13 -15
- package/src/dataStoreContext.ts +257 -184
- package/src/dataStoreContexts.ts +1 -1
- package/src/deltaManagerSummarizerProxy.ts +132 -7
- package/src/gc/garbageCollection.ts +121 -46
- package/src/gc/gcConfigs.ts +3 -3
- package/src/gc/gcDefinitions.ts +30 -7
- package/src/gc/gcHelpers.ts +2 -2
- package/src/gc/gcReferenceGraphAlgorithm.ts +1 -1
- package/src/gc/gcSummaryStateTracker.ts +19 -7
- package/src/gc/gcTelemetry.ts +10 -9
- package/src/gc/gcUnreferencedStateTracker.ts +12 -1
- package/src/gc/index.ts +10 -8
- package/src/index.ts +16 -27
- package/src/messageTypes.ts +4 -4
- package/src/opLifecycle/README.md +2 -4
- package/src/opLifecycle/batchManager.ts +2 -2
- package/src/opLifecycle/definitions.ts +2 -2
- package/src/opLifecycle/index.ts +8 -8
- package/src/opLifecycle/opCompressor.ts +3 -3
- package/src/opLifecycle/opDecompressor.ts +3 -3
- package/src/opLifecycle/opGroupingManager.ts +3 -12
- package/src/opLifecycle/opSplitter.ts +3 -3
- package/src/opLifecycle/outbox.ts +29 -9
- package/src/opLifecycle/remoteMessageProcessor.ts +4 -4
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +19 -13
- package/src/scheduleManager.ts +4 -4
- package/src/summary/index.ts +13 -12
- package/src/summary/orderedClientElection.ts +1 -1
- package/src/summary/runWhileConnectedCoordinator.ts +1 -1
- package/src/summary/runningSummarizer.ts +141 -93
- package/src/summary/summarizer.ts +7 -7
- package/src/summary/summarizerClientElection.ts +2 -2
- package/src/summary/summarizerHeuristics.ts +3 -3
- package/src/summary/summarizerNode/index.ts +6 -3
- package/src/summary/summarizerNode/summarizerNode.ts +54 -69
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +16 -34
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +11 -17
- package/src/summary/summarizerTypes.ts +12 -24
- package/src/summary/summaryFormat.ts +16 -2
- package/src/summary/summaryGenerator.ts +16 -4
- package/src/summary/summaryManager.ts +6 -7
- package/tsconfig.cjs.json +7 -0
- package/tsconfig.json +2 -5
- package/dist/dataStores.d.ts +0 -149
- package/dist/dataStores.d.ts.map +0 -1
- package/dist/dataStores.js.map +0 -1
- package/dist/deltaManagerProxyBase.d.ts.map +0 -1
- package/dist/deltaManagerProxyBase.js +0 -77
- package/dist/deltaManagerProxyBase.js.map +0 -1
- package/lib/batchTracker.d.mts.map +0 -1
- package/lib/batchTracker.mjs.map +0 -1
- package/lib/blobManager.d.mts.map +0 -1
- package/lib/blobManager.mjs.map +0 -1
- package/lib/connectionTelemetry.d.mts.map +0 -1
- package/lib/connectionTelemetry.mjs.map +0 -1
- package/lib/containerHandleContext.d.mts.map +0 -1
- package/lib/containerHandleContext.mjs.map +0 -1
- package/lib/containerRuntime.d.mts.map +0 -1
- package/lib/containerRuntime.mjs.map +0 -1
- package/lib/dataStore.d.mts.map +0 -1
- package/lib/dataStore.mjs.map +0 -1
- package/lib/dataStoreContext.d.mts.map +0 -1
- package/lib/dataStoreContext.mjs.map +0 -1
- package/lib/dataStoreContexts.d.mts.map +0 -1
- package/lib/dataStoreContexts.mjs.map +0 -1
- package/lib/dataStoreRegistry.d.mts.map +0 -1
- package/lib/dataStoreRegistry.mjs.map +0 -1
- package/lib/dataStores.d.mts +0 -149
- package/lib/dataStores.d.mts.map +0 -1
- package/lib/dataStores.mjs.map +0 -1
- package/lib/deltaManagerProxyBase.d.mts +0 -35
- package/lib/deltaManagerProxyBase.d.mts.map +0 -1
- package/lib/deltaManagerProxyBase.mjs +0 -73
- package/lib/deltaManagerProxyBase.mjs.map +0 -1
- package/lib/deltaManagerSummarizerProxy.d.mts +0 -19
- package/lib/deltaManagerSummarizerProxy.d.mts.map +0 -1
- package/lib/deltaManagerSummarizerProxy.mjs +0 -38
- package/lib/deltaManagerSummarizerProxy.mjs.map +0 -1
- package/lib/deltaScheduler.d.mts.map +0 -1
- package/lib/deltaScheduler.mjs.map +0 -1
- package/lib/error.d.mts.map +0 -1
- package/lib/error.mjs.map +0 -1
- package/lib/gc/garbageCollection.d.mts.map +0 -1
- package/lib/gc/garbageCollection.mjs.map +0 -1
- package/lib/gc/gcConfigs.d.mts.map +0 -1
- package/lib/gc/gcConfigs.mjs.map +0 -1
- package/lib/gc/gcDefinitions.d.mts.map +0 -1
- package/lib/gc/gcDefinitions.mjs.map +0 -1
- package/lib/gc/gcHelpers.mjs.map +0 -1
- package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +0 -1
- package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +0 -1
- package/lib/gc/gcSummaryDefinitions.d.mts.map +0 -1
- package/lib/gc/gcSummaryDefinitions.mjs.map +0 -1
- package/lib/gc/gcSummaryStateTracker.d.mts.map +0 -1
- package/lib/gc/gcSummaryStateTracker.mjs.map +0 -1
- package/lib/gc/gcTelemetry.d.mts.map +0 -1
- package/lib/gc/gcTelemetry.mjs.map +0 -1
- package/lib/gc/gcUnreferencedStateTracker.d.mts.map +0 -1
- package/lib/gc/gcUnreferencedStateTracker.mjs.map +0 -1
- package/lib/gc/index.d.mts.map +0 -1
- package/lib/gc/index.mjs.map +0 -1
- package/lib/index.d.mts.map +0 -1
- package/lib/index.mjs +0 -24
- package/lib/index.mjs.map +0 -1
- package/lib/messageTypes.d.mts.map +0 -1
- package/lib/messageTypes.mjs.map +0 -1
- package/lib/metadata.d.mts.map +0 -1
- package/lib/metadata.mjs.map +0 -1
- package/lib/opLifecycle/batchManager.d.mts.map +0 -1
- package/lib/opLifecycle/batchManager.mjs.map +0 -1
- package/lib/opLifecycle/definitions.d.mts.map +0 -1
- package/lib/opLifecycle/definitions.mjs.map +0 -1
- package/lib/opLifecycle/index.d.mts +0 -13
- package/lib/opLifecycle/index.d.mts.map +0 -1
- package/lib/opLifecycle/index.mjs +0 -12
- package/lib/opLifecycle/index.mjs.map +0 -1
- package/lib/opLifecycle/opCompressor.d.mts.map +0 -1
- package/lib/opLifecycle/opCompressor.mjs.map +0 -1
- package/lib/opLifecycle/opDecompressor.d.mts.map +0 -1
- package/lib/opLifecycle/opDecompressor.mjs.map +0 -1
- package/lib/opLifecycle/opGroupingManager.d.mts.map +0 -1
- package/lib/opLifecycle/opGroupingManager.mjs.map +0 -1
- package/lib/opLifecycle/opSplitter.d.mts.map +0 -1
- package/lib/opLifecycle/opSplitter.mjs.map +0 -1
- package/lib/opLifecycle/outbox.d.mts.map +0 -1
- package/lib/opLifecycle/outbox.mjs.map +0 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +0 -1
- package/lib/opLifecycle/remoteMessageProcessor.mjs.map +0 -1
- package/lib/opProperties.d.mts.map +0 -1
- package/lib/opProperties.mjs.map +0 -1
- package/lib/packageVersion.d.mts.map +0 -1
- package/lib/packageVersion.mjs.map +0 -1
- package/lib/pendingStateManager.d.mts.map +0 -1
- package/lib/pendingStateManager.mjs.map +0 -1
- package/lib/scheduleManager.d.mts.map +0 -1
- package/lib/scheduleManager.mjs.map +0 -1
- package/lib/storageServiceWithAttachBlobs.d.mts.map +0 -1
- package/lib/storageServiceWithAttachBlobs.mjs.map +0 -1
- package/lib/summary/index.d.mts.map +0 -1
- package/lib/summary/index.mjs.map +0 -1
- package/lib/summary/orderedClientElection.d.mts.map +0 -1
- package/lib/summary/orderedClientElection.mjs.map +0 -1
- package/lib/summary/runWhileConnectedCoordinator.d.mts.map +0 -1
- package/lib/summary/runWhileConnectedCoordinator.mjs.map +0 -1
- package/lib/summary/runningSummarizer.d.mts.map +0 -1
- package/lib/summary/runningSummarizer.mjs.map +0 -1
- package/lib/summary/summarizer.d.mts.map +0 -1
- package/lib/summary/summarizer.mjs.map +0 -1
- package/lib/summary/summarizerClientElection.d.mts.map +0 -1
- package/lib/summary/summarizerClientElection.mjs.map +0 -1
- package/lib/summary/summarizerHeuristics.d.mts.map +0 -1
- package/lib/summary/summarizerHeuristics.mjs.map +0 -1
- package/lib/summary/summarizerNode/index.d.mts.map +0 -1
- package/lib/summary/summarizerNode/index.mjs +0 -7
- package/lib/summary/summarizerNode/index.mjs.map +0 -1
- package/lib/summary/summarizerNode/summarizerNode.d.mts.map +0 -1
- package/lib/summary/summarizerNode/summarizerNode.mjs.map +0 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +0 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +0 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +0 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +0 -1
- package/lib/summary/summarizerTypes.d.mts.map +0 -1
- package/lib/summary/summarizerTypes.mjs.map +0 -1
- package/lib/summary/summaryCollection.d.mts.map +0 -1
- package/lib/summary/summaryCollection.mjs.map +0 -1
- package/lib/summary/summaryFormat.d.mts.map +0 -1
- package/lib/summary/summaryFormat.mjs.map +0 -1
- package/lib/summary/summaryGenerator.d.mts.map +0 -1
- package/lib/summary/summaryGenerator.mjs.map +0 -1
- package/lib/summary/summaryManager.d.mts.map +0 -1
- package/lib/summary/summaryManager.mjs.map +0 -1
- package/lib/throttler.d.mts.map +0 -1
- package/lib/throttler.mjs.map +0 -1
- package/src/deltaManagerProxyBase.ts +0 -111
|
@@ -8,35 +8,44 @@ import {
|
|
|
8
8
|
IDisposable,
|
|
9
9
|
IFluidHandle,
|
|
10
10
|
IRequest,
|
|
11
|
+
FluidObject,
|
|
12
|
+
IResponse,
|
|
11
13
|
} from "@fluidframework/core-interfaces";
|
|
12
14
|
import { FluidObjectHandle } from "@fluidframework/datastore";
|
|
13
15
|
import { ISequencedDocumentMessage, ISnapshotTree } from "@fluidframework/protocol-definitions";
|
|
14
16
|
import {
|
|
15
17
|
AliasResult,
|
|
16
18
|
channelsTreeName,
|
|
17
|
-
CreateChildSummarizerNodeFn,
|
|
18
|
-
CreateChildSummarizerNodeParam,
|
|
19
19
|
CreateSummarizerNodeSource,
|
|
20
20
|
IAttachMessage,
|
|
21
21
|
IEnvelope,
|
|
22
|
+
IFluidDataStoreChannel,
|
|
22
23
|
IFluidDataStoreContextDetached,
|
|
23
24
|
IGarbageCollectionData,
|
|
24
25
|
IInboundSignalMessage,
|
|
26
|
+
IFluidParentContext,
|
|
25
27
|
InboundAttachMessage,
|
|
26
28
|
ISummarizeResult,
|
|
27
29
|
ISummaryTreeWithStats,
|
|
28
30
|
ITelemetryContext,
|
|
31
|
+
IFluidDataStoreFactory,
|
|
32
|
+
IFluidDataStoreContext,
|
|
33
|
+
NamedFluidDataStoreRegistryEntries,
|
|
34
|
+
IFluidDataStoreRegistry,
|
|
29
35
|
} from "@fluidframework/runtime-definitions";
|
|
30
36
|
import {
|
|
31
37
|
convertSnapshotTreeToSummaryTree,
|
|
32
|
-
|
|
38
|
+
convertSummaryTreeToITree,
|
|
33
39
|
create404Response,
|
|
34
40
|
createResponseError,
|
|
35
41
|
GCDataBuilder,
|
|
36
42
|
isSerializedHandle,
|
|
43
|
+
processAttachMessageGCData,
|
|
37
44
|
responseToException,
|
|
38
45
|
SummaryTreeBuilder,
|
|
39
46
|
unpackChildNodesUsedRoutes,
|
|
47
|
+
RequestParser,
|
|
48
|
+
encodeCompactIdToString,
|
|
40
49
|
} from "@fluidframework/runtime-utils";
|
|
41
50
|
import {
|
|
42
51
|
createChildMonitoringContext,
|
|
@@ -46,32 +55,183 @@ import {
|
|
|
46
55
|
LoggingError,
|
|
47
56
|
MonitoringContext,
|
|
48
57
|
tagCodeArtifacts,
|
|
58
|
+
createChildLogger,
|
|
49
59
|
} from "@fluidframework/telemetry-utils";
|
|
50
60
|
import { AttachState } from "@fluidframework/container-definitions";
|
|
51
61
|
import { buildSnapshotTree } from "@fluidframework/driver-utils";
|
|
52
|
-
import { assert, Lazy } from "@fluidframework/core-utils";
|
|
53
|
-
import {
|
|
54
|
-
import {
|
|
55
|
-
import { ContainerRuntime, defaultRuntimeHeaderData, RuntimeHeaderData } from "./containerRuntime";
|
|
62
|
+
import { assert, Lazy, LazyPromise } from "@fluidframework/core-utils";
|
|
63
|
+
import { DataStoreContexts } from "./dataStoreContexts.js";
|
|
64
|
+
import { defaultRuntimeHeaderData, RuntimeHeaderData } from "./containerRuntime.js";
|
|
56
65
|
import {
|
|
57
66
|
FluidDataStoreContext,
|
|
58
67
|
RemoteFluidDataStoreContext,
|
|
59
68
|
LocalFluidDataStoreContext,
|
|
60
69
|
createAttributesBlob,
|
|
61
70
|
LocalDetachedFluidDataStoreContext,
|
|
62
|
-
} from "./dataStoreContext";
|
|
63
|
-
import { StorageServiceWithAttachBlobs } from "./storageServiceWithAttachBlobs";
|
|
64
|
-
import {
|
|
65
|
-
|
|
66
|
-
|
|
71
|
+
} from "./dataStoreContext.js";
|
|
72
|
+
import { StorageServiceWithAttachBlobs } from "./storageServiceWithAttachBlobs.js";
|
|
73
|
+
import {
|
|
74
|
+
IDataStoreAliasMessage,
|
|
75
|
+
channelToDataStore,
|
|
76
|
+
isDataStoreAliasMessage,
|
|
77
|
+
} from "./dataStore.js";
|
|
78
|
+
import {
|
|
79
|
+
GCNodeType,
|
|
80
|
+
detectOutboundRoutesViaDDSKey,
|
|
81
|
+
trimLeadingAndTrailingSlashes,
|
|
82
|
+
} from "./gc/index.js";
|
|
83
|
+
import {
|
|
84
|
+
IContainerRuntimeMetadata,
|
|
85
|
+
nonDataStorePaths,
|
|
86
|
+
rootHasIsolatedChannels,
|
|
87
|
+
} from "./summary/index.js";
|
|
88
|
+
import { ContainerMessageType, LocalContainerRuntimeMessage } from "./messageTypes.js";
|
|
89
|
+
import { FluidDataStoreRegistry } from "./dataStoreRegistry.js";
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Accepted header keys for requests coming to the runtime.
|
|
93
|
+
* @internal
|
|
94
|
+
*/
|
|
95
|
+
export enum RuntimeHeaders {
|
|
96
|
+
/** True to wait for a data store to be created and loaded before returning it. */
|
|
97
|
+
wait = "wait",
|
|
98
|
+
/** True if the request is coming from an IFluidHandle. */
|
|
99
|
+
viaHandle = "viaHandle",
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** True if a tombstoned object should be returned without erroring
|
|
103
|
+
* @alpha
|
|
104
|
+
*/
|
|
105
|
+
export const AllowTombstoneRequestHeaderKey = "allowTombstone"; // Belongs in the enum above, but avoiding the breaking change
|
|
106
|
+
/**
|
|
107
|
+
* [IRRELEVANT IF throwOnInactiveLoad OPTION NOT SET] True if an inactive object should be returned without erroring
|
|
108
|
+
* @internal
|
|
109
|
+
*/
|
|
110
|
+
export const AllowInactiveRequestHeaderKey = "allowInactive"; // Belongs in the enum above, but avoiding the breaking change
|
|
67
111
|
|
|
68
112
|
type PendingAliasResolve = (success: boolean) => void;
|
|
69
113
|
|
|
114
|
+
interface FluidDataStoreMessage {
|
|
115
|
+
content: any;
|
|
116
|
+
type: string;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Creates a shallow wrapper of {@link IFluidParentContext}. The wrapper can then have its methods overwritten as needed
|
|
121
|
+
*/
|
|
122
|
+
export function wrapContext(context: IFluidParentContext): IFluidParentContext {
|
|
123
|
+
return {
|
|
124
|
+
get IFluidDataStoreRegistry() {
|
|
125
|
+
return context.IFluidDataStoreRegistry;
|
|
126
|
+
},
|
|
127
|
+
IFluidHandleContext: context.IFluidHandleContext,
|
|
128
|
+
options: context.options,
|
|
129
|
+
get clientId() {
|
|
130
|
+
return context.clientId;
|
|
131
|
+
},
|
|
132
|
+
get connected() {
|
|
133
|
+
return context.connected;
|
|
134
|
+
},
|
|
135
|
+
deltaManager: context.deltaManager,
|
|
136
|
+
storage: context.storage,
|
|
137
|
+
logger: context.logger,
|
|
138
|
+
get clientDetails() {
|
|
139
|
+
return context.clientDetails;
|
|
140
|
+
},
|
|
141
|
+
get idCompressor() {
|
|
142
|
+
return context.idCompressor;
|
|
143
|
+
},
|
|
144
|
+
loadingGroupId: context.loadingGroupId,
|
|
145
|
+
get attachState() {
|
|
146
|
+
return context.attachState;
|
|
147
|
+
},
|
|
148
|
+
containerRuntime: context.containerRuntime,
|
|
149
|
+
scope: context.scope,
|
|
150
|
+
gcThrowOnTombstoneUsage: context.gcThrowOnTombstoneUsage,
|
|
151
|
+
gcTombstoneEnforcementAllowed: context.gcTombstoneEnforcementAllowed,
|
|
152
|
+
getAbsoluteUrl: async (...args) => {
|
|
153
|
+
return context.getAbsoluteUrl(...args);
|
|
154
|
+
},
|
|
155
|
+
getQuorum: (...args) => {
|
|
156
|
+
return context.getQuorum(...args);
|
|
157
|
+
},
|
|
158
|
+
getAudience: (...args) => {
|
|
159
|
+
return context.getAudience(...args);
|
|
160
|
+
},
|
|
161
|
+
ensureNoDataModelChanges: (...args) => {
|
|
162
|
+
return context.ensureNoDataModelChanges(...args);
|
|
163
|
+
},
|
|
164
|
+
submitMessage: (...args) => {
|
|
165
|
+
return context.submitMessage(...args);
|
|
166
|
+
},
|
|
167
|
+
submitSignal: (...args) => {
|
|
168
|
+
return context.submitSignal(...args);
|
|
169
|
+
},
|
|
170
|
+
makeLocallyVisible: (...args) => {
|
|
171
|
+
return context.makeLocallyVisible(...args);
|
|
172
|
+
},
|
|
173
|
+
uploadBlob: async (...args) => {
|
|
174
|
+
return context.uploadBlob(...args);
|
|
175
|
+
},
|
|
176
|
+
addedGCOutboundReference: (...args) => {
|
|
177
|
+
return context.addedGCOutboundReference?.(...args);
|
|
178
|
+
},
|
|
179
|
+
getCreateChildSummarizerNodeFn: (...args) => {
|
|
180
|
+
return context.getCreateChildSummarizerNodeFn?.(...args);
|
|
181
|
+
},
|
|
182
|
+
deleteChildSummarizerNode: (...args) => {
|
|
183
|
+
return context.deleteChildSummarizerNode?.(...args);
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Creates a wrapper of a {@link IFluidParentContext} to be provided to the inner datastore channels.
|
|
190
|
+
* The wrapper will have the submit methods overwritten with the appropriate id as the destination address.
|
|
191
|
+
*
|
|
192
|
+
* @param id - the id of the channel
|
|
193
|
+
* @param parentContext - the {@link IFluidParentContext} to wrap
|
|
194
|
+
* @returns A wrapped {@link IFluidParentContext}
|
|
195
|
+
*/
|
|
196
|
+
export function wrapContextForInnerChannel(
|
|
197
|
+
id: string,
|
|
198
|
+
parentContext: IFluidParentContext,
|
|
199
|
+
): IFluidParentContext {
|
|
200
|
+
const context = wrapContext(parentContext);
|
|
201
|
+
|
|
202
|
+
context.submitMessage = (type: string, content: any, localOpMetadata: unknown) => {
|
|
203
|
+
const fluidDataStoreContent: FluidDataStoreMessage = {
|
|
204
|
+
content,
|
|
205
|
+
type,
|
|
206
|
+
};
|
|
207
|
+
const envelope: IEnvelope = {
|
|
208
|
+
address: id,
|
|
209
|
+
contents: fluidDataStoreContent,
|
|
210
|
+
};
|
|
211
|
+
parentContext.submitMessage(
|
|
212
|
+
ContainerMessageType.FluidDataStoreOp,
|
|
213
|
+
envelope,
|
|
214
|
+
localOpMetadata,
|
|
215
|
+
);
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
context.submitSignal = (type: string, contents: any, targetClientId?: string) => {
|
|
219
|
+
const envelope: IEnvelope = {
|
|
220
|
+
address: id,
|
|
221
|
+
contents,
|
|
222
|
+
};
|
|
223
|
+
parentContext.submitSignal(type, envelope, targetClientId);
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
return context;
|
|
227
|
+
}
|
|
228
|
+
|
|
70
229
|
/**
|
|
71
230
|
* This class encapsulates data store handling. Currently it is only used by the container runtime,
|
|
72
231
|
* but eventually could be hosted on any channel once we formalize the channel api boundary.
|
|
232
|
+
* @internal
|
|
73
233
|
*/
|
|
74
|
-
export class
|
|
234
|
+
export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
|
|
75
235
|
// Stores tracked by the Domain
|
|
76
236
|
private readonly pendingAttach = new Map<string, IAttachMessage>();
|
|
77
237
|
// 0.24 back-compat attachingBeforeSummary
|
|
@@ -81,6 +241,8 @@ export class DataStores implements IDisposable {
|
|
|
81
241
|
|
|
82
242
|
private readonly disposeOnce = new Lazy<void>(() => this.contexts.dispose());
|
|
83
243
|
|
|
244
|
+
public readonly entryPoint: IFluidHandle<FluidObject>;
|
|
245
|
+
|
|
84
246
|
public readonly containerLoadStats: {
|
|
85
247
|
// number of dataStores during loadContainer
|
|
86
248
|
readonly containerLoadDataStoreCount: number;
|
|
@@ -99,30 +261,35 @@ export class DataStores implements IDisposable {
|
|
|
99
261
|
Promise<AliasResult>
|
|
100
262
|
>();
|
|
101
263
|
|
|
264
|
+
private readonly contexts: DataStoreContexts;
|
|
265
|
+
|
|
102
266
|
constructor(
|
|
103
267
|
private readonly baseSnapshot: ISnapshotTree | undefined,
|
|
104
|
-
|
|
105
|
-
private readonly submitAttachFn: (attachContent: IAttachMessage) => void,
|
|
106
|
-
private readonly getCreateChildSummarizerNodeFn: (
|
|
107
|
-
id: string,
|
|
108
|
-
createParam: CreateChildSummarizerNodeParam,
|
|
109
|
-
) => CreateChildSummarizerNodeFn,
|
|
110
|
-
private readonly deleteChildSummarizerNodeFn: (id: string) => void,
|
|
268
|
+
public readonly parentContext: IFluidParentContext,
|
|
111
269
|
baseLogger: ITelemetryBaseLogger,
|
|
112
270
|
private readonly gcNodeUpdated: (
|
|
113
271
|
nodePath: string,
|
|
114
|
-
|
|
272
|
+
reason: "Loaded" | "Changed",
|
|
273
|
+
timestampMs?: number,
|
|
115
274
|
packagePath?: readonly string[],
|
|
275
|
+
request?: IRequest,
|
|
276
|
+
headerData?: RuntimeHeaderData,
|
|
116
277
|
) => void,
|
|
117
278
|
private readonly isDataStoreDeleted: (nodePath: string) => boolean,
|
|
118
279
|
private readonly aliasMap: Map<string, string>,
|
|
119
|
-
|
|
280
|
+
provideEntryPoint: (runtime: ChannelCollection) => Promise<FluidObject>,
|
|
120
281
|
) {
|
|
121
282
|
this.mc = createChildMonitoringContext({ logger: baseLogger });
|
|
283
|
+
this.contexts = new DataStoreContexts(baseLogger);
|
|
122
284
|
this.containerRuntimeHandle = new FluidObjectHandle(
|
|
123
|
-
this.
|
|
285
|
+
this.parentContext,
|
|
124
286
|
"/",
|
|
125
|
-
this.
|
|
287
|
+
this.parentContext.IFluidHandleContext,
|
|
288
|
+
);
|
|
289
|
+
this.entryPoint = new FluidObjectHandle<FluidObject>(
|
|
290
|
+
new LazyPromise(async () => provideEntryPoint(this)),
|
|
291
|
+
"",
|
|
292
|
+
this.parentContext.IFluidHandleContext,
|
|
126
293
|
);
|
|
127
294
|
|
|
128
295
|
// Extract stores stored inside the snapshot
|
|
@@ -143,16 +310,17 @@ export class DataStores implements IDisposable {
|
|
|
143
310
|
unreferencedDataStoreCount++;
|
|
144
311
|
}
|
|
145
312
|
// If we have a detached container, then create local data store contexts.
|
|
146
|
-
if (this.
|
|
313
|
+
if (this.parentContext.attachState !== AttachState.Detached) {
|
|
147
314
|
dataStoreContext = new RemoteFluidDataStoreContext({
|
|
148
315
|
id: key,
|
|
149
316
|
snapshotTree: value,
|
|
150
|
-
|
|
151
|
-
storage: this.
|
|
152
|
-
scope: this.
|
|
153
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
317
|
+
parentContext: this.wrapContextForInnerChannel(key),
|
|
318
|
+
storage: this.parentContext.storage,
|
|
319
|
+
scope: this.parentContext.scope,
|
|
320
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(key, {
|
|
154
321
|
type: CreateSummarizerNodeSource.FromSummary,
|
|
155
322
|
}),
|
|
323
|
+
loadingGroupId: value.groupId,
|
|
156
324
|
});
|
|
157
325
|
} else {
|
|
158
326
|
if (typeof value !== "object") {
|
|
@@ -162,10 +330,10 @@ export class DataStores implements IDisposable {
|
|
|
162
330
|
dataStoreContext = new LocalFluidDataStoreContext({
|
|
163
331
|
id: key,
|
|
164
332
|
pkg: undefined,
|
|
165
|
-
|
|
166
|
-
storage: this.
|
|
167
|
-
scope: this.
|
|
168
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
333
|
+
parentContext: this.wrapContextForInnerChannel(key),
|
|
334
|
+
storage: this.parentContext.storage,
|
|
335
|
+
scope: this.parentContext.scope,
|
|
336
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(key, {
|
|
169
337
|
type: CreateSummarizerNodeSource.FromSummary,
|
|
170
338
|
}),
|
|
171
339
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(key),
|
|
@@ -194,11 +362,53 @@ export class DataStores implements IDisposable {
|
|
|
194
362
|
return pendingAliasPromise ?? "Success";
|
|
195
363
|
}
|
|
196
364
|
|
|
197
|
-
|
|
365
|
+
/** For sampling. Only log once per container */
|
|
366
|
+
private shouldSendAttachLog = true;
|
|
367
|
+
|
|
368
|
+
private wrapContextForInnerChannel(id: string): IFluidParentContext {
|
|
369
|
+
return wrapContextForInnerChannel(id, this.parentContext);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* IFluidDataStoreChannel.makeVisibleAndAttachGraph implementation
|
|
374
|
+
* Not clear when it would be called and what it should do.
|
|
375
|
+
* Currently this API is called by context only for root data stores.
|
|
376
|
+
*/
|
|
377
|
+
public makeVisibleAndAttachGraph() {
|
|
378
|
+
this.parentContext.makeLocallyVisible();
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
private processAttachMessage(message: ISequencedDocumentMessage, local: boolean) {
|
|
198
382
|
const attachMessage = message.contents as InboundAttachMessage;
|
|
199
383
|
|
|
200
384
|
this.dataStoresSinceLastGC.push(attachMessage.id);
|
|
201
385
|
|
|
386
|
+
// We need to process the GC Data for both local and remote attach messages
|
|
387
|
+
const foundGCData = processAttachMessageGCData(attachMessage.snapshot, (nodeId, toPath) => {
|
|
388
|
+
// nodeId is the relative path under the node being attached. Always starts with "/", but no trailing "/" after an id
|
|
389
|
+
const fromPath = `/${attachMessage.id}${nodeId === "/" ? "" : nodeId}`;
|
|
390
|
+
this.parentContext.addedGCOutboundReference?.(
|
|
391
|
+
{ absolutePath: fromPath },
|
|
392
|
+
{ absolutePath: toPath },
|
|
393
|
+
);
|
|
394
|
+
});
|
|
395
|
+
|
|
396
|
+
// Only log once per container to avoid noise/cost.
|
|
397
|
+
// Allows longitudinal tracking of various state (e.g. foundGCData), and some sampled details
|
|
398
|
+
if (this.shouldSendAttachLog) {
|
|
399
|
+
this.shouldSendAttachLog = false;
|
|
400
|
+
this.mc.logger.sendTelemetryEvent({
|
|
401
|
+
eventName: "dataStoreAttachMessage_sampled",
|
|
402
|
+
...tagCodeArtifacts({ id: attachMessage.id, pkg: attachMessage.type }),
|
|
403
|
+
details: {
|
|
404
|
+
local,
|
|
405
|
+
snapshot: !!attachMessage.snapshot,
|
|
406
|
+
foundGCData,
|
|
407
|
+
},
|
|
408
|
+
...extractSafePropertiesFromMessage(message),
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
|
|
202
412
|
// The local object has already been attached
|
|
203
413
|
if (local) {
|
|
204
414
|
assert(
|
|
@@ -236,23 +446,27 @@ export class DataStores implements IDisposable {
|
|
|
236
446
|
const remoteFluidDataStoreContext = new RemoteFluidDataStoreContext({
|
|
237
447
|
id: attachMessage.id,
|
|
238
448
|
snapshotTree,
|
|
239
|
-
|
|
240
|
-
storage: new StorageServiceWithAttachBlobs(this.
|
|
241
|
-
scope: this.
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
449
|
+
parentContext: this.wrapContextForInnerChannel(attachMessage.id),
|
|
450
|
+
storage: new StorageServiceWithAttachBlobs(this.parentContext.storage, flatAttachBlobs),
|
|
451
|
+
scope: this.parentContext.scope,
|
|
452
|
+
loadingGroupId: attachMessage.snapshot?.groupId,
|
|
453
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(
|
|
454
|
+
attachMessage.id,
|
|
455
|
+
{
|
|
456
|
+
type: CreateSummarizerNodeSource.FromAttach,
|
|
457
|
+
sequenceNumber: message.sequenceNumber,
|
|
458
|
+
snapshot: attachMessage.snapshot ?? {
|
|
459
|
+
entries: [createAttributesBlob(pkg, true /* isRootDataStore */)],
|
|
460
|
+
},
|
|
247
461
|
},
|
|
248
|
-
|
|
462
|
+
),
|
|
249
463
|
pkg,
|
|
250
464
|
});
|
|
251
465
|
|
|
252
466
|
this.contexts.addBoundOrRemoted(remoteFluidDataStoreContext);
|
|
253
467
|
}
|
|
254
468
|
|
|
255
|
-
|
|
469
|
+
private processAliasMessage(
|
|
256
470
|
message: ISequencedDocumentMessage,
|
|
257
471
|
localOpMetadata: unknown,
|
|
258
472
|
local: boolean,
|
|
@@ -301,9 +515,9 @@ export class DataStores implements IDisposable {
|
|
|
301
515
|
const handle = new FluidObjectHandle(
|
|
302
516
|
context,
|
|
303
517
|
aliasMessage.internalId,
|
|
304
|
-
this.
|
|
518
|
+
this.parentContext.IFluidHandleContext,
|
|
305
519
|
);
|
|
306
|
-
this.
|
|
520
|
+
this.parentContext.addedGCOutboundReference?.(this.containerRuntimeHandle, handle);
|
|
307
521
|
|
|
308
522
|
this.aliasMap.set(aliasMessage.alias, context.id);
|
|
309
523
|
context.setInMemoryRoot();
|
|
@@ -314,9 +528,24 @@ export class DataStores implements IDisposable {
|
|
|
314
528
|
return this.aliasMap.get(id) !== undefined || this.contexts.get(id) !== undefined;
|
|
315
529
|
}
|
|
316
530
|
|
|
531
|
+
/** Package up the context's attach summary etc into an IAttachMessage */
|
|
532
|
+
private generateAttachMessage(localContext: LocalFluidDataStoreContext): IAttachMessage {
|
|
533
|
+
const { attachSummary } = localContext.getAttachData(/* includeGCData: */ true);
|
|
534
|
+
const type = localContext.packagePath[localContext.packagePath.length - 1];
|
|
535
|
+
|
|
536
|
+
// Attach message needs the summary in ITree format. Convert the ISummaryTree into an ITree.
|
|
537
|
+
const snapshot = convertSummaryTreeToITree(attachSummary.summary);
|
|
538
|
+
|
|
539
|
+
return {
|
|
540
|
+
id: localContext.id,
|
|
541
|
+
snapshot,
|
|
542
|
+
type,
|
|
543
|
+
} satisfies IAttachMessage;
|
|
544
|
+
}
|
|
545
|
+
|
|
317
546
|
/**
|
|
318
|
-
* Make the data
|
|
319
|
-
* bound list. This data store can now be reached from the root.
|
|
547
|
+
* Make the data store locally visible in the container graph by moving the data store context from unbound to
|
|
548
|
+
* bound list and submitting the attach message. This data store can now be reached from the root.
|
|
320
549
|
* @param id - The id of the data store context to make visible.
|
|
321
550
|
*/
|
|
322
551
|
private makeDataStoreLocallyVisible(id: string): void {
|
|
@@ -328,57 +557,102 @@ export class DataStores implements IDisposable {
|
|
|
328
557
|
* globally visible. Move it to attaching state and send an "attach" op for it.
|
|
329
558
|
* If the container is detached, this data store will be part of the summary that makes the container attached.
|
|
330
559
|
*/
|
|
331
|
-
if (this.
|
|
560
|
+
if (this.parentContext.attachState !== AttachState.Detached) {
|
|
332
561
|
localContext.emit("attaching");
|
|
333
|
-
const message =
|
|
562
|
+
const message = this.generateAttachMessage(localContext);
|
|
334
563
|
|
|
335
564
|
this.pendingAttach.set(id, message);
|
|
336
|
-
this.
|
|
565
|
+
this.parentContext.submitMessage(ContainerMessageType.Attach, message, undefined);
|
|
337
566
|
this.attachOpFiredForDataStore.add(id);
|
|
338
567
|
}
|
|
339
568
|
|
|
340
569
|
this.contexts.bind(id);
|
|
341
570
|
}
|
|
342
571
|
|
|
572
|
+
/**
|
|
573
|
+
* Generate compact internal DataStore ID.
|
|
574
|
+
*
|
|
575
|
+
* A note about namespace and name collisions:
|
|
576
|
+
* This code assumes that that's the only way to generate internal IDs, and that it's Ok for this namespace to overlap with
|
|
577
|
+
* user-provided alias names namespace.
|
|
578
|
+
* There are two scenarios where it could cause trouble:
|
|
579
|
+
* 1) Old files, where (already removed) CreateRoot*DataStore*() API was used, and thus internal name of data store
|
|
580
|
+
* was provided by user. Such files may experience name collision with future data stores that receive a name generated
|
|
581
|
+
* by this function.
|
|
582
|
+
* 2) Much less likely, but if it happen that internal ID (generated by this function) is exactly the same as alias name
|
|
583
|
+
* that user might use in the future, them ContainerRuntime.getAliasedDataStoreEntryPoint() or
|
|
584
|
+
* ContainerRuntime.getDataStoreFromRequest() could return a data store with internalID matching user request, even though
|
|
585
|
+
* user expected some other data store (that would receive alias later).
|
|
586
|
+
* Please note that above mentioned functions have the implementation they have (allowing #2) due to #1.
|
|
587
|
+
*/
|
|
588
|
+
protected createDataStoreId(): string {
|
|
589
|
+
// We use three non-overlapping namespaces:
|
|
590
|
+
// - detached state: even numbers
|
|
591
|
+
// - attached state: odd numbers
|
|
592
|
+
// - uuids
|
|
593
|
+
// In first two cases we will encode result as strings in more compact form.
|
|
594
|
+
if (this.parentContext.attachState === AttachState.Detached) {
|
|
595
|
+
// container is detached, only one client observes content, no way to hit collisions with other clients.
|
|
596
|
+
return encodeCompactIdToString(2 * this.contexts.size);
|
|
597
|
+
}
|
|
598
|
+
const id = this.parentContext.containerRuntime.generateDocumentUniqueId();
|
|
599
|
+
if (typeof id === "number") {
|
|
600
|
+
return encodeCompactIdToString(2 * id + 1);
|
|
601
|
+
}
|
|
602
|
+
return id;
|
|
603
|
+
}
|
|
604
|
+
|
|
343
605
|
public createDetachedDataStoreCore(
|
|
344
606
|
pkg: Readonly<string[]>,
|
|
345
|
-
|
|
346
|
-
id = uuid(),
|
|
607
|
+
loadingGroupId?: string,
|
|
347
608
|
): IFluidDataStoreContextDetached {
|
|
348
|
-
|
|
609
|
+
const id = this.createDataStoreId();
|
|
349
610
|
|
|
350
611
|
const context = new LocalDetachedFluidDataStoreContext({
|
|
351
612
|
id,
|
|
352
613
|
pkg,
|
|
353
|
-
|
|
354
|
-
storage: this.
|
|
355
|
-
scope: this.
|
|
356
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
614
|
+
parentContext: this.wrapContextForInnerChannel(id),
|
|
615
|
+
storage: this.parentContext.storage,
|
|
616
|
+
scope: this.parentContext.scope,
|
|
617
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(id, {
|
|
357
618
|
type: CreateSummarizerNodeSource.Local,
|
|
358
619
|
}),
|
|
359
620
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
|
|
360
621
|
snapshotTree: undefined,
|
|
361
|
-
isRootDataStore:
|
|
622
|
+
isRootDataStore: false,
|
|
623
|
+
loadingGroupId,
|
|
624
|
+
channelToDataStoreFn: (channel: IFluidDataStoreChannel) =>
|
|
625
|
+
channelToDataStore(
|
|
626
|
+
channel,
|
|
627
|
+
id,
|
|
628
|
+
this,
|
|
629
|
+
createChildLogger({ logger: this.parentContext.logger }),
|
|
630
|
+
),
|
|
362
631
|
});
|
|
363
632
|
this.contexts.addUnbound(context);
|
|
364
633
|
return context;
|
|
365
634
|
}
|
|
366
635
|
|
|
367
|
-
public _createFluidDataStoreContext(
|
|
368
|
-
|
|
636
|
+
public _createFluidDataStoreContext(
|
|
637
|
+
pkg: Readonly<string[]>,
|
|
638
|
+
props?: any,
|
|
639
|
+
loadingGroupId?: string,
|
|
640
|
+
) {
|
|
641
|
+
const id = this.createDataStoreId();
|
|
369
642
|
const context = new LocalFluidDataStoreContext({
|
|
370
643
|
id,
|
|
371
644
|
pkg,
|
|
372
|
-
|
|
373
|
-
storage: this.
|
|
374
|
-
scope: this.
|
|
375
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
645
|
+
parentContext: this.wrapContextForInnerChannel(id),
|
|
646
|
+
storage: this.parentContext.storage,
|
|
647
|
+
scope: this.parentContext.scope,
|
|
648
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(id, {
|
|
376
649
|
type: CreateSummarizerNodeSource.Local,
|
|
377
650
|
}),
|
|
378
651
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
|
|
379
652
|
snapshotTree: undefined,
|
|
380
653
|
isRootDataStore: false,
|
|
381
654
|
createProps: props,
|
|
655
|
+
loadingGroupId,
|
|
382
656
|
});
|
|
383
657
|
this.contexts.addUnbound(context);
|
|
384
658
|
return context;
|
|
@@ -389,7 +663,17 @@ export class DataStores implements IDisposable {
|
|
|
389
663
|
}
|
|
390
664
|
public readonly dispose = () => this.disposeOnce.value;
|
|
391
665
|
|
|
392
|
-
public
|
|
666
|
+
public reSubmit(type: string, content: any, localOpMetadata: unknown) {
|
|
667
|
+
switch (type) {
|
|
668
|
+
case ContainerMessageType.Attach:
|
|
669
|
+
case ContainerMessageType.Alias:
|
|
670
|
+
this.parentContext.submitMessage(type, content, localOpMetadata);
|
|
671
|
+
return;
|
|
672
|
+
default:
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
assert(type === ContainerMessageType.FluidDataStoreOp, 0x8e7 /* type */);
|
|
676
|
+
const envelope = content as IEnvelope;
|
|
393
677
|
const context = this.contexts.get(envelope.address);
|
|
394
678
|
// If the data store has been deleted, log an error and throw an error. If there are local changes for a
|
|
395
679
|
// deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
|
|
@@ -402,10 +686,13 @@ export class DataStores implements IDisposable {
|
|
|
402
686
|
});
|
|
403
687
|
}
|
|
404
688
|
assert(!!context, 0x160 /* "There should be a store context for the op" */);
|
|
405
|
-
|
|
689
|
+
const innerContents = envelope.contents as FluidDataStoreMessage;
|
|
690
|
+
context.reSubmit(innerContents.type, innerContents.content, localOpMetadata);
|
|
406
691
|
}
|
|
407
692
|
|
|
408
|
-
public
|
|
693
|
+
public rollback(type: string, content: any, localOpMetadata: unknown) {
|
|
694
|
+
assert(type === ContainerMessageType.FluidDataStoreOp, 0x8e8 /* type */);
|
|
695
|
+
const envelope = content as IEnvelope;
|
|
409
696
|
const context = this.contexts.get(envelope.address);
|
|
410
697
|
// If the data store has been deleted, log an error and throw an error. If there are local changes for a
|
|
411
698
|
// deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
|
|
@@ -418,10 +705,21 @@ export class DataStores implements IDisposable {
|
|
|
418
705
|
});
|
|
419
706
|
}
|
|
420
707
|
assert(!!context, 0x2e8 /* "There should be a store context for the op" */);
|
|
421
|
-
|
|
708
|
+
const innerContents = envelope.contents as FluidDataStoreMessage;
|
|
709
|
+
context.rollback(innerContents.type, innerContents.content, localOpMetadata);
|
|
422
710
|
}
|
|
423
711
|
|
|
424
|
-
public async applyStashedOp(
|
|
712
|
+
public async applyStashedOp(content: unknown): Promise<unknown> {
|
|
713
|
+
const opContents = content as LocalContainerRuntimeMessage;
|
|
714
|
+
switch (opContents.type) {
|
|
715
|
+
case ContainerMessageType.Attach:
|
|
716
|
+
return this.applyStashedAttachOp(opContents.contents);
|
|
717
|
+
case ContainerMessageType.Alias:
|
|
718
|
+
return;
|
|
719
|
+
default:
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
const envelope = opContents.contents as IEnvelope;
|
|
425
723
|
const context = this.contexts.get(envelope.address);
|
|
426
724
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
427
725
|
// corruption in case the data store that stashed the op is deleted.
|
|
@@ -432,20 +730,39 @@ export class DataStores implements IDisposable {
|
|
|
432
730
|
return context.applyStashedOp(envelope.contents);
|
|
433
731
|
}
|
|
434
732
|
|
|
435
|
-
|
|
733
|
+
private async applyStashedAttachOp(message: IAttachMessage) {
|
|
436
734
|
this.pendingAttach.set(message.id, message);
|
|
437
735
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
438
736
|
this.processAttachMessage({ contents: message } as ISequencedDocumentMessage, false);
|
|
439
737
|
}
|
|
440
738
|
|
|
441
|
-
public
|
|
739
|
+
public process(
|
|
442
740
|
message: ISequencedDocumentMessage,
|
|
443
741
|
local: boolean,
|
|
444
742
|
localMessageMetadata: unknown,
|
|
445
|
-
addedOutboundReference
|
|
743
|
+
addedOutboundReference?: (fromNodePath: string, toNodePath: string) => void,
|
|
446
744
|
) {
|
|
745
|
+
switch (message.type) {
|
|
746
|
+
case ContainerMessageType.Attach:
|
|
747
|
+
this.processAttachMessage(message, local);
|
|
748
|
+
return;
|
|
749
|
+
case ContainerMessageType.Alias:
|
|
750
|
+
this.processAliasMessage(message, localMessageMetadata, local);
|
|
751
|
+
return;
|
|
752
|
+
case ContainerMessageType.FluidDataStoreOp:
|
|
753
|
+
break;
|
|
754
|
+
default:
|
|
755
|
+
assert(false, 0x8e9 /* unreached */);
|
|
756
|
+
}
|
|
757
|
+
|
|
447
758
|
const envelope = message.contents as IEnvelope;
|
|
448
|
-
const
|
|
759
|
+
const innerContents = envelope.contents as FluidDataStoreMessage;
|
|
760
|
+
const transformed = {
|
|
761
|
+
...message,
|
|
762
|
+
type: innerContents.type,
|
|
763
|
+
contents: innerContents.content,
|
|
764
|
+
};
|
|
765
|
+
|
|
449
766
|
const context = this.contexts.get(envelope.address);
|
|
450
767
|
|
|
451
768
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
@@ -482,7 +799,10 @@ export class DataStores implements IDisposable {
|
|
|
482
799
|
|
|
483
800
|
// By default, we use the new behavior of detecting outbound routes here.
|
|
484
801
|
// If this setting is true, then DataStoreContext would be notifying GC instead.
|
|
485
|
-
if (
|
|
802
|
+
if (
|
|
803
|
+
this.mc.config.getBoolean(detectOutboundRoutesViaDDSKey) !== true &&
|
|
804
|
+
addedOutboundReference !== undefined
|
|
805
|
+
) {
|
|
486
806
|
// Notify GC of any outbound references that were added by this op.
|
|
487
807
|
detectOutboundReferences(envelope, addedOutboundReference);
|
|
488
808
|
}
|
|
@@ -491,6 +811,7 @@ export class DataStores implements IDisposable {
|
|
|
491
811
|
// being used.
|
|
492
812
|
this.gcNodeUpdated(
|
|
493
813
|
`/${envelope.address}`,
|
|
814
|
+
"Changed",
|
|
494
815
|
message.timestamp,
|
|
495
816
|
context.isLoaded ? context.packagePath : undefined,
|
|
496
817
|
);
|
|
@@ -584,7 +905,10 @@ export class DataStores implements IDisposable {
|
|
|
584
905
|
return true;
|
|
585
906
|
}
|
|
586
907
|
|
|
587
|
-
public processSignal(
|
|
908
|
+
public processSignal(messageArg: IInboundSignalMessage, local: boolean) {
|
|
909
|
+
const envelope = messageArg.content as IEnvelope;
|
|
910
|
+
const fluidDataStoreId = envelope.address;
|
|
911
|
+
const message = { ...messageArg, content: envelope.contents };
|
|
588
912
|
const context = this.contexts.get(fluidDataStoreId);
|
|
589
913
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
590
914
|
// corruption in case a deleted data store accidentally submitted a signal.
|
|
@@ -620,7 +944,7 @@ export class DataStores implements IDisposable {
|
|
|
620
944
|
fluidDataStoreId,
|
|
621
945
|
}),
|
|
622
946
|
details: JSON.stringify({
|
|
623
|
-
runtimeConnected: this.
|
|
947
|
+
runtimeConnected: this.parentContext.connected,
|
|
624
948
|
connected,
|
|
625
949
|
}),
|
|
626
950
|
},
|
|
@@ -681,7 +1005,10 @@ export class DataStores implements IDisposable {
|
|
|
681
1005
|
return summaryBuilder.getSummaryTree();
|
|
682
1006
|
}
|
|
683
1007
|
|
|
684
|
-
|
|
1008
|
+
/**
|
|
1009
|
+
* Create a summary. Used when attaching or serializing a detached container.
|
|
1010
|
+
*/
|
|
1011
|
+
public getAttachSummary(telemetryContext?: ITelemetryContext): ISummaryTreeWithStats {
|
|
685
1012
|
const builder = new SummaryTreeBuilder();
|
|
686
1013
|
// Attaching graph of some stores can cause other stores to get bound too.
|
|
687
1014
|
// So keep taking summary until no new stores get bound.
|
|
@@ -705,8 +1032,10 @@ export class DataStores implements IDisposable {
|
|
|
705
1032
|
.map(([key, value]) => {
|
|
706
1033
|
let dataStoreSummary: ISummarizeResult;
|
|
707
1034
|
if (value.isLoaded) {
|
|
708
|
-
|
|
709
|
-
|
|
1035
|
+
dataStoreSummary = value.getAttachData(
|
|
1036
|
+
/* includeGCCData: */ false,
|
|
1037
|
+
telemetryContext,
|
|
1038
|
+
).attachSummary;
|
|
710
1039
|
} else {
|
|
711
1040
|
// If this data store is not yet loaded, then there should be no changes in the snapshot from
|
|
712
1041
|
// which it was created as it is detached container. So just use the previous snapshot.
|
|
@@ -736,8 +1065,12 @@ export class DataStores implements IDisposable {
|
|
|
736
1065
|
assert(context !== undefined, 0x2b6 /* Missing data store context */);
|
|
737
1066
|
if (await context.isRoot()) {
|
|
738
1067
|
// A root data store is basically a reference from the container runtime to the data store.
|
|
739
|
-
const handle = new FluidObjectHandle(
|
|
740
|
-
|
|
1068
|
+
const handle = new FluidObjectHandle(
|
|
1069
|
+
context,
|
|
1070
|
+
id,
|
|
1071
|
+
this.parentContext.IFluidHandleContext,
|
|
1072
|
+
);
|
|
1073
|
+
this.parentContext.addedGCOutboundReference?.(this.containerRuntimeHandle, handle);
|
|
741
1074
|
}
|
|
742
1075
|
}
|
|
743
1076
|
this.dataStoresSinceLastGC = [];
|
|
@@ -828,7 +1161,7 @@ export class DataStores implements IDisposable {
|
|
|
828
1161
|
// Delete the contexts of unused data stores.
|
|
829
1162
|
this.contexts.delete(dataStoreId);
|
|
830
1163
|
// Delete the summarizer node of the unused data stores.
|
|
831
|
-
this.
|
|
1164
|
+
this.parentContext.deleteChildSummarizerNode?.(dataStoreId);
|
|
832
1165
|
}
|
|
833
1166
|
}
|
|
834
1167
|
|
|
@@ -870,7 +1203,7 @@ export class DataStores implements IDisposable {
|
|
|
870
1203
|
// Delete the contexts of sweep ready data stores.
|
|
871
1204
|
this.contexts.delete(dataStoreId);
|
|
872
1205
|
// Delete the summarizer node of the sweep ready data stores.
|
|
873
|
-
this.
|
|
1206
|
+
this.parentContext.deleteChildSummarizerNode?.(dataStoreId);
|
|
874
1207
|
}
|
|
875
1208
|
return Array.from(sweepReadyDataStoreRoutes);
|
|
876
1209
|
}
|
|
@@ -944,6 +1277,69 @@ export class DataStores implements IDisposable {
|
|
|
944
1277
|
}
|
|
945
1278
|
return GCNodeType.SubDataStore;
|
|
946
1279
|
}
|
|
1280
|
+
|
|
1281
|
+
public internalId(maybeAlias: string): string {
|
|
1282
|
+
return this.aliases.get(maybeAlias) ?? maybeAlias;
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1285
|
+
public async request(request: IRequest): Promise<IResponse> {
|
|
1286
|
+
const requestParser = RequestParser.create(request);
|
|
1287
|
+
const id = requestParser.pathParts[0];
|
|
1288
|
+
|
|
1289
|
+
// Differentiate between requesting the dataStore directly, or one of its children
|
|
1290
|
+
const requestForChild = !requestParser.isLeaf(1);
|
|
1291
|
+
|
|
1292
|
+
const headerData: RuntimeHeaderData = {};
|
|
1293
|
+
if (typeof request.headers?.[RuntimeHeaders.wait] === "boolean") {
|
|
1294
|
+
headerData.wait = request.headers[RuntimeHeaders.wait];
|
|
1295
|
+
}
|
|
1296
|
+
if (typeof request.headers?.[RuntimeHeaders.viaHandle] === "boolean") {
|
|
1297
|
+
headerData.viaHandle = request.headers[RuntimeHeaders.viaHandle];
|
|
1298
|
+
}
|
|
1299
|
+
if (typeof request.headers?.[AllowTombstoneRequestHeaderKey] === "boolean") {
|
|
1300
|
+
headerData.allowTombstone = request.headers[AllowTombstoneRequestHeaderKey];
|
|
1301
|
+
}
|
|
1302
|
+
if (typeof request.headers?.[AllowInactiveRequestHeaderKey] === "boolean") {
|
|
1303
|
+
headerData.allowInactive = request.headers[AllowInactiveRequestHeaderKey];
|
|
1304
|
+
}
|
|
1305
|
+
|
|
1306
|
+
// We allow Tombstone requests for sub-DataStore objects
|
|
1307
|
+
if (requestForChild) {
|
|
1308
|
+
headerData.allowTombstone = true;
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1311
|
+
await this.waitIfPendingAlias(id);
|
|
1312
|
+
const internalId = this.internalId(id);
|
|
1313
|
+
const dataStoreContext = await this.getDataStore(internalId, headerData);
|
|
1314
|
+
|
|
1315
|
+
// Remove query params, leading and trailing slashes from the url. This is done to make sure the format is
|
|
1316
|
+
// the same as GC nodes id.
|
|
1317
|
+
const urlWithoutQuery = trimLeadingAndTrailingSlashes(request.url.split("?")[0]);
|
|
1318
|
+
// Get the initial snapshot details which contain the data store package path.
|
|
1319
|
+
const details = await dataStoreContext.getInitialSnapshotDetails();
|
|
1320
|
+
|
|
1321
|
+
// Note that this will throw if the data store is inactive or tombstoned and throwing on incorrect usage
|
|
1322
|
+
// is configured.
|
|
1323
|
+
this.gcNodeUpdated(
|
|
1324
|
+
`/${urlWithoutQuery}`,
|
|
1325
|
+
"Loaded",
|
|
1326
|
+
undefined /* timestampMs */,
|
|
1327
|
+
details.pkg,
|
|
1328
|
+
request,
|
|
1329
|
+
headerData,
|
|
1330
|
+
);
|
|
1331
|
+
const dataStore = await dataStoreContext.realize();
|
|
1332
|
+
|
|
1333
|
+
const subRequest = requestParser.createSubRequest(1);
|
|
1334
|
+
// We always expect createSubRequest to include a leading slash, but asserting here to protect against
|
|
1335
|
+
// unintentionally modifying the url if that changes.
|
|
1336
|
+
assert(
|
|
1337
|
+
subRequest.url.startsWith("/"),
|
|
1338
|
+
0x126 /* "Expected createSubRequest url to include a leading slash" */,
|
|
1339
|
+
);
|
|
1340
|
+
|
|
1341
|
+
return dataStore.request(subRequest);
|
|
1342
|
+
}
|
|
947
1343
|
}
|
|
948
1344
|
|
|
949
1345
|
export function getSummaryForDatastores(
|
|
@@ -975,6 +1371,8 @@ export function getSummaryForDatastores(
|
|
|
975
1371
|
|
|
976
1372
|
/**
|
|
977
1373
|
* Traverse this op's contents and detect any outbound routes that were added by this op.
|
|
1374
|
+
*
|
|
1375
|
+
* @internal
|
|
978
1376
|
*/
|
|
979
1377
|
export function detectOutboundReferences(
|
|
980
1378
|
envelope: IEnvelope,
|
|
@@ -1011,3 +1409,41 @@ export function detectOutboundReferences(
|
|
|
1011
1409
|
const fromPath = ["", envelope.address, ddsAddress].join("/");
|
|
1012
1410
|
outboundPaths.forEach((toPath) => addedOutboundReference(fromPath, toPath));
|
|
1013
1411
|
}
|
|
1412
|
+
|
|
1413
|
+
/** @internal */
|
|
1414
|
+
export class ChannelCollectionFactory implements IFluidDataStoreFactory {
|
|
1415
|
+
public readonly type = "ChannelCollectionChannel";
|
|
1416
|
+
|
|
1417
|
+
public IFluidDataStoreRegistry: IFluidDataStoreRegistry;
|
|
1418
|
+
|
|
1419
|
+
constructor(
|
|
1420
|
+
registryEntries: NamedFluidDataStoreRegistryEntries,
|
|
1421
|
+
// ADO:7302 We need a better type here
|
|
1422
|
+
private readonly provideEntryPoint: (
|
|
1423
|
+
runtime: IFluidDataStoreChannel,
|
|
1424
|
+
) => Promise<FluidObject>,
|
|
1425
|
+
) {
|
|
1426
|
+
this.IFluidDataStoreRegistry = new FluidDataStoreRegistry(registryEntries);
|
|
1427
|
+
}
|
|
1428
|
+
|
|
1429
|
+
public get IFluidDataStoreFactory() {
|
|
1430
|
+
return this;
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
public async instantiateDataStore(
|
|
1434
|
+
context: IFluidDataStoreContext,
|
|
1435
|
+
_existing: boolean,
|
|
1436
|
+
): Promise<IFluidDataStoreChannel> {
|
|
1437
|
+
const runtime = new ChannelCollection(
|
|
1438
|
+
context.baseSnapshot,
|
|
1439
|
+
context, // parentContext
|
|
1440
|
+
context.logger,
|
|
1441
|
+
() => {}, // gcNodeUpdated
|
|
1442
|
+
(_nodePath: string) => false, // isDataStoreDeleted
|
|
1443
|
+
new Map(), // aliasMap
|
|
1444
|
+
this.provideEntryPoint,
|
|
1445
|
+
);
|
|
1446
|
+
|
|
1447
|
+
return runtime;
|
|
1448
|
+
}
|
|
1449
|
+
}
|