@fluidframework/container-runtime 2.0.0-dev-rc.1.0.0.232845 → 2.0.0-dev-rc.2.0.0.246488
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.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 +426 -33
- 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.d.ts +0 -5
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +0 -12
- package/dist/blobManager.js.map +1 -1
- package/dist/channelCollection.d.ts +226 -0
- package/dist/channelCollection.d.ts.map +1 -0
- package/dist/{dataStores.js → channelCollection.js} +455 -150
- 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 +128 -48
- package/dist/container-runtime-beta.d.ts +67 -9
- package/dist/container-runtime-public.d.ts +67 -9
- package/dist/container-runtime-untrimmed.d.ts +692 -49
- 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 +81 -64
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +522 -379
- 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 +118 -41
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +248 -159
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts +2 -1
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js +1 -0
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/dataStoreRegistry.d.ts +4 -0
- package/dist/dataStoreRegistry.d.ts.map +1 -1
- package/dist/dataStoreRegistry.js +2 -2
- package/dist/dataStoreRegistry.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 +12 -6
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +116 -78
- 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 +30 -23
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +22 -13
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js +7 -4
- 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 +6 -7
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +20 -18
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.d.ts +1 -1
- package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.js +10 -10
- 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 -39
- package/dist/gc/index.js.map +1 -1
- package/dist/index.d.ts +11 -21
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -42
- package/dist/index.js.map +1 -1
- package/dist/messageTypes.d.ts +3 -3
- 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 +32 -18
- 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 +7 -4
- 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 +9 -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.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js +12 -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 +5 -4
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +47 -32
- 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 +16 -5
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js +40 -10
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +9 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +3 -4
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +12 -12
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +9 -20
- 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 -6
- package/lib/blobManager.d.ts.map +1 -0
- package/lib/{blobManager.mjs → blobManager.js} +1 -13
- package/lib/blobManager.js.map +1 -0
- package/lib/channelCollection.d.ts +226 -0
- package/lib/channelCollection.d.ts.map +1 -0
- package/lib/{dataStores.mjs → channelCollection.js} +442 -140
- 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} +128 -48
- package/lib/{container-runtime-beta.d.mts → container-runtime-beta.d.ts} +67 -9
- package/lib/{container-runtime-public.d.mts → container-runtime-public.d.ts} +67 -9
- package/lib/{container-runtime-untrimmed.d.mts → container-runtime-untrimmed.d.ts} +692 -49
- 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} +86 -65
- package/lib/containerRuntime.d.ts.map +1 -0
- package/lib/{containerRuntime.mjs → containerRuntime.js} +444 -303
- 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} +119 -42
- package/lib/dataStoreContext.d.ts.map +1 -0
- package/lib/{dataStoreContext.mjs → dataStoreContext.js} +240 -151
- package/lib/dataStoreContext.js.map +1 -0
- package/lib/{dataStoreContexts.d.mts → dataStoreContexts.d.ts} +3 -2
- package/lib/dataStoreContexts.d.ts.map +1 -0
- package/lib/{dataStoreContexts.mjs → dataStoreContexts.js} +2 -1
- package/lib/dataStoreContexts.js.map +1 -0
- package/lib/{dataStoreRegistry.d.mts → dataStoreRegistry.d.ts} +5 -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} +13 -7
- package/lib/gc/garbageCollection.d.ts.map +1 -0
- package/lib/gc/{garbageCollection.mjs → garbageCollection.js} +79 -41
- 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} +14 -7
- package/lib/gc/gcConfigs.js.map +1 -0
- package/lib/gc/{gcDefinitions.d.mts → gcDefinitions.d.ts} +23 -14
- package/lib/gc/gcDefinitions.d.ts.map +1 -0
- package/lib/gc/{gcDefinitions.mjs → gcDefinitions.js} +7 -4
- 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} +7 -8
- package/lib/gc/gcTelemetry.d.ts.map +1 -0
- package/lib/gc/{gcTelemetry.mjs → gcTelemetry.js} +5 -3
- package/lib/gc/gcTelemetry.js.map +1 -0
- package/lib/gc/{gcUnreferencedStateTracker.d.mts → gcUnreferencedStateTracker.d.ts} +2 -2
- package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
- package/lib/gc/{gcUnreferencedStateTracker.mjs → gcUnreferencedStateTracker.js} +2 -2
- package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
- package/lib/gc/index.d.ts +13 -0
- 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} +12 -22
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +15 -0
- package/lib/index.js.map +1 -0
- package/lib/{messageTypes.d.mts → messageTypes.d.ts} +4 -4
- 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} +24 -10
- 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} +7 -4
- 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} +7 -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} +6 -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} +6 -5
- package/lib/summary/runningSummarizer.d.ts.map +1 -0
- package/lib/summary/{runningSummarizer.mjs → runningSummarizer.js} +41 -26
- 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} +17 -6
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNode.mjs → summarizerNode.js} +34 -4
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeUtils.d.mts → summarizerNodeUtils.d.ts} +10 -2
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeUtils.mjs → summarizerNodeUtils.js} +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeWithGc.d.mts → summarizerNodeWithGc.d.ts} +4 -5
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeWithGc.mjs → summarizerNodeWithGc.js} +7 -7
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
- package/lib/summary/{summarizerTypes.d.mts → summarizerTypes.d.ts} +10 -21
- 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 +138 -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 +771 -0
- package/lib/test/dataStoreContext.spec.js.map +1 -0
- package/lib/test/dataStoreCreation.spec.js +303 -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 +1464 -0
- package/lib/test/gc/garbageCollection.spec.js.map +1 -0
- package/lib/test/gc/gcConfigs.spec.js +689 -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 +390 -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 +101 -88
- package/src/batchTracker.ts +1 -1
- package/src/blobManager.ts +1 -15
- package/src/{dataStores.ts → channelCollection.ts} +629 -178
- package/src/connectionTelemetry.ts +42 -3
- package/src/containerHandleContext.ts +1 -1
- package/src/containerRuntime.ts +626 -430
- package/src/dataStore.ts +16 -15
- package/src/dataStoreContext.ts +376 -216
- package/src/dataStoreContexts.ts +2 -1
- package/src/dataStoreRegistry.ts +1 -0
- package/src/deltaManagerSummarizerProxy.ts +132 -7
- package/src/gc/garbageCollection.ts +84 -44
- package/src/gc/gcConfigs.ts +17 -7
- package/src/gc/gcDefinitions.ts +23 -13
- 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 +9 -7
- package/src/gc/gcUnreferencedStateTracker.ts +1 -1
- package/src/gc/index.ts +10 -9
- package/src/index.ts +28 -27
- package/src/messageTypes.ts +3 -3
- 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 +43 -16
- package/src/opLifecycle/remoteMessageProcessor.ts +10 -6
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +19 -13
- package/src/scheduleManager.ts +5 -4
- package/src/summary/index.ts +13 -12
- package/src/summary/orderedClientElection.ts +2 -1
- package/src/summary/runWhileConnectedCoordinator.ts +1 -1
- package/src/summary/runningSummarizer.ts +52 -32
- 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 +50 -5
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +14 -1
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +11 -11
- package/src/summary/summarizerTypes.ts +11 -23
- 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 -151
- 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 -151
- 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 +0 -13
- 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 -25
- 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
|
@@ -4,34 +4,153 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { FluidObjectHandle } from "@fluidframework/datastore";
|
|
6
6
|
import { channelsTreeName, CreateSummarizerNodeSource, } from "@fluidframework/runtime-definitions";
|
|
7
|
-
import { convertSnapshotTreeToSummaryTree,
|
|
8
|
-
import { createChildMonitoringContext, DataCorruptionError, DataProcessingError, extractSafePropertiesFromMessage, LoggingError, tagCodeArtifacts, } from "@fluidframework/telemetry-utils";
|
|
7
|
+
import { convertSnapshotTreeToSummaryTree, convertSummaryTreeToITree, create404Response, createResponseError, GCDataBuilder, isSerializedHandle, processAttachMessageGCData, responseToException, SummaryTreeBuilder, unpackChildNodesUsedRoutes, RequestParser, encodeCompactIdToString, } from "@fluidframework/runtime-utils";
|
|
8
|
+
import { createChildMonitoringContext, DataCorruptionError, DataProcessingError, extractSafePropertiesFromMessage, LoggingError, tagCodeArtifacts, createChildLogger, } from "@fluidframework/telemetry-utils";
|
|
9
9
|
import { AttachState } from "@fluidframework/container-definitions";
|
|
10
10
|
import { buildSnapshotTree } from "@fluidframework/driver-utils";
|
|
11
|
-
import { assert, Lazy } from "@fluidframework/core-utils";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
11
|
+
import { assert, Lazy, LazyPromise } from "@fluidframework/core-utils";
|
|
12
|
+
import { DataStoreContexts } from "./dataStoreContexts.js";
|
|
13
|
+
import { defaultRuntimeHeaderData } from "./containerRuntime.js";
|
|
14
|
+
import { RemoteFluidDataStoreContext, LocalFluidDataStoreContext, createAttributesBlob, LocalDetachedFluidDataStoreContext, } from "./dataStoreContext.js";
|
|
15
|
+
import { StorageServiceWithAttachBlobs } from "./storageServiceWithAttachBlobs.js";
|
|
16
|
+
import { channelToDataStore, isDataStoreAliasMessage, } from "./dataStore.js";
|
|
17
|
+
import { GCNodeType, detectOutboundRoutesViaDDSKey, trimLeadingAndTrailingSlashes, } from "./gc/index.js";
|
|
18
|
+
import { nonDataStorePaths, rootHasIsolatedChannels, } from "./summary/index.js";
|
|
19
|
+
import { ContainerMessageType } from "./messageTypes.js";
|
|
20
|
+
import { FluidDataStoreRegistry } from "./dataStoreRegistry.js";
|
|
21
|
+
/**
|
|
22
|
+
* Accepted header keys for requests coming to the runtime.
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
export var RuntimeHeaders;
|
|
26
|
+
(function (RuntimeHeaders) {
|
|
27
|
+
/** True to wait for a data store to be created and loaded before returning it. */
|
|
28
|
+
RuntimeHeaders["wait"] = "wait";
|
|
29
|
+
/** True if the request is coming from an IFluidHandle. */
|
|
30
|
+
RuntimeHeaders["viaHandle"] = "viaHandle";
|
|
31
|
+
})(RuntimeHeaders || (RuntimeHeaders = {}));
|
|
32
|
+
/** True if a tombstoned object should be returned without erroring
|
|
33
|
+
* @alpha
|
|
34
|
+
*/
|
|
35
|
+
export const AllowTombstoneRequestHeaderKey = "allowTombstone"; // Belongs in the enum above, but avoiding the breaking change
|
|
36
|
+
/**
|
|
37
|
+
* [IRRELEVANT IF throwOnInactiveLoad OPTION NOT SET] True if an inactive object should be returned without erroring
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
40
|
+
export const AllowInactiveRequestHeaderKey = "allowInactive"; // Belongs in the enum above, but avoiding the breaking change
|
|
41
|
+
/**
|
|
42
|
+
* Creates a shallow wrapper of {@link IFluidParentContext}. The wrapper can then have its methods overwritten as needed
|
|
43
|
+
*/
|
|
44
|
+
export function wrapContext(context) {
|
|
45
|
+
return {
|
|
46
|
+
get IFluidDataStoreRegistry() {
|
|
47
|
+
return context.IFluidDataStoreRegistry;
|
|
48
|
+
},
|
|
49
|
+
IFluidHandleContext: context.IFluidHandleContext,
|
|
50
|
+
options: context.options,
|
|
51
|
+
get clientId() {
|
|
52
|
+
return context.clientId;
|
|
53
|
+
},
|
|
54
|
+
get connected() {
|
|
55
|
+
return context.connected;
|
|
56
|
+
},
|
|
57
|
+
deltaManager: context.deltaManager,
|
|
58
|
+
storage: context.storage,
|
|
59
|
+
logger: context.logger,
|
|
60
|
+
get clientDetails() {
|
|
61
|
+
return context.clientDetails;
|
|
62
|
+
},
|
|
63
|
+
get idCompressor() {
|
|
64
|
+
return context.idCompressor;
|
|
65
|
+
},
|
|
66
|
+
loadingGroupId: context.loadingGroupId,
|
|
67
|
+
get attachState() {
|
|
68
|
+
return context.attachState;
|
|
69
|
+
},
|
|
70
|
+
containerRuntime: context.containerRuntime,
|
|
71
|
+
scope: context.scope,
|
|
72
|
+
gcThrowOnTombstoneUsage: context.gcThrowOnTombstoneUsage,
|
|
73
|
+
gcTombstoneEnforcementAllowed: context.gcTombstoneEnforcementAllowed,
|
|
74
|
+
getAbsoluteUrl: async (...args) => {
|
|
75
|
+
return context.getAbsoluteUrl(...args);
|
|
76
|
+
},
|
|
77
|
+
getQuorum: (...args) => {
|
|
78
|
+
return context.getQuorum(...args);
|
|
79
|
+
},
|
|
80
|
+
getAudience: (...args) => {
|
|
81
|
+
return context.getAudience(...args);
|
|
82
|
+
},
|
|
83
|
+
ensureNoDataModelChanges: (...args) => {
|
|
84
|
+
return context.ensureNoDataModelChanges(...args);
|
|
85
|
+
},
|
|
86
|
+
submitMessage: (...args) => {
|
|
87
|
+
return context.submitMessage(...args);
|
|
88
|
+
},
|
|
89
|
+
submitSignal: (...args) => {
|
|
90
|
+
return context.submitSignal(...args);
|
|
91
|
+
},
|
|
92
|
+
makeLocallyVisible: (...args) => {
|
|
93
|
+
return context.makeLocallyVisible(...args);
|
|
94
|
+
},
|
|
95
|
+
uploadBlob: async (...args) => {
|
|
96
|
+
return context.uploadBlob(...args);
|
|
97
|
+
},
|
|
98
|
+
addedGCOutboundReference: (...args) => {
|
|
99
|
+
return context.addedGCOutboundReference?.(...args);
|
|
100
|
+
},
|
|
101
|
+
getCreateChildSummarizerNodeFn: (...args) => {
|
|
102
|
+
return context.getCreateChildSummarizerNodeFn?.(...args);
|
|
103
|
+
},
|
|
104
|
+
deleteChildSummarizerNode: (...args) => {
|
|
105
|
+
return context.deleteChildSummarizerNode(...args);
|
|
106
|
+
},
|
|
107
|
+
setChannelDirty: (address) => {
|
|
108
|
+
return context.setChannelDirty(address);
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Creates a wrapper of a {@link IFluidParentContext} to be provided to the inner datastore channels.
|
|
114
|
+
* The wrapper will have the submit methods overwritten with the appropriate id as the destination address.
|
|
115
|
+
*
|
|
116
|
+
* @param id - the id of the channel
|
|
117
|
+
* @param parentContext - the {@link IFluidParentContext} to wrap
|
|
118
|
+
* @returns A wrapped {@link IFluidParentContext}
|
|
119
|
+
*/
|
|
120
|
+
export function wrapContextForInnerChannel(id, parentContext) {
|
|
121
|
+
const context = wrapContext(parentContext);
|
|
122
|
+
context.submitMessage = (type, content, localOpMetadata) => {
|
|
123
|
+
const fluidDataStoreContent = {
|
|
124
|
+
content,
|
|
125
|
+
type,
|
|
126
|
+
};
|
|
127
|
+
const envelope = {
|
|
128
|
+
address: id,
|
|
129
|
+
contents: fluidDataStoreContent,
|
|
130
|
+
};
|
|
131
|
+
parentContext.submitMessage(ContainerMessageType.FluidDataStoreOp, envelope, localOpMetadata);
|
|
132
|
+
};
|
|
133
|
+
context.submitSignal = (type, contents, targetClientId) => {
|
|
134
|
+
const envelope = {
|
|
135
|
+
address: id,
|
|
136
|
+
contents,
|
|
137
|
+
};
|
|
138
|
+
parentContext.submitSignal(type, envelope, targetClientId);
|
|
139
|
+
};
|
|
140
|
+
return context;
|
|
141
|
+
}
|
|
20
142
|
/**
|
|
21
143
|
* This class encapsulates data store handling. Currently it is only used by the container runtime,
|
|
22
144
|
* but eventually could be hosted on any channel once we formalize the channel api boundary.
|
|
145
|
+
* @internal
|
|
23
146
|
*/
|
|
24
|
-
export class
|
|
25
|
-
constructor(baseSnapshot,
|
|
147
|
+
export class ChannelCollection {
|
|
148
|
+
constructor(baseSnapshot, parentContext, baseLogger, gcNodeUpdated, isDataStoreDeleted, aliasMap, provideEntryPoint) {
|
|
26
149
|
this.baseSnapshot = baseSnapshot;
|
|
27
|
-
this.
|
|
28
|
-
this.submitAttachFn = submitAttachFn;
|
|
29
|
-
this.getCreateChildSummarizerNodeFn = getCreateChildSummarizerNodeFn;
|
|
30
|
-
this.deleteChildSummarizerNodeFn = deleteChildSummarizerNodeFn;
|
|
150
|
+
this.parentContext = parentContext;
|
|
31
151
|
this.gcNodeUpdated = gcNodeUpdated;
|
|
32
152
|
this.isDataStoreDeleted = isDataStoreDeleted;
|
|
33
153
|
this.aliasMap = aliasMap;
|
|
34
|
-
this.contexts = contexts;
|
|
35
154
|
// Stores tracked by the Domain
|
|
36
155
|
this.pendingAttach = new Map();
|
|
37
156
|
// 0.24 back-compat attachingBeforeSummary
|
|
@@ -41,9 +160,13 @@ export class DataStores {
|
|
|
41
160
|
// root data stores that are added.
|
|
42
161
|
this.dataStoresSinceLastGC = [];
|
|
43
162
|
this.pendingAliasMap = new Map();
|
|
163
|
+
/** For sampling. Only log once per container */
|
|
164
|
+
this.shouldSendAttachLog = true;
|
|
44
165
|
this.dispose = () => this.disposeOnce.value;
|
|
45
166
|
this.mc = createChildMonitoringContext({ logger: baseLogger });
|
|
46
|
-
this.
|
|
167
|
+
this.contexts = new DataStoreContexts(baseLogger);
|
|
168
|
+
this.containerRuntimeHandle = new FluidObjectHandle(this.parentContext, "/", this.parentContext.IFluidHandleContext);
|
|
169
|
+
this.entryPoint = new FluidObjectHandle(new LazyPromise(async () => provideEntryPoint(this)), "", this.parentContext.IFluidHandleContext);
|
|
47
170
|
// Extract stores stored inside the snapshot
|
|
48
171
|
const fluidDataStores = new Map();
|
|
49
172
|
if (baseSnapshot) {
|
|
@@ -60,17 +183,17 @@ export class DataStores {
|
|
|
60
183
|
unreferencedDataStoreCount++;
|
|
61
184
|
}
|
|
62
185
|
// If we have a detached container, then create local data store contexts.
|
|
63
|
-
if (this.
|
|
186
|
+
if (this.parentContext.attachState !== AttachState.Detached) {
|
|
64
187
|
dataStoreContext = new RemoteFluidDataStoreContext({
|
|
65
188
|
id: key,
|
|
66
189
|
snapshotTree: value,
|
|
67
|
-
|
|
68
|
-
storage: this.
|
|
69
|
-
scope: this.
|
|
70
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
190
|
+
parentContext: this.wrapContextForInnerChannel(key),
|
|
191
|
+
storage: this.parentContext.storage,
|
|
192
|
+
scope: this.parentContext.scope,
|
|
193
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(key, {
|
|
71
194
|
type: CreateSummarizerNodeSource.FromSummary,
|
|
72
195
|
}),
|
|
73
|
-
|
|
196
|
+
loadingGroupId: value.groupId,
|
|
74
197
|
});
|
|
75
198
|
}
|
|
76
199
|
else {
|
|
@@ -81,15 +204,14 @@ export class DataStores {
|
|
|
81
204
|
dataStoreContext = new LocalFluidDataStoreContext({
|
|
82
205
|
id: key,
|
|
83
206
|
pkg: undefined,
|
|
84
|
-
|
|
85
|
-
storage: this.
|
|
86
|
-
scope: this.
|
|
87
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
207
|
+
parentContext: this.wrapContextForInnerChannel(key),
|
|
208
|
+
storage: this.parentContext.storage,
|
|
209
|
+
scope: this.parentContext.scope,
|
|
210
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(key, {
|
|
88
211
|
type: CreateSummarizerNodeSource.FromSummary,
|
|
89
212
|
}),
|
|
90
213
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(key),
|
|
91
214
|
snapshotTree,
|
|
92
|
-
isRootDataStore: undefined,
|
|
93
215
|
});
|
|
94
216
|
}
|
|
95
217
|
this.contexts.addBoundOrRemoted(dataStoreContext);
|
|
@@ -109,13 +231,45 @@ export class DataStores {
|
|
|
109
231
|
const pendingAliasPromise = this.pendingAliases.get(maybeAlias);
|
|
110
232
|
return pendingAliasPromise ?? "Success";
|
|
111
233
|
}
|
|
234
|
+
wrapContextForInnerChannel(id) {
|
|
235
|
+
return wrapContextForInnerChannel(id, this.parentContext);
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* IFluidDataStoreChannel.makeVisibleAndAttachGraph implementation
|
|
239
|
+
* Not clear when it would be called and what it should do.
|
|
240
|
+
* Currently this API is called by context only for root data stores.
|
|
241
|
+
*/
|
|
242
|
+
makeVisibleAndAttachGraph() {
|
|
243
|
+
this.parentContext.makeLocallyVisible();
|
|
244
|
+
}
|
|
112
245
|
processAttachMessage(message, local) {
|
|
113
246
|
const attachMessage = message.contents;
|
|
114
247
|
this.dataStoresSinceLastGC.push(attachMessage.id);
|
|
248
|
+
// We need to process the GC Data for both local and remote attach messages
|
|
249
|
+
const foundGCData = processAttachMessageGCData(attachMessage.snapshot, (nodeId, toPath) => {
|
|
250
|
+
// nodeId is the relative path under the node being attached. Always starts with "/", but no trailing "/" after an id
|
|
251
|
+
const fromPath = `/${attachMessage.id}${nodeId === "/" ? "" : nodeId}`;
|
|
252
|
+
this.parentContext.addedGCOutboundReference?.({ absolutePath: fromPath }, { absolutePath: toPath });
|
|
253
|
+
});
|
|
254
|
+
// Only log once per container to avoid noise/cost.
|
|
255
|
+
// Allows longitudinal tracking of various state (e.g. foundGCData), and some sampled details
|
|
256
|
+
if (this.shouldSendAttachLog) {
|
|
257
|
+
this.shouldSendAttachLog = false;
|
|
258
|
+
this.mc.logger.sendTelemetryEvent({
|
|
259
|
+
eventName: "dataStoreAttachMessage_sampled",
|
|
260
|
+
...tagCodeArtifacts({ id: attachMessage.id, pkg: attachMessage.type }),
|
|
261
|
+
details: {
|
|
262
|
+
local,
|
|
263
|
+
snapshot: !!attachMessage.snapshot,
|
|
264
|
+
foundGCData,
|
|
265
|
+
},
|
|
266
|
+
...extractSafePropertiesFromMessage(message),
|
|
267
|
+
});
|
|
268
|
+
}
|
|
115
269
|
// The local object has already been attached
|
|
116
270
|
if (local) {
|
|
117
271
|
assert(this.pendingAttach.has(attachMessage.id), 0x15e /* "Local object does not have matching attach message id" */);
|
|
118
|
-
this.contexts.get(attachMessage.id)?.
|
|
272
|
+
this.contexts.get(attachMessage.id)?.setAttachState(AttachState.Attached);
|
|
119
273
|
this.pendingAttach.delete(attachMessage.id);
|
|
120
274
|
return;
|
|
121
275
|
}
|
|
@@ -141,11 +295,11 @@ export class DataStores {
|
|
|
141
295
|
const remoteFluidDataStoreContext = new RemoteFluidDataStoreContext({
|
|
142
296
|
id: attachMessage.id,
|
|
143
297
|
snapshotTree,
|
|
144
|
-
|
|
145
|
-
storage: new StorageServiceWithAttachBlobs(this.
|
|
146
|
-
scope: this.
|
|
147
|
-
|
|
148
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(attachMessage.id, {
|
|
298
|
+
parentContext: this.wrapContextForInnerChannel(attachMessage.id),
|
|
299
|
+
storage: new StorageServiceWithAttachBlobs(this.parentContext.storage, flatAttachBlobs),
|
|
300
|
+
scope: this.parentContext.scope,
|
|
301
|
+
loadingGroupId: attachMessage.snapshot?.groupId,
|
|
302
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(attachMessage.id, {
|
|
149
303
|
type: CreateSummarizerNodeSource.FromAttach,
|
|
150
304
|
sequenceNumber: message.sequenceNumber,
|
|
151
305
|
snapshot: attachMessage.snapshot ?? {
|
|
@@ -164,40 +318,52 @@ export class DataStores {
|
|
|
164
318
|
});
|
|
165
319
|
}
|
|
166
320
|
const resolve = localOpMetadata;
|
|
167
|
-
const aliasResult = this.processAliasMessageCore(aliasMessage);
|
|
321
|
+
const aliasResult = this.processAliasMessageCore(aliasMessage.internalId, aliasMessage.alias);
|
|
168
322
|
if (local) {
|
|
169
323
|
resolve(aliasResult);
|
|
170
324
|
}
|
|
171
325
|
}
|
|
172
|
-
processAliasMessageCore(
|
|
173
|
-
if (this.alreadyProcessed(
|
|
326
|
+
processAliasMessageCore(internalId, alias) {
|
|
327
|
+
if (this.alreadyProcessed(alias)) {
|
|
174
328
|
return false;
|
|
175
329
|
}
|
|
176
|
-
const context = this.contexts.get(
|
|
330
|
+
const context = this.contexts.get(internalId);
|
|
177
331
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
178
332
|
// corruption in case a deleted data store accidentally submitted a signal.
|
|
179
|
-
if (this.checkAndLogIfDeleted(
|
|
333
|
+
if (this.checkAndLogIfDeleted(internalId, context, "Changed", "processAliasMessageCore")) {
|
|
180
334
|
return false;
|
|
181
335
|
}
|
|
182
336
|
if (context === undefined) {
|
|
183
337
|
this.mc.logger.sendErrorEvent({
|
|
184
338
|
eventName: "AliasFluidDataStoreNotFound",
|
|
185
|
-
fluidDataStoreId:
|
|
339
|
+
fluidDataStoreId: internalId,
|
|
186
340
|
});
|
|
187
341
|
return false;
|
|
188
342
|
}
|
|
189
|
-
const handle = new FluidObjectHandle(context,
|
|
190
|
-
this.
|
|
191
|
-
this.aliasMap.set(
|
|
343
|
+
const handle = new FluidObjectHandle(context, internalId, this.parentContext.IFluidHandleContext);
|
|
344
|
+
this.parentContext.addedGCOutboundReference?.(this.containerRuntimeHandle, handle);
|
|
345
|
+
this.aliasMap.set(alias, context.id);
|
|
192
346
|
context.setInMemoryRoot();
|
|
193
347
|
return true;
|
|
194
348
|
}
|
|
195
349
|
alreadyProcessed(id) {
|
|
196
350
|
return this.aliasMap.get(id) !== undefined || this.contexts.get(id) !== undefined;
|
|
197
351
|
}
|
|
352
|
+
/** Package up the context's attach summary etc into an IAttachMessage */
|
|
353
|
+
generateAttachMessage(localContext) {
|
|
354
|
+
const { attachSummary } = localContext.getAttachData(/* includeGCData: */ true);
|
|
355
|
+
const type = localContext.packagePath[localContext.packagePath.length - 1];
|
|
356
|
+
// Attach message needs the summary in ITree format. Convert the ISummaryTree into an ITree.
|
|
357
|
+
const snapshot = convertSummaryTreeToITree(attachSummary.summary);
|
|
358
|
+
return {
|
|
359
|
+
id: localContext.id,
|
|
360
|
+
snapshot,
|
|
361
|
+
type,
|
|
362
|
+
};
|
|
363
|
+
}
|
|
198
364
|
/**
|
|
199
|
-
* Make the data
|
|
200
|
-
* bound list. This data store can now be reached from the root.
|
|
365
|
+
* Make the data store locally visible in the container graph by moving the data store context from unbound to
|
|
366
|
+
* bound list and submitting the attach message. This data store can now be reached from the root.
|
|
201
367
|
* @param id - The id of the data store context to make visible.
|
|
202
368
|
*/
|
|
203
369
|
makeDataStoreLocallyVisible(id) {
|
|
@@ -208,50 +374,72 @@ export class DataStores {
|
|
|
208
374
|
* globally visible. Move it to attaching state and send an "attach" op for it.
|
|
209
375
|
* If the container is detached, this data store will be part of the summary that makes the container attached.
|
|
210
376
|
*/
|
|
211
|
-
if (this.
|
|
212
|
-
localContext.
|
|
213
|
-
|
|
214
|
-
this.pendingAttach.set(id, message);
|
|
215
|
-
this.submitAttachFn(message);
|
|
216
|
-
this.attachOpFiredForDataStore.add(id);
|
|
377
|
+
if (this.parentContext.attachState !== AttachState.Detached) {
|
|
378
|
+
localContext.setAttachState(AttachState.Attaching);
|
|
379
|
+
this.submitAttachChannelOp(localContext);
|
|
217
380
|
}
|
|
218
381
|
this.contexts.bind(id);
|
|
219
382
|
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
383
|
+
submitAttachChannelOp(localContext) {
|
|
384
|
+
const message = this.generateAttachMessage(localContext);
|
|
385
|
+
this.pendingAttach.set(localContext.id, message);
|
|
386
|
+
this.parentContext.submitMessage(ContainerMessageType.Attach, message, undefined);
|
|
387
|
+
this.attachOpFiredForDataStore.add(localContext.id);
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Generate compact internal DataStore ID.
|
|
391
|
+
*
|
|
392
|
+
* A note about namespace and name collisions:
|
|
393
|
+
* This code assumes that that's the only way to generate internal IDs, and that it's Ok for this namespace to overlap with
|
|
394
|
+
* user-provided alias names namespace.
|
|
395
|
+
* There are two scenarios where it could cause trouble:
|
|
396
|
+
* 1) Old files, where (already removed) CreateRoot*DataStore*() API was used, and thus internal name of data store
|
|
397
|
+
* was provided by user. Such files may experience name collision with future data stores that receive a name generated
|
|
398
|
+
* by this function.
|
|
399
|
+
* 2) Much less likely, but if it happen that internal ID (generated by this function) is exactly the same as alias name
|
|
400
|
+
* that user might use in the future, them ContainerRuntime.getAliasedDataStoreEntryPoint() or
|
|
401
|
+
* ContainerRuntime.getDataStoreFromRequest() could return a data store with internalID matching user request, even though
|
|
402
|
+
* user expected some other data store (that would receive alias later).
|
|
403
|
+
* Please note that above mentioned functions have the implementation they have (allowing #2) due to #1.
|
|
404
|
+
*/
|
|
405
|
+
createDataStoreId() {
|
|
406
|
+
// We use three non-overlapping namespaces:
|
|
407
|
+
// - detached state: even numbers
|
|
408
|
+
// - attached state: odd numbers
|
|
409
|
+
// - uuids
|
|
410
|
+
// In first two cases we will encode result as strings in more compact form.
|
|
411
|
+
if (this.parentContext.attachState === AttachState.Detached) {
|
|
412
|
+
// container is detached, only one client observes content, no way to hit collisions with other clients.
|
|
413
|
+
return encodeCompactIdToString(2 * this.contexts.size);
|
|
414
|
+
}
|
|
415
|
+
const id = this.parentContext.containerRuntime.generateDocumentUniqueId();
|
|
416
|
+
if (typeof id === "number") {
|
|
417
|
+
return encodeCompactIdToString(2 * id + 1);
|
|
418
|
+
}
|
|
419
|
+
return id;
|
|
420
|
+
}
|
|
421
|
+
createDetachedDataStore(pkg, loadingGroupId) {
|
|
422
|
+
return this.createContext(this.createDataStoreId(), pkg, LocalDetachedFluidDataStoreContext, undefined, // props
|
|
423
|
+
loadingGroupId);
|
|
238
424
|
}
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
425
|
+
createDataStoreContext(pkg, props, loadingGroupId) {
|
|
426
|
+
return this.createContext(this.createDataStoreId(), pkg, LocalFluidDataStoreContext, props, loadingGroupId);
|
|
427
|
+
}
|
|
428
|
+
createContext(id, pkg, contextCtor, createProps, loadingGroupId) {
|
|
429
|
+
const context = new contextCtor({
|
|
242
430
|
id,
|
|
243
431
|
pkg,
|
|
244
|
-
|
|
245
|
-
storage: this.
|
|
246
|
-
scope: this.
|
|
247
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
432
|
+
parentContext: this.wrapContextForInnerChannel(id),
|
|
433
|
+
storage: this.parentContext.storage,
|
|
434
|
+
scope: this.parentContext.scope,
|
|
435
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(id, {
|
|
248
436
|
type: CreateSummarizerNodeSource.Local,
|
|
249
437
|
}),
|
|
250
438
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
|
|
251
439
|
snapshotTree: undefined,
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
440
|
+
createProps,
|
|
441
|
+
loadingGroupId,
|
|
442
|
+
channelToDataStoreFn: (channel) => channelToDataStore(channel, id, this, createChildLogger({ logger: this.parentContext.logger })),
|
|
255
443
|
});
|
|
256
444
|
this.contexts.addUnbound(context);
|
|
257
445
|
return context;
|
|
@@ -259,7 +447,20 @@ export class DataStores {
|
|
|
259
447
|
get disposed() {
|
|
260
448
|
return this.disposeOnce.evaluated;
|
|
261
449
|
}
|
|
262
|
-
|
|
450
|
+
reSubmit(type, content, localOpMetadata) {
|
|
451
|
+
switch (type) {
|
|
452
|
+
case ContainerMessageType.Attach:
|
|
453
|
+
case ContainerMessageType.Alias:
|
|
454
|
+
this.parentContext.submitMessage(type, content, localOpMetadata);
|
|
455
|
+
return;
|
|
456
|
+
case ContainerMessageType.FluidDataStoreOp:
|
|
457
|
+
return this.reSubmitChannelOp(type, content, localOpMetadata);
|
|
458
|
+
default:
|
|
459
|
+
assert(false, 0x907 /* unknown op type */);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
reSubmitChannelOp(type, content, localOpMetadata) {
|
|
463
|
+
const envelope = content;
|
|
263
464
|
const context = this.contexts.get(envelope.address);
|
|
264
465
|
// If the data store has been deleted, log an error and throw an error. If there are local changes for a
|
|
265
466
|
// deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
|
|
@@ -270,9 +471,12 @@ export class DataStores {
|
|
|
270
471
|
});
|
|
271
472
|
}
|
|
272
473
|
assert(!!context, 0x160 /* "There should be a store context for the op" */);
|
|
273
|
-
|
|
474
|
+
const innerContents = envelope.contents;
|
|
475
|
+
context.reSubmit(innerContents.type, innerContents.content, localOpMetadata);
|
|
274
476
|
}
|
|
275
|
-
|
|
477
|
+
rollback(type, content, localOpMetadata) {
|
|
478
|
+
assert(type === ContainerMessageType.FluidDataStoreOp, 0x8e8 /* type */);
|
|
479
|
+
const envelope = content;
|
|
276
480
|
const context = this.contexts.get(envelope.address);
|
|
277
481
|
// If the data store has been deleted, log an error and throw an error. If there are local changes for a
|
|
278
482
|
// deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
|
|
@@ -283,9 +487,23 @@ export class DataStores {
|
|
|
283
487
|
});
|
|
284
488
|
}
|
|
285
489
|
assert(!!context, 0x2e8 /* "There should be a store context for the op" */);
|
|
286
|
-
|
|
490
|
+
const innerContents = envelope.contents;
|
|
491
|
+
context.rollback(innerContents.type, innerContents.content, localOpMetadata);
|
|
492
|
+
}
|
|
493
|
+
async applyStashedOp(content) {
|
|
494
|
+
const opContents = content;
|
|
495
|
+
switch (opContents.type) {
|
|
496
|
+
case ContainerMessageType.Attach:
|
|
497
|
+
return this.applyStashedAttachOp(opContents.contents);
|
|
498
|
+
case ContainerMessageType.Alias:
|
|
499
|
+
return;
|
|
500
|
+
case ContainerMessageType.FluidDataStoreOp:
|
|
501
|
+
return this.applyStashedChannelChannelOp(opContents.contents);
|
|
502
|
+
default:
|
|
503
|
+
assert(false, 0x908 /* unknon type of op */);
|
|
504
|
+
}
|
|
287
505
|
}
|
|
288
|
-
async
|
|
506
|
+
async applyStashedChannelChannelOp(envelope) {
|
|
289
507
|
const context = this.contexts.get(envelope.address);
|
|
290
508
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
291
509
|
// corruption in case the data store that stashed the op is deleted.
|
|
@@ -300,26 +518,58 @@ export class DataStores {
|
|
|
300
518
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
301
519
|
this.processAttachMessage({ contents: message }, false);
|
|
302
520
|
}
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
521
|
+
process(message, local, localMessageMetadata, addedOutboundReference) {
|
|
522
|
+
switch (message.type) {
|
|
523
|
+
case ContainerMessageType.Attach:
|
|
524
|
+
this.processAttachMessage(message, local);
|
|
525
|
+
return;
|
|
526
|
+
case ContainerMessageType.Alias:
|
|
527
|
+
this.processAliasMessage(message, localMessageMetadata, local);
|
|
528
|
+
return;
|
|
529
|
+
case ContainerMessageType.FluidDataStoreOp: {
|
|
530
|
+
const envelope = message.contents;
|
|
531
|
+
const innerContents = envelope.contents;
|
|
532
|
+
const transformed = {
|
|
533
|
+
...message,
|
|
534
|
+
type: innerContents.type,
|
|
535
|
+
contents: innerContents.content,
|
|
536
|
+
};
|
|
537
|
+
this.processChannelOp(envelope.address, transformed, local, localMessageMetadata);
|
|
538
|
+
// By default, we use the new behavior of detecting outbound routes here.
|
|
539
|
+
// If this setting is true, then DataStoreContext would be notifying GC instead.
|
|
540
|
+
if (this.mc.config.getBoolean(detectOutboundRoutesViaDDSKey) !== true &&
|
|
541
|
+
addedOutboundReference !== undefined) {
|
|
542
|
+
// Notify GC of any outbound references that were added by this op.
|
|
543
|
+
detectOutboundReferences(envelope.address, transformed.contents, addedOutboundReference);
|
|
544
|
+
}
|
|
545
|
+
break;
|
|
546
|
+
}
|
|
547
|
+
default:
|
|
548
|
+
assert(false, 0x8e9 /* unreached */);
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
processChannelOp(address, message, local, localMessageMetadata) {
|
|
552
|
+
const context = this.contexts.get(address);
|
|
307
553
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
308
554
|
// corruption in case a deleted data store accidentally submitted an op.
|
|
309
|
-
if (this.checkAndLogIfDeleted(
|
|
555
|
+
if (this.checkAndLogIfDeleted(address, context, "Changed", "processFluidDataStoreOp")) {
|
|
310
556
|
return;
|
|
311
557
|
}
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
558
|
+
if (context === undefined) {
|
|
559
|
+
// Former assert 0x162
|
|
560
|
+
throw DataProcessingError.create("No context for op", "processFluidDataStoreOp", message, {
|
|
561
|
+
local,
|
|
562
|
+
messageDetails: JSON.stringify({
|
|
563
|
+
type: message.type,
|
|
564
|
+
contentType: typeof message.contents,
|
|
565
|
+
}),
|
|
566
|
+
...tagCodeArtifacts({ address }),
|
|
567
|
+
});
|
|
319
568
|
}
|
|
569
|
+
context.process(message, local, localMessageMetadata);
|
|
320
570
|
// Notify that a GC node for the data store changed. This is used to detect if a deleted data store is
|
|
321
571
|
// being used.
|
|
322
|
-
this.gcNodeUpdated(`/${
|
|
572
|
+
this.gcNodeUpdated(`/${address}`, "Changed", message.timestamp, context.isLoaded ? context.packagePath : undefined);
|
|
323
573
|
}
|
|
324
574
|
async getDataStore(id, requestHeaderData) {
|
|
325
575
|
const headerData = { ...defaultRuntimeHeaderData, ...requestHeaderData };
|
|
@@ -373,7 +623,10 @@ export class DataStores {
|
|
|
373
623
|
});
|
|
374
624
|
return true;
|
|
375
625
|
}
|
|
376
|
-
processSignal(
|
|
626
|
+
processSignal(messageArg, local) {
|
|
627
|
+
const envelope = messageArg.content;
|
|
628
|
+
const fluidDataStoreId = envelope.address;
|
|
629
|
+
const message = { ...messageArg, content: envelope.contents };
|
|
377
630
|
const context = this.contexts.get(fluidDataStoreId);
|
|
378
631
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
379
632
|
// corruption in case a deleted data store accidentally submitted a signal.
|
|
@@ -406,7 +659,7 @@ export class DataStores {
|
|
|
406
659
|
fluidDataStoreId,
|
|
407
660
|
}),
|
|
408
661
|
details: JSON.stringify({
|
|
409
|
-
runtimeConnected: this.
|
|
662
|
+
runtimeConnected: this.parentContext.connected,
|
|
410
663
|
connected,
|
|
411
664
|
}),
|
|
412
665
|
}, error);
|
|
@@ -414,11 +667,10 @@ export class DataStores {
|
|
|
414
667
|
}
|
|
415
668
|
}
|
|
416
669
|
setAttachState(attachState) {
|
|
417
|
-
const eventName = attachState === AttachState.Attaching ? "attaching" : "attached";
|
|
418
670
|
for (const [, context] of this.contexts) {
|
|
419
671
|
// Fire only for bounded stores.
|
|
420
672
|
if (!this.contexts.isNotBound(context.id)) {
|
|
421
|
-
context.
|
|
673
|
+
context.setAttachState(attachState);
|
|
422
674
|
}
|
|
423
675
|
}
|
|
424
676
|
}
|
|
@@ -446,7 +698,10 @@ export class DataStores {
|
|
|
446
698
|
}));
|
|
447
699
|
return summaryBuilder.getSummaryTree();
|
|
448
700
|
}
|
|
449
|
-
|
|
701
|
+
/**
|
|
702
|
+
* Create a summary. Used when attaching or serializing a detached container.
|
|
703
|
+
*/
|
|
704
|
+
getAttachSummary(telemetryContext) {
|
|
450
705
|
const builder = new SummaryTreeBuilder();
|
|
451
706
|
// Attaching graph of some stores can cause other stores to get bound too.
|
|
452
707
|
// So keep taking summary until no new stores get bound.
|
|
@@ -466,8 +721,8 @@ export class DataStores {
|
|
|
466
721
|
.map(([key, value]) => {
|
|
467
722
|
let dataStoreSummary;
|
|
468
723
|
if (value.isLoaded) {
|
|
469
|
-
|
|
470
|
-
|
|
724
|
+
dataStoreSummary = value.getAttachData(
|
|
725
|
+
/* includeGCCData: */ false, telemetryContext).attachSummary;
|
|
471
726
|
}
|
|
472
727
|
else {
|
|
473
728
|
// If this data store is not yet loaded, then there should be no changes in the snapshot from
|
|
@@ -491,8 +746,8 @@ export class DataStores {
|
|
|
491
746
|
assert(context !== undefined, 0x2b6 /* Missing data store context */);
|
|
492
747
|
if (await context.isRoot()) {
|
|
493
748
|
// A root data store is basically a reference from the container runtime to the data store.
|
|
494
|
-
const handle = new FluidObjectHandle(context, id, this.
|
|
495
|
-
this.
|
|
749
|
+
const handle = new FluidObjectHandle(context, id, this.parentContext.IFluidHandleContext);
|
|
750
|
+
this.parentContext.addedGCOutboundReference?.(this.containerRuntimeHandle, handle);
|
|
496
751
|
}
|
|
497
752
|
}
|
|
498
753
|
this.dataStoresSinceLastGC = [];
|
|
@@ -551,25 +806,14 @@ export class DataStores {
|
|
|
551
806
|
context.updateUsedRoutes(usedDataStoreRoutes.get(contextId) ?? []);
|
|
552
807
|
}
|
|
553
808
|
}
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
// store based on its DDS being unused.
|
|
563
|
-
if (pathParts.length > 2) {
|
|
564
|
-
continue;
|
|
565
|
-
}
|
|
566
|
-
const dataStoreId = pathParts[1];
|
|
567
|
-
assert(this.contexts.has(dataStoreId), 0x2d7 /* No data store with specified id */);
|
|
568
|
-
// Delete the contexts of unused data stores.
|
|
569
|
-
this.contexts.delete(dataStoreId);
|
|
570
|
-
// Delete the summarizer node of the unused data stores.
|
|
571
|
-
this.deleteChildSummarizerNodeFn(dataStoreId);
|
|
572
|
-
}
|
|
809
|
+
deleteChild(dataStoreId) {
|
|
810
|
+
const dataStoreContext = this.contexts.get(dataStoreId);
|
|
811
|
+
assert(dataStoreContext !== undefined, 0x2d7 /* No data store with specified id */);
|
|
812
|
+
dataStoreContext.delete();
|
|
813
|
+
// Delete the contexts of unused data stores.
|
|
814
|
+
this.contexts.delete(dataStoreId);
|
|
815
|
+
// Delete the summarizer node of the unused data stores.
|
|
816
|
+
this.parentContext.deleteChildSummarizerNode(dataStoreId);
|
|
573
817
|
}
|
|
574
818
|
/**
|
|
575
819
|
* Delete data stores and its objects that are sweep ready.
|
|
@@ -578,15 +822,12 @@ export class DataStores {
|
|
|
578
822
|
* @returns The routes of data stores and its objects that were deleted.
|
|
579
823
|
*/
|
|
580
824
|
deleteSweepReadyNodes(sweepReadyDataStoreRoutes) {
|
|
581
|
-
// If sweep for data stores is not enabled, return empty list indicating nothing is deleted.
|
|
582
|
-
if (this.mc.config.getBoolean(disableDatastoreSweepKey) === true) {
|
|
583
|
-
return [];
|
|
584
|
-
}
|
|
585
825
|
for (const route of sweepReadyDataStoreRoutes) {
|
|
586
826
|
const pathParts = route.split("/");
|
|
587
827
|
const dataStoreId = pathParts[1];
|
|
588
828
|
// Ignore sub-data store routes because a data store and its sub-routes are deleted together, so, we only
|
|
589
829
|
// need to delete the data store.
|
|
830
|
+
// These routes will still be returned below as among the deleted routes
|
|
590
831
|
if (pathParts.length > 2) {
|
|
591
832
|
continue;
|
|
592
833
|
}
|
|
@@ -604,11 +845,7 @@ export class DataStores {
|
|
|
604
845
|
});
|
|
605
846
|
continue;
|
|
606
847
|
}
|
|
607
|
-
|
|
608
|
-
// Delete the contexts of sweep ready data stores.
|
|
609
|
-
this.contexts.delete(dataStoreId);
|
|
610
|
-
// Delete the summarizer node of the sweep ready data stores.
|
|
611
|
-
this.deleteChildSummarizerNodeFn(dataStoreId);
|
|
848
|
+
this.deleteChild(dataStoreId);
|
|
612
849
|
}
|
|
613
850
|
return Array.from(sweepReadyDataStoreRoutes);
|
|
614
851
|
}
|
|
@@ -676,6 +913,49 @@ export class DataStores {
|
|
|
676
913
|
}
|
|
677
914
|
return GCNodeType.SubDataStore;
|
|
678
915
|
}
|
|
916
|
+
internalId(maybeAlias) {
|
|
917
|
+
return this.aliases.get(maybeAlias) ?? maybeAlias;
|
|
918
|
+
}
|
|
919
|
+
async request(request) {
|
|
920
|
+
const requestParser = RequestParser.create(request);
|
|
921
|
+
const id = requestParser.pathParts[0];
|
|
922
|
+
// Differentiate between requesting the dataStore directly, or one of its children
|
|
923
|
+
const requestForChild = !requestParser.isLeaf(1);
|
|
924
|
+
const headerData = {};
|
|
925
|
+
if (typeof request.headers?.[RuntimeHeaders.wait] === "boolean") {
|
|
926
|
+
headerData.wait = request.headers[RuntimeHeaders.wait];
|
|
927
|
+
}
|
|
928
|
+
if (typeof request.headers?.[RuntimeHeaders.viaHandle] === "boolean") {
|
|
929
|
+
headerData.viaHandle = request.headers[RuntimeHeaders.viaHandle];
|
|
930
|
+
}
|
|
931
|
+
if (typeof request.headers?.[AllowTombstoneRequestHeaderKey] === "boolean") {
|
|
932
|
+
headerData.allowTombstone = request.headers[AllowTombstoneRequestHeaderKey];
|
|
933
|
+
}
|
|
934
|
+
if (typeof request.headers?.[AllowInactiveRequestHeaderKey] === "boolean") {
|
|
935
|
+
headerData.allowInactive = request.headers[AllowInactiveRequestHeaderKey];
|
|
936
|
+
}
|
|
937
|
+
// We allow Tombstone requests for sub-DataStore objects
|
|
938
|
+
if (requestForChild) {
|
|
939
|
+
headerData.allowTombstone = true;
|
|
940
|
+
}
|
|
941
|
+
await this.waitIfPendingAlias(id);
|
|
942
|
+
const internalId = this.internalId(id);
|
|
943
|
+
const dataStoreContext = await this.getDataStore(internalId, headerData);
|
|
944
|
+
// Remove query params, leading and trailing slashes from the url. This is done to make sure the format is
|
|
945
|
+
// the same as GC nodes id.
|
|
946
|
+
const urlWithoutQuery = trimLeadingAndTrailingSlashes(request.url.split("?")[0]);
|
|
947
|
+
// Get the initial snapshot details which contain the data store package path.
|
|
948
|
+
const details = await dataStoreContext.getInitialSnapshotDetails();
|
|
949
|
+
// Note that this will throw if the data store is inactive or tombstoned and throwing on incorrect usage
|
|
950
|
+
// is configured.
|
|
951
|
+
this.gcNodeUpdated(`/${urlWithoutQuery}`, "Loaded", undefined /* timestampMs */, details.pkg, request, headerData);
|
|
952
|
+
const dataStore = await dataStoreContext.realize();
|
|
953
|
+
const subRequest = requestParser.createSubRequest(1);
|
|
954
|
+
// We always expect createSubRequest to include a leading slash, but asserting here to protect against
|
|
955
|
+
// unintentionally modifying the url if that changes.
|
|
956
|
+
assert(subRequest.url.startsWith("/"), 0x126 /* "Expected createSubRequest url to include a leading slash" */);
|
|
957
|
+
return dataStore.request(subRequest);
|
|
958
|
+
}
|
|
679
959
|
}
|
|
680
960
|
export function getSummaryForDatastores(snapshot, metadata) {
|
|
681
961
|
if (!snapshot) {
|
|
@@ -705,7 +985,7 @@ export function getSummaryForDatastores(snapshot, metadata) {
|
|
|
705
985
|
*
|
|
706
986
|
* @internal
|
|
707
987
|
*/
|
|
708
|
-
export function detectOutboundReferences(
|
|
988
|
+
export function detectOutboundReferences(address, contents, addedOutboundReference) {
|
|
709
989
|
// These will be built up as we traverse the envelope contents
|
|
710
990
|
const outboundPaths = [];
|
|
711
991
|
let ddsAddress;
|
|
@@ -726,10 +1006,32 @@ export function detectOutboundReferences(envelope, addedOutboundReference) {
|
|
|
726
1006
|
}
|
|
727
1007
|
}
|
|
728
1008
|
}
|
|
729
|
-
recursivelyFindHandles(
|
|
1009
|
+
recursivelyFindHandles(contents);
|
|
730
1010
|
// GC node paths are all absolute paths, hence the "" prefix.
|
|
731
1011
|
// e.g. this will yield "/dataStoreId/ddsId"
|
|
732
|
-
const fromPath = ["",
|
|
1012
|
+
const fromPath = ["", address, ddsAddress].join("/");
|
|
733
1013
|
outboundPaths.forEach((toPath) => addedOutboundReference(fromPath, toPath));
|
|
734
1014
|
}
|
|
735
|
-
|
|
1015
|
+
/** @internal */
|
|
1016
|
+
export class ChannelCollectionFactory {
|
|
1017
|
+
constructor(registryEntries,
|
|
1018
|
+
// ADO:7302 We need a better type here
|
|
1019
|
+
provideEntryPoint, ctor) {
|
|
1020
|
+
this.provideEntryPoint = provideEntryPoint;
|
|
1021
|
+
this.ctor = ctor;
|
|
1022
|
+
this.type = "ChannelCollectionChannel";
|
|
1023
|
+
this.IFluidDataStoreRegistry = new FluidDataStoreRegistry(registryEntries);
|
|
1024
|
+
}
|
|
1025
|
+
get IFluidDataStoreFactory() {
|
|
1026
|
+
return this;
|
|
1027
|
+
}
|
|
1028
|
+
async instantiateDataStore(context, _existing) {
|
|
1029
|
+
const runtime = this.ctor(context.baseSnapshot, context, // parentContext
|
|
1030
|
+
context.logger, () => { }, // gcNodeUpdated
|
|
1031
|
+
(_nodePath) => false, // isDataStoreDeleted
|
|
1032
|
+
new Map(), // aliasMap
|
|
1033
|
+
this.provideEntryPoint);
|
|
1034
|
+
return runtime;
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1037
|
+
//# sourceMappingURL=channelCollection.js.map
|