@fluidframework/container-runtime 2.13.0 → 2.21.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 +71 -5
- package/CHANGELOG.md +84 -0
- package/api-report/container-runtime.legacy.alpha.api.md +38 -232
- package/dist/batchTracker.d.ts +1 -2
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js +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 +30 -13
- package/dist/blobManager/blobManager.js.map +1 -1
- package/dist/blobManager/blobManagerSnapSum.d.ts +1 -0
- package/dist/blobManager/blobManagerSnapSum.d.ts.map +1 -1
- package/dist/blobManager/blobManagerSnapSum.js +7 -5
- 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 +85 -53
- package/dist/channelCollection.js.map +1 -1
- package/dist/connectionTelemetry.d.ts +2 -2
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +10 -6
- 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 +87 -94
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +312 -226
- 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 +8 -4
- 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 +47 -29
- 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 +7 -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 +48 -19
- 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 +5 -2
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +218 -70
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js +40 -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 +14 -7
- 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 +2 -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 +35 -17
- 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/layerCompatState.d.ts +19 -0
- package/dist/layerCompatState.d.ts.map +1 -0
- package/dist/layerCompatState.js +64 -0
- package/dist/layerCompatState.js.map +1 -0
- 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 +11 -5
- package/dist/opLifecycle/duplicateBatchDetector.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts +3 -2
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +13 -19
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts +6 -1
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +16 -8
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts +1 -2
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js +9 -6
- package/dist/opLifecycle/opGroupingManager.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts +13 -10
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +16 -11
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +4 -4
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +17 -16
- 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 +3 -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 +22 -11
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +24 -15
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/summary/documentSchema.d.ts +7 -0
- package/dist/summary/documentSchema.d.ts.map +1 -1
- package/dist/summary/documentSchema.js +8 -4
- 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 +94 -31
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js +28 -16
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -0
- package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.js +7 -2
- 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 +48 -19
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.d.ts +10 -5
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +26 -11
- package/dist/summary/summarizer.js.map +1 -1
- package/dist/summary/summarizerClientElection.d.ts.map +1 -1
- package/dist/summary/summarizerClientElection.js +1 -0
- 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 +13 -5
- package/dist/summary/summarizerHeuristics.js.map +1 -1
- package/dist/summary/summarizerNode/index.d.ts.map +1 -1
- package/dist/summary/summarizerNode/index.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 +45 -36
- 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 +13 -5
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +15 -7
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +253 -135
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryCollection.d.ts +3 -4
- package/dist/summary/summaryCollection.d.ts.map +1 -1
- package/dist/summary/summaryCollection.js +10 -8
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +28 -9
- package/dist/summary/summaryFormat.d.ts.map +1 -1
- package/dist/summary/summaryFormat.js +3 -2
- 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 +22 -9
- 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 +20 -9
- 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 +1 -2
- package/lib/batchTracker.d.ts.map +1 -1
- package/lib/batchTracker.js +2 -2
- 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 +30 -13
- package/lib/blobManager/blobManager.js.map +1 -1
- package/lib/blobManager/blobManagerSnapSum.d.ts +1 -0
- package/lib/blobManager/blobManagerSnapSum.d.ts.map +1 -1
- package/lib/blobManager/blobManagerSnapSum.js +7 -5
- 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 +88 -54
- package/lib/channelCollection.js.map +1 -1
- package/lib/connectionTelemetry.d.ts +2 -2
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +11 -7
- 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 +87 -94
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +319 -228
- 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 +8 -4
- 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 +47 -29
- 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 +7 -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 +96 -90
- 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 +51 -20
- 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 +4 -2
- package/lib/gc/gcConfigs.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +218 -70
- package/lib/gc/gcDefinitions.d.ts.map +1 -1
- package/lib/gc/gcDefinitions.js +40 -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 +14 -7
- 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 +2 -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 +38 -18
- 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/layerCompatState.d.ts +19 -0
- package/lib/layerCompatState.d.ts.map +1 -0
- package/lib/layerCompatState.js +60 -0
- package/lib/layerCompatState.js.map +1 -0
- 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 +11 -5
- package/lib/opLifecycle/duplicateBatchDetector.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts +3 -2
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js +14 -20
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts +6 -1
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +17 -9
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts +1 -2
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/lib/opLifecycle/opGroupingManager.js +10 -7
- package/lib/opLifecycle/opGroupingManager.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts +13 -10
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +16 -11
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +4 -4
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +17 -16
- 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 +3 -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 +22 -11
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +25 -16
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/summary/documentSchema.d.ts +7 -0
- package/lib/summary/documentSchema.d.ts.map +1 -1
- package/lib/summary/documentSchema.js +8 -4
- 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 +94 -31
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js +28 -16
- package/lib/summary/orderedClientElection.js.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.d.ts +1 -0
- package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js +7 -2
- 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 +48 -19
- package/lib/summary/runningSummarizer.js.map +1 -1
- package/lib/summary/summarizer.d.ts +10 -5
- package/lib/summary/summarizer.d.ts.map +1 -1
- package/lib/summary/summarizer.js +26 -11
- package/lib/summary/summarizer.js.map +1 -1
- package/lib/summary/summarizerClientElection.d.ts.map +1 -1
- package/lib/summary/summarizerClientElection.js +1 -0
- 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 +13 -5
- package/lib/summary/summarizerHeuristics.js.map +1 -1
- package/lib/summary/summarizerNode/index.d.ts.map +1 -1
- package/lib/summary/summarizerNode/index.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 +45 -36
- 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 +13 -5
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +15 -7
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/lib/summary/summarizerTypes.d.ts +253 -135
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryCollection.d.ts +3 -4
- package/lib/summary/summaryCollection.d.ts.map +1 -1
- package/lib/summary/summaryCollection.js +10 -8
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryFormat.d.ts +28 -9
- package/lib/summary/summaryFormat.d.ts.map +1 -1
- package/lib/summary/summaryFormat.js +2 -2
- 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 +22 -9
- 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 +20 -9
- 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 +22 -31
- package/src/batchTracker.ts +34 -36
- package/src/blobManager/blobManager.ts +54 -33
- package/src/blobManager/blobManagerSnapSum.ts +10 -10
- package/src/channelCollection.ts +108 -82
- package/src/connectionTelemetry.ts +43 -19
- package/src/containerHandleContext.ts +2 -2
- package/src/containerRuntime.ts +492 -364
- package/src/dataStore.ts +17 -9
- package/src/dataStoreContext.ts +94 -73
- package/src/dataStoreContexts.ts +17 -12
- package/src/dataStoreRegistry.ts +1 -1
- package/src/deltaManagerProxies.ts +5 -5
- package/src/deltaScheduler.ts +24 -18
- package/src/gc/garbageCollection.ts +89 -40
- package/src/gc/gcConfigs.ts +13 -5
- package/src/gc/gcDefinitions.ts +224 -70
- package/src/gc/gcHelpers.ts +22 -11
- package/src/gc/gcReferenceGraphAlgorithm.ts +1 -1
- package/src/gc/gcSummaryDefinitions.ts +18 -6
- package/src/gc/gcSummaryStateTracker.ts +7 -3
- package/src/gc/gcTelemetry.ts +73 -30
- package/src/gc/gcUnreferencedStateTracker.ts +40 -16
- package/src/gc/index.ts +1 -0
- package/src/{scheduleManager.ts → inboundBatchAggregator.ts} +55 -122
- package/src/index.ts +0 -3
- package/src/layerCompatState.ts +75 -0
- package/src/messageTypes.ts +16 -5
- package/src/metadata.ts +12 -4
- package/src/opLifecycle/README.md +43 -34
- package/src/opLifecycle/batchManager.ts +12 -6
- package/src/opLifecycle/duplicateBatchDetector.ts +12 -6
- package/src/opLifecycle/opCompressor.ts +22 -25
- package/src/opLifecycle/opDecompressor.ts +23 -11
- package/src/opLifecycle/opGroupingManager.ts +16 -11
- package/src/opLifecycle/opSplitter.ts +24 -18
- package/src/opLifecycle/outbox.ts +35 -33
- package/src/opLifecycle/remoteMessageProcessor.ts +13 -5
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +49 -26
- package/src/summary/documentSchema.ts +41 -22
- package/src/summary/index.ts +0 -3
- package/src/summary/orderedClientElection.ts +114 -49
- package/src/summary/runWhileConnectedCoordinator.ts +12 -3
- package/src/summary/runningSummarizer.ts +79 -36
- package/src/summary/summarizer.ts +51 -25
- package/src/summary/summarizerClientElection.ts +4 -2
- package/src/summary/summarizerHeuristics.ts +23 -12
- package/src/summary/summarizerNode/index.ts +1 -0
- package/src/summary/summarizerNode/summarizerNode.ts +54 -43
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +48 -16
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +25 -15
- package/src/summary/summarizerTypes.ts +253 -139
- package/src/summary/summaryCollection.ts +41 -31
- package/src/summary/summaryFormat.ts +34 -13
- package/src/summary/summaryGenerator.ts +39 -18
- package/src/summary/summaryManager.ts +36 -24
- package/src/throttler.ts +23 -11
- package/container-runtime.test-files.tar +0 -0
- 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
|
@@ -23,6 +23,7 @@ import {
|
|
|
23
23
|
createChildLogger,
|
|
24
24
|
createChildMonitoringContext,
|
|
25
25
|
isFluidError,
|
|
26
|
+
type ITelemetryLoggerExt,
|
|
26
27
|
} from "@fluidframework/telemetry-utils/internal";
|
|
27
28
|
|
|
28
29
|
import { ISummaryConfiguration } from "../containerRuntime.js";
|
|
@@ -33,7 +34,9 @@ import {
|
|
|
33
34
|
EnqueueSummarizeResult,
|
|
34
35
|
IEnqueueSummarizeOptions,
|
|
35
36
|
IOnDemandSummarizeOptions,
|
|
37
|
+
// eslint-disable-next-line import/no-deprecated
|
|
36
38
|
IRefreshSummaryAckOptions,
|
|
39
|
+
// eslint-disable-next-line import/no-deprecated
|
|
37
40
|
ISubmitSummaryOptions,
|
|
38
41
|
ISummarizeHeuristicData,
|
|
39
42
|
ISummarizeHeuristicRunner,
|
|
@@ -41,7 +44,9 @@ import {
|
|
|
41
44
|
ISummarizeResults,
|
|
42
45
|
ISummarizeRunnerTelemetry,
|
|
43
46
|
ISummarizeTelemetryProperties,
|
|
47
|
+
// eslint-disable-next-line import/no-deprecated
|
|
44
48
|
ISummarizerRuntime,
|
|
49
|
+
// eslint-disable-next-line import/no-deprecated
|
|
45
50
|
ISummaryCancellationToken,
|
|
46
51
|
SubmitSummaryResult,
|
|
47
52
|
type IRetriableFailureError,
|
|
@@ -87,12 +92,16 @@ export class RunningSummarizer
|
|
|
87
92
|
logger: ITelemetryBaseLogger,
|
|
88
93
|
summaryWatcher: IClientSummaryWatcher,
|
|
89
94
|
configuration: ISummaryConfiguration,
|
|
95
|
+
// eslint-disable-next-line import/no-deprecated
|
|
90
96
|
submitSummaryCallback: (options: ISubmitSummaryOptions) => Promise<SubmitSummaryResult>,
|
|
97
|
+
// eslint-disable-next-line import/no-deprecated
|
|
91
98
|
refreshLatestSummaryAckCallback: (options: IRefreshSummaryAckOptions) => Promise<void>,
|
|
92
99
|
heuristicData: ISummarizeHeuristicData,
|
|
93
100
|
summaryCollection: SummaryCollection,
|
|
101
|
+
// eslint-disable-next-line import/no-deprecated
|
|
94
102
|
cancellationToken: ISummaryCancellationToken,
|
|
95
103
|
stopSummarizerCallback: (reason: SummarizerStopReason) => void,
|
|
104
|
+
// eslint-disable-next-line import/no-deprecated
|
|
96
105
|
runtime: ISummarizerRuntime,
|
|
97
106
|
): Promise<RunningSummarizer> {
|
|
98
107
|
const summarizer = new RunningSummarizer(
|
|
@@ -163,7 +172,7 @@ export class RunningSummarizer
|
|
|
163
172
|
return summarizer;
|
|
164
173
|
}
|
|
165
174
|
|
|
166
|
-
public get disposed() {
|
|
175
|
+
public get disposed(): boolean {
|
|
167
176
|
return this._disposed;
|
|
168
177
|
}
|
|
169
178
|
private stopping = false;
|
|
@@ -187,9 +196,14 @@ export class RunningSummarizer
|
|
|
187
196
|
private totalSuccessfulAttempts = 0;
|
|
188
197
|
private initialized = false;
|
|
189
198
|
|
|
190
|
-
private readonly runtimeListener
|
|
199
|
+
private readonly runtimeListener: (
|
|
200
|
+
op: ISequencedDocumentMessage,
|
|
201
|
+
runtimeMessage?: boolean,
|
|
202
|
+
) => void;
|
|
191
203
|
|
|
192
|
-
/**
|
|
204
|
+
/**
|
|
205
|
+
* The maximum number of summary attempts to do when submit summary fails.
|
|
206
|
+
*/
|
|
193
207
|
private readonly maxAttemptsForSubmitFailures: number;
|
|
194
208
|
|
|
195
209
|
/**
|
|
@@ -204,15 +218,19 @@ export class RunningSummarizer
|
|
|
204
218
|
private readonly summaryWatcher: IClientSummaryWatcher,
|
|
205
219
|
private readonly configuration: ISummaryConfiguration,
|
|
206
220
|
private readonly submitSummaryCallback: (
|
|
221
|
+
// eslint-disable-next-line import/no-deprecated
|
|
207
222
|
options: ISubmitSummaryOptions,
|
|
208
223
|
) => Promise<SubmitSummaryResult>,
|
|
209
224
|
private readonly refreshLatestSummaryAckCallback: (
|
|
225
|
+
// eslint-disable-next-line import/no-deprecated
|
|
210
226
|
options: IRefreshSummaryAckOptions,
|
|
211
227
|
) => Promise<void>,
|
|
212
228
|
private readonly heuristicData: ISummarizeHeuristicData,
|
|
213
229
|
private readonly summaryCollection: SummaryCollection,
|
|
230
|
+
// eslint-disable-next-line import/no-deprecated
|
|
214
231
|
private readonly cancellationToken: ISummaryCancellationToken,
|
|
215
232
|
private readonly stopSummarizerCallback: (reason: SummarizerStopReason) => void,
|
|
233
|
+
// eslint-disable-next-line import/no-deprecated
|
|
216
234
|
private readonly runtime: ISummarizerRuntime,
|
|
217
235
|
) {
|
|
218
236
|
super();
|
|
@@ -290,6 +308,7 @@ export class RunningSummarizer
|
|
|
290
308
|
() => {
|
|
291
309
|
this.totalSuccessfulAttempts++;
|
|
292
310
|
},
|
|
311
|
+
// eslint-disable-next-line import/no-deprecated
|
|
293
312
|
async (options: IRefreshSummaryAckOptions) => {
|
|
294
313
|
if (immediatelyRefreshLatestSummaryAck) {
|
|
295
314
|
await this.refreshLatestSummaryAckAndHandleError(options);
|
|
@@ -317,7 +336,7 @@ export class RunningSummarizer
|
|
|
317
336
|
: defaultMaxAttemptsForSubmitFailures;
|
|
318
337
|
}
|
|
319
338
|
|
|
320
|
-
private async handleSummaryAck(ack: IAckedSummary) {
|
|
339
|
+
private async handleSummaryAck(ack: IAckedSummary): Promise<void> {
|
|
321
340
|
const refSequenceNumber = ack.summaryOp.referenceSequenceNumber;
|
|
322
341
|
const summaryLogger = this.tryGetCorrelatedLogger(refSequenceNumber) ?? this.mc.logger;
|
|
323
342
|
const summaryOpHandle = ack.summaryOp.contents.handle;
|
|
@@ -338,6 +357,7 @@ export class RunningSummarizer
|
|
|
338
357
|
await this.lockedSummaryAction(
|
|
339
358
|
() => {},
|
|
340
359
|
async () => {
|
|
360
|
+
// eslint-disable-next-line import/no-deprecated
|
|
341
361
|
const options: IRefreshSummaryAckOptions = {
|
|
342
362
|
proposalHandle: summaryOpHandle,
|
|
343
363
|
ackHandle: summaryAckHandle,
|
|
@@ -351,8 +371,9 @@ export class RunningSummarizer
|
|
|
351
371
|
}
|
|
352
372
|
|
|
353
373
|
private readonly refreshLatestSummaryAckAndHandleError = async (
|
|
374
|
+
// eslint-disable-next-line import/no-deprecated
|
|
354
375
|
options: IRefreshSummaryAckOptions,
|
|
355
|
-
) => {
|
|
376
|
+
): Promise<void> => {
|
|
356
377
|
return this.refreshLatestSummaryAckCallback(options).catch(async (error) => {
|
|
357
378
|
// If the error is 404, so maybe the fetched version no longer exists on server. We just
|
|
358
379
|
// ignore this error in that case, as that means we will have another summaryAck for the
|
|
@@ -387,7 +408,7 @@ export class RunningSummarizer
|
|
|
387
408
|
* @param referenceSequenceNumber - The referenceSequenceNumber of the summary from which to start processing
|
|
388
409
|
* acks.
|
|
389
410
|
*/
|
|
390
|
-
private async processIncomingSummaryAcks(referenceSequenceNumber: number) {
|
|
411
|
+
private async processIncomingSummaryAcks(referenceSequenceNumber: number): Promise<void> {
|
|
391
412
|
// Start waiting for acks that are for summaries newer that the one this client loaded from.
|
|
392
413
|
let nextReferenceSequenceNumber = referenceSequenceNumber;
|
|
393
414
|
while (!this.disposed) {
|
|
@@ -417,15 +438,19 @@ export class RunningSummarizer
|
|
|
417
438
|
* but only if they're logging about that same summary.
|
|
418
439
|
* @param summaryOpRefSeq - RefSeq number of the summary op, to ensure the log correlation will be correct
|
|
419
440
|
*/
|
|
420
|
-
public tryGetCorrelatedLogger = (
|
|
441
|
+
public tryGetCorrelatedLogger = (
|
|
442
|
+
summaryOpRefSeq: number,
|
|
443
|
+
): ITelemetryLoggerExt | undefined =>
|
|
421
444
|
this.heuristicData.lastAttempt.refSequenceNumber === summaryOpRefSeq
|
|
422
445
|
? this.mc.logger
|
|
423
446
|
: undefined;
|
|
424
447
|
|
|
425
|
-
/**
|
|
448
|
+
/**
|
|
449
|
+
* We only want a single heuristic runner micro-task (will provide better optimized grouping of ops)
|
|
450
|
+
*/
|
|
426
451
|
private heuristicRunnerMicroTaskExists = false;
|
|
427
452
|
|
|
428
|
-
public handleOp(op: ISequencedDocumentMessage, runtimeMessage: boolean) {
|
|
453
|
+
public handleOp(op: ISequencedDocumentMessage, runtimeMessage: boolean): void {
|
|
429
454
|
this.heuristicData.lastOpSequenceNumber = op.sequenceNumber;
|
|
430
455
|
|
|
431
456
|
if (runtimeMessage) {
|
|
@@ -468,10 +493,12 @@ export class RunningSummarizer
|
|
|
468
493
|
switch (op.type) {
|
|
469
494
|
case MessageType.Summarize:
|
|
470
495
|
case MessageType.SummaryAck:
|
|
471
|
-
case MessageType.SummaryNack:
|
|
496
|
+
case MessageType.SummaryNack: {
|
|
472
497
|
return false;
|
|
473
|
-
|
|
498
|
+
}
|
|
499
|
+
default: {
|
|
474
500
|
return runtimeMessage || this.nonRuntimeOpCanTriggerSummary();
|
|
501
|
+
}
|
|
475
502
|
}
|
|
476
503
|
}
|
|
477
504
|
|
|
@@ -496,16 +523,18 @@ export class RunningSummarizer
|
|
|
496
523
|
this.disposeEnqueuedSummary();
|
|
497
524
|
|
|
498
525
|
// This will try to run lastSummary if needed.
|
|
499
|
-
if (
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
526
|
+
if (
|
|
527
|
+
allowLastSummary &&
|
|
528
|
+
this.heuristicRunner?.shouldRunLastSummary() &&
|
|
529
|
+
this.summarizingLock === undefined
|
|
530
|
+
) {
|
|
531
|
+
this.trySummarizeOnce(
|
|
532
|
+
// summarizeProps
|
|
533
|
+
{ summarizeReason: "lastSummary" },
|
|
534
|
+
{},
|
|
535
|
+
undefined,
|
|
536
|
+
true /* isLastSummary */,
|
|
537
|
+
);
|
|
509
538
|
}
|
|
510
539
|
|
|
511
540
|
// Note that trySummarizeOnce() call above returns right away, without waiting.
|
|
@@ -525,7 +554,7 @@ export class RunningSummarizer
|
|
|
525
554
|
this.lastSummarizeFailureEventProps = undefined;
|
|
526
555
|
}
|
|
527
556
|
|
|
528
|
-
private async waitStart() {
|
|
557
|
+
private async waitStart(): Promise<void> {
|
|
529
558
|
// Wait no longer than ack timeout for all pending
|
|
530
559
|
const waitStartResult = await raceTimer(
|
|
531
560
|
this.summaryWatcher.waitFlushed(),
|
|
@@ -548,11 +577,11 @@ export class RunningSummarizer
|
|
|
548
577
|
this.initialized = true;
|
|
549
578
|
}
|
|
550
579
|
|
|
551
|
-
private beforeSummaryAction() {
|
|
580
|
+
private beforeSummaryAction(): void {
|
|
552
581
|
this.summarizeCount++;
|
|
553
582
|
}
|
|
554
583
|
|
|
555
|
-
private afterSummaryAction() {
|
|
584
|
+
private afterSummaryAction(): void {
|
|
556
585
|
const retry = this.tryWhileSummarizing;
|
|
557
586
|
this.tryWhileSummarizing = false;
|
|
558
587
|
|
|
@@ -576,7 +605,7 @@ export class RunningSummarizer
|
|
|
576
605
|
before: () => void,
|
|
577
606
|
action: () => Promise<T>,
|
|
578
607
|
after: () => void,
|
|
579
|
-
) {
|
|
608
|
+
): Promise<T> {
|
|
580
609
|
assert(
|
|
581
610
|
this.summarizingLock === undefined,
|
|
582
611
|
0x25b /* "Caller is responsible for checking lock" */,
|
|
@@ -618,6 +647,7 @@ export class RunningSummarizer
|
|
|
618
647
|
logger: this.mc.logger,
|
|
619
648
|
properties: { all: summarizeProps },
|
|
620
649
|
});
|
|
650
|
+
// eslint-disable-next-line import/no-deprecated
|
|
621
651
|
const summaryOptions: ISubmitSummaryOptions = {
|
|
622
652
|
...options,
|
|
623
653
|
summaryLogger,
|
|
@@ -680,7 +710,9 @@ export class RunningSummarizer
|
|
|
680
710
|
return resultsBuilder.build();
|
|
681
711
|
}
|
|
682
712
|
|
|
683
|
-
/**
|
|
713
|
+
/**
|
|
714
|
+
* Heuristics summarize attempt.
|
|
715
|
+
*/
|
|
684
716
|
private trySummarize(reason: SummarizeReason): void {
|
|
685
717
|
if (this.summarizingLock !== undefined) {
|
|
686
718
|
// lockedSummaryAction() will retry heuristic-based summary at the end of current attempt
|
|
@@ -712,7 +744,13 @@ export class RunningSummarizer
|
|
|
712
744
|
reason: SummarizeReason,
|
|
713
745
|
): Promise<ISummarizeResults | undefined> {
|
|
714
746
|
// Helper to set summarize options, telemetry properties and call summarize.
|
|
715
|
-
const attemptSummarize = (
|
|
747
|
+
const attemptSummarize = (
|
|
748
|
+
attemptNumber: number,
|
|
749
|
+
finalAttempt: boolean,
|
|
750
|
+
): {
|
|
751
|
+
summarizeProps: ISummarizeTelemetryProperties;
|
|
752
|
+
summarizeResult: ISummarizeResults;
|
|
753
|
+
} => {
|
|
716
754
|
const summarizeOptions: ISummarizeOptions = {
|
|
717
755
|
fullTree: false,
|
|
718
756
|
};
|
|
@@ -726,6 +764,7 @@ export class RunningSummarizer
|
|
|
726
764
|
logger: this.mc.logger,
|
|
727
765
|
properties: { all: summarizeProps },
|
|
728
766
|
});
|
|
767
|
+
// eslint-disable-next-line import/no-deprecated
|
|
729
768
|
const summaryOptions: ISubmitSummaryOptions = {
|
|
730
769
|
...summarizeOptions,
|
|
731
770
|
summaryLogger,
|
|
@@ -777,9 +816,9 @@ export class RunningSummarizer
|
|
|
777
816
|
// If submit summary failed, use maxAttemptsForSubmitFailures. Else use the defaultMaxAttempts.
|
|
778
817
|
// Note: Check "summarySubmitted" result first because if it fails, ack nack would fail as well.
|
|
779
818
|
const submitSummaryResult = await results.summarySubmitted;
|
|
780
|
-
maxAttempts =
|
|
781
|
-
?
|
|
782
|
-
:
|
|
819
|
+
maxAttempts = submitSummaryResult.success
|
|
820
|
+
? defaultMaxAttempts
|
|
821
|
+
: this.maxAttemptsForSubmitFailures;
|
|
783
822
|
|
|
784
823
|
// Emit "summarize" event for this failed attempt.
|
|
785
824
|
status = "failure";
|
|
@@ -878,7 +917,7 @@ export class RunningSummarizer
|
|
|
878
917
|
private async summarizeOnDemandWithRetries(
|
|
879
918
|
reason: SummarizeReason,
|
|
880
919
|
resultsBuilder: SummarizeResultBuilder,
|
|
881
|
-
) {
|
|
920
|
+
): Promise<ISummarizeResults> {
|
|
882
921
|
const results = await this.trySummarizeWithRetries(reason);
|
|
883
922
|
if (results === undefined) {
|
|
884
923
|
resultsBuilder.fail(
|
|
@@ -896,7 +935,9 @@ export class RunningSummarizer
|
|
|
896
935
|
return resultsBuilder.build();
|
|
897
936
|
}
|
|
898
937
|
|
|
899
|
-
/**
|
|
938
|
+
/**
|
|
939
|
+
*{@inheritdoc (ISummarizer:interface).summarizeOnDemand}
|
|
940
|
+
*/
|
|
900
941
|
public summarizeOnDemand(
|
|
901
942
|
options: IOnDemandSummarizeOptions,
|
|
902
943
|
resultsBuilder: SummarizeResultBuilder = new SummarizeResultBuilder(),
|
|
@@ -918,7 +959,7 @@ export class RunningSummarizer
|
|
|
918
959
|
const { reason, ...summarizeOptions } = options;
|
|
919
960
|
if (options.retryOnFailure === true) {
|
|
920
961
|
this.summarizeOnDemandWithRetries(`onDemand;${reason}`, resultsBuilder).catch(
|
|
921
|
-
(error) => {
|
|
962
|
+
(error: IRetriableFailureError) => {
|
|
922
963
|
resultsBuilder.fail("summarize failed", error);
|
|
923
964
|
},
|
|
924
965
|
);
|
|
@@ -932,7 +973,9 @@ export class RunningSummarizer
|
|
|
932
973
|
return resultsBuilder.build();
|
|
933
974
|
}
|
|
934
975
|
|
|
935
|
-
/**
|
|
976
|
+
/**
|
|
977
|
+
*{@inheritdoc (ISummarizer:interface).enqueueSummarize}
|
|
978
|
+
*/
|
|
936
979
|
public enqueueSummarize(options: IEnqueueSummarizeOptions): EnqueueSummarizeResult {
|
|
937
980
|
const { reason, afterSequenceNumber = 0, override = false, ...summarizeOptions } = options;
|
|
938
981
|
let overridden = false;
|
|
@@ -968,7 +1011,7 @@ export class RunningSummarizer
|
|
|
968
1011
|
: results;
|
|
969
1012
|
}
|
|
970
1013
|
|
|
971
|
-
private tryRunEnqueuedSummary() {
|
|
1014
|
+
private tryRunEnqueuedSummary(): boolean {
|
|
972
1015
|
if (this.stopping) {
|
|
973
1016
|
this.disposeEnqueuedSummary();
|
|
974
1017
|
return false;
|
|
@@ -992,7 +1035,7 @@ export class RunningSummarizer
|
|
|
992
1035
|
return true;
|
|
993
1036
|
}
|
|
994
1037
|
|
|
995
|
-
private disposeEnqueuedSummary() {
|
|
1038
|
+
private disposeEnqueuedSummary(): void {
|
|
996
1039
|
if (this.enqueuedSummary !== undefined) {
|
|
997
1040
|
this.enqueuedSummary.resultsBuilder.fail(
|
|
998
1041
|
"RunningSummarizer stopped or disposed",
|
|
@@ -21,20 +21,25 @@ import {
|
|
|
21
21
|
|
|
22
22
|
import { ISummaryConfiguration } from "../containerRuntime.js";
|
|
23
23
|
|
|
24
|
+
// eslint-disable-next-line import/no-deprecated
|
|
24
25
|
import { ICancellableSummarizerController } from "./runWhileConnectedCoordinator.js";
|
|
25
26
|
import { RunningSummarizer } from "./runningSummarizer.js";
|
|
26
27
|
import { SummarizeHeuristicData } from "./summarizerHeuristics.js";
|
|
27
28
|
import {
|
|
28
29
|
EnqueueSummarizeResult,
|
|
30
|
+
// eslint-disable-next-line import/no-deprecated
|
|
29
31
|
IConnectableRuntime,
|
|
30
32
|
IEnqueueSummarizeOptions,
|
|
31
33
|
IOnDemandSummarizeOptions,
|
|
32
34
|
ISummarizeHeuristicData,
|
|
33
35
|
ISummarizeResults,
|
|
34
36
|
ISummarizer,
|
|
37
|
+
// eslint-disable-next-line import/no-deprecated
|
|
35
38
|
ISummarizerInternalsProvider,
|
|
39
|
+
// eslint-disable-next-line import/no-deprecated
|
|
36
40
|
ISummarizerRuntime,
|
|
37
41
|
ISummarizingWarning,
|
|
42
|
+
type IRetriableFailureError,
|
|
38
43
|
} from "./summarizerTypes.js";
|
|
39
44
|
import { SummaryCollection } from "./summaryCollection.js";
|
|
40
45
|
import { SummarizeResultBuilder } from "./summaryGenerator.js";
|
|
@@ -55,14 +60,21 @@ export class SummarizingWarning
|
|
|
55
60
|
super(errorMessage);
|
|
56
61
|
}
|
|
57
62
|
|
|
58
|
-
static wrap(
|
|
59
|
-
|
|
63
|
+
static wrap(
|
|
64
|
+
error: unknown,
|
|
65
|
+
logged: boolean = false,
|
|
66
|
+
logger: ITelemetryLoggerExt,
|
|
67
|
+
): SummarizingWarning {
|
|
68
|
+
const newErrorFn = (errMsg: string): SummarizingWarning =>
|
|
69
|
+
new SummarizingWarning(errMsg, logged);
|
|
60
70
|
return wrapErrorAndLog<SummarizingWarning>(error, newErrorFn, logger);
|
|
61
71
|
}
|
|
62
72
|
}
|
|
63
73
|
|
|
64
|
-
export const createSummarizingWarning = (
|
|
65
|
-
|
|
74
|
+
export const createSummarizingWarning = (
|
|
75
|
+
errorMessage: string,
|
|
76
|
+
logged: boolean,
|
|
77
|
+
): SummarizingWarning => new SummarizingWarning(errorMessage, logged);
|
|
66
78
|
|
|
67
79
|
/**
|
|
68
80
|
* Summarizer is responsible for coordinating when to generate and send summaries.
|
|
@@ -70,9 +82,10 @@ export const createSummarizingWarning = (errorMessage: string, logged: boolean)
|
|
|
70
82
|
* It is created only by summarizing container (i.e. one with clientType === "summarizer")
|
|
71
83
|
* @legacy
|
|
72
84
|
* @alpha
|
|
85
|
+
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
73
86
|
*/
|
|
74
87
|
export class Summarizer extends TypedEventEmitter<ISummarizerEvents> implements ISummarizer {
|
|
75
|
-
public get ISummarizer() {
|
|
88
|
+
public get ISummarizer(): this {
|
|
76
89
|
return this;
|
|
77
90
|
}
|
|
78
91
|
|
|
@@ -84,19 +97,25 @@ export class Summarizer extends TypedEventEmitter<ISummarizerEvents> implements
|
|
|
84
97
|
private readonly stopDeferred = new Deferred<SummarizerStopReason>();
|
|
85
98
|
|
|
86
99
|
constructor(
|
|
87
|
-
/**
|
|
100
|
+
/**
|
|
101
|
+
* Reference to runtime that created this object.
|
|
88
102
|
* i.e. runtime with clientType === "summarizer"
|
|
89
103
|
*/
|
|
104
|
+
// eslint-disable-next-line import/no-deprecated
|
|
90
105
|
private readonly runtime: ISummarizerRuntime,
|
|
91
106
|
private readonly configurationGetter: () => ISummaryConfiguration,
|
|
92
|
-
/**
|
|
107
|
+
/**
|
|
108
|
+
* Represents an object that can generate summary.
|
|
93
109
|
* In practical terms, it's same runtime (this.runtime) with clientType === "summarizer".
|
|
94
110
|
*/
|
|
111
|
+
// eslint-disable-next-line import/no-deprecated
|
|
95
112
|
private readonly internalsProvider: ISummarizerInternalsProvider,
|
|
96
113
|
handleContext: IFluidHandleContext,
|
|
97
114
|
public readonly summaryCollection: SummaryCollection,
|
|
98
115
|
private readonly runCoordinatorCreateFn: (
|
|
116
|
+
// eslint-disable-next-line import/no-deprecated
|
|
99
117
|
runtime: IConnectableRuntime,
|
|
118
|
+
// eslint-disable-next-line import/no-deprecated
|
|
100
119
|
) => Promise<ICancellableSummarizerController>,
|
|
101
120
|
) {
|
|
102
121
|
super();
|
|
@@ -134,11 +153,11 @@ export class Summarizer extends TypedEventEmitter<ISummarizerEvents> implements
|
|
|
134
153
|
* the run promise, and also close the container.
|
|
135
154
|
* @param reason - reason code for stopping
|
|
136
155
|
*/
|
|
137
|
-
public stop(reason: SummarizerStopReason) {
|
|
156
|
+
public stop(reason: SummarizerStopReason): void {
|
|
138
157
|
this.stopDeferred.resolve(reason);
|
|
139
158
|
}
|
|
140
159
|
|
|
141
|
-
public close() {
|
|
160
|
+
public close(): void {
|
|
142
161
|
// This will result in "summarizerClientDisconnected" stop reason recorded in telemetry,
|
|
143
162
|
// unless stop() was called earlier
|
|
144
163
|
this.dispose();
|
|
@@ -146,12 +165,14 @@ export class Summarizer extends TypedEventEmitter<ISummarizerEvents> implements
|
|
|
146
165
|
}
|
|
147
166
|
|
|
148
167
|
private async runCore(onBehalfOf: string): Promise<SummarizerStopReason> {
|
|
168
|
+
// eslint-disable-next-line import/no-deprecated
|
|
149
169
|
const runCoordinator: ICancellableSummarizerController = await this.runCoordinatorCreateFn(
|
|
150
170
|
this.runtime,
|
|
151
171
|
);
|
|
152
172
|
|
|
153
173
|
// Wait for either external signal to cancel, or loss of connectivity.
|
|
154
174
|
const stopP = Promise.race([runCoordinator.waitCancelled, this.stopDeferred.promise]);
|
|
175
|
+
// eslint-disable-next-line no-void
|
|
155
176
|
void stopP.then((reason) => {
|
|
156
177
|
this.logger.sendTelemetryEvent({
|
|
157
178
|
eventName: "StoppingSummarizer",
|
|
@@ -230,6 +251,7 @@ export class Summarizer extends TypedEventEmitter<ISummarizerEvents> implements
|
|
|
230
251
|
*/
|
|
231
252
|
private async start(
|
|
232
253
|
onBehalfOf: string,
|
|
254
|
+
// eslint-disable-next-line import/no-deprecated
|
|
233
255
|
runCoordinator: ICancellableSummarizerController,
|
|
234
256
|
): Promise<RunningSummarizer> {
|
|
235
257
|
if (this.runningSummarizer) {
|
|
@@ -259,7 +281,9 @@ export class Summarizer extends TypedEventEmitter<ISummarizerEvents> implements
|
|
|
259
281
|
this._heuristicData = new SummarizeHeuristicData(
|
|
260
282
|
this.runtime.deltaManager.lastSequenceNumber,
|
|
261
283
|
{
|
|
262
|
-
/**
|
|
284
|
+
/**
|
|
285
|
+
* summary attempt baseline for heuristics
|
|
286
|
+
*/
|
|
263
287
|
refSequenceNumber: this.runtime.deltaManager.initialSequenceNumber,
|
|
264
288
|
summaryTime: Date.now(),
|
|
265
289
|
} as const,
|
|
@@ -289,7 +313,7 @@ export class Summarizer extends TypedEventEmitter<ISummarizerEvents> implements
|
|
|
289
313
|
* properties.
|
|
290
314
|
* Called by ContainerRuntime when it is disposed, as well as at the end the run().
|
|
291
315
|
*/
|
|
292
|
-
public dispose() {
|
|
316
|
+
public dispose(): void {
|
|
293
317
|
// Given that the call can come from own ContainerRuntime, ensure that we stop all the processes.
|
|
294
318
|
this.stop("summarizerClientDisconnected");
|
|
295
319
|
|
|
@@ -347,12 +371,12 @@ export class Summarizer extends TypedEventEmitter<ISummarizerEvents> implements
|
|
|
347
371
|
runCoordinator.stop(stopReason);
|
|
348
372
|
this.close();
|
|
349
373
|
})
|
|
350
|
-
.catch((
|
|
351
|
-
builder.fail("Failed to start summarizer",
|
|
374
|
+
.catch((error: IRetriableFailureError) => {
|
|
375
|
+
builder.fail("Failed to start summarizer", error);
|
|
352
376
|
});
|
|
353
377
|
})
|
|
354
|
-
.catch((
|
|
355
|
-
builder.fail("Failed to create cancellation token",
|
|
378
|
+
.catch((error: IRetriableFailureError) => {
|
|
379
|
+
builder.fail("Failed to create cancellation token", error);
|
|
356
380
|
});
|
|
357
381
|
|
|
358
382
|
return builder.build();
|
|
@@ -372,26 +396,28 @@ export class Summarizer extends TypedEventEmitter<ISummarizerEvents> implements
|
|
|
372
396
|
return this.runningSummarizer.enqueueSummarize(options);
|
|
373
397
|
}
|
|
374
398
|
|
|
375
|
-
public recordSummaryAttempt?(summaryRefSeqNum?: number) {
|
|
399
|
+
public recordSummaryAttempt?(summaryRefSeqNum?: number): void {
|
|
376
400
|
this._heuristicData?.recordAttempt(summaryRefSeqNum);
|
|
377
401
|
}
|
|
378
402
|
|
|
379
|
-
private readonly forwardedEvents = new Map<
|
|
403
|
+
private readonly forwardedEvents = new Map<string, () => void>();
|
|
380
404
|
|
|
381
|
-
private setupForwardedEvents() {
|
|
382
|
-
["summarize", "summarizeAllAttemptsFailed"]
|
|
383
|
-
const listener = (...args:
|
|
405
|
+
private setupForwardedEvents(): void {
|
|
406
|
+
for (const event of ["summarize", "summarizeAllAttemptsFailed"]) {
|
|
407
|
+
const listener = (...args: unknown[]): void => {
|
|
384
408
|
this.emit(event, ...args);
|
|
385
409
|
};
|
|
410
|
+
// TODO: better typing here
|
|
411
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument
|
|
386
412
|
this.runningSummarizer?.on(event as any, listener);
|
|
387
413
|
this.forwardedEvents.set(event, listener);
|
|
388
|
-
}
|
|
414
|
+
}
|
|
389
415
|
}
|
|
390
416
|
|
|
391
|
-
private cleanupForwardedEvents() {
|
|
392
|
-
this.forwardedEvents.
|
|
393
|
-
this.runningSummarizer?.off(event, listener)
|
|
394
|
-
|
|
417
|
+
private cleanupForwardedEvents(): void {
|
|
418
|
+
for (const [event, listener] of this.forwardedEvents.entries()) {
|
|
419
|
+
this.runningSummarizer?.off(event, listener);
|
|
420
|
+
}
|
|
395
421
|
this.forwardedEvents.clear();
|
|
396
422
|
}
|
|
397
423
|
}
|
|
@@ -11,6 +11,7 @@ import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils/internal";
|
|
|
11
11
|
|
|
12
12
|
import {
|
|
13
13
|
IOrderedClientElection,
|
|
14
|
+
// eslint-disable-next-line import/no-deprecated
|
|
14
15
|
ISerializedElection,
|
|
15
16
|
ITrackedClient,
|
|
16
17
|
} from "./orderedClientElection.js";
|
|
@@ -51,10 +52,10 @@ export class SummarizerClientElection
|
|
|
51
52
|
*/
|
|
52
53
|
private lastReportedSeq = 0;
|
|
53
54
|
|
|
54
|
-
public get electedClientId() {
|
|
55
|
+
public get electedClientId(): string | undefined {
|
|
55
56
|
return this.clientElection.electedClient?.clientId;
|
|
56
57
|
}
|
|
57
|
-
public get electedParentId() {
|
|
58
|
+
public get electedParentId(): string | undefined {
|
|
58
59
|
return this.clientElection.electedParent?.clientId;
|
|
59
60
|
}
|
|
60
61
|
|
|
@@ -119,6 +120,7 @@ export class SummarizerClientElection
|
|
|
119
120
|
});
|
|
120
121
|
}
|
|
121
122
|
|
|
123
|
+
// eslint-disable-next-line import/no-deprecated
|
|
122
124
|
public serialize(): ISerializedElection {
|
|
123
125
|
const { electedClientId, electedParentId, electionSequenceNumber } =
|
|
124
126
|
this.clientElection.serialize();
|
|
@@ -16,7 +16,9 @@ import {
|
|
|
16
16
|
} from "./summarizerTypes.js";
|
|
17
17
|
import { SummarizeReason } from "./summaryGenerator.js";
|
|
18
18
|
|
|
19
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Simple implementation of class for tracking summarize heuristic data.
|
|
21
|
+
*/
|
|
20
22
|
export class SummarizeHeuristicData implements ISummarizeHeuristicData {
|
|
21
23
|
protected _lastAttempt: ISummarizeAttempt;
|
|
22
24
|
public get lastAttempt(): ISummarizeAttempt {
|
|
@@ -57,19 +59,21 @@ export class SummarizeHeuristicData implements ISummarizeHeuristicData {
|
|
|
57
59
|
|
|
58
60
|
constructor(
|
|
59
61
|
public lastOpSequenceNumber: number,
|
|
60
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* Baseline attempt data used for comparisons with subsequent attempts/calculations.
|
|
64
|
+
*/
|
|
61
65
|
attemptBaseline: ISummarizeAttempt,
|
|
62
66
|
) {
|
|
63
67
|
this._lastAttempt = attemptBaseline;
|
|
64
68
|
this._lastSuccessfulSummary = { ...attemptBaseline };
|
|
65
69
|
}
|
|
66
70
|
|
|
67
|
-
public updateWithLastSummaryAckInfo(lastSummary: Readonly<ISummarizeAttempt>) {
|
|
71
|
+
public updateWithLastSummaryAckInfo(lastSummary: Readonly<ISummarizeAttempt>): void {
|
|
68
72
|
this._lastAttempt = lastSummary;
|
|
69
73
|
this._lastSuccessfulSummary = { ...lastSummary };
|
|
70
74
|
}
|
|
71
75
|
|
|
72
|
-
public recordAttempt(refSequenceNumber?: number) {
|
|
76
|
+
public recordAttempt(refSequenceNumber?: number): void {
|
|
73
77
|
this._lastAttempt = {
|
|
74
78
|
refSequenceNumber: refSequenceNumber ?? this.lastOpSequenceNumber,
|
|
75
79
|
summaryTime: Date.now(),
|
|
@@ -80,7 +84,7 @@ export class SummarizeHeuristicData implements ISummarizeHeuristicData {
|
|
|
80
84
|
this.totalOpsSizeBefore = this.totalOpsSize;
|
|
81
85
|
}
|
|
82
86
|
|
|
83
|
-
public markLastAttemptAsSuccessful() {
|
|
87
|
+
public markLastAttemptAsSuccessful(): void {
|
|
84
88
|
this._lastSuccessfulSummary = { ...this.lastAttempt };
|
|
85
89
|
|
|
86
90
|
this.numNonRuntimeOps -= this.numNonRuntimeOpsBefore;
|
|
@@ -130,7 +134,7 @@ export class SummarizeHeuristicRunner implements ISummarizeHeuristicRunner {
|
|
|
130
134
|
this.configuration.runtimeOpWeight,
|
|
131
135
|
this.configuration.nonRuntimeOpWeight,
|
|
132
136
|
);
|
|
133
|
-
const pToMaxOps = (weightedNumOfOps * 1
|
|
137
|
+
const pToMaxOps = (weightedNumOfOps * 1) / this.configuration.maxOps;
|
|
134
138
|
|
|
135
139
|
if (pToMaxOps >= 1) {
|
|
136
140
|
return minIdleTime;
|
|
@@ -147,11 +151,11 @@ export class SummarizeHeuristicRunner implements ISummarizeHeuristicRunner {
|
|
|
147
151
|
);
|
|
148
152
|
}
|
|
149
153
|
|
|
150
|
-
public start() {
|
|
154
|
+
public start(): void {
|
|
151
155
|
this.idleTimer?.start(this.idleTime);
|
|
152
156
|
}
|
|
153
157
|
|
|
154
|
-
public run() {
|
|
158
|
+
public run(): void {
|
|
155
159
|
for (const strategy of this.summarizeStrategies) {
|
|
156
160
|
if (strategy.shouldRunSummary(this.configuration, this.heuristicData)) {
|
|
157
161
|
return this.runSummarize(strategy.summarizeReason);
|
|
@@ -179,12 +183,14 @@ export class SummarizeHeuristicRunner implements ISummarizeHeuristicRunner {
|
|
|
179
183
|
return weightedOpsSinceLastAck >= minOpsForLastSummaryAttempt;
|
|
180
184
|
}
|
|
181
185
|
|
|
182
|
-
public dispose() {
|
|
186
|
+
public dispose(): void {
|
|
183
187
|
this.idleTimer?.clear();
|
|
184
188
|
}
|
|
185
189
|
}
|
|
186
190
|
|
|
187
|
-
/**
|
|
191
|
+
/**
|
|
192
|
+
* Strategy used to run a summary when it's been a while since our last successful summary
|
|
193
|
+
*/
|
|
188
194
|
class MaxTimeSummaryHeuristicStrategy implements ISummaryHeuristicStrategy {
|
|
189
195
|
public readonly summarizeReason: Readonly<SummarizeReason> = "maxTime";
|
|
190
196
|
|
|
@@ -206,7 +212,9 @@ function getWeightedNumberOfOps(
|
|
|
206
212
|
return runtimeOpWeight * runtimeOpCount + nonRuntimeOpWeight * nonRuntimeOpCount;
|
|
207
213
|
}
|
|
208
214
|
|
|
209
|
-
/**
|
|
215
|
+
/**
|
|
216
|
+
* Strategy used to do a weighted analysis on the ops we've processed since the last successful summary
|
|
217
|
+
*/
|
|
210
218
|
class WeightedOpsSummaryHeuristicStrategy implements ISummaryHeuristicStrategy {
|
|
211
219
|
public readonly summarizeReason: Readonly<SummarizeReason> = "maxOps";
|
|
212
220
|
|
|
@@ -224,6 +232,9 @@ class WeightedOpsSummaryHeuristicStrategy implements ISummaryHeuristicStrategy {
|
|
|
224
232
|
}
|
|
225
233
|
}
|
|
226
234
|
|
|
227
|
-
function getDefaultSummaryHeuristicStrategies()
|
|
235
|
+
function getDefaultSummaryHeuristicStrategies(): (
|
|
236
|
+
| MaxTimeSummaryHeuristicStrategy
|
|
237
|
+
| WeightedOpsSummaryHeuristicStrategy
|
|
238
|
+
)[] {
|
|
228
239
|
return [new MaxTimeSummaryHeuristicStrategy(), new WeightedOpsSummaryHeuristicStrategy()];
|
|
229
240
|
}
|