@fluidframework/container-runtime 2.0.0-rc.1.0.4 → 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
|
@@ -4,34 +4,150 @@
|
|
|
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 { GCNodeType, detectOutboundRoutesViaDDSKey } from "./gc/index.
|
|
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
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Creates a wrapper of a {@link IFluidParentContext} to be provided to the inner datastore channels.
|
|
111
|
+
* The wrapper will have the submit methods overwritten with the appropriate id as the destination address.
|
|
112
|
+
*
|
|
113
|
+
* @param id - the id of the channel
|
|
114
|
+
* @param parentContext - the {@link IFluidParentContext} to wrap
|
|
115
|
+
* @returns A wrapped {@link IFluidParentContext}
|
|
116
|
+
*/
|
|
117
|
+
export function wrapContextForInnerChannel(id, parentContext) {
|
|
118
|
+
const context = wrapContext(parentContext);
|
|
119
|
+
context.submitMessage = (type, content, localOpMetadata) => {
|
|
120
|
+
const fluidDataStoreContent = {
|
|
121
|
+
content,
|
|
122
|
+
type,
|
|
123
|
+
};
|
|
124
|
+
const envelope = {
|
|
125
|
+
address: id,
|
|
126
|
+
contents: fluidDataStoreContent,
|
|
127
|
+
};
|
|
128
|
+
parentContext.submitMessage(ContainerMessageType.FluidDataStoreOp, envelope, localOpMetadata);
|
|
129
|
+
};
|
|
130
|
+
context.submitSignal = (type, contents, targetClientId) => {
|
|
131
|
+
const envelope = {
|
|
132
|
+
address: id,
|
|
133
|
+
contents,
|
|
134
|
+
};
|
|
135
|
+
parentContext.submitSignal(type, envelope, targetClientId);
|
|
136
|
+
};
|
|
137
|
+
return context;
|
|
138
|
+
}
|
|
20
139
|
/**
|
|
21
140
|
* This class encapsulates data store handling. Currently it is only used by the container runtime,
|
|
22
141
|
* but eventually could be hosted on any channel once we formalize the channel api boundary.
|
|
142
|
+
* @internal
|
|
23
143
|
*/
|
|
24
|
-
export class
|
|
25
|
-
constructor(baseSnapshot,
|
|
144
|
+
export class ChannelCollection {
|
|
145
|
+
constructor(baseSnapshot, parentContext, baseLogger, gcNodeUpdated, isDataStoreDeleted, aliasMap, provideEntryPoint) {
|
|
26
146
|
this.baseSnapshot = baseSnapshot;
|
|
27
|
-
this.
|
|
28
|
-
this.submitAttachFn = submitAttachFn;
|
|
29
|
-
this.getCreateChildSummarizerNodeFn = getCreateChildSummarizerNodeFn;
|
|
30
|
-
this.deleteChildSummarizerNodeFn = deleteChildSummarizerNodeFn;
|
|
147
|
+
this.parentContext = parentContext;
|
|
31
148
|
this.gcNodeUpdated = gcNodeUpdated;
|
|
32
149
|
this.isDataStoreDeleted = isDataStoreDeleted;
|
|
33
150
|
this.aliasMap = aliasMap;
|
|
34
|
-
this.contexts = contexts;
|
|
35
151
|
// Stores tracked by the Domain
|
|
36
152
|
this.pendingAttach = new Map();
|
|
37
153
|
// 0.24 back-compat attachingBeforeSummary
|
|
@@ -41,9 +157,13 @@ export class DataStores {
|
|
|
41
157
|
// root data stores that are added.
|
|
42
158
|
this.dataStoresSinceLastGC = [];
|
|
43
159
|
this.pendingAliasMap = new Map();
|
|
160
|
+
/** For sampling. Only log once per container */
|
|
161
|
+
this.shouldSendAttachLog = true;
|
|
44
162
|
this.dispose = () => this.disposeOnce.value;
|
|
45
163
|
this.mc = createChildMonitoringContext({ logger: baseLogger });
|
|
46
|
-
this.
|
|
164
|
+
this.contexts = new DataStoreContexts(baseLogger);
|
|
165
|
+
this.containerRuntimeHandle = new FluidObjectHandle(this.parentContext, "/", this.parentContext.IFluidHandleContext);
|
|
166
|
+
this.entryPoint = new FluidObjectHandle(new LazyPromise(async () => provideEntryPoint(this)), "", this.parentContext.IFluidHandleContext);
|
|
47
167
|
// Extract stores stored inside the snapshot
|
|
48
168
|
const fluidDataStores = new Map();
|
|
49
169
|
if (baseSnapshot) {
|
|
@@ -60,16 +180,17 @@ export class DataStores {
|
|
|
60
180
|
unreferencedDataStoreCount++;
|
|
61
181
|
}
|
|
62
182
|
// If we have a detached container, then create local data store contexts.
|
|
63
|
-
if (this.
|
|
183
|
+
if (this.parentContext.attachState !== AttachState.Detached) {
|
|
64
184
|
dataStoreContext = new RemoteFluidDataStoreContext({
|
|
65
185
|
id: key,
|
|
66
186
|
snapshotTree: value,
|
|
67
|
-
|
|
68
|
-
storage: this.
|
|
69
|
-
scope: this.
|
|
70
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
187
|
+
parentContext: this.wrapContextForInnerChannel(key),
|
|
188
|
+
storage: this.parentContext.storage,
|
|
189
|
+
scope: this.parentContext.scope,
|
|
190
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(key, {
|
|
71
191
|
type: CreateSummarizerNodeSource.FromSummary,
|
|
72
192
|
}),
|
|
193
|
+
loadingGroupId: value.groupId,
|
|
73
194
|
});
|
|
74
195
|
}
|
|
75
196
|
else {
|
|
@@ -80,10 +201,10 @@ export class DataStores {
|
|
|
80
201
|
dataStoreContext = new LocalFluidDataStoreContext({
|
|
81
202
|
id: key,
|
|
82
203
|
pkg: undefined,
|
|
83
|
-
|
|
84
|
-
storage: this.
|
|
85
|
-
scope: this.
|
|
86
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
204
|
+
parentContext: this.wrapContextForInnerChannel(key),
|
|
205
|
+
storage: this.parentContext.storage,
|
|
206
|
+
scope: this.parentContext.scope,
|
|
207
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(key, {
|
|
87
208
|
type: CreateSummarizerNodeSource.FromSummary,
|
|
88
209
|
}),
|
|
89
210
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(key),
|
|
@@ -108,9 +229,41 @@ export class DataStores {
|
|
|
108
229
|
const pendingAliasPromise = this.pendingAliases.get(maybeAlias);
|
|
109
230
|
return pendingAliasPromise ?? "Success";
|
|
110
231
|
}
|
|
232
|
+
wrapContextForInnerChannel(id) {
|
|
233
|
+
return wrapContextForInnerChannel(id, this.parentContext);
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* IFluidDataStoreChannel.makeVisibleAndAttachGraph implementation
|
|
237
|
+
* Not clear when it would be called and what it should do.
|
|
238
|
+
* Currently this API is called by context only for root data stores.
|
|
239
|
+
*/
|
|
240
|
+
makeVisibleAndAttachGraph() {
|
|
241
|
+
this.parentContext.makeLocallyVisible();
|
|
242
|
+
}
|
|
111
243
|
processAttachMessage(message, local) {
|
|
112
244
|
const attachMessage = message.contents;
|
|
113
245
|
this.dataStoresSinceLastGC.push(attachMessage.id);
|
|
246
|
+
// We need to process the GC Data for both local and remote attach messages
|
|
247
|
+
const foundGCData = processAttachMessageGCData(attachMessage.snapshot, (nodeId, toPath) => {
|
|
248
|
+
// nodeId is the relative path under the node being attached. Always starts with "/", but no trailing "/" after an id
|
|
249
|
+
const fromPath = `/${attachMessage.id}${nodeId === "/" ? "" : nodeId}`;
|
|
250
|
+
this.parentContext.addedGCOutboundReference?.({ absolutePath: fromPath }, { absolutePath: toPath });
|
|
251
|
+
});
|
|
252
|
+
// Only log once per container to avoid noise/cost.
|
|
253
|
+
// Allows longitudinal tracking of various state (e.g. foundGCData), and some sampled details
|
|
254
|
+
if (this.shouldSendAttachLog) {
|
|
255
|
+
this.shouldSendAttachLog = false;
|
|
256
|
+
this.mc.logger.sendTelemetryEvent({
|
|
257
|
+
eventName: "dataStoreAttachMessage_sampled",
|
|
258
|
+
...tagCodeArtifacts({ id: attachMessage.id, pkg: attachMessage.type }),
|
|
259
|
+
details: {
|
|
260
|
+
local,
|
|
261
|
+
snapshot: !!attachMessage.snapshot,
|
|
262
|
+
foundGCData,
|
|
263
|
+
},
|
|
264
|
+
...extractSafePropertiesFromMessage(message),
|
|
265
|
+
});
|
|
266
|
+
}
|
|
114
267
|
// The local object has already been attached
|
|
115
268
|
if (local) {
|
|
116
269
|
assert(this.pendingAttach.has(attachMessage.id), 0x15e /* "Local object does not have matching attach message id" */);
|
|
@@ -140,10 +293,11 @@ export class DataStores {
|
|
|
140
293
|
const remoteFluidDataStoreContext = new RemoteFluidDataStoreContext({
|
|
141
294
|
id: attachMessage.id,
|
|
142
295
|
snapshotTree,
|
|
143
|
-
|
|
144
|
-
storage: new StorageServiceWithAttachBlobs(this.
|
|
145
|
-
scope: this.
|
|
146
|
-
|
|
296
|
+
parentContext: this.wrapContextForInnerChannel(attachMessage.id),
|
|
297
|
+
storage: new StorageServiceWithAttachBlobs(this.parentContext.storage, flatAttachBlobs),
|
|
298
|
+
scope: this.parentContext.scope,
|
|
299
|
+
loadingGroupId: attachMessage.snapshot?.groupId,
|
|
300
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(attachMessage.id, {
|
|
147
301
|
type: CreateSummarizerNodeSource.FromAttach,
|
|
148
302
|
sequenceNumber: message.sequenceNumber,
|
|
149
303
|
snapshot: attachMessage.snapshot ?? {
|
|
@@ -184,8 +338,8 @@ export class DataStores {
|
|
|
184
338
|
});
|
|
185
339
|
return false;
|
|
186
340
|
}
|
|
187
|
-
const handle = new FluidObjectHandle(context, aliasMessage.internalId, this.
|
|
188
|
-
this.
|
|
341
|
+
const handle = new FluidObjectHandle(context, aliasMessage.internalId, this.parentContext.IFluidHandleContext);
|
|
342
|
+
this.parentContext.addedGCOutboundReference?.(this.containerRuntimeHandle, handle);
|
|
189
343
|
this.aliasMap.set(aliasMessage.alias, context.id);
|
|
190
344
|
context.setInMemoryRoot();
|
|
191
345
|
return true;
|
|
@@ -193,9 +347,21 @@ export class DataStores {
|
|
|
193
347
|
alreadyProcessed(id) {
|
|
194
348
|
return this.aliasMap.get(id) !== undefined || this.contexts.get(id) !== undefined;
|
|
195
349
|
}
|
|
350
|
+
/** Package up the context's attach summary etc into an IAttachMessage */
|
|
351
|
+
generateAttachMessage(localContext) {
|
|
352
|
+
const { attachSummary } = localContext.getAttachData(/* includeGCData: */ true);
|
|
353
|
+
const type = localContext.packagePath[localContext.packagePath.length - 1];
|
|
354
|
+
// Attach message needs the summary in ITree format. Convert the ISummaryTree into an ITree.
|
|
355
|
+
const snapshot = convertSummaryTreeToITree(attachSummary.summary);
|
|
356
|
+
return {
|
|
357
|
+
id: localContext.id,
|
|
358
|
+
snapshot,
|
|
359
|
+
type,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
196
362
|
/**
|
|
197
|
-
* Make the data
|
|
198
|
-
* bound list. This data store can now be reached from the root.
|
|
363
|
+
* Make the data store locally visible in the container graph by moving the data store context from unbound to
|
|
364
|
+
* bound list and submitting the attach message. This data store can now be reached from the root.
|
|
199
365
|
* @param id - The id of the data store context to make visible.
|
|
200
366
|
*/
|
|
201
367
|
makeDataStoreLocallyVisible(id) {
|
|
@@ -206,48 +372,83 @@ export class DataStores {
|
|
|
206
372
|
* globally visible. Move it to attaching state and send an "attach" op for it.
|
|
207
373
|
* If the container is detached, this data store will be part of the summary that makes the container attached.
|
|
208
374
|
*/
|
|
209
|
-
if (this.
|
|
375
|
+
if (this.parentContext.attachState !== AttachState.Detached) {
|
|
210
376
|
localContext.emit("attaching");
|
|
211
|
-
const message =
|
|
377
|
+
const message = this.generateAttachMessage(localContext);
|
|
212
378
|
this.pendingAttach.set(id, message);
|
|
213
|
-
this.
|
|
379
|
+
this.parentContext.submitMessage(ContainerMessageType.Attach, message, undefined);
|
|
214
380
|
this.attachOpFiredForDataStore.add(id);
|
|
215
381
|
}
|
|
216
382
|
this.contexts.bind(id);
|
|
217
383
|
}
|
|
218
|
-
|
|
219
|
-
|
|
384
|
+
/**
|
|
385
|
+
* Generate compact internal DataStore ID.
|
|
386
|
+
*
|
|
387
|
+
* A note about namespace and name collisions:
|
|
388
|
+
* This code assumes that that's the only way to generate internal IDs, and that it's Ok for this namespace to overlap with
|
|
389
|
+
* user-provided alias names namespace.
|
|
390
|
+
* There are two scenarios where it could cause trouble:
|
|
391
|
+
* 1) Old files, where (already removed) CreateRoot*DataStore*() API was used, and thus internal name of data store
|
|
392
|
+
* was provided by user. Such files may experience name collision with future data stores that receive a name generated
|
|
393
|
+
* by this function.
|
|
394
|
+
* 2) Much less likely, but if it happen that internal ID (generated by this function) is exactly the same as alias name
|
|
395
|
+
* that user might use in the future, them ContainerRuntime.getAliasedDataStoreEntryPoint() or
|
|
396
|
+
* ContainerRuntime.getDataStoreFromRequest() could return a data store with internalID matching user request, even though
|
|
397
|
+
* user expected some other data store (that would receive alias later).
|
|
398
|
+
* Please note that above mentioned functions have the implementation they have (allowing #2) due to #1.
|
|
399
|
+
*/
|
|
400
|
+
createDataStoreId() {
|
|
401
|
+
// We use three non-overlapping namespaces:
|
|
402
|
+
// - detached state: even numbers
|
|
403
|
+
// - attached state: odd numbers
|
|
404
|
+
// - uuids
|
|
405
|
+
// In first two cases we will encode result as strings in more compact form.
|
|
406
|
+
if (this.parentContext.attachState === AttachState.Detached) {
|
|
407
|
+
// container is detached, only one client observes content, no way to hit collisions with other clients.
|
|
408
|
+
return encodeCompactIdToString(2 * this.contexts.size);
|
|
409
|
+
}
|
|
410
|
+
const id = this.parentContext.containerRuntime.generateDocumentUniqueId();
|
|
411
|
+
if (typeof id === "number") {
|
|
412
|
+
return encodeCompactIdToString(2 * id + 1);
|
|
413
|
+
}
|
|
414
|
+
return id;
|
|
415
|
+
}
|
|
416
|
+
createDetachedDataStoreCore(pkg, loadingGroupId) {
|
|
417
|
+
const id = this.createDataStoreId();
|
|
220
418
|
const context = new LocalDetachedFluidDataStoreContext({
|
|
221
419
|
id,
|
|
222
420
|
pkg,
|
|
223
|
-
|
|
224
|
-
storage: this.
|
|
225
|
-
scope: this.
|
|
226
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
421
|
+
parentContext: this.wrapContextForInnerChannel(id),
|
|
422
|
+
storage: this.parentContext.storage,
|
|
423
|
+
scope: this.parentContext.scope,
|
|
424
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(id, {
|
|
227
425
|
type: CreateSummarizerNodeSource.Local,
|
|
228
426
|
}),
|
|
229
427
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
|
|
230
428
|
snapshotTree: undefined,
|
|
231
|
-
isRootDataStore:
|
|
429
|
+
isRootDataStore: false,
|
|
430
|
+
loadingGroupId,
|
|
431
|
+
channelToDataStoreFn: (channel) => channelToDataStore(channel, id, this, createChildLogger({ logger: this.parentContext.logger })),
|
|
232
432
|
});
|
|
233
433
|
this.contexts.addUnbound(context);
|
|
234
434
|
return context;
|
|
235
435
|
}
|
|
236
|
-
_createFluidDataStoreContext(pkg,
|
|
237
|
-
|
|
436
|
+
_createFluidDataStoreContext(pkg, props, loadingGroupId) {
|
|
437
|
+
const id = this.createDataStoreId();
|
|
238
438
|
const context = new LocalFluidDataStoreContext({
|
|
239
439
|
id,
|
|
240
440
|
pkg,
|
|
241
|
-
|
|
242
|
-
storage: this.
|
|
243
|
-
scope: this.
|
|
244
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
441
|
+
parentContext: this.wrapContextForInnerChannel(id),
|
|
442
|
+
storage: this.parentContext.storage,
|
|
443
|
+
scope: this.parentContext.scope,
|
|
444
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(id, {
|
|
245
445
|
type: CreateSummarizerNodeSource.Local,
|
|
246
446
|
}),
|
|
247
447
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
|
|
248
448
|
snapshotTree: undefined,
|
|
249
449
|
isRootDataStore: false,
|
|
250
450
|
createProps: props,
|
|
451
|
+
loadingGroupId,
|
|
251
452
|
});
|
|
252
453
|
this.contexts.addUnbound(context);
|
|
253
454
|
return context;
|
|
@@ -255,7 +456,16 @@ export class DataStores {
|
|
|
255
456
|
get disposed() {
|
|
256
457
|
return this.disposeOnce.evaluated;
|
|
257
458
|
}
|
|
258
|
-
|
|
459
|
+
reSubmit(type, content, localOpMetadata) {
|
|
460
|
+
switch (type) {
|
|
461
|
+
case ContainerMessageType.Attach:
|
|
462
|
+
case ContainerMessageType.Alias:
|
|
463
|
+
this.parentContext.submitMessage(type, content, localOpMetadata);
|
|
464
|
+
return;
|
|
465
|
+
default:
|
|
466
|
+
}
|
|
467
|
+
assert(type === ContainerMessageType.FluidDataStoreOp, 0x8e7 /* type */);
|
|
468
|
+
const envelope = content;
|
|
259
469
|
const context = this.contexts.get(envelope.address);
|
|
260
470
|
// If the data store has been deleted, log an error and throw an error. If there are local changes for a
|
|
261
471
|
// deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
|
|
@@ -266,9 +476,12 @@ export class DataStores {
|
|
|
266
476
|
});
|
|
267
477
|
}
|
|
268
478
|
assert(!!context, 0x160 /* "There should be a store context for the op" */);
|
|
269
|
-
|
|
479
|
+
const innerContents = envelope.contents;
|
|
480
|
+
context.reSubmit(innerContents.type, innerContents.content, localOpMetadata);
|
|
270
481
|
}
|
|
271
|
-
|
|
482
|
+
rollback(type, content, localOpMetadata) {
|
|
483
|
+
assert(type === ContainerMessageType.FluidDataStoreOp, 0x8e8 /* type */);
|
|
484
|
+
const envelope = content;
|
|
272
485
|
const context = this.contexts.get(envelope.address);
|
|
273
486
|
// If the data store has been deleted, log an error and throw an error. If there are local changes for a
|
|
274
487
|
// deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
|
|
@@ -279,9 +492,19 @@ export class DataStores {
|
|
|
279
492
|
});
|
|
280
493
|
}
|
|
281
494
|
assert(!!context, 0x2e8 /* "There should be a store context for the op" */);
|
|
282
|
-
|
|
495
|
+
const innerContents = envelope.contents;
|
|
496
|
+
context.rollback(innerContents.type, innerContents.content, localOpMetadata);
|
|
283
497
|
}
|
|
284
|
-
async applyStashedOp(
|
|
498
|
+
async applyStashedOp(content) {
|
|
499
|
+
const opContents = content;
|
|
500
|
+
switch (opContents.type) {
|
|
501
|
+
case ContainerMessageType.Attach:
|
|
502
|
+
return this.applyStashedAttachOp(opContents.contents);
|
|
503
|
+
case ContainerMessageType.Alias:
|
|
504
|
+
return;
|
|
505
|
+
default:
|
|
506
|
+
}
|
|
507
|
+
const envelope = opContents.contents;
|
|
285
508
|
const context = this.contexts.get(envelope.address);
|
|
286
509
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
287
510
|
// corruption in case the data store that stashed the op is deleted.
|
|
@@ -296,9 +519,26 @@ export class DataStores {
|
|
|
296
519
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
297
520
|
this.processAttachMessage({ contents: message }, false);
|
|
298
521
|
}
|
|
299
|
-
|
|
522
|
+
process(message, local, localMessageMetadata, addedOutboundReference) {
|
|
523
|
+
switch (message.type) {
|
|
524
|
+
case ContainerMessageType.Attach:
|
|
525
|
+
this.processAttachMessage(message, local);
|
|
526
|
+
return;
|
|
527
|
+
case ContainerMessageType.Alias:
|
|
528
|
+
this.processAliasMessage(message, localMessageMetadata, local);
|
|
529
|
+
return;
|
|
530
|
+
case ContainerMessageType.FluidDataStoreOp:
|
|
531
|
+
break;
|
|
532
|
+
default:
|
|
533
|
+
assert(false, 0x8e9 /* unreached */);
|
|
534
|
+
}
|
|
300
535
|
const envelope = message.contents;
|
|
301
|
-
const
|
|
536
|
+
const innerContents = envelope.contents;
|
|
537
|
+
const transformed = {
|
|
538
|
+
...message,
|
|
539
|
+
type: innerContents.type,
|
|
540
|
+
contents: innerContents.content,
|
|
541
|
+
};
|
|
302
542
|
const context = this.contexts.get(envelope.address);
|
|
303
543
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
304
544
|
// corruption in case a deleted data store accidentally submitted an op.
|
|
@@ -319,13 +559,14 @@ export class DataStores {
|
|
|
319
559
|
context.process(transformed, local, localMessageMetadata);
|
|
320
560
|
// By default, we use the new behavior of detecting outbound routes here.
|
|
321
561
|
// If this setting is true, then DataStoreContext would be notifying GC instead.
|
|
322
|
-
if (this.mc.config.getBoolean(detectOutboundRoutesViaDDSKey) !== true
|
|
562
|
+
if (this.mc.config.getBoolean(detectOutboundRoutesViaDDSKey) !== true &&
|
|
563
|
+
addedOutboundReference !== undefined) {
|
|
323
564
|
// Notify GC of any outbound references that were added by this op.
|
|
324
565
|
detectOutboundReferences(envelope, addedOutboundReference);
|
|
325
566
|
}
|
|
326
567
|
// Notify that a GC node for the data store changed. This is used to detect if a deleted data store is
|
|
327
568
|
// being used.
|
|
328
|
-
this.gcNodeUpdated(`/${envelope.address}`, message.timestamp, context.isLoaded ? context.packagePath : undefined);
|
|
569
|
+
this.gcNodeUpdated(`/${envelope.address}`, "Changed", message.timestamp, context.isLoaded ? context.packagePath : undefined);
|
|
329
570
|
}
|
|
330
571
|
async getDataStore(id, requestHeaderData) {
|
|
331
572
|
const headerData = { ...defaultRuntimeHeaderData, ...requestHeaderData };
|
|
@@ -379,7 +620,10 @@ export class DataStores {
|
|
|
379
620
|
});
|
|
380
621
|
return true;
|
|
381
622
|
}
|
|
382
|
-
processSignal(
|
|
623
|
+
processSignal(messageArg, local) {
|
|
624
|
+
const envelope = messageArg.content;
|
|
625
|
+
const fluidDataStoreId = envelope.address;
|
|
626
|
+
const message = { ...messageArg, content: envelope.contents };
|
|
383
627
|
const context = this.contexts.get(fluidDataStoreId);
|
|
384
628
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
385
629
|
// corruption in case a deleted data store accidentally submitted a signal.
|
|
@@ -412,7 +656,7 @@ export class DataStores {
|
|
|
412
656
|
fluidDataStoreId,
|
|
413
657
|
}),
|
|
414
658
|
details: JSON.stringify({
|
|
415
|
-
runtimeConnected: this.
|
|
659
|
+
runtimeConnected: this.parentContext.connected,
|
|
416
660
|
connected,
|
|
417
661
|
}),
|
|
418
662
|
}, error);
|
|
@@ -452,7 +696,10 @@ export class DataStores {
|
|
|
452
696
|
}));
|
|
453
697
|
return summaryBuilder.getSummaryTree();
|
|
454
698
|
}
|
|
455
|
-
|
|
699
|
+
/**
|
|
700
|
+
* Create a summary. Used when attaching or serializing a detached container.
|
|
701
|
+
*/
|
|
702
|
+
getAttachSummary(telemetryContext) {
|
|
456
703
|
const builder = new SummaryTreeBuilder();
|
|
457
704
|
// Attaching graph of some stores can cause other stores to get bound too.
|
|
458
705
|
// So keep taking summary until no new stores get bound.
|
|
@@ -472,8 +719,8 @@ export class DataStores {
|
|
|
472
719
|
.map(([key, value]) => {
|
|
473
720
|
let dataStoreSummary;
|
|
474
721
|
if (value.isLoaded) {
|
|
475
|
-
|
|
476
|
-
|
|
722
|
+
dataStoreSummary = value.getAttachData(
|
|
723
|
+
/* includeGCCData: */ false, telemetryContext).attachSummary;
|
|
477
724
|
}
|
|
478
725
|
else {
|
|
479
726
|
// If this data store is not yet loaded, then there should be no changes in the snapshot from
|
|
@@ -497,8 +744,8 @@ export class DataStores {
|
|
|
497
744
|
assert(context !== undefined, 0x2b6 /* Missing data store context */);
|
|
498
745
|
if (await context.isRoot()) {
|
|
499
746
|
// A root data store is basically a reference from the container runtime to the data store.
|
|
500
|
-
const handle = new FluidObjectHandle(context, id, this.
|
|
501
|
-
this.
|
|
747
|
+
const handle = new FluidObjectHandle(context, id, this.parentContext.IFluidHandleContext);
|
|
748
|
+
this.parentContext.addedGCOutboundReference?.(this.containerRuntimeHandle, handle);
|
|
502
749
|
}
|
|
503
750
|
}
|
|
504
751
|
this.dataStoresSinceLastGC = [];
|
|
@@ -574,7 +821,7 @@ export class DataStores {
|
|
|
574
821
|
// Delete the contexts of unused data stores.
|
|
575
822
|
this.contexts.delete(dataStoreId);
|
|
576
823
|
// Delete the summarizer node of the unused data stores.
|
|
577
|
-
this.
|
|
824
|
+
this.parentContext.deleteChildSummarizerNode?.(dataStoreId);
|
|
578
825
|
}
|
|
579
826
|
}
|
|
580
827
|
/**
|
|
@@ -611,7 +858,7 @@ export class DataStores {
|
|
|
611
858
|
// Delete the contexts of sweep ready data stores.
|
|
612
859
|
this.contexts.delete(dataStoreId);
|
|
613
860
|
// Delete the summarizer node of the sweep ready data stores.
|
|
614
|
-
this.
|
|
861
|
+
this.parentContext.deleteChildSummarizerNode?.(dataStoreId);
|
|
615
862
|
}
|
|
616
863
|
return Array.from(sweepReadyDataStoreRoutes);
|
|
617
864
|
}
|
|
@@ -679,6 +926,49 @@ export class DataStores {
|
|
|
679
926
|
}
|
|
680
927
|
return GCNodeType.SubDataStore;
|
|
681
928
|
}
|
|
929
|
+
internalId(maybeAlias) {
|
|
930
|
+
return this.aliases.get(maybeAlias) ?? maybeAlias;
|
|
931
|
+
}
|
|
932
|
+
async request(request) {
|
|
933
|
+
const requestParser = RequestParser.create(request);
|
|
934
|
+
const id = requestParser.pathParts[0];
|
|
935
|
+
// Differentiate between requesting the dataStore directly, or one of its children
|
|
936
|
+
const requestForChild = !requestParser.isLeaf(1);
|
|
937
|
+
const headerData = {};
|
|
938
|
+
if (typeof request.headers?.[RuntimeHeaders.wait] === "boolean") {
|
|
939
|
+
headerData.wait = request.headers[RuntimeHeaders.wait];
|
|
940
|
+
}
|
|
941
|
+
if (typeof request.headers?.[RuntimeHeaders.viaHandle] === "boolean") {
|
|
942
|
+
headerData.viaHandle = request.headers[RuntimeHeaders.viaHandle];
|
|
943
|
+
}
|
|
944
|
+
if (typeof request.headers?.[AllowTombstoneRequestHeaderKey] === "boolean") {
|
|
945
|
+
headerData.allowTombstone = request.headers[AllowTombstoneRequestHeaderKey];
|
|
946
|
+
}
|
|
947
|
+
if (typeof request.headers?.[AllowInactiveRequestHeaderKey] === "boolean") {
|
|
948
|
+
headerData.allowInactive = request.headers[AllowInactiveRequestHeaderKey];
|
|
949
|
+
}
|
|
950
|
+
// We allow Tombstone requests for sub-DataStore objects
|
|
951
|
+
if (requestForChild) {
|
|
952
|
+
headerData.allowTombstone = true;
|
|
953
|
+
}
|
|
954
|
+
await this.waitIfPendingAlias(id);
|
|
955
|
+
const internalId = this.internalId(id);
|
|
956
|
+
const dataStoreContext = await this.getDataStore(internalId, headerData);
|
|
957
|
+
// Remove query params, leading and trailing slashes from the url. This is done to make sure the format is
|
|
958
|
+
// the same as GC nodes id.
|
|
959
|
+
const urlWithoutQuery = trimLeadingAndTrailingSlashes(request.url.split("?")[0]);
|
|
960
|
+
// Get the initial snapshot details which contain the data store package path.
|
|
961
|
+
const details = await dataStoreContext.getInitialSnapshotDetails();
|
|
962
|
+
// Note that this will throw if the data store is inactive or tombstoned and throwing on incorrect usage
|
|
963
|
+
// is configured.
|
|
964
|
+
this.gcNodeUpdated(`/${urlWithoutQuery}`, "Loaded", undefined /* timestampMs */, details.pkg, request, headerData);
|
|
965
|
+
const dataStore = await dataStoreContext.realize();
|
|
966
|
+
const subRequest = requestParser.createSubRequest(1);
|
|
967
|
+
// We always expect createSubRequest to include a leading slash, but asserting here to protect against
|
|
968
|
+
// unintentionally modifying the url if that changes.
|
|
969
|
+
assert(subRequest.url.startsWith("/"), 0x126 /* "Expected createSubRequest url to include a leading slash" */);
|
|
970
|
+
return dataStore.request(subRequest);
|
|
971
|
+
}
|
|
682
972
|
}
|
|
683
973
|
export function getSummaryForDatastores(snapshot, metadata) {
|
|
684
974
|
if (!snapshot) {
|
|
@@ -705,6 +995,8 @@ export function getSummaryForDatastores(snapshot, metadata) {
|
|
|
705
995
|
}
|
|
706
996
|
/**
|
|
707
997
|
* Traverse this op's contents and detect any outbound routes that were added by this op.
|
|
998
|
+
*
|
|
999
|
+
* @internal
|
|
708
1000
|
*/
|
|
709
1001
|
export function detectOutboundReferences(envelope, addedOutboundReference) {
|
|
710
1002
|
// These will be built up as we traverse the envelope contents
|
|
@@ -733,4 +1025,25 @@ export function detectOutboundReferences(envelope, addedOutboundReference) {
|
|
|
733
1025
|
const fromPath = ["", envelope.address, ddsAddress].join("/");
|
|
734
1026
|
outboundPaths.forEach((toPath) => addedOutboundReference(fromPath, toPath));
|
|
735
1027
|
}
|
|
736
|
-
|
|
1028
|
+
/** @internal */
|
|
1029
|
+
export class ChannelCollectionFactory {
|
|
1030
|
+
constructor(registryEntries,
|
|
1031
|
+
// ADO:7302 We need a better type here
|
|
1032
|
+
provideEntryPoint) {
|
|
1033
|
+
this.provideEntryPoint = provideEntryPoint;
|
|
1034
|
+
this.type = "ChannelCollectionChannel";
|
|
1035
|
+
this.IFluidDataStoreRegistry = new FluidDataStoreRegistry(registryEntries);
|
|
1036
|
+
}
|
|
1037
|
+
get IFluidDataStoreFactory() {
|
|
1038
|
+
return this;
|
|
1039
|
+
}
|
|
1040
|
+
async instantiateDataStore(context, _existing) {
|
|
1041
|
+
const runtime = new ChannelCollection(context.baseSnapshot, context, // parentContext
|
|
1042
|
+
context.logger, () => { }, // gcNodeUpdated
|
|
1043
|
+
(_nodePath) => false, // isDataStoreDeleted
|
|
1044
|
+
new Map(), // aliasMap
|
|
1045
|
+
this.provideEntryPoint);
|
|
1046
|
+
return runtime;
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
//# sourceMappingURL=channelCollection.js.map
|