@fluidframework/container-runtime 2.13.0 → 2.20.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.cjs +36 -0
- package/CHANGELOG.md +46 -0
- package/api-report/container-runtime.legacy.alpha.api.md +9 -203
- package/container-runtime.test-files.tar +0 -0
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager/blobManager.d.ts +5 -1
- package/dist/blobManager/blobManager.d.ts.map +1 -1
- package/dist/blobManager/blobManager.js +16 -2
- package/dist/blobManager/blobManager.js.map +1 -1
- package/dist/blobManager/blobManagerSnapSum.d.ts.map +1 -1
- package/dist/blobManager/blobManagerSnapSum.js.map +1 -1
- package/dist/channelCollection.d.ts +23 -12
- package/dist/channelCollection.d.ts.map +1 -1
- package/dist/channelCollection.js +22 -12
- package/dist/channelCollection.js.map +1 -1
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +6 -2
- package/dist/connectionTelemetry.js.map +1 -1
- 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 +74 -65
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +53 -37
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.d.ts +7 -3
- package/dist/dataStore.d.ts.map +1 -1
- package/dist/dataStore.js +2 -1
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +41 -25
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +31 -18
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts +6 -2
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js +6 -2
- 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.map +1 -1
- package/dist/deltaManagerProxies.d.ts +1 -17
- package/dist/deltaManagerProxies.d.ts.map +1 -1
- package/dist/deltaManagerProxies.js.map +1 -1
- package/dist/deltaScheduler.d.ts +9 -6
- package/dist/deltaScheduler.d.ts.map +1 -1
- package/dist/deltaScheduler.js +95 -89
- package/dist/deltaScheduler.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts +21 -7
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +12 -5
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.d.ts +11 -0
- package/dist/gc/gcConfigs.d.ts.map +1 -1
- package/dist/gc/gcConfigs.js +3 -2
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +210 -70
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js +39 -13
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcHelpers.d.ts +6 -2
- package/dist/gc/gcHelpers.d.ts.map +1 -1
- package/dist/gc/gcHelpers.js +6 -2
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -1
- package/dist/gc/gcSummaryDefinitions.d.ts +18 -6
- package/dist/gc/gcSummaryDefinitions.d.ts.map +1 -1
- package/dist/gc/gcSummaryDefinitions.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts +33 -11
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +6 -2
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.d.ts +42 -13
- package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.js +27 -9
- package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
- package/dist/gc/index.d.ts +1 -0
- package/dist/gc/index.d.ts.map +1 -1
- package/dist/gc/index.js +3 -1
- package/dist/gc/index.js.map +1 -1
- package/dist/inboundBatchAggregator.d.ts +34 -0
- package/dist/inboundBatchAggregator.d.ts.map +1 -0
- package/dist/inboundBatchAggregator.js +185 -0
- package/dist/inboundBatchAggregator.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/legacy.d.ts +0 -4
- package/dist/messageTypes.d.ts +14 -5
- package/dist/messageTypes.d.ts.map +1 -1
- package/dist/messageTypes.js.map +1 -1
- package/dist/metadata.d.ts +12 -4
- package/dist/metadata.d.ts.map +1 -1
- package/dist/metadata.js +6 -2
- package/dist/metadata.js.map +1 -1
- package/dist/opLifecycle/batchManager.d.ts +9 -3
- package/dist/opLifecycle/batchManager.d.ts.map +1 -1
- package/dist/opLifecycle/batchManager.js +3 -1
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/duplicateBatchDetector.d.ts +9 -3
- package/dist/opLifecycle/duplicateBatchDetector.d.ts.map +1 -1
- package/dist/opLifecycle/duplicateBatchDetector.js +9 -3
- package/dist/opLifecycle/duplicateBatchDetector.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts +3 -1
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +12 -7
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts +0 -1
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js +5 -4
- package/dist/opLifecycle/opGroupingManager.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +2 -0
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +1 -1
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +6 -1
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts +9 -3
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/dist/package.json +2 -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 +19 -7
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +13 -5
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/summary/documentSchema.d.ts.map +1 -1
- package/dist/summary/documentSchema.js +2 -0
- package/dist/summary/documentSchema.js.map +1 -1
- package/dist/summary/index.d.ts +1 -1
- package/dist/summary/index.d.ts.map +1 -1
- package/dist/summary/index.js.map +1 -1
- package/dist/summary/orderedClientElection.d.ts +93 -31
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js +15 -5
- package/dist/summary/orderedClientElection.js.map +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 +17 -6
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +12 -4
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.d.ts +9 -5
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +9 -3
- 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 +6 -2
- package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
- package/dist/summary/summarizerHeuristics.js +12 -4
- package/dist/summary/summarizerHeuristics.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.d.ts +24 -8
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js +15 -5
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +48 -16
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.js +3 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +12 -4
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +12 -4
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +246 -135
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryCollection.d.ts.map +1 -1
- package/dist/summary/summaryCollection.js +1 -2
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +24 -8
- package/dist/summary/summaryFormat.d.ts.map +1 -1
- package/dist/summary/summaryFormat.js.map +1 -1
- package/dist/summary/summaryGenerator.d.ts +9 -3
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +3 -1
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryManager.d.ts +8 -4
- package/dist/summary/summaryManager.d.ts.map +1 -1
- package/dist/summary/summaryManager.js +12 -4
- package/dist/summary/summaryManager.js.map +1 -1
- package/dist/throttler.d.ts +26 -10
- package/dist/throttler.d.ts.map +1 -1
- package/dist/throttler.js +12 -4
- package/dist/throttler.js.map +1 -1
- package/lib/batchTracker.d.ts.map +1 -1
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager/blobManager.d.ts +5 -1
- package/lib/blobManager/blobManager.d.ts.map +1 -1
- package/lib/blobManager/blobManager.js +16 -2
- package/lib/blobManager/blobManager.js.map +1 -1
- package/lib/blobManager/blobManagerSnapSum.d.ts.map +1 -1
- package/lib/blobManager/blobManagerSnapSum.js.map +1 -1
- package/lib/channelCollection.d.ts +23 -12
- package/lib/channelCollection.d.ts.map +1 -1
- package/lib/channelCollection.js +22 -12
- package/lib/channelCollection.js.map +1 -1
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +6 -2
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerHandleContext.d.ts +1 -1
- package/lib/containerHandleContext.d.ts.map +1 -1
- package/lib/containerHandleContext.js.map +1 -1
- package/lib/containerRuntime.d.ts +74 -65
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +53 -37
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStore.d.ts +7 -3
- package/lib/dataStore.d.ts.map +1 -1
- package/lib/dataStore.js +2 -1
- package/lib/dataStore.js.map +1 -1
- package/lib/dataStoreContext.d.ts +41 -25
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +31 -18
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.d.ts +6 -2
- package/lib/dataStoreContexts.d.ts.map +1 -1
- package/lib/dataStoreContexts.js +6 -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.map +1 -1
- package/lib/deltaManagerProxies.d.ts +1 -17
- package/lib/deltaManagerProxies.d.ts.map +1 -1
- package/lib/deltaManagerProxies.js.map +1 -1
- package/lib/deltaScheduler.d.ts +9 -6
- package/lib/deltaScheduler.d.ts.map +1 -1
- package/lib/deltaScheduler.js +95 -89
- package/lib/deltaScheduler.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts +21 -7
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +12 -5
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcConfigs.d.ts +11 -0
- package/lib/gc/gcConfigs.d.ts.map +1 -1
- package/lib/gc/gcConfigs.js +2 -2
- package/lib/gc/gcConfigs.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +210 -70
- package/lib/gc/gcDefinitions.d.ts.map +1 -1
- package/lib/gc/gcDefinitions.js +39 -13
- package/lib/gc/gcDefinitions.js.map +1 -1
- package/lib/gc/gcHelpers.d.ts +6 -2
- package/lib/gc/gcHelpers.d.ts.map +1 -1
- package/lib/gc/gcHelpers.js +6 -2
- package/lib/gc/gcHelpers.js.map +1 -1
- package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -1
- package/lib/gc/gcSummaryDefinitions.d.ts +18 -6
- package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -1
- package/lib/gc/gcSummaryDefinitions.js.map +1 -1
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/lib/gc/gcSummaryStateTracker.js.map +1 -1
- package/lib/gc/gcTelemetry.d.ts +33 -11
- package/lib/gc/gcTelemetry.d.ts.map +1 -1
- package/lib/gc/gcTelemetry.js +6 -2
- package/lib/gc/gcTelemetry.js.map +1 -1
- package/lib/gc/gcUnreferencedStateTracker.d.ts +42 -13
- package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
- package/lib/gc/gcUnreferencedStateTracker.js +27 -9
- package/lib/gc/gcUnreferencedStateTracker.js.map +1 -1
- package/lib/gc/index.d.ts +1 -0
- package/lib/gc/index.d.ts.map +1 -1
- package/lib/gc/index.js +1 -0
- package/lib/gc/index.js.map +1 -1
- package/lib/inboundBatchAggregator.d.ts +34 -0
- package/lib/inboundBatchAggregator.d.ts.map +1 -0
- package/lib/inboundBatchAggregator.js +181 -0
- package/lib/inboundBatchAggregator.js.map +1 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/legacy.d.ts +0 -4
- package/lib/messageTypes.d.ts +14 -5
- package/lib/messageTypes.d.ts.map +1 -1
- package/lib/messageTypes.js.map +1 -1
- package/lib/metadata.d.ts +12 -4
- package/lib/metadata.d.ts.map +1 -1
- package/lib/metadata.js +6 -2
- package/lib/metadata.js.map +1 -1
- package/lib/opLifecycle/batchManager.d.ts +9 -3
- package/lib/opLifecycle/batchManager.d.ts.map +1 -1
- package/lib/opLifecycle/batchManager.js +3 -1
- package/lib/opLifecycle/batchManager.js.map +1 -1
- package/lib/opLifecycle/duplicateBatchDetector.d.ts +9 -3
- package/lib/opLifecycle/duplicateBatchDetector.d.ts.map +1 -1
- package/lib/opLifecycle/duplicateBatchDetector.js +9 -3
- package/lib/opLifecycle/duplicateBatchDetector.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js +1 -1
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts +3 -1
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +13 -8
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts +0 -1
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/lib/opLifecycle/opGroupingManager.js +6 -5
- package/lib/opLifecycle/opGroupingManager.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +2 -0
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +1 -1
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +6 -1
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts +9 -3
- 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 +19 -7
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +13 -5
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/summary/documentSchema.d.ts.map +1 -1
- package/lib/summary/documentSchema.js +2 -0
- package/lib/summary/documentSchema.js.map +1 -1
- package/lib/summary/index.d.ts +1 -1
- package/lib/summary/index.d.ts.map +1 -1
- package/lib/summary/index.js.map +1 -1
- package/lib/summary/orderedClientElection.d.ts +93 -31
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js +15 -5
- package/lib/summary/orderedClientElection.js.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/lib/summary/runningSummarizer.d.ts +17 -6
- package/lib/summary/runningSummarizer.d.ts.map +1 -1
- package/lib/summary/runningSummarizer.js +12 -4
- package/lib/summary/runningSummarizer.js.map +1 -1
- package/lib/summary/summarizer.d.ts +9 -5
- package/lib/summary/summarizer.d.ts.map +1 -1
- package/lib/summary/summarizer.js +9 -3
- 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 +6 -2
- package/lib/summary/summarizerHeuristics.d.ts.map +1 -1
- package/lib/summary/summarizerHeuristics.js +12 -4
- package/lib/summary/summarizerHeuristics.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.d.ts +24 -8
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.js +15 -5
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +48 -16
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.js +3 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +12 -4
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +12 -4
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/lib/summary/summarizerTypes.d.ts +246 -135
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryCollection.d.ts.map +1 -1
- package/lib/summary/summaryCollection.js +1 -2
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryFormat.d.ts +24 -8
- package/lib/summary/summaryFormat.d.ts.map +1 -1
- package/lib/summary/summaryFormat.js.map +1 -1
- package/lib/summary/summaryGenerator.d.ts +9 -3
- package/lib/summary/summaryGenerator.d.ts.map +1 -1
- package/lib/summary/summaryGenerator.js +3 -1
- package/lib/summary/summaryGenerator.js.map +1 -1
- package/lib/summary/summaryManager.d.ts +8 -4
- package/lib/summary/summaryManager.d.ts.map +1 -1
- package/lib/summary/summaryManager.js +12 -4
- package/lib/summary/summaryManager.js.map +1 -1
- package/lib/throttler.d.ts +26 -10
- package/lib/throttler.d.ts.map +1 -1
- package/lib/throttler.js +12 -4
- package/lib/throttler.js.map +1 -1
- package/package.json +43 -30
- package/src/batchTracker.ts +31 -33
- package/src/blobManager/blobManager.ts +38 -19
- package/src/blobManager/blobManagerSnapSum.ts +2 -2
- package/src/channelCollection.ts +45 -38
- package/src/connectionTelemetry.ts +31 -13
- package/src/containerHandleContext.ts +2 -2
- package/src/containerRuntime.ts +199 -142
- package/src/dataStore.ts +11 -6
- package/src/dataStoreContext.ts +80 -59
- package/src/dataStoreContexts.ts +16 -12
- package/src/dataStoreRegistry.ts +1 -1
- package/src/deltaManagerProxies.ts +5 -5
- package/src/deltaScheduler.ts +19 -13
- package/src/gc/garbageCollection.ts +42 -20
- package/src/gc/gcConfigs.ts +4 -4
- package/src/gc/gcDefinitions.ts +212 -70
- package/src/gc/gcHelpers.ts +13 -7
- package/src/gc/gcReferenceGraphAlgorithm.ts +1 -1
- package/src/gc/gcSummaryDefinitions.ts +18 -6
- package/src/gc/gcSummaryStateTracker.ts +4 -2
- package/src/gc/gcTelemetry.ts +47 -19
- package/src/gc/gcUnreferencedStateTracker.ts +40 -16
- package/src/gc/index.ts +1 -0
- package/src/{scheduleManager.ts → inboundBatchAggregator.ts} +53 -120
- package/src/index.ts +0 -3
- package/src/messageTypes.ts +14 -5
- package/src/metadata.ts +12 -4
- package/src/opLifecycle/batchManager.ts +12 -6
- package/src/opLifecycle/duplicateBatchDetector.ts +10 -4
- package/src/opLifecycle/opCompressor.ts +8 -4
- package/src/opLifecycle/opDecompressor.ts +19 -10
- package/src/opLifecycle/opGroupingManager.ts +12 -8
- package/src/opLifecycle/opSplitter.ts +10 -7
- package/src/opLifecycle/outbox.ts +22 -13
- package/src/opLifecycle/remoteMessageProcessor.ts +10 -4
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +34 -16
- package/src/summary/documentSchema.ts +30 -18
- package/src/summary/index.ts +0 -3
- package/src/summary/orderedClientElection.ts +100 -38
- package/src/summary/runWhileConnectedCoordinator.ts +6 -3
- package/src/summary/runningSummarizer.ts +38 -19
- package/src/summary/summarizer.ts +29 -16
- package/src/summary/summarizerClientElection.ts +2 -2
- package/src/summary/summarizerHeuristics.ts +22 -11
- package/src/summary/summarizerNode/summarizerNode.ts +22 -12
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +48 -16
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +21 -11
- package/src/summary/summarizerTypes.ts +246 -139
- package/src/summary/summaryCollection.ts +22 -23
- package/src/summary/summaryFormat.ts +24 -8
- package/src/summary/summaryGenerator.ts +14 -8
- package/src/summary/summaryManager.ts +28 -18
- package/src/throttler.ts +23 -11
- package/dist/scheduleManager.d.ts +0 -28
- package/dist/scheduleManager.d.ts.map +0 -1
- package/dist/scheduleManager.js +0 -233
- package/dist/scheduleManager.js.map +0 -1
- package/lib/scheduleManager.d.ts +0 -28
- package/lib/scheduleManager.d.ts.map +0 -1
- package/lib/scheduleManager.js +0 -229
- package/lib/scheduleManager.js.map +0 -1
|
@@ -78,10 +78,10 @@ enum SummaryState {
|
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
class Summary implements ISummary {
|
|
81
|
-
public static createLocal(clientId: string, clientSequenceNumber: number) {
|
|
81
|
+
public static createLocal(clientId: string, clientSequenceNumber: number): Summary {
|
|
82
82
|
return new Summary(clientId, clientSequenceNumber);
|
|
83
83
|
}
|
|
84
|
-
public static createFromOp(op: ISummaryOpMessage) {
|
|
84
|
+
public static createFromOp(op: ISummaryOpMessage): Summary {
|
|
85
85
|
// TODO: Verify whether this should be able to handle server-generated ops (with null clientId)
|
|
86
86
|
|
|
87
87
|
const summary = new Summary(op.clientId as string, op.clientSequenceNumber);
|
|
@@ -97,10 +97,10 @@ class Summary implements ISummary {
|
|
|
97
97
|
private readonly defSummaryOp = new Deferred<void>();
|
|
98
98
|
private readonly defSummaryAck = new Deferred<void>();
|
|
99
99
|
|
|
100
|
-
public get summaryOp() {
|
|
100
|
+
public get summaryOp(): ISummaryOpMessage | undefined {
|
|
101
101
|
return this._summaryOp;
|
|
102
102
|
}
|
|
103
|
-
public get summaryAckNack() {
|
|
103
|
+
public get summaryAckNack(): ISummaryAckMessage | ISummaryNackMessage | undefined {
|
|
104
104
|
return this._summaryAckNack;
|
|
105
105
|
}
|
|
106
106
|
|
|
@@ -113,7 +113,7 @@ class Summary implements ISummary {
|
|
|
113
113
|
return this.state === SummaryState.Acked;
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
-
public broadcast(op: ISummaryOpMessage) {
|
|
116
|
+
public broadcast(op: ISummaryOpMessage): boolean {
|
|
117
117
|
assert(
|
|
118
118
|
this.state === SummaryState.Local,
|
|
119
119
|
0x175 /* "Can only broadcast if summarizer starts in local state" */,
|
|
@@ -124,7 +124,7 @@ class Summary implements ISummary {
|
|
|
124
124
|
return true;
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
public ackNack(op: ISummaryAckMessage | ISummaryNackMessage) {
|
|
127
|
+
public ackNack(op: ISummaryAckMessage | ISummaryNackMessage): boolean {
|
|
128
128
|
assert(
|
|
129
129
|
this.state === SummaryState.Broadcast,
|
|
130
130
|
0x176 /* "Can only ack/nack if summarizer is in broadcasting state" */,
|
|
@@ -167,7 +167,7 @@ class ClientSummaryWatcher implements IClientSummaryWatcher {
|
|
|
167
167
|
private readonly localSummaries = new Map<number, Summary>();
|
|
168
168
|
private _disposed = false;
|
|
169
169
|
|
|
170
|
-
public get disposed() {
|
|
170
|
+
public get disposed(): boolean {
|
|
171
171
|
return this._disposed;
|
|
172
172
|
}
|
|
173
173
|
|
|
@@ -193,8 +193,7 @@ class ClientSummaryWatcher implements IClientSummaryWatcher {
|
|
|
193
193
|
* Waits until all of the pending summaries in the underlying SummaryCollection
|
|
194
194
|
* are acked/nacked.
|
|
195
195
|
*/
|
|
196
|
-
|
|
197
|
-
public waitFlushed() {
|
|
196
|
+
public async waitFlushed(): Promise<IAckedSummary | undefined> {
|
|
198
197
|
return this.summaryCollection.waitFlushed();
|
|
199
198
|
}
|
|
200
199
|
|
|
@@ -202,7 +201,7 @@ class ClientSummaryWatcher implements IClientSummaryWatcher {
|
|
|
202
201
|
* Gets a watched summary or returns undefined if not watched.
|
|
203
202
|
* @param clientSequenceNumber - client sequence number of sent summary op
|
|
204
203
|
*/
|
|
205
|
-
public tryGetSummary(clientSequenceNumber: number) {
|
|
204
|
+
public tryGetSummary(clientSequenceNumber: number): Summary | undefined {
|
|
206
205
|
return this.localSummaries.get(clientSequenceNumber);
|
|
207
206
|
}
|
|
208
207
|
|
|
@@ -210,11 +209,11 @@ class ClientSummaryWatcher implements IClientSummaryWatcher {
|
|
|
210
209
|
* Starts watching a summary made by this client.
|
|
211
210
|
* @param summary - summary to start watching
|
|
212
211
|
*/
|
|
213
|
-
public setSummary(summary: Summary) {
|
|
212
|
+
public setSummary(summary: Summary): void {
|
|
214
213
|
this.localSummaries.set(summary.clientSequenceNumber, summary);
|
|
215
214
|
}
|
|
216
215
|
|
|
217
|
-
public dispose() {
|
|
216
|
+
public dispose(): void {
|
|
218
217
|
this.summaryCollection.removeWatcher(this.clientId);
|
|
219
218
|
this._disposed = true;
|
|
220
219
|
}
|
|
@@ -270,18 +269,18 @@ export class SummaryCollection extends TypedEventEmitter<ISummaryCollectionOpEve
|
|
|
270
269
|
return super.emit(event, ...args);
|
|
271
270
|
}
|
|
272
271
|
|
|
273
|
-
public get opsSinceLastAck() {
|
|
272
|
+
public get opsSinceLastAck(): number {
|
|
274
273
|
return (
|
|
275
274
|
this.deltaManager.lastSequenceNumber -
|
|
276
275
|
(this.lastAck?.summaryAck.sequenceNumber ?? this.deltaManager.initialSequenceNumber)
|
|
277
276
|
);
|
|
278
277
|
}
|
|
279
278
|
|
|
280
|
-
public addOpListener(listener: () => void) {
|
|
279
|
+
public addOpListener(listener: () => void): void {
|
|
281
280
|
this.deltaManager.on("op", listener);
|
|
282
281
|
}
|
|
283
282
|
|
|
284
|
-
public removeOpListener(listener: () => void) {
|
|
283
|
+
public removeOpListener(listener: () => void): void {
|
|
285
284
|
this.deltaManager.off("op", listener);
|
|
286
285
|
}
|
|
287
286
|
|
|
@@ -304,19 +303,19 @@ export class SummaryCollection extends TypedEventEmitter<ISummaryCollectionOpEve
|
|
|
304
303
|
return watcher;
|
|
305
304
|
}
|
|
306
305
|
|
|
307
|
-
public removeWatcher(clientId: string) {
|
|
306
|
+
public removeWatcher(clientId: string): void {
|
|
308
307
|
this.summaryWatchers.delete(clientId);
|
|
309
308
|
}
|
|
310
309
|
|
|
311
310
|
public setPendingAckTimerTimeoutCallback(
|
|
312
311
|
maxAckWaitTime: number,
|
|
313
312
|
timeoutCallback: () => void,
|
|
314
|
-
) {
|
|
313
|
+
): void {
|
|
315
314
|
this.maxAckWaitTime = maxAckWaitTime;
|
|
316
315
|
this.pendingAckTimerTimeoutCallback = timeoutCallback;
|
|
317
316
|
}
|
|
318
317
|
|
|
319
|
-
public unsetPendingAckTimerTimeoutCallback() {
|
|
318
|
+
public unsetPendingAckTimerTimeoutCallback(): void {
|
|
320
319
|
this.maxAckWaitTime = undefined;
|
|
321
320
|
this.pendingAckTimerTimeoutCallback = undefined;
|
|
322
321
|
}
|
|
@@ -352,7 +351,7 @@ export class SummaryCollection extends TypedEventEmitter<ISummaryCollectionOpEve
|
|
|
352
351
|
return this.lastAck;
|
|
353
352
|
}
|
|
354
353
|
|
|
355
|
-
private parseContent(op: ISequencedDocumentMessage) {
|
|
354
|
+
private parseContent(op: ISequencedDocumentMessage): void {
|
|
356
355
|
// This should become unconditional once (Loader LTS) reaches 2.4 or later
|
|
357
356
|
// There will be a long time of needing both cases, until LTS catches up to the change.
|
|
358
357
|
// That said, we may instead move to listen for "op" events from ContainerRuntime,
|
|
@@ -366,7 +365,7 @@ export class SummaryCollection extends TypedEventEmitter<ISummaryCollectionOpEve
|
|
|
366
365
|
* Handler for ops; only handles ops relating to summaries.
|
|
367
366
|
* @param op - op message to handle
|
|
368
367
|
*/
|
|
369
|
-
private handleOp(opArg: ISequencedDocumentMessage) {
|
|
368
|
+
private handleOp(opArg: ISequencedDocumentMessage): void {
|
|
370
369
|
const op = { ...opArg };
|
|
371
370
|
|
|
372
371
|
switch (op.type) {
|
|
@@ -403,7 +402,7 @@ export class SummaryCollection extends TypedEventEmitter<ISummaryCollectionOpEve
|
|
|
403
402
|
}
|
|
404
403
|
}
|
|
405
404
|
|
|
406
|
-
private handleSummaryOp(op: ISummaryOpMessage) {
|
|
405
|
+
private handleSummaryOp(op: ISummaryOpMessage): void {
|
|
407
406
|
let summary: Summary | undefined;
|
|
408
407
|
|
|
409
408
|
// Check if summary already being watched, broadcast if so
|
|
@@ -429,7 +428,7 @@ export class SummaryCollection extends TypedEventEmitter<ISummaryCollectionOpEve
|
|
|
429
428
|
this.emit(MessageType.Summarize, op);
|
|
430
429
|
}
|
|
431
430
|
|
|
432
|
-
private handleSummaryAck(op: ISummaryAckMessage) {
|
|
431
|
+
private handleSummaryAck(op: ISummaryAckMessage): void {
|
|
433
432
|
const seq = op.contents.summaryProposal.summarySequenceNumber;
|
|
434
433
|
const summary = this.pendingSummaries.get(seq);
|
|
435
434
|
// eslint-disable-next-line @typescript-eslint/prefer-optional-chain -- optional chain is not logically equivalent
|
|
@@ -472,7 +471,7 @@ export class SummaryCollection extends TypedEventEmitter<ISummaryCollectionOpEve
|
|
|
472
471
|
}
|
|
473
472
|
}
|
|
474
473
|
|
|
475
|
-
private handleSummaryNack(op: ISummaryNackMessage) {
|
|
474
|
+
private handleSummaryNack(op: ISummaryNackMessage): void {
|
|
476
475
|
const seq = op.contents.summaryProposal.summarySequenceNumber;
|
|
477
476
|
const summary = this.pendingSummaries.get(seq);
|
|
478
477
|
if (summary) {
|
|
@@ -70,7 +70,9 @@ export interface IFluidDataStoreAttributes1
|
|
|
70
70
|
*/
|
|
71
71
|
export interface IFluidDataStoreAttributes2
|
|
72
72
|
extends OmitAttributesVersions<IFluidDataStoreAttributes1> {
|
|
73
|
-
/**
|
|
73
|
+
/**
|
|
74
|
+
* Switch from snapshotFormatVersion to summaryFormatVersion
|
|
75
|
+
*/
|
|
74
76
|
readonly snapshotFormatVersion?: undefined;
|
|
75
77
|
readonly summaryFormatVersion: 2;
|
|
76
78
|
/**
|
|
@@ -131,15 +133,25 @@ export function hasIsolatedChannels(attributes: ReadFluidDataStoreAttributes): b
|
|
|
131
133
|
*/
|
|
132
134
|
export interface IContainerRuntimeMetadata extends ICreateContainerMetadata, IGCMetadata {
|
|
133
135
|
readonly summaryFormatVersion: 1;
|
|
134
|
-
/**
|
|
136
|
+
/**
|
|
137
|
+
* @deprecated - used by old (prior to 2.0 RC3) runtimes
|
|
138
|
+
*/
|
|
135
139
|
readonly message?: ISummaryMetadataMessage;
|
|
136
|
-
/**
|
|
140
|
+
/**
|
|
141
|
+
* The last message processed at the time of summary. Only primitive property types are added to the summary.
|
|
142
|
+
*/
|
|
137
143
|
readonly lastMessage?: ISummaryMetadataMessage;
|
|
138
|
-
/**
|
|
144
|
+
/**
|
|
145
|
+
* True if channels are not isolated in .channels subtrees, otherwise isolated.
|
|
146
|
+
*/
|
|
139
147
|
readonly disableIsolatedChannels?: true;
|
|
140
|
-
/**
|
|
148
|
+
/**
|
|
149
|
+
* The summary number for a container's summary. Incremented on summaries throughout its lifetime.
|
|
150
|
+
*/
|
|
141
151
|
readonly summaryNumber?: number;
|
|
142
|
-
/**
|
|
152
|
+
/**
|
|
153
|
+
* GUID to identify a document in telemetry
|
|
154
|
+
*/
|
|
143
155
|
readonly telemetryDocumentId?: string;
|
|
144
156
|
|
|
145
157
|
readonly documentSchema?: IDocumentSchema;
|
|
@@ -150,9 +162,13 @@ export interface IContainerRuntimeMetadata extends ICreateContainerMetadata, IGC
|
|
|
150
162
|
* @alpha
|
|
151
163
|
*/
|
|
152
164
|
export interface ICreateContainerMetadata {
|
|
153
|
-
/**
|
|
165
|
+
/**
|
|
166
|
+
* Runtime version of the container when it was first created
|
|
167
|
+
*/
|
|
154
168
|
createContainerRuntimeVersion?: string;
|
|
155
|
-
/**
|
|
169
|
+
/**
|
|
170
|
+
* Timestamp of the container when it was first created
|
|
171
|
+
*/
|
|
156
172
|
createContainerTimestamp?: number;
|
|
157
173
|
}
|
|
158
174
|
|
|
@@ -43,7 +43,9 @@ export type raceTimerResult<T> =
|
|
|
43
43
|
| { result: IPromiseTimerResult["timerResult"] }
|
|
44
44
|
| { result: "cancelled" };
|
|
45
45
|
|
|
46
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* Wait for a promise or PromiseTimer to elapse.
|
|
48
|
+
*/
|
|
47
49
|
export async function raceTimer<T>(
|
|
48
50
|
promise: Promise<T>,
|
|
49
51
|
timer: Promise<IPromiseTimerResult>,
|
|
@@ -95,9 +97,13 @@ export type SummarizeReason =
|
|
|
95
97
|
* stay connected long enough for summarizer client to catch up.
|
|
96
98
|
*/
|
|
97
99
|
| "lastSummary"
|
|
98
|
-
/**
|
|
100
|
+
/**
|
|
101
|
+
* On-demand summary requested with specified reason.
|
|
102
|
+
*/
|
|
99
103
|
| `onDemand;${string}`
|
|
100
|
-
/**
|
|
104
|
+
/**
|
|
105
|
+
* Enqueue summarize attempt with specified reason.
|
|
106
|
+
*/
|
|
101
107
|
| `enqueue;${string}`;
|
|
102
108
|
|
|
103
109
|
const summarizeErrors = {
|
|
@@ -130,7 +136,7 @@ const summarizeErrors = {
|
|
|
130
136
|
export type SummarizeErrorCode = keyof typeof summarizeErrors;
|
|
131
137
|
|
|
132
138
|
// Helper functions to report failures and return.
|
|
133
|
-
export const getFailMessage = (errorCode: SummarizeErrorCode) =>
|
|
139
|
+
export const getFailMessage = (errorCode: SummarizeErrorCode): string =>
|
|
134
140
|
`${errorCode}: ${summarizeErrors[errorCode]}`;
|
|
135
141
|
|
|
136
142
|
export class SummarizeResultBuilder {
|
|
@@ -155,7 +161,7 @@ export class SummarizeResultBuilder {
|
|
|
155
161
|
error: IRetriableFailureError,
|
|
156
162
|
submitFailureResult?: SubmitSummaryFailureData,
|
|
157
163
|
nackSummaryResult?: INackSummaryResult,
|
|
158
|
-
) {
|
|
164
|
+
): void {
|
|
159
165
|
assert(
|
|
160
166
|
!this.receivedSummaryAckOrNack.isCompleted,
|
|
161
167
|
0x25e /* "no reason to call fail if all promises have been completed" */,
|
|
@@ -278,7 +284,7 @@ export class SummaryGenerator {
|
|
|
278
284
|
properties?: SummaryGeneratorTelemetry,
|
|
279
285
|
submitFailureResult?: SubmitSummaryFailureData,
|
|
280
286
|
nackSummaryResult?: INackSummaryResult,
|
|
281
|
-
) => {
|
|
287
|
+
): void => {
|
|
282
288
|
// Report any failure as an error unless it was due to cancellation (like "disconnected" error)
|
|
283
289
|
// If failure happened on upload, we may not yet realized that socket disconnected, so check
|
|
284
290
|
// offlineError too.
|
|
@@ -555,7 +561,7 @@ export class SummaryGenerator {
|
|
|
555
561
|
return initialProps;
|
|
556
562
|
}
|
|
557
563
|
|
|
558
|
-
private summarizeTimerHandler(time: number, count: number) {
|
|
564
|
+
private summarizeTimerHandler(time: number, count: number): void {
|
|
559
565
|
this.logger.sendPerformanceEvent({
|
|
560
566
|
eventName: "SummarizeTimeout",
|
|
561
567
|
timeoutTime: time,
|
|
@@ -570,7 +576,7 @@ export class SummaryGenerator {
|
|
|
570
576
|
}
|
|
571
577
|
}
|
|
572
578
|
|
|
573
|
-
public dispose() {
|
|
579
|
+
public dispose(): void {
|
|
574
580
|
this.summarizeTimer.clear();
|
|
575
581
|
}
|
|
576
582
|
}
|
|
@@ -102,11 +102,11 @@ export class SummaryManager
|
|
|
102
102
|
private summarizer?: ISummarizer;
|
|
103
103
|
private _disposed = false;
|
|
104
104
|
|
|
105
|
-
public get disposed() {
|
|
105
|
+
public get disposed(): boolean {
|
|
106
106
|
return this._disposed;
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
public get currentState() {
|
|
109
|
+
public get currentState(): SummaryManagerState {
|
|
110
110
|
return this.state;
|
|
111
111
|
}
|
|
112
112
|
|
|
@@ -118,8 +118,10 @@ export class SummaryManager
|
|
|
118
118
|
"opsSinceLastAck" | "addOpListener" | "removeOpListener"
|
|
119
119
|
>,
|
|
120
120
|
parentLogger: ITelemetryBaseLogger,
|
|
121
|
-
/**
|
|
122
|
-
*
|
|
121
|
+
/**
|
|
122
|
+
* Creates summarizer by asking interactive container to spawn summarizing container and
|
|
123
|
+
* get back its Summarizer instance.
|
|
124
|
+
*/
|
|
123
125
|
private readonly createSummarizerFn: () => Promise<ISummarizer>,
|
|
124
126
|
private readonly startThrottler: IThrottler,
|
|
125
127
|
{
|
|
@@ -154,7 +156,7 @@ export class SummaryManager
|
|
|
154
156
|
this.refreshSummarizer();
|
|
155
157
|
}
|
|
156
158
|
|
|
157
|
-
private readonly handleConnected = (clientId: string) => {
|
|
159
|
+
private readonly handleConnected = (clientId: string): void => {
|
|
158
160
|
this.latestClientId = clientId;
|
|
159
161
|
// If we have a summarizer, it should have been either cancelled on disconnected by now.
|
|
160
162
|
// But because of lastSummary process, it can still hang around, so there is not much we can
|
|
@@ -162,11 +164,13 @@ export class SummaryManager
|
|
|
162
164
|
this.refreshSummarizer();
|
|
163
165
|
};
|
|
164
166
|
|
|
165
|
-
private readonly handleDisconnected = () => {
|
|
167
|
+
private readonly handleDisconnected = (): void => {
|
|
166
168
|
this.refreshSummarizer();
|
|
167
169
|
};
|
|
168
170
|
|
|
169
|
-
private static readonly isStartingOrRunning = (
|
|
171
|
+
private static readonly isStartingOrRunning = (
|
|
172
|
+
state: SummaryManagerState,
|
|
173
|
+
): state is SummaryManagerState.Starting | SummaryManagerState.Running =>
|
|
170
174
|
state === SummaryManagerState.Starting || state === SummaryManagerState.Running;
|
|
171
175
|
|
|
172
176
|
private getShouldSummarizeState(): ShouldSummarizeState {
|
|
@@ -199,7 +203,7 @@ export class SummaryManager
|
|
|
199
203
|
return { shouldSummarize: true };
|
|
200
204
|
}
|
|
201
205
|
|
|
202
|
-
private readonly refreshSummarizer = () => {
|
|
206
|
+
private readonly refreshSummarizer = (): void => {
|
|
203
207
|
// Transition states depending on shouldSummarize, which is a calculated property
|
|
204
208
|
// that is only true if this client is connected and is the elected summarizer.
|
|
205
209
|
const shouldSummarizeState = this.getShouldSummarizeState();
|
|
@@ -232,7 +236,7 @@ export class SummaryManager
|
|
|
232
236
|
}
|
|
233
237
|
};
|
|
234
238
|
|
|
235
|
-
private startSummarization() {
|
|
239
|
+
private startSummarization(): void {
|
|
236
240
|
assert(this.state === SummaryManagerState.Off, 0x261 /* "Expected: off" */);
|
|
237
241
|
this.state = SummaryManagerState.Starting;
|
|
238
242
|
|
|
@@ -328,6 +332,7 @@ export class SummaryManager
|
|
|
328
332
|
// If failure happened on container load, we may not yet realized that socket disconnected, so check
|
|
329
333
|
// offlineError.
|
|
330
334
|
const category =
|
|
335
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
331
336
|
error?.errorType === DriverErrorTypes.offlineError ? "generic" : "error";
|
|
332
337
|
this.logger.sendTelemetryEvent(
|
|
333
338
|
{
|
|
@@ -352,7 +357,7 @@ export class SummaryManager
|
|
|
352
357
|
});
|
|
353
358
|
}
|
|
354
359
|
|
|
355
|
-
private stop(reason: SummarizerStopReason) {
|
|
360
|
+
private stop(reason: SummarizerStopReason): void {
|
|
356
361
|
if (!SummaryManager.isStartingOrRunning(this.state)) {
|
|
357
362
|
return;
|
|
358
363
|
}
|
|
@@ -402,9 +407,9 @@ export class SummaryManager
|
|
|
402
407
|
|
|
403
408
|
if (delayMs > 0) {
|
|
404
409
|
let timer;
|
|
405
|
-
let resolveOpPromiseFn;
|
|
410
|
+
let resolveOpPromiseFn: (value: void | PromiseLike<void>) => void;
|
|
406
411
|
// Create a listener that will break the delay if we've exceeded the initial delay ops count.
|
|
407
|
-
const opsListenerFn = () => {
|
|
412
|
+
const opsListenerFn = (): void => {
|
|
408
413
|
if (this.summaryCollection.opsSinceLastAck >= this.opsToBypassInitialDelay) {
|
|
409
414
|
clearTimeout(timer);
|
|
410
415
|
resolveOpPromiseFn();
|
|
@@ -441,7 +446,7 @@ export class SummaryManager
|
|
|
441
446
|
return this.summarizer.enqueueSummarize(options);
|
|
442
447
|
}
|
|
443
448
|
|
|
444
|
-
public dispose() {
|
|
449
|
+
public dispose(): void {
|
|
445
450
|
this.clientElection.off("electedSummarizerChanged", this.refreshSummarizer);
|
|
446
451
|
this.connectedState.off("connected", this.handleConnected);
|
|
447
452
|
this.connectedState.off("disconnected", this.handleDisconnected);
|
|
@@ -449,9 +454,9 @@ export class SummaryManager
|
|
|
449
454
|
this._disposed = true;
|
|
450
455
|
}
|
|
451
456
|
|
|
452
|
-
private readonly forwardedEvents = new Map<
|
|
457
|
+
private readonly forwardedEvents = new Map<string, () => void>();
|
|
453
458
|
|
|
454
|
-
private setupForwardedEvents() {
|
|
459
|
+
private setupForwardedEvents(): void {
|
|
455
460
|
[
|
|
456
461
|
"summarize",
|
|
457
462
|
"summarizeAllAttemptsFailed",
|
|
@@ -459,16 +464,21 @@ export class SummaryManager
|
|
|
459
464
|
"summarizerStart",
|
|
460
465
|
"summarizerStartupFailed",
|
|
461
466
|
].forEach((event) => {
|
|
462
|
-
const listener = (...args: any[]) => {
|
|
467
|
+
const listener = (...args: any[]): void => {
|
|
463
468
|
this.emit(event, ...args);
|
|
464
469
|
};
|
|
470
|
+
// TODO: better typing here
|
|
471
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
465
472
|
this.summarizer?.on(event as any, listener);
|
|
466
473
|
this.forwardedEvents.set(event, listener);
|
|
467
474
|
});
|
|
468
475
|
}
|
|
469
476
|
|
|
470
|
-
private cleanupForwardedEvents() {
|
|
471
|
-
this.forwardedEvents.forEach((listener, event) =>
|
|
477
|
+
private cleanupForwardedEvents(): void {
|
|
478
|
+
this.forwardedEvents.forEach((listener, event) =>
|
|
479
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
480
|
+
this.summarizer?.off(event as any, listener),
|
|
481
|
+
);
|
|
472
482
|
this.forwardedEvents.clear();
|
|
473
483
|
}
|
|
474
484
|
}
|
package/src/throttler.ts
CHANGED
|
@@ -16,9 +16,13 @@ export interface IThrottler {
|
|
|
16
16
|
*/
|
|
17
17
|
readonly numAttempts: number;
|
|
18
18
|
|
|
19
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Width of sliding delay window in milliseconds.
|
|
21
|
+
*/
|
|
20
22
|
readonly delayWindowMs: number;
|
|
21
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Maximum delay allowed in milliseconds.
|
|
25
|
+
*/
|
|
22
26
|
readonly maxDelayMs: number;
|
|
23
27
|
/**
|
|
24
28
|
* Delay function used to calculate what the delay should be.
|
|
@@ -35,7 +39,7 @@ export interface IThrottler {
|
|
|
35
39
|
export class Throttler implements IThrottler {
|
|
36
40
|
private startTimes: number[] = [];
|
|
37
41
|
|
|
38
|
-
public get numAttempts() {
|
|
42
|
+
public get numAttempts(): number {
|
|
39
43
|
return this.startTimes.length;
|
|
40
44
|
}
|
|
41
45
|
|
|
@@ -51,16 +55,20 @@ export class Throttler implements IThrottler {
|
|
|
51
55
|
* Latest attempt time after compensating for the delay time itself
|
|
52
56
|
* by adding the delay time to the actual time.
|
|
53
57
|
*/
|
|
54
|
-
public get latestAttemptTime() {
|
|
58
|
+
public get latestAttemptTime(): number | undefined {
|
|
55
59
|
return this.startTimes.length > 0
|
|
56
60
|
? this.startTimes[this.startTimes.length - 1]
|
|
57
61
|
: undefined;
|
|
58
62
|
}
|
|
59
63
|
|
|
60
64
|
constructor(
|
|
61
|
-
/**
|
|
65
|
+
/**
|
|
66
|
+
* Width of sliding delay window in milliseconds.
|
|
67
|
+
*/
|
|
62
68
|
public readonly delayWindowMs: number,
|
|
63
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* Maximum delay allowed in milliseconds.
|
|
71
|
+
*/
|
|
64
72
|
public readonly maxDelayMs: number,
|
|
65
73
|
/**
|
|
66
74
|
* Delay function used to calculate what the delay should be.
|
|
@@ -70,7 +78,7 @@ export class Throttler implements IThrottler {
|
|
|
70
78
|
public readonly delayFn: (numAttempts: number) => number,
|
|
71
79
|
) {}
|
|
72
80
|
|
|
73
|
-
public getDelay() {
|
|
81
|
+
public getDelay(): number {
|
|
74
82
|
const now = Date.now();
|
|
75
83
|
|
|
76
84
|
const latestAttemptTime = this.latestAttemptTime;
|
|
@@ -131,7 +139,9 @@ export const formExponentialFn =
|
|
|
131
139
|
: coefficient * Math.pow(multiplier, numAttempts) + offset,
|
|
132
140
|
);
|
|
133
141
|
|
|
134
|
-
/**
|
|
142
|
+
/**
|
|
143
|
+
* f(n) = C x (B^(n+A)) + F = (C x B^A) x B^n + F
|
|
144
|
+
*/
|
|
135
145
|
export const formExponentialFnWithAttemptOffset = (
|
|
136
146
|
attemptOffset: number,
|
|
137
147
|
{
|
|
@@ -140,7 +150,7 @@ export const formExponentialFnWithAttemptOffset = (
|
|
|
140
150
|
offset = 0,
|
|
141
151
|
initialDelay = undefined as number | undefined,
|
|
142
152
|
} = {},
|
|
143
|
-
) =>
|
|
153
|
+
): IThrottler["delayFn"] =>
|
|
144
154
|
formExponentialFn({
|
|
145
155
|
multiplier,
|
|
146
156
|
coefficient: coefficient * Math.pow(multiplier, attemptOffset),
|
|
@@ -160,11 +170,13 @@ export const formLinearFn =
|
|
|
160
170
|
(numAttempts) =>
|
|
161
171
|
Math.max(0, coefficient * numAttempts + offset);
|
|
162
172
|
|
|
163
|
-
/**
|
|
173
|
+
/**
|
|
174
|
+
* f(n) = C x (n+A) + F = C x n + (C x A + F)
|
|
175
|
+
*/
|
|
164
176
|
export const formLinearFnWithAttemptOffset = (
|
|
165
177
|
attemptOffset: number,
|
|
166
178
|
{ coefficient = 1, offset = 0 } = {},
|
|
167
|
-
) =>
|
|
179
|
+
): IThrottler["delayFn"] =>
|
|
168
180
|
formLinearFn({
|
|
169
181
|
coefficient,
|
|
170
182
|
offset: coefficient * attemptOffset + offset,
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
import type { EventEmitter } from "@fluid-internal/client-utils";
|
|
6
|
-
import { IDeltaManagerFull } from "@fluidframework/container-definitions/internal";
|
|
7
|
-
import { ISequencedDocumentMessage } from "@fluidframework/driver-definitions/internal";
|
|
8
|
-
import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils/internal";
|
|
9
|
-
/**
|
|
10
|
-
* This class has the following responsibilities:
|
|
11
|
-
*
|
|
12
|
-
* 1. It tracks batches as we process ops and raises "batchBegin" and "batchEnd" events.
|
|
13
|
-
* As part of it, it validates batch correctness (i.e. no system ops in the middle of batch)
|
|
14
|
-
*
|
|
15
|
-
* 2. It creates instance of ScheduleManagerCore that ensures we never start processing ops from batch
|
|
16
|
-
* unless all ops of the batch are in.
|
|
17
|
-
*/
|
|
18
|
-
export declare class ScheduleManager {
|
|
19
|
-
private readonly deltaManager;
|
|
20
|
-
private readonly emitter;
|
|
21
|
-
readonly getClientId: () => string | undefined;
|
|
22
|
-
private readonly logger;
|
|
23
|
-
private readonly deltaScheduler;
|
|
24
|
-
constructor(deltaManager: IDeltaManagerFull, emitter: EventEmitter, getClientId: () => string | undefined, logger: ITelemetryLoggerExt);
|
|
25
|
-
batchBegin(message: ISequencedDocumentMessage): void;
|
|
26
|
-
batchEnd(error: any | undefined, message: ISequencedDocumentMessage): void;
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=scheduleManager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scheduleManager.d.ts","sourceRoot":"","sources":["../src/scheduleManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAEnF,OAAO,EAEN,yBAAyB,EACzB,MAAM,6CAA6C,CAAC;AAErD,OAAO,EACN,mBAAmB,EAKnB,MAAM,0CAA0C,CAAC;AAYlD;;;;;;;;GAQG;AACH,qBAAa,eAAe;IAI1B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,MAAM,GAAG,SAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM;IANxB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;gBAG9B,YAAY,EAAE,iBAAiB,EAC/B,OAAO,EAAE,YAAY,EAC7B,WAAW,EAAE,MAAM,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE,mBAAmB;IAStC,UAAU,CAAC,OAAO,EAAE,yBAAyB;IAK7C,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,SAAS,EAAE,OAAO,EAAE,yBAAyB;CAI1E"}
|