@fluidframework/container-runtime 2.0.0-dev-rc.3.0.0.250606 → 2.0.0-dev-rc.3.0.0.254274
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/api-report/container-runtime.api.md +35 -34
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js +4 -4
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager.d.ts +31 -23
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +81 -99
- package/dist/blobManager.js.map +1 -1
- package/dist/channelCollection.d.ts +4 -2
- package/dist/channelCollection.d.ts.map +1 -1
- package/dist/channelCollection.js +75 -72
- package/dist/channelCollection.js.map +1 -1
- package/dist/connectionTelemetry.d.ts +1 -1
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +16 -16
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/container-runtime-alpha.d.ts +64 -36
- package/dist/container-runtime-beta.d.ts +28 -28
- package/dist/container-runtime-public.d.ts +28 -28
- package/dist/container-runtime-untrimmed.d.ts +68 -39
- package/dist/containerHandleContext.d.ts.map +1 -1
- package/dist/containerHandleContext.js +2 -2
- package/dist/containerHandleContext.js.map +1 -1
- package/dist/containerRuntime.d.ts +12 -8
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +197 -162
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.d.ts +1 -1
- package/dist/dataStore.d.ts.map +1 -1
- package/dist/dataStore.js +7 -7
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +9 -9
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +72 -62
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js +11 -11
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/dataStoreRegistry.d.ts +1 -1
- 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 +1 -1
- package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
- package/dist/deltaManagerSummarizerProxy.js.map +1 -1
- package/dist/deltaScheduler.d.ts.map +1 -1
- package/dist/deltaScheduler.js +6 -6
- package/dist/deltaScheduler.js.map +1 -1
- package/dist/error.d.ts +1 -1
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +4 -4
- package/dist/error.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts +2 -1
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +20 -20
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.d.ts +1 -1
- package/dist/gc/gcConfigs.d.ts.map +1 -1
- package/dist/gc/gcConfigs.js +4 -5
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +3 -2
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcHelpers.d.ts +5 -1
- package/dist/gc/gcHelpers.d.ts.map +1 -1
- package/dist/gc/gcHelpers.js +21 -12
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js +11 -11
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts +2 -1
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +11 -9
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.js +6 -6
- package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
- package/dist/gc/index.d.ts +1 -1
- package/dist/gc/index.d.ts.map +1 -1
- package/dist/gc/index.js +2 -1
- package/dist/gc/index.js.map +1 -1
- package/dist/messageTypes.d.ts +2 -2
- package/dist/messageTypes.d.ts.map +1 -1
- package/dist/messageTypes.js.map +1 -1
- package/dist/opLifecycle/batchManager.d.ts.map +1 -1
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/definitions.d.ts +1 -1
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +5 -5
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +12 -12
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js +7 -7
- 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 +17 -17
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +2 -1
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +13 -13
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
- 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.map +1 -1
- package/dist/pendingStateManager.js +18 -18
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js +24 -24
- package/dist/scheduleManager.js.map +1 -1
- package/dist/storageServiceWithAttachBlobs.d.ts +2 -2
- package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -1
- package/dist/storageServiceWithAttachBlobs.js +2 -2
- package/dist/storageServiceWithAttachBlobs.js.map +1 -1
- package/dist/summary/documentSchema.d.ts +37 -6
- package/dist/summary/documentSchema.d.ts.map +1 -1
- package/dist/summary/documentSchema.js +58 -21
- package/dist/summary/documentSchema.js.map +1 -1
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js +7 -7
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.js +3 -3
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/dist/summary/runningSummarizer.d.ts +1 -1
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +16 -16
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.d.ts +2 -1
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +12 -12
- package/dist/summary/summarizer.js.map +1 -1
- package/dist/summary/summarizerClientElection.d.ts.map +1 -1
- package/dist/summary/summarizerClientElection.js.map +1 -1
- package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
- package/dist/summary/summarizerHeuristics.js +2 -2
- package/dist/summary/summarizerHeuristics.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.d.ts +2 -1
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js +28 -28
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.js +3 -3
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +14 -14
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +4 -2
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryCollection.js +7 -7
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +1 -1
- package/dist/summary/summaryFormat.d.ts.map +1 -1
- package/dist/summary/summaryFormat.js +8 -8
- package/dist/summary/summaryFormat.js.map +1 -1
- package/dist/summary/summaryGenerator.d.ts +3 -2
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +16 -16
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryManager.d.ts.map +1 -1
- package/dist/summary/summaryManager.js +15 -14
- package/dist/summary/summaryManager.js.map +1 -1
- package/lib/batchTracker.d.ts.map +1 -1
- package/lib/batchTracker.js +2 -2
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager.d.ts +31 -23
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +46 -64
- package/lib/blobManager.js.map +1 -1
- package/lib/channelCollection.d.ts +4 -2
- package/lib/channelCollection.d.ts.map +1 -1
- package/lib/channelCollection.js +10 -7
- package/lib/channelCollection.js.map +1 -1
- package/lib/connectionTelemetry.d.ts +1 -1
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +2 -2
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/container-runtime-alpha.d.ts +64 -36
- package/lib/container-runtime-beta.d.ts +28 -28
- package/lib/container-runtime-public.d.ts +28 -28
- package/lib/container-runtime-untrimmed.d.ts +68 -39
- package/lib/containerHandleContext.d.ts.map +1 -1
- package/lib/containerHandleContext.js +1 -1
- package/lib/containerHandleContext.js.map +1 -1
- package/lib/containerRuntime.d.ts +12 -8
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +76 -39
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStore.d.ts +1 -1
- package/lib/dataStore.d.ts.map +1 -1
- package/lib/dataStore.js +2 -2
- package/lib/dataStore.js.map +1 -1
- package/lib/dataStoreContext.d.ts +9 -9
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +18 -8
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.d.ts.map +1 -1
- package/lib/dataStoreContexts.js +2 -2
- package/lib/dataStoreContexts.js.map +1 -1
- package/lib/dataStoreRegistry.d.ts +1 -1
- package/lib/dataStoreRegistry.d.ts.map +1 -1
- package/lib/dataStoreRegistry.js +1 -1
- package/lib/dataStoreRegistry.js.map +1 -1
- package/lib/deltaManagerSummarizerProxy.d.ts +1 -1
- package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -1
- package/lib/deltaManagerSummarizerProxy.js.map +1 -1
- package/lib/deltaScheduler.d.ts.map +1 -1
- package/lib/deltaScheduler.js +1 -1
- package/lib/deltaScheduler.js.map +1 -1
- package/lib/error.d.ts +1 -1
- package/lib/error.d.ts.map +1 -1
- package/lib/error.js +2 -2
- package/lib/error.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts +2 -1
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +4 -4
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcConfigs.d.ts +1 -1
- package/lib/gc/gcConfigs.d.ts.map +1 -1
- package/lib/gc/gcConfigs.js +4 -5
- package/lib/gc/gcConfigs.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +3 -2
- package/lib/gc/gcDefinitions.d.ts.map +1 -1
- package/lib/gc/gcDefinitions.js.map +1 -1
- package/lib/gc/gcHelpers.d.ts +5 -1
- package/lib/gc/gcHelpers.d.ts.map +1 -1
- package/lib/gc/gcHelpers.js +10 -2
- package/lib/gc/gcHelpers.js.map +1 -1
- package/lib/gc/gcSummaryStateTracker.d.ts +1 -1
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/lib/gc/gcSummaryStateTracker.js +2 -2
- package/lib/gc/gcSummaryStateTracker.js.map +1 -1
- package/lib/gc/gcTelemetry.d.ts +2 -1
- package/lib/gc/gcTelemetry.d.ts.map +1 -1
- package/lib/gc/gcTelemetry.js +3 -1
- package/lib/gc/gcTelemetry.js.map +1 -1
- package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
- package/lib/gc/gcUnreferencedStateTracker.js +2 -2
- package/lib/gc/gcUnreferencedStateTracker.js.map +1 -1
- package/lib/gc/index.d.ts +1 -1
- package/lib/gc/index.d.ts.map +1 -1
- package/lib/gc/index.js +1 -1
- package/lib/gc/index.js.map +1 -1
- package/lib/messageTypes.d.ts +2 -2
- package/lib/messageTypes.d.ts.map +1 -1
- package/lib/messageTypes.js.map +1 -1
- package/lib/opLifecycle/batchManager.d.ts.map +1 -1
- package/lib/opLifecycle/batchManager.js.map +1 -1
- package/lib/opLifecycle/definitions.d.ts +1 -1
- package/lib/opLifecycle/definitions.d.ts.map +1 -1
- package/lib/opLifecycle/definitions.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js +2 -2
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +2 -2
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/lib/opLifecycle/opGroupingManager.js +2 -2
- package/lib/opLifecycle/opGroupingManager.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts +1 -1
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +2 -2
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +2 -1
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +2 -2
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +2 -2
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/scheduleManager.d.ts.map +1 -1
- package/lib/scheduleManager.js +3 -3
- package/lib/scheduleManager.js.map +1 -1
- package/lib/storageServiceWithAttachBlobs.d.ts +2 -2
- package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -1
- package/lib/storageServiceWithAttachBlobs.js +1 -1
- package/lib/storageServiceWithAttachBlobs.js.map +1 -1
- package/lib/summary/documentSchema.d.ts +37 -6
- package/lib/summary/documentSchema.d.ts.map +1 -1
- package/lib/summary/documentSchema.js +48 -11
- package/lib/summary/documentSchema.js.map +1 -1
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js +2 -2
- package/lib/summary/orderedClientElection.js.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/lib/summary/runningSummarizer.d.ts +1 -1
- package/lib/summary/runningSummarizer.d.ts.map +1 -1
- package/lib/summary/runningSummarizer.js +2 -2
- package/lib/summary/runningSummarizer.js.map +1 -1
- package/lib/summary/summarizer.d.ts +2 -1
- package/lib/summary/summarizer.d.ts.map +1 -1
- package/lib/summary/summarizer.js +2 -2
- package/lib/summary/summarizer.js.map +1 -1
- package/lib/summary/summarizerClientElection.d.ts.map +1 -1
- package/lib/summary/summarizerClientElection.js.map +1 -1
- package/lib/summary/summarizerHeuristics.d.ts.map +1 -1
- package/lib/summary/summarizerHeuristics.js +1 -1
- package/lib/summary/summarizerHeuristics.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.d.ts +2 -1
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.js +4 -4
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.js +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +3 -3
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/lib/summary/summarizerTypes.d.ts +4 -2
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryCollection.js +1 -1
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryFormat.d.ts +1 -1
- package/lib/summary/summaryFormat.d.ts.map +1 -1
- package/lib/summary/summaryFormat.js +3 -3
- package/lib/summary/summaryFormat.js.map +1 -1
- package/lib/summary/summaryGenerator.d.ts +3 -2
- package/lib/summary/summaryGenerator.d.ts.map +1 -1
- package/lib/summary/summaryGenerator.js +3 -3
- package/lib/summary/summaryGenerator.js.map +1 -1
- package/lib/summary/summaryManager.d.ts.map +1 -1
- package/lib/summary/summaryManager.js +9 -8
- package/lib/summary/summaryManager.js.map +1 -1
- package/lib/tsdoc-metadata.json +11 -0
- package/package.json +25 -37
- package/src/batchTracker.ts +3 -2
- package/src/blobManager.ts +87 -56
- package/src/channelCollection.ts +19 -12
- package/src/connectionTelemetry.ts +4 -4
- package/src/containerHandleContext.ts +2 -1
- package/src/containerRuntime.ts +115 -70
- package/src/dataStore.ts +5 -3
- package/src/dataStoreContext.ts +30 -15
- package/src/dataStoreContexts.ts +4 -2
- package/src/dataStoreRegistry.ts +2 -2
- package/src/deltaManagerSummarizerProxy.ts +1 -1
- package/src/deltaScheduler.ts +2 -1
- package/src/error.ts +2 -2
- package/src/gc/garbageCollection.ts +8 -7
- package/src/gc/gcConfigs.ts +5 -8
- package/src/gc/gcDefinitions.ts +4 -4
- package/src/gc/gcHelpers.ts +21 -4
- package/src/gc/gcSummaryStateTracker.ts +5 -3
- package/src/gc/gcTelemetry.ts +7 -1
- package/src/gc/gcUnreferencedStateTracker.ts +3 -2
- package/src/gc/index.ts +1 -0
- package/src/messageTypes.ts +3 -2
- package/src/opLifecycle/batchManager.ts +1 -0
- package/src/opLifecycle/definitions.ts +2 -1
- package/src/opLifecycle/opCompressor.ts +4 -2
- package/src/opLifecycle/opDecompressor.ts +3 -2
- package/src/opLifecycle/opGroupingManager.ts +3 -2
- package/src/opLifecycle/opSplitter.ts +5 -3
- package/src/opLifecycle/outbox.ts +6 -3
- package/src/opLifecycle/remoteMessageProcessor.ts +2 -0
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +4 -4
- package/src/scheduleManager.ts +5 -4
- package/src/storageServiceWithAttachBlobs.ts +2 -2
- package/src/summary/documentSchema.ts +71 -12
- package/src/summary/orderedClientElection.ts +4 -6
- package/src/summary/runWhileConnectedCoordinator.ts +2 -1
- package/src/summary/runningSummarizer.ts +4 -2
- package/src/summary/summarizer.ts +5 -3
- package/src/summary/summarizerClientElection.ts +1 -0
- package/src/summary/summarizerHeuristics.ts +3 -1
- package/src/summary/summarizerNode/summarizerNode.ts +10 -8
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +3 -2
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +14 -6
- package/src/summary/summarizerTypes.ts +6 -2
- package/src/summary/summaryCollection.ts +1 -1
- package/src/summary/summaryFormat.ts +7 -8
- package/src/summary/summaryGenerator.ts +5 -8
- package/src/summary/summaryManager.ts +14 -11
- package/lib/test/batchTracker.spec.js +0 -88
- package/lib/test/batchTracker.spec.js.map +0 -1
- package/lib/test/blobManager.spec.js +0 -835
- package/lib/test/blobManager.spec.js.map +0 -1
- package/lib/test/channelCollection.spec.js +0 -138
- package/lib/test/channelCollection.spec.js.map +0 -1
- package/lib/test/containerRuntime.spec.js +0 -1750
- package/lib/test/containerRuntime.spec.js.map +0 -1
- package/lib/test/dataStoreContext.spec.js +0 -771
- package/lib/test/dataStoreContext.spec.js.map +0 -1
- package/lib/test/dataStoreCreation.spec.js +0 -303
- package/lib/test/dataStoreCreation.spec.js.map +0 -1
- package/lib/test/dataStoreRegistry.spec.js +0 -26
- package/lib/test/dataStoreRegistry.spec.js.map +0 -1
- package/lib/test/documentSchema.spec.js +0 -282
- package/lib/test/documentSchema.spec.js.map +0 -1
- package/lib/test/fuzz/fuzzUtils.js +0 -70
- package/lib/test/fuzz/fuzzUtils.js.map +0 -1
- package/lib/test/fuzz/summarizer.fuzz.spec.js +0 -33
- package/lib/test/fuzz/summarizer.fuzz.spec.js.map +0 -1
- package/lib/test/fuzz/summarizerFuzzMocks.js +0 -180
- package/lib/test/fuzz/summarizerFuzzMocks.js.map +0 -1
- package/lib/test/fuzz/summarizerFuzzSuite.js +0 -109
- package/lib/test/fuzz/summarizerFuzzSuite.js.map +0 -1
- package/lib/test/gc/garbageCollection.spec.js +0 -1464
- package/lib/test/gc/garbageCollection.spec.js.map +0 -1
- package/lib/test/gc/gcConfigs.spec.js +0 -689
- package/lib/test/gc/gcConfigs.spec.js.map +0 -1
- package/lib/test/gc/gcHelpers.spec.js +0 -110
- package/lib/test/gc/gcHelpers.spec.js.map +0 -1
- package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +0 -68
- package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +0 -1
- package/lib/test/gc/gcStats.spec.js +0 -390
- package/lib/test/gc/gcStats.spec.js.map +0 -1
- package/lib/test/gc/gcSummaryStateTracker.spec.js +0 -228
- package/lib/test/gc/gcSummaryStateTracker.spec.js.map +0 -1
- package/lib/test/gc/gcTelemetry.spec.js +0 -530
- package/lib/test/gc/gcTelemetry.spec.js.map +0 -1
- package/lib/test/gc/gcUnitTestHelpers.js +0 -29
- package/lib/test/gc/gcUnitTestHelpers.js.map +0 -1
- package/lib/test/gc/gcUnreferencedStateTracker.spec.js +0 -192
- package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +0 -1
- package/lib/test/getPendingBlobs.spec.js +0 -193
- package/lib/test/getPendingBlobs.spec.js.map +0 -1
- package/lib/test/hardwareStats.spec.js +0 -93
- package/lib/test/hardwareStats.spec.js.map +0 -1
- package/lib/test/index.js +0 -6
- package/lib/test/index.js.map +0 -1
- package/lib/test/opLifecycle/OpGroupingManager.spec.js +0 -202
- package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +0 -1
- package/lib/test/opLifecycle/batchManager.spec.js +0 -189
- package/lib/test/opLifecycle/batchManager.spec.js.map +0 -1
- package/lib/test/opLifecycle/opCompressor.spec.js +0 -73
- package/lib/test/opLifecycle/opCompressor.spec.js.map +0 -1
- package/lib/test/opLifecycle/opDecompressor.spec.js +0 -223
- package/lib/test/opLifecycle/opDecompressor.spec.js.map +0 -1
- package/lib/test/opLifecycle/opSplitter.spec.js +0 -287
- package/lib/test/opLifecycle/opSplitter.spec.js.map +0 -1
- package/lib/test/opLifecycle/outbox.spec.js +0 -783
- package/lib/test/opLifecycle/outbox.spec.js.map +0 -1
- package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +0 -220
- package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +0 -1
- package/lib/test/pendingStateManager.spec.js +0 -329
- package/lib/test/pendingStateManager.spec.js.map +0 -1
- package/lib/test/scheduleManager.spec.js +0 -270
- package/lib/test/scheduleManager.spec.js.map +0 -1
- package/lib/test/summarizerNode.spec.js +0 -326
- package/lib/test/summarizerNode.spec.js.map +0 -1
- package/lib/test/summarizerNodeWithGc.spec.js +0 -318
- package/lib/test/summarizerNodeWithGc.spec.js.map +0 -1
- package/lib/test/summary/orderedClientElection.spec.js +0 -535
- package/lib/test/summary/orderedClientElection.spec.js.map +0 -1
- package/lib/test/summary/runningSummarizer.spec.js +0 -1349
- package/lib/test/summary/runningSummarizer.spec.js.map +0 -1
- package/lib/test/summary/summarizer.spec.js +0 -29
- package/lib/test/summary/summarizer.spec.js.map +0 -1
- package/lib/test/summary/summarizerClientElection.spec.js +0 -436
- package/lib/test/summary/summarizerClientElection.spec.js.map +0 -1
- package/lib/test/summary/summarizerHeuristics.spec.js +0 -289
- package/lib/test/summary/summarizerHeuristics.spec.js.map +0 -1
- package/lib/test/summary/summaryCollection.spec.js +0 -200
- package/lib/test/summary/summaryCollection.spec.js.map +0 -1
- package/lib/test/summary/summaryManager.spec.js +0 -430
- package/lib/test/summary/summaryManager.spec.js.map +0 -1
- package/lib/test/summary/testQuorumClients.js +0 -34
- package/lib/test/summary/testQuorumClients.js.map +0 -1
- package/lib/test/throttler.spec.js +0 -175
- package/lib/test/throttler.spec.js.map +0 -1
- package/lib/test/types/validateContainerRuntimePrevious.generated.js +0 -182
- package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +0 -1
package/src/containerRuntime.ts
CHANGED
|
@@ -7,19 +7,21 @@ import { Trace, TypedEventEmitter } from "@fluid-internal/client-utils";
|
|
|
7
7
|
import {
|
|
8
8
|
AttachState,
|
|
9
9
|
IAudience,
|
|
10
|
-
IBatchMessage,
|
|
11
|
-
IContainerContext,
|
|
12
10
|
ICriticalContainerError,
|
|
13
11
|
IDeltaManager,
|
|
12
|
+
} from "@fluidframework/container-definitions";
|
|
13
|
+
import {
|
|
14
|
+
IBatchMessage,
|
|
15
|
+
IContainerContext,
|
|
14
16
|
IGetPendingLocalStateProps,
|
|
15
17
|
ILoader,
|
|
16
18
|
IRuntime,
|
|
17
19
|
LoaderHeader,
|
|
18
|
-
} from "@fluidframework/container-definitions";
|
|
20
|
+
} from "@fluidframework/container-definitions/internal";
|
|
19
21
|
import {
|
|
20
22
|
IContainerRuntime,
|
|
21
23
|
IContainerRuntimeEvents,
|
|
22
|
-
} from "@fluidframework/container-runtime-definitions";
|
|
24
|
+
} from "@fluidframework/container-runtime-definitions/internal";
|
|
23
25
|
import {
|
|
24
26
|
FluidObject,
|
|
25
27
|
IFluidHandle,
|
|
@@ -27,24 +29,30 @@ import {
|
|
|
27
29
|
IProvideFluidHandleContext,
|
|
28
30
|
IRequest,
|
|
29
31
|
IResponse,
|
|
30
|
-
ISignalEnvelope,
|
|
31
32
|
ITelemetryBaseLogger,
|
|
32
33
|
} from "@fluidframework/core-interfaces";
|
|
33
|
-
import {
|
|
34
|
+
import { ISignalEnvelope } from "@fluidframework/core-interfaces/internal";
|
|
35
|
+
import {
|
|
36
|
+
assert,
|
|
37
|
+
Deferred,
|
|
38
|
+
LazyPromise,
|
|
39
|
+
PromiseCache,
|
|
40
|
+
delay,
|
|
41
|
+
} from "@fluidframework/core-utils/internal";
|
|
34
42
|
import {
|
|
35
43
|
DriverHeader,
|
|
36
44
|
FetchSource,
|
|
37
45
|
IDocumentStorageService,
|
|
38
46
|
type ISnapshot,
|
|
39
|
-
} from "@fluidframework/driver-definitions";
|
|
40
|
-
import { readAndParse } from "@fluidframework/driver-utils";
|
|
47
|
+
} from "@fluidframework/driver-definitions/internal";
|
|
48
|
+
import { readAndParse } from "@fluidframework/driver-utils/internal";
|
|
49
|
+
import type { IIdCompressor } from "@fluidframework/id-compressor";
|
|
41
50
|
import type {
|
|
42
|
-
IIdCompressor,
|
|
43
51
|
IIdCompressorCore,
|
|
44
52
|
IdCreationRange,
|
|
45
53
|
SerializedIdCompressorWithNoSession,
|
|
46
54
|
SerializedIdCompressorWithOngoingSession,
|
|
47
|
-
} from "@fluidframework/id-compressor";
|
|
55
|
+
} from "@fluidframework/id-compressor/internal";
|
|
48
56
|
import {
|
|
49
57
|
IClientDetails,
|
|
50
58
|
IDocumentMessage,
|
|
@@ -57,6 +65,12 @@ import {
|
|
|
57
65
|
MessageType,
|
|
58
66
|
SummaryType,
|
|
59
67
|
} from "@fluidframework/protocol-definitions";
|
|
68
|
+
import {
|
|
69
|
+
IGarbageCollectionData,
|
|
70
|
+
IInboundSignalMessage,
|
|
71
|
+
ISummaryTreeWithStats,
|
|
72
|
+
ITelemetryContext,
|
|
73
|
+
} from "@fluidframework/runtime-definitions";
|
|
60
74
|
import {
|
|
61
75
|
CreateChildSummarizerNodeParam,
|
|
62
76
|
FlushMode,
|
|
@@ -65,17 +79,13 @@ import {
|
|
|
65
79
|
IEnvelope,
|
|
66
80
|
IFluidDataStoreContextDetached,
|
|
67
81
|
IFluidDataStoreRegistry,
|
|
68
|
-
IGarbageCollectionData,
|
|
69
|
-
IInboundSignalMessage,
|
|
70
82
|
ISummarizeInternalResult,
|
|
71
|
-
ISummaryTreeWithStats,
|
|
72
|
-
ITelemetryContext,
|
|
73
83
|
InboundAttachMessage,
|
|
74
84
|
NamedFluidDataStoreRegistryEntries,
|
|
75
85
|
SummarizeInternalFn,
|
|
76
86
|
channelsTreeName,
|
|
77
87
|
gcTreeKey,
|
|
78
|
-
} from "@fluidframework/runtime-definitions";
|
|
88
|
+
} from "@fluidframework/runtime-definitions/internal";
|
|
79
89
|
import {
|
|
80
90
|
GCDataBuilder,
|
|
81
91
|
ReadAndParseBlob,
|
|
@@ -88,17 +98,20 @@ import {
|
|
|
88
98
|
exceptionToResponse,
|
|
89
99
|
responseToException,
|
|
90
100
|
seqFromTree,
|
|
91
|
-
} from "@fluidframework/runtime-utils";
|
|
101
|
+
} from "@fluidframework/runtime-utils/internal";
|
|
102
|
+
import {
|
|
103
|
+
type ITelemetryGenericEventExt,
|
|
104
|
+
ITelemetryLoggerExt,
|
|
105
|
+
} from "@fluidframework/telemetry-utils";
|
|
92
106
|
import {
|
|
93
107
|
DataCorruptionError,
|
|
94
108
|
DataProcessingError,
|
|
95
109
|
GenericError,
|
|
96
110
|
IEventSampler,
|
|
97
|
-
type ITelemetryGenericEventExt,
|
|
98
|
-
ITelemetryLoggerExt,
|
|
99
111
|
LoggingError,
|
|
100
112
|
MonitoringContext,
|
|
101
113
|
PerformanceEvent,
|
|
114
|
+
// eslint-disable-next-line import/no-deprecated
|
|
102
115
|
TaggedLoggerAdapter,
|
|
103
116
|
UsageError,
|
|
104
117
|
createChildLogger,
|
|
@@ -107,8 +120,9 @@ import {
|
|
|
107
120
|
loggerToMonitoringContext,
|
|
108
121
|
raiseConnectedEvent,
|
|
109
122
|
wrapError,
|
|
110
|
-
} from "@fluidframework/telemetry-utils";
|
|
123
|
+
} from "@fluidframework/telemetry-utils/internal";
|
|
111
124
|
import { v4 as uuid } from "uuid";
|
|
125
|
+
|
|
112
126
|
import { BindBatchTracker } from "./batchTracker.js";
|
|
113
127
|
import { BlobManager, IBlobManagerLoadInfo, IPendingBlobs } from "./blobManager.js";
|
|
114
128
|
import { ChannelCollection, getSummaryForDatastores, wrapContext } from "./channelCollection.js";
|
|
@@ -163,7 +177,6 @@ import {
|
|
|
163
177
|
IConnectableRuntime,
|
|
164
178
|
IContainerRuntimeMetadata,
|
|
165
179
|
ICreateContainerMetadata,
|
|
166
|
-
IDocumentSchemaChangeMessage,
|
|
167
180
|
type IDocumentSchemaCurrent,
|
|
168
181
|
IEnqueueSummarizeOptions,
|
|
169
182
|
IGenerateSummaryTreeResult,
|
|
@@ -770,6 +783,7 @@ export class ContainerRuntime
|
|
|
770
783
|
const backCompatContext: IContainerContext | OldContainerContextWithLogger = context;
|
|
771
784
|
const passLogger =
|
|
772
785
|
backCompatContext.taggedLogger ??
|
|
786
|
+
// eslint-disable-next-line import/no-deprecated
|
|
773
787
|
new TaggedLoggerAdapter((backCompatContext as OldContainerContextWithLogger).logger);
|
|
774
788
|
const logger = createChildLogger({
|
|
775
789
|
logger: passLogger,
|
|
@@ -868,6 +882,19 @@ export class ContainerRuntime
|
|
|
868
882
|
}
|
|
869
883
|
}
|
|
870
884
|
|
|
885
|
+
let desiredIdCompressorMode: IdCompressorMode;
|
|
886
|
+
switch (mc.config.getBoolean("Fluid.ContainerRuntime.IdCompressorEnabled")) {
|
|
887
|
+
case true:
|
|
888
|
+
desiredIdCompressorMode = "on";
|
|
889
|
+
break;
|
|
890
|
+
case false:
|
|
891
|
+
desiredIdCompressorMode = undefined;
|
|
892
|
+
break;
|
|
893
|
+
default:
|
|
894
|
+
desiredIdCompressorMode = enableRuntimeIdCompressor;
|
|
895
|
+
break;
|
|
896
|
+
}
|
|
897
|
+
|
|
871
898
|
// Enabling the IdCompressor is a one-way operation and we only want to
|
|
872
899
|
// allow new containers to turn it on.
|
|
873
900
|
let idCompressorMode: IdCompressorMode;
|
|
@@ -879,28 +906,24 @@ export class ContainerRuntime
|
|
|
879
906
|
// 3) Same logic applies for "delayed" mode
|
|
880
907
|
// Maybe in the future we will need to enabled (and figure how to do it safely) "delayed" -> "on" change.
|
|
881
908
|
// We could do "off" -> "on" transition too, if all clients start loading compressor (but not using it initially) and
|
|
882
|
-
// do so for a while - this will allow clients to eventually
|
|
909
|
+
// do so for a while - this will allow clients to eventually disregard "off" setting (when it's safe so) and start
|
|
883
910
|
// using compressor in future sessions.
|
|
884
911
|
// Everyting is possible, but it needs to be designed and executed carefully, when such need arises.
|
|
885
912
|
idCompressorMode = metadata?.documentSchema?.runtime
|
|
886
913
|
?.idCompressorMode as IdCompressorMode;
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
case false:
|
|
893
|
-
idCompressorMode = undefined;
|
|
894
|
-
break;
|
|
895
|
-
default:
|
|
896
|
-
idCompressorMode = enableRuntimeIdCompressor;
|
|
897
|
-
break;
|
|
914
|
+
|
|
915
|
+
// This is the only exception to the rule above - we have proper plumbing to load ID compressor on schema change
|
|
916
|
+
// event. It is loaded async (relative to op processing), so this conversion is only safe for off -> delayed conversion!
|
|
917
|
+
if (idCompressorMode === undefined && desiredIdCompressorMode === "delayed") {
|
|
918
|
+
idCompressorMode = desiredIdCompressorMode;
|
|
898
919
|
}
|
|
920
|
+
} else {
|
|
921
|
+
idCompressorMode = desiredIdCompressorMode;
|
|
899
922
|
}
|
|
900
923
|
|
|
901
924
|
const createIdCompressorFn = async () => {
|
|
902
925
|
const { createIdCompressor, deserializeIdCompressor, createSessionId } = await import(
|
|
903
|
-
"@fluidframework/id-compressor"
|
|
926
|
+
"@fluidframework/id-compressor/internal"
|
|
904
927
|
);
|
|
905
928
|
|
|
906
929
|
/**
|
|
@@ -956,6 +979,7 @@ export class ContainerRuntime
|
|
|
956
979
|
compressionLz4,
|
|
957
980
|
idCompressorMode,
|
|
958
981
|
opGroupingEnabled,
|
|
982
|
+
disallowedVersions: [],
|
|
959
983
|
},
|
|
960
984
|
(schema) => {
|
|
961
985
|
runtime.onSchemaChange(schema);
|
|
@@ -1001,6 +1025,17 @@ export class ContainerRuntime
|
|
|
1001
1025
|
undefined, // summaryConfiguration
|
|
1002
1026
|
);
|
|
1003
1027
|
|
|
1028
|
+
runtime.blobManager.trackPendingStashedUploads().then(
|
|
1029
|
+
() => {
|
|
1030
|
+
// make sure we didn't reconnect before the promise resolved
|
|
1031
|
+
if (runtime.delayConnectClientId !== undefined && !runtime.disposed) {
|
|
1032
|
+
runtime.delayConnectClientId = undefined;
|
|
1033
|
+
runtime.setConnectionStateCore(true, runtime.delayConnectClientId);
|
|
1034
|
+
}
|
|
1035
|
+
},
|
|
1036
|
+
(error) => runtime.closeFn(error),
|
|
1037
|
+
);
|
|
1038
|
+
|
|
1004
1039
|
// Apply stashed ops with a reference sequence number equal to the sequence number of the snapshot,
|
|
1005
1040
|
// or zero. This must be done before Container replays saved ops.
|
|
1006
1041
|
await runtime.pendingStateManager.applyStashedOpsAt(runtimeSequenceNumber ?? 0);
|
|
@@ -1581,7 +1616,7 @@ export class ContainerRuntime
|
|
|
1581
1616
|
// Due to a mismatch between different layers in terms of
|
|
1582
1617
|
// what is the interface of passing signals, we need the
|
|
1583
1618
|
// downstream stores to wrap the signal.
|
|
1584
|
-
parentContext.submitSignal = (type: string, content:
|
|
1619
|
+
parentContext.submitSignal = (type: string, content: unknown, targetClientId?: string) => {
|
|
1585
1620
|
const envelope1 = content as IEnvelope;
|
|
1586
1621
|
const envelope2 = this.createNewSignalEnvelope(
|
|
1587
1622
|
envelope1.address,
|
|
@@ -1616,11 +1651,11 @@ export class ContainerRuntime
|
|
|
1616
1651
|
async (runtime: ChannelCollection) => provideEntryPoint,
|
|
1617
1652
|
);
|
|
1618
1653
|
|
|
1619
|
-
this.blobManager = new BlobManager(
|
|
1620
|
-
this.handleContext,
|
|
1621
|
-
blobManagerSnapshot,
|
|
1622
|
-
() => this.storage,
|
|
1623
|
-
(localId: string, blobId?: string) => {
|
|
1654
|
+
this.blobManager = new BlobManager({
|
|
1655
|
+
routeContext: this.handleContext,
|
|
1656
|
+
snapshot: blobManagerSnapshot,
|
|
1657
|
+
getStorage: () => this.storage,
|
|
1658
|
+
sendBlobAttachOp: (localId: string, blobId?: string) => {
|
|
1624
1659
|
if (!this.disposed) {
|
|
1625
1660
|
this.submit(
|
|
1626
1661
|
{ type: ContainerMessageType.BlobAttach, contents: undefined },
|
|
@@ -1632,12 +1667,13 @@ export class ContainerRuntime
|
|
|
1632
1667
|
);
|
|
1633
1668
|
}
|
|
1634
1669
|
},
|
|
1635
|
-
(blobPath: string) =>
|
|
1636
|
-
|
|
1637
|
-
this,
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1670
|
+
blobRequested: (blobPath: string) =>
|
|
1671
|
+
this.garbageCollector.nodeUpdated(blobPath, "Loaded"),
|
|
1672
|
+
isBlobDeleted: (blobPath: string) => this.garbageCollector.isNodeDeleted(blobPath),
|
|
1673
|
+
runtime: this,
|
|
1674
|
+
stashedBlobs: pendingRuntimeState?.pendingAttachmentBlobs,
|
|
1675
|
+
closeContainer: (error?: ICriticalContainerError) => this.closeFn(error),
|
|
1676
|
+
});
|
|
1641
1677
|
|
|
1642
1678
|
this.scheduleManager = new ScheduleManager(
|
|
1643
1679
|
this.innerDeltaManager,
|
|
@@ -2314,6 +2350,15 @@ export class ContainerRuntime
|
|
|
2314
2350
|
case ContainerMessageType.Alias:
|
|
2315
2351
|
return this.channelCollection.applyStashedOp(opContents);
|
|
2316
2352
|
case ContainerMessageType.IdAllocation:
|
|
2353
|
+
// IDs allocation ops in stashed state are ignored because the tip state of the compressor
|
|
2354
|
+
// is serialized into the pending state. This is done because generation of new IDs during
|
|
2355
|
+
// stashed op application (or, later, resubmit) must generate new IDs and if the compressor
|
|
2356
|
+
// was loaded from a state serialized at the same time as the summary tree in the stashed state
|
|
2357
|
+
// then it would generate IDs that collide with any in later stashed ops.
|
|
2358
|
+
// In the future, IdCompressor could be extended to have an "applyStashedOp" or similar method
|
|
2359
|
+
// and the runtime could filter out all ID allocation ops from the stashed state and apply them
|
|
2360
|
+
// before applying the rest of the stashed ops. This would accomplish the same thing but with
|
|
2361
|
+
// better performance in future incremental stashed state creation.
|
|
2317
2362
|
assert(
|
|
2318
2363
|
this.idCompressorMode !== undefined,
|
|
2319
2364
|
0x8f1 /* ID compressor should be in use */,
|
|
@@ -2365,6 +2410,7 @@ export class ContainerRuntime
|
|
|
2365
2410
|
this._loadIdCompressor = this.createIdCompressor()
|
|
2366
2411
|
.then((compressor) => {
|
|
2367
2412
|
this._idCompressor = compressor;
|
|
2413
|
+
// Finalize any ranges we received while the compressor was turned off.
|
|
2368
2414
|
for (const range of this.pendingIdCompressorOps) {
|
|
2369
2415
|
this._idCompressor.finalizeCreationRange(range);
|
|
2370
2416
|
}
|
|
@@ -2400,23 +2446,13 @@ export class ContainerRuntime
|
|
|
2400
2446
|
// propagation of the "connected" event until we have uploaded them to
|
|
2401
2447
|
// ensure we don't submit ops referencing a blob that has not been uploaded
|
|
2402
2448
|
const connecting = connected && !this._connected;
|
|
2403
|
-
if (connecting && this.blobManager.
|
|
2449
|
+
if (connecting && this.blobManager.hasPendingStashedUploads()) {
|
|
2404
2450
|
assert(
|
|
2405
2451
|
!this.delayConnectClientId,
|
|
2406
2452
|
0x791 /* Connect event delay must be canceled before subsequent connect event */,
|
|
2407
2453
|
);
|
|
2408
2454
|
assert(!!clientId, 0x792 /* Must have clientId when connecting */);
|
|
2409
2455
|
this.delayConnectClientId = clientId;
|
|
2410
|
-
this.blobManager.processStashedChanges().then(
|
|
2411
|
-
() => {
|
|
2412
|
-
// make sure we didn't reconnect before the promise resolved
|
|
2413
|
-
if (this.delayConnectClientId === clientId && !this.disposed) {
|
|
2414
|
-
this.delayConnectClientId = undefined;
|
|
2415
|
-
this.setConnectionStateCore(connected, clientId);
|
|
2416
|
-
}
|
|
2417
|
-
},
|
|
2418
|
-
(error) => this.closeFn(error),
|
|
2419
|
-
);
|
|
2420
2456
|
return;
|
|
2421
2457
|
}
|
|
2422
2458
|
|
|
@@ -2612,7 +2648,13 @@ export class ContainerRuntime
|
|
|
2612
2648
|
)
|
|
2613
2649
|
) {
|
|
2614
2650
|
const range = messageWithContext.message.contents;
|
|
2651
|
+
// Some other client turned on the id compressor. If we have not turned it on,
|
|
2652
|
+
// put it in a pending queue and delay finalization.
|
|
2615
2653
|
if (this._idCompressor === undefined) {
|
|
2654
|
+
assert(
|
|
2655
|
+
this.idCompressorMode !== undefined,
|
|
2656
|
+
"id compressor should be enabled",
|
|
2657
|
+
);
|
|
2616
2658
|
this.pendingIdCompressorOps.push(range);
|
|
2617
2659
|
} else {
|
|
2618
2660
|
this._idCompressor.finalizeCreationRange(range);
|
|
@@ -2991,10 +3033,10 @@ export class ContainerRuntime
|
|
|
2991
3033
|
/**
|
|
2992
3034
|
* Submits the signal to be sent to other clients.
|
|
2993
3035
|
* @param type - Type of the signal.
|
|
2994
|
-
* @param content - Content of the signal.
|
|
3036
|
+
* @param content - Content of the signal. Should be a JSON serializable object or primitive.
|
|
2995
3037
|
* @param targetClientId - When specified, the signal is only sent to the provided client id.
|
|
2996
3038
|
*/
|
|
2997
|
-
public submitSignal(type: string, content:
|
|
3039
|
+
public submitSignal(type: string, content: unknown, targetClientId?: string) {
|
|
2998
3040
|
this.verifyNotClosed();
|
|
2999
3041
|
const envelope = this.createNewSignalEnvelope(undefined /* address */, type, content);
|
|
3000
3042
|
return this.submitSignalFn(envelope, targetClientId);
|
|
@@ -3039,6 +3081,10 @@ export class ContainerRuntime
|
|
|
3039
3081
|
// We can finalize any allocated IDs since we're the only client
|
|
3040
3082
|
const idRange = this._idCompressor?.takeNextCreationRange();
|
|
3041
3083
|
if (idRange !== undefined) {
|
|
3084
|
+
assert(
|
|
3085
|
+
idRange.ids === undefined || idRange.ids.firstGenCount === 1,
|
|
3086
|
+
"No other ranges should be taken while container is detached.",
|
|
3087
|
+
);
|
|
3042
3088
|
this._idCompressor?.finalizeCreationRange(idRange);
|
|
3043
3089
|
}
|
|
3044
3090
|
|
|
@@ -3866,18 +3912,17 @@ export class ContainerRuntime
|
|
|
3866
3912
|
// Allow document schema controller to send a message if it needs to propose change in document schema.
|
|
3867
3913
|
// If it needs to send a message, it will call provided callback with payload of such message and rely
|
|
3868
3914
|
// on this callback to do actual sending.
|
|
3869
|
-
this.documentsSchemaController.
|
|
3870
|
-
|
|
3871
|
-
|
|
3872
|
-
|
|
3873
|
-
|
|
3874
|
-
|
|
3875
|
-
|
|
3876
|
-
|
|
3877
|
-
|
|
3878
|
-
|
|
3879
|
-
|
|
3880
|
-
);
|
|
3915
|
+
const contents = this.documentsSchemaController.maybeSendSchemaMessage();
|
|
3916
|
+
if (contents) {
|
|
3917
|
+
const msg: ContainerRuntimeDocumentSchemaMessage = {
|
|
3918
|
+
type: ContainerMessageType.DocumentSchemaChange,
|
|
3919
|
+
contents,
|
|
3920
|
+
};
|
|
3921
|
+
this.outbox.submit({
|
|
3922
|
+
contents: JSON.stringify(msg),
|
|
3923
|
+
referenceSequenceNumber: this.deltaManager.lastSequenceNumber,
|
|
3924
|
+
});
|
|
3925
|
+
}
|
|
3881
3926
|
|
|
3882
3927
|
// If this is attach message for new data store, and we are in a batch, send this op out of order
|
|
3883
3928
|
// Is it safe:
|
package/src/dataStore.ts
CHANGED
|
@@ -5,13 +5,15 @@
|
|
|
5
5
|
|
|
6
6
|
import { AttachState } from "@fluidframework/container-definitions";
|
|
7
7
|
import { FluidObject, IFluidHandle } from "@fluidframework/core-interfaces";
|
|
8
|
-
import { assert, unreachableCase } from "@fluidframework/core-utils";
|
|
8
|
+
import { assert, unreachableCase } from "@fluidframework/core-utils/internal";
|
|
9
9
|
import {
|
|
10
10
|
AliasResult,
|
|
11
11
|
IDataStore,
|
|
12
12
|
IFluidDataStoreChannel,
|
|
13
|
-
} from "@fluidframework/runtime-definitions";
|
|
14
|
-
import { ITelemetryLoggerExt
|
|
13
|
+
} from "@fluidframework/runtime-definitions/internal";
|
|
14
|
+
import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
|
|
15
|
+
import { TelemetryDataTag, UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
16
|
+
|
|
15
17
|
import { ChannelCollection } from "./channelCollection.js";
|
|
16
18
|
import { ContainerMessageType } from "./messageTypes.js";
|
|
17
19
|
|
package/src/dataStoreContext.ts
CHANGED
|
@@ -8,15 +8,15 @@ import { AttachState, IAudience, IDeltaManager } from "@fluidframework/container
|
|
|
8
8
|
import {
|
|
9
9
|
FluidObject,
|
|
10
10
|
IDisposable,
|
|
11
|
+
IEvent,
|
|
11
12
|
IFluidHandle,
|
|
12
13
|
IRequest,
|
|
13
14
|
IResponse,
|
|
14
15
|
ITelemetryBaseProperties,
|
|
15
16
|
} from "@fluidframework/core-interfaces";
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import { BlobTreeEntry, readAndParse } from "@fluidframework/driver-utils";
|
|
17
|
+
import { assert, LazyPromise, unreachableCase } from "@fluidframework/core-utils/internal";
|
|
18
|
+
import { IDocumentStorageService } from "@fluidframework/driver-definitions/internal";
|
|
19
|
+
import { BlobTreeEntry, readAndParse } from "@fluidframework/driver-utils/internal";
|
|
20
20
|
import type { IIdCompressor } from "@fluidframework/id-compressor";
|
|
21
21
|
import {
|
|
22
22
|
IClientDetails,
|
|
@@ -26,6 +26,12 @@ import {
|
|
|
26
26
|
ISnapshotTree,
|
|
27
27
|
ITreeEntry,
|
|
28
28
|
} from "@fluidframework/protocol-definitions";
|
|
29
|
+
import {
|
|
30
|
+
IGarbageCollectionData,
|
|
31
|
+
IInboundSignalMessage,
|
|
32
|
+
ISummaryTreeWithStats,
|
|
33
|
+
ITelemetryContext,
|
|
34
|
+
} from "@fluidframework/runtime-definitions";
|
|
29
35
|
import {
|
|
30
36
|
CreateChildSummarizerNodeFn,
|
|
31
37
|
CreateChildSummarizerNodeParam,
|
|
@@ -37,20 +43,16 @@ import {
|
|
|
37
43
|
IFluidDataStoreContextDetached,
|
|
38
44
|
IFluidDataStoreRegistry,
|
|
39
45
|
IFluidParentContext,
|
|
40
|
-
IGarbageCollectionData,
|
|
41
46
|
IGarbageCollectionDetailsBase,
|
|
42
|
-
IInboundSignalMessage,
|
|
43
47
|
IProvideFluidDataStoreFactory,
|
|
44
48
|
ISummarizeInternalResult,
|
|
45
49
|
ISummarizeResult,
|
|
46
50
|
ISummarizerNodeWithGC,
|
|
47
|
-
ISummaryTreeWithStats,
|
|
48
|
-
ITelemetryContext,
|
|
49
51
|
SummarizeInternalFn,
|
|
50
52
|
channelsTreeName,
|
|
51
53
|
gcDataBlobKey,
|
|
52
|
-
} from "@fluidframework/runtime-definitions";
|
|
53
|
-
import { addBlobToSummary } from "@fluidframework/runtime-utils";
|
|
54
|
+
} from "@fluidframework/runtime-definitions/internal";
|
|
55
|
+
import { addBlobToSummary } from "@fluidframework/runtime-utils/internal";
|
|
54
56
|
import {
|
|
55
57
|
DataCorruptionError,
|
|
56
58
|
DataProcessingError,
|
|
@@ -61,7 +63,8 @@ import {
|
|
|
61
63
|
extractSafePropertiesFromMessage,
|
|
62
64
|
generateStack,
|
|
63
65
|
tagCodeArtifacts,
|
|
64
|
-
} from "@fluidframework/telemetry-utils";
|
|
66
|
+
} from "@fluidframework/telemetry-utils/internal";
|
|
67
|
+
|
|
65
68
|
import { detectOutboundRoutesViaDDSKey, sendGCUnexpectedUsageEvent } from "./gc/index.js";
|
|
66
69
|
import {
|
|
67
70
|
ReadFluidDataStoreAttributes,
|
|
@@ -268,8 +271,20 @@ export abstract class FluidDataStoreContext
|
|
|
268
271
|
* 2. is root as part of the base snapshot that the datastore loaded from
|
|
269
272
|
* @returns whether a datastore is root
|
|
270
273
|
*/
|
|
271
|
-
public async isRoot(): Promise<boolean> {
|
|
272
|
-
|
|
274
|
+
public async isRoot(aliasedDataStores?: Set<string>): Promise<boolean> {
|
|
275
|
+
if (this.isInMemoryRoot()) {
|
|
276
|
+
return true;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// This if is a performance optimization.
|
|
280
|
+
// We know that if the base snapshot is omitted, then the isRootDataStore flag is not set.
|
|
281
|
+
// That means we can skip the expensive call to getInitialSnapshotDetails for virtualized datastores,
|
|
282
|
+
// and get the information from the alias map directly.
|
|
283
|
+
if (aliasedDataStores !== undefined && this.baseSnapshot?.omitted === true) {
|
|
284
|
+
return aliasedDataStores.has(this.id);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
return (await this.getInitialSnapshotDetails()).isRootDataStore;
|
|
273
288
|
}
|
|
274
289
|
|
|
275
290
|
/**
|
|
@@ -799,10 +814,10 @@ export abstract class FluidDataStoreContext
|
|
|
799
814
|
/**
|
|
800
815
|
* Submits the signal to be sent to other clients.
|
|
801
816
|
* @param type - Type of the signal.
|
|
802
|
-
* @param content - Content of the signal.
|
|
817
|
+
* @param content - Content of the signal. Should be a JSON serializable object or primitive.
|
|
803
818
|
* @param targetClientId - When specified, the signal is only sent to the provided client id.
|
|
804
819
|
*/
|
|
805
|
-
public submitSignal(type: string, content:
|
|
820
|
+
public submitSignal(type: string, content: unknown, targetClientId?: string) {
|
|
806
821
|
this.verifyNotClosed("submitSignal");
|
|
807
822
|
|
|
808
823
|
assert(!!this.channel, 0x147 /* "Channel must exist on submitting signal" */);
|
package/src/dataStoreContexts.ts
CHANGED
|
@@ -4,8 +4,10 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { IDisposable, ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
|
|
7
|
-
import { assert, Deferred, Lazy } from "@fluidframework/core-utils";
|
|
8
|
-
import { ITelemetryLoggerExt
|
|
7
|
+
import { assert, Deferred, Lazy } from "@fluidframework/core-utils/internal";
|
|
8
|
+
import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
|
|
9
|
+
import { createChildLogger } from "@fluidframework/telemetry-utils/internal";
|
|
10
|
+
|
|
9
11
|
import { FluidDataStoreContext, LocalFluidDataStoreContext } from "./dataStoreContext.js";
|
|
10
12
|
|
|
11
13
|
/** @internal */
|
package/src/dataStoreRegistry.ts
CHANGED
|
@@ -7,8 +7,8 @@ import {
|
|
|
7
7
|
FluidDataStoreRegistryEntry,
|
|
8
8
|
IFluidDataStoreRegistry,
|
|
9
9
|
NamedFluidDataStoreRegistryEntries,
|
|
10
|
-
} from "@fluidframework/runtime-definitions";
|
|
11
|
-
import { UsageError } from "@fluidframework/telemetry-utils";
|
|
10
|
+
} from "@fluidframework/runtime-definitions/internal";
|
|
11
|
+
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* @internal
|
|
@@ -139,7 +139,7 @@ export class DeltaManagerSummarizerProxy
|
|
|
139
139
|
this.deltaManager.off("readonly", this.onReadonly);
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
public submitSignal(content:
|
|
142
|
+
public submitSignal(content: string, targetClientId?: string): void {
|
|
143
143
|
return this.deltaManager.submitSignal(content, targetClientId);
|
|
144
144
|
}
|
|
145
145
|
|
package/src/deltaScheduler.ts
CHANGED
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
import { performance } from "@fluid-internal/client-utils";
|
|
7
7
|
import { IDeltaManager } from "@fluidframework/container-definitions";
|
|
8
8
|
import { IDocumentMessage, ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
|
|
9
|
-
import { ITelemetryLoggerExt
|
|
9
|
+
import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
|
|
10
|
+
import { formatTick } from "@fluidframework/telemetry-utils/internal";
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* DeltaScheduler is responsible for the scheduling of inbound delta queue in cases where there
|
package/src/error.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { ContainerErrorTypes } from "@fluidframework/container-definitions";
|
|
7
|
-
import { IFluidErrorBase, LoggingError } from "@fluidframework/telemetry-utils";
|
|
6
|
+
import { ContainerErrorTypes } from "@fluidframework/container-definitions/internal";
|
|
7
|
+
import { IFluidErrorBase, LoggingError } from "@fluidframework/telemetry-utils/internal";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Error indicating that a client's session has reached its time limit and is closed.
|
|
@@ -4,24 +4,24 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { IRequest } from "@fluidframework/core-interfaces";
|
|
7
|
-
import { assert, LazyPromise, Timer } from "@fluidframework/core-utils";
|
|
7
|
+
import { assert, LazyPromise, Timer } from "@fluidframework/core-utils/internal";
|
|
8
|
+
import { IGarbageCollectionData, ITelemetryContext } from "@fluidframework/runtime-definitions";
|
|
8
9
|
import {
|
|
9
|
-
IGarbageCollectionData,
|
|
10
10
|
IGarbageCollectionDetailsBase,
|
|
11
11
|
ISummarizeResult,
|
|
12
|
-
ITelemetryContext,
|
|
13
12
|
gcTreeKey,
|
|
14
|
-
} from "@fluidframework/runtime-definitions";
|
|
15
|
-
import { createResponseError, responseToException } from "@fluidframework/runtime-utils";
|
|
13
|
+
} from "@fluidframework/runtime-definitions/internal";
|
|
14
|
+
import { createResponseError, responseToException } from "@fluidframework/runtime-utils/internal";
|
|
15
|
+
import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
|
|
16
16
|
import {
|
|
17
17
|
DataProcessingError,
|
|
18
|
-
ITelemetryLoggerExt,
|
|
19
18
|
MonitoringContext,
|
|
20
19
|
PerformanceEvent,
|
|
21
20
|
createChildLogger,
|
|
22
21
|
createChildMonitoringContext,
|
|
23
22
|
tagCodeArtifacts,
|
|
24
|
-
} from "@fluidframework/telemetry-utils";
|
|
23
|
+
} from "@fluidframework/telemetry-utils/internal";
|
|
24
|
+
|
|
25
25
|
import { BlobManager } from "../blobManager.js";
|
|
26
26
|
import {
|
|
27
27
|
InactiveResponseHeaderKey,
|
|
@@ -31,6 +31,7 @@ import {
|
|
|
31
31
|
import { ClientSessionExpiredError } from "../error.js";
|
|
32
32
|
import { ContainerMessageType, ContainerRuntimeGCMessage } from "../messageTypes.js";
|
|
33
33
|
import { IRefreshSummaryResult } from "../summary/index.js";
|
|
34
|
+
|
|
34
35
|
import { generateGCConfigs } from "./gcConfigs.js";
|
|
35
36
|
import {
|
|
36
37
|
GCNodeType,
|
package/src/gc/gcConfigs.ts
CHANGED
|
@@ -7,8 +7,10 @@ import {
|
|
|
7
7
|
MonitoringContext,
|
|
8
8
|
UsageError,
|
|
9
9
|
validatePrecondition,
|
|
10
|
-
} from "@fluidframework/telemetry-utils";
|
|
10
|
+
} from "@fluidframework/telemetry-utils/internal";
|
|
11
|
+
|
|
11
12
|
import { IContainerRuntimeMetadata } from "../summary/index.js";
|
|
13
|
+
|
|
12
14
|
import {
|
|
13
15
|
GCFeatureMatrix,
|
|
14
16
|
GCVersion,
|
|
@@ -24,18 +26,15 @@ import {
|
|
|
24
26
|
gcDisableThrowOnTombstoneLoadOptionName,
|
|
25
27
|
gcGenerationOptionName,
|
|
26
28
|
gcTestModeKey,
|
|
27
|
-
gcVersionUpgradeToV4Key,
|
|
28
29
|
maxSnapshotCacheExpiryMs,
|
|
29
|
-
nextGCVersion,
|
|
30
30
|
oneDayMs,
|
|
31
31
|
runGCKey,
|
|
32
32
|
runSessionExpiryKey,
|
|
33
33
|
runSweepKey,
|
|
34
|
-
stableGCVersion,
|
|
35
34
|
throwOnTombstoneLoadOverrideKey,
|
|
36
35
|
throwOnTombstoneUsageKey,
|
|
37
36
|
} from "./gcDefinitions.js";
|
|
38
|
-
import { getGCVersion, shouldAllowGcSweep } from "./gcHelpers.js";
|
|
37
|
+
import { getGCVersion, getGCVersionInEffect, shouldAllowGcSweep } from "./gcHelpers.js";
|
|
39
38
|
|
|
40
39
|
/**
|
|
41
40
|
* Generates configurations for the Garbage Collector that it uses to determine what to run and how.
|
|
@@ -113,9 +112,7 @@ export function generateGCConfigs(
|
|
|
113
112
|
createParams.gcOptions[gcGenerationOptionName] /* currentGeneration */,
|
|
114
113
|
);
|
|
115
114
|
|
|
116
|
-
|
|
117
|
-
const gcVersionInEffect =
|
|
118
|
-
mc.config.getBoolean(gcVersionUpgradeToV4Key) === true ? nextGCVersion : stableGCVersion;
|
|
115
|
+
const gcVersionInEffect = getGCVersionInEffect(mc.config);
|
|
119
116
|
|
|
120
117
|
// The GC version is up-to-date if the GC version in effect is at least equal to the GC version in base snapshot.
|
|
121
118
|
// If it is not up-to-date, there is a newer version of GC out there which is more reliable than this. So, GC
|
package/src/gc/gcDefinitions.ts
CHANGED
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
import { ICriticalContainerError } from "@fluidframework/container-definitions";
|
|
7
7
|
import { IRequest } from "@fluidframework/core-interfaces";
|
|
8
8
|
import { ISnapshotTree } from "@fluidframework/protocol-definitions";
|
|
9
|
+
import { IGarbageCollectionData, ITelemetryContext } from "@fluidframework/runtime-definitions";
|
|
9
10
|
import {
|
|
10
|
-
IGarbageCollectionData,
|
|
11
11
|
IGarbageCollectionDetailsBase,
|
|
12
12
|
ISummarizeResult,
|
|
13
|
-
|
|
14
|
-
} from "@fluidframework/runtime-
|
|
15
|
-
import { ReadAndParseBlob } from "@fluidframework/runtime-utils";
|
|
13
|
+
} from "@fluidframework/runtime-definitions/internal";
|
|
14
|
+
import { ReadAndParseBlob } from "@fluidframework/runtime-utils/internal";
|
|
16
15
|
import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
|
|
16
|
+
|
|
17
17
|
import { RuntimeHeaderData } from "../containerRuntime.js";
|
|
18
18
|
import { ContainerRuntimeGCMessage } from "../messageTypes.js";
|
|
19
19
|
import {
|