@fluidframework/container-runtime 2.12.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 +50 -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 +2 -1
- 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/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 -8
- 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 -1
- 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 +22 -6
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +43 -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 -4
- 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 +1 -1
- 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/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 -9
- 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 -1
- 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 +22 -6
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +41 -4
- 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 -4
- 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 +44 -31
- package/src/batchTracker.ts +31 -33
- package/src/blobManager/blobManager.ts +38 -19
- package/src/blobManager/blobManagerSnapSum.ts +1 -1
- package/src/channelCollection.ts +44 -37
- package/src/connectionTelemetry.ts +31 -13
- package/src/containerHandleContext.ts +2 -2
- package/src/containerRuntime.ts +198 -140
- 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 +41 -18
- package/src/gc/gcConfigs.ts +4 -4
- package/src/gc/gcDefinitions.ts +212 -70
- package/src/gc/gcHelpers.ts +11 -5
- 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} +54 -121
- 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 +20 -11
- package/src/opLifecycle/opGroupingManager.ts +12 -8
- package/src/opLifecycle/opSplitter.ts +11 -8
- package/src/opLifecycle/outbox.ts +22 -13
- package/src/opLifecycle/remoteMessageProcessor.ts +10 -4
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +71 -15
- 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 +24 -25
- 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 -235
- 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 -231
- package/lib/scheduleManager.js.map +0 -1
|
@@ -148,21 +148,21 @@ interface IProperty<T = unknown> {
|
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
class TrueOrUndefined implements IProperty<true | undefined> {
|
|
151
|
-
public and(currentDocSchema?: true, desiredDocSchema?: true) {
|
|
151
|
+
public and(currentDocSchema?: true, desiredDocSchema?: true): true | undefined {
|
|
152
152
|
return currentDocSchema === true && desiredDocSchema === true ? true : undefined;
|
|
153
153
|
}
|
|
154
154
|
|
|
155
|
-
public or(currentDocSchema?: true, desiredDocSchema?: true) {
|
|
155
|
+
public or(currentDocSchema?: true, desiredDocSchema?: true): true | undefined {
|
|
156
156
|
return currentDocSchema === true || desiredDocSchema === true ? true : undefined;
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
-
public validate(t: unknown) {
|
|
159
|
+
public validate(t: unknown): t is true | undefined {
|
|
160
160
|
return t === undefined || t === true;
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
class TrueOrUndefinedMax extends TrueOrUndefined {
|
|
165
|
-
public and(currentDocSchema?: true, desiredDocSchema?: true) {
|
|
165
|
+
public and(currentDocSchema?: true, desiredDocSchema?: true): true | undefined {
|
|
166
166
|
return this.or(currentDocSchema, desiredDocSchema);
|
|
167
167
|
}
|
|
168
168
|
}
|
|
@@ -170,7 +170,7 @@ class TrueOrUndefinedMax extends TrueOrUndefined {
|
|
|
170
170
|
class MultiChoice implements IProperty<string | undefined> {
|
|
171
171
|
constructor(private readonly choices: string[]) {}
|
|
172
172
|
|
|
173
|
-
public and(currentDocSchema?: string, desiredDocSchema?: string) {
|
|
173
|
+
public and(currentDocSchema?: string, desiredDocSchema?: string): string | undefined {
|
|
174
174
|
if (currentDocSchema === undefined || desiredDocSchema === undefined) {
|
|
175
175
|
return undefined;
|
|
176
176
|
}
|
|
@@ -179,7 +179,7 @@ class MultiChoice implements IProperty<string | undefined> {
|
|
|
179
179
|
];
|
|
180
180
|
}
|
|
181
181
|
|
|
182
|
-
public or(currentDocSchema?: string, desiredDocSchema?: string) {
|
|
182
|
+
public or(currentDocSchema?: string, desiredDocSchema?: string): string | undefined {
|
|
183
183
|
if (currentDocSchema === undefined) {
|
|
184
184
|
return desiredDocSchema;
|
|
185
185
|
}
|
|
@@ -191,30 +191,36 @@ class MultiChoice implements IProperty<string | undefined> {
|
|
|
191
191
|
];
|
|
192
192
|
}
|
|
193
193
|
|
|
194
|
-
public validate(t: unknown) {
|
|
194
|
+
public validate(t: unknown): boolean {
|
|
195
195
|
return t === undefined || (typeof t === "string" && this.choices.includes(t));
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
198
|
|
|
199
199
|
class IdCompressorProperty extends MultiChoice {
|
|
200
200
|
// document schema always wins!
|
|
201
|
-
public and(currentDocSchema?: string, desiredDocSchema?: string) {
|
|
201
|
+
public and(currentDocSchema?: string, desiredDocSchema?: string): string | undefined {
|
|
202
202
|
return currentDocSchema;
|
|
203
203
|
}
|
|
204
204
|
}
|
|
205
205
|
|
|
206
206
|
class CheckVersions implements IProperty<string[] | undefined> {
|
|
207
|
-
public or(
|
|
207
|
+
public or(
|
|
208
|
+
currentDocSchema: string[] = [],
|
|
209
|
+
desiredDocSchema: string[] = [],
|
|
210
|
+
): string[] | undefined {
|
|
208
211
|
const set = new Set<string>([...currentDocSchema, ...desiredDocSchema]);
|
|
209
212
|
return arrayToProp([...set.values()]);
|
|
210
213
|
}
|
|
211
214
|
|
|
212
215
|
// Once version is there, it stays there forever.
|
|
213
|
-
public and(
|
|
216
|
+
public and(
|
|
217
|
+
currentDocSchema: string[] = [],
|
|
218
|
+
desiredDocSchema: string[] = [],
|
|
219
|
+
): string[] | undefined {
|
|
214
220
|
return this.or(currentDocSchema, desiredDocSchema);
|
|
215
221
|
}
|
|
216
222
|
|
|
217
|
-
public validate(t: unknown) {
|
|
223
|
+
public validate(t: unknown): boolean {
|
|
218
224
|
return t === undefined || (Array.isArray(t) && !t.includes(pkgVersion));
|
|
219
225
|
}
|
|
220
226
|
}
|
|
@@ -238,7 +244,7 @@ const documentSchemaSupportedConfigs = {
|
|
|
238
244
|
function checkRuntimeCompatibility(
|
|
239
245
|
documentSchema: IDocumentSchema | undefined,
|
|
240
246
|
schemaName: string,
|
|
241
|
-
) {
|
|
247
|
+
): void {
|
|
242
248
|
// Back-compat - we can't do anything about legacy documents.
|
|
243
249
|
// There is no way to validate them, so we are taking a guess that safe deployment processes used by a given app
|
|
244
250
|
// do not run into compat problems.
|
|
@@ -278,6 +284,7 @@ function checkRuntimeCompatibility(
|
|
|
278
284
|
}
|
|
279
285
|
|
|
280
286
|
if (unknownProperty !== undefined) {
|
|
287
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
281
288
|
const value = documentSchema[unknownProperty];
|
|
282
289
|
throw DataProcessingError.create(
|
|
283
290
|
msg,
|
|
@@ -286,6 +293,7 @@ function checkRuntimeCompatibility(
|
|
|
286
293
|
{
|
|
287
294
|
codeVersion: currentDocumentVersionSchema,
|
|
288
295
|
property: unknownProperty,
|
|
296
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
289
297
|
value,
|
|
290
298
|
schemaName,
|
|
291
299
|
},
|
|
@@ -354,11 +362,11 @@ function same(
|
|
|
354
362
|
return true;
|
|
355
363
|
}
|
|
356
364
|
|
|
357
|
-
function boolToProp(b: boolean) {
|
|
365
|
+
function boolToProp(b: boolean): true | undefined {
|
|
358
366
|
return b ? true : undefined;
|
|
359
367
|
}
|
|
360
368
|
|
|
361
|
-
function arrayToProp(arr: string[]) {
|
|
369
|
+
function arrayToProp(arr: string[]): string[] | undefined {
|
|
362
370
|
return arr.length === 0 ? undefined : arr;
|
|
363
371
|
}
|
|
364
372
|
|
|
@@ -580,7 +588,11 @@ export class DocumentsSchemaController {
|
|
|
580
588
|
}
|
|
581
589
|
}
|
|
582
590
|
|
|
583
|
-
private validateSeqNumber(
|
|
591
|
+
private validateSeqNumber(
|
|
592
|
+
schemaSeqNumber: number,
|
|
593
|
+
lastKnowSeqNumber: number,
|
|
594
|
+
message: string,
|
|
595
|
+
): void {
|
|
584
596
|
if (!Number.isInteger(schemaSeqNumber) || !(schemaSeqNumber <= lastKnowSeqNumber)) {
|
|
585
597
|
throw DataProcessingError.create(
|
|
586
598
|
"DocSchema: Incorrect sequence number",
|
|
@@ -608,7 +620,7 @@ export class DocumentsSchemaController {
|
|
|
608
620
|
content: IDocumentSchemaChangeMessage,
|
|
609
621
|
local: boolean,
|
|
610
622
|
sequenceNumber: number,
|
|
611
|
-
) {
|
|
623
|
+
): boolean {
|
|
612
624
|
return this.processDocumentSchemaMessages([content], local, sequenceNumber);
|
|
613
625
|
}
|
|
614
626
|
|
|
@@ -624,7 +636,7 @@ export class DocumentsSchemaController {
|
|
|
624
636
|
contents: IDocumentSchemaChangeMessage[],
|
|
625
637
|
local: boolean,
|
|
626
638
|
sequenceNumber: number,
|
|
627
|
-
) {
|
|
639
|
+
): boolean {
|
|
628
640
|
for (const content of contents) {
|
|
629
641
|
this.validateSeqNumber(content.refSeq, this.documentSchema.refSeq, "content.refSeq");
|
|
630
642
|
this.validateSeqNumber(this.documentSchema.refSeq, sequenceNumber, "refSeq");
|
|
@@ -672,7 +684,7 @@ export class DocumentsSchemaController {
|
|
|
672
684
|
return true;
|
|
673
685
|
}
|
|
674
686
|
|
|
675
|
-
public onDisconnect() {
|
|
687
|
+
public onDisconnect(): void {
|
|
676
688
|
this.sendOp = true;
|
|
677
689
|
}
|
|
678
690
|
}
|
package/src/summary/index.ts
CHANGED
|
@@ -44,12 +44,10 @@ export {
|
|
|
44
44
|
ISummarizeHeuristicData,
|
|
45
45
|
ISummarizer,
|
|
46
46
|
ISummarizeResults,
|
|
47
|
-
ISummarizerEvents,
|
|
48
47
|
ISummarizerInternalsProvider,
|
|
49
48
|
ISummarizerRuntime,
|
|
50
49
|
ISummaryCancellationToken,
|
|
51
50
|
SubmitSummaryResult,
|
|
52
|
-
SummarizerStopReason,
|
|
53
51
|
EnqueueSummarizeResult,
|
|
54
52
|
IAckSummaryResult,
|
|
55
53
|
IBaseSummarizeResult,
|
|
@@ -67,7 +65,6 @@ export {
|
|
|
67
65
|
SubmitSummaryFailureData,
|
|
68
66
|
SummaryStage,
|
|
69
67
|
IRetriableFailureError,
|
|
70
|
-
ISummarizeEventProps,
|
|
71
68
|
} from "./summarizerTypes.js";
|
|
72
69
|
export {
|
|
73
70
|
IAckedSummary,
|
|
@@ -31,50 +31,72 @@ export type Immutable<T> = T extends ImmutablePrimitives
|
|
|
31
31
|
? ReadonlySet<Immutable<V>>
|
|
32
32
|
: { readonly [K in keyof T]: Immutable<T[K]> };
|
|
33
33
|
|
|
34
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Minimum information for a client tracked for election consideration.
|
|
36
|
+
*/
|
|
35
37
|
export interface ITrackedClient {
|
|
36
38
|
readonly clientId: string;
|
|
37
39
|
readonly sequenceNumber: number;
|
|
38
40
|
readonly client: Immutable<IClient>;
|
|
39
41
|
}
|
|
40
42
|
|
|
41
|
-
/**
|
|
43
|
+
/**
|
|
44
|
+
* Common contract for link nodes within an OrderedClientCollection.
|
|
45
|
+
*/
|
|
42
46
|
export interface ILinkNode {
|
|
43
47
|
readonly sequenceNumber: number;
|
|
44
48
|
youngerClient: ILinkedClient | undefined;
|
|
45
49
|
}
|
|
46
50
|
|
|
47
|
-
/**
|
|
51
|
+
/**
|
|
52
|
+
* Placeholder root node within an OrderedClientCollection; does not represent a client.
|
|
53
|
+
*/
|
|
48
54
|
export interface IRootLinkNode extends ILinkNode {
|
|
49
55
|
readonly sequenceNumber: -1;
|
|
50
56
|
readonly olderClient: undefined;
|
|
51
57
|
}
|
|
52
58
|
|
|
53
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* Additional information required to keep track of the client within the doubly-linked list.
|
|
61
|
+
*/
|
|
54
62
|
export interface ILinkedClient extends ILinkNode, ITrackedClient {
|
|
55
63
|
olderClient: LinkNode;
|
|
56
64
|
}
|
|
57
65
|
|
|
58
|
-
/**
|
|
66
|
+
/**
|
|
67
|
+
* Any link node within OrderedClientCollection including the placeholder root node.
|
|
68
|
+
*/
|
|
59
69
|
export type LinkNode = IRootLinkNode | ILinkedClient;
|
|
60
70
|
|
|
61
|
-
/**
|
|
71
|
+
/**
|
|
72
|
+
* Events raised by an OrderedClientCollection.
|
|
73
|
+
*/
|
|
62
74
|
export interface IOrderedClientCollectionEvents extends IEvent {
|
|
63
|
-
/**
|
|
75
|
+
/**
|
|
76
|
+
* Event fires when client is being added.
|
|
77
|
+
*/
|
|
64
78
|
(
|
|
65
79
|
event: "addClient" | "removeClient",
|
|
66
80
|
listener: (client: ILinkedClient, sequenceNumber: number) => void,
|
|
67
81
|
);
|
|
68
82
|
}
|
|
69
83
|
|
|
70
|
-
/**
|
|
84
|
+
/**
|
|
85
|
+
* Contract for a sorted collection of all clients in the quorum.
|
|
86
|
+
*/
|
|
71
87
|
export interface IOrderedClientCollection
|
|
72
88
|
extends IEventProvider<IOrderedClientCollectionEvents> {
|
|
73
|
-
/**
|
|
89
|
+
/**
|
|
90
|
+
* Count of clients in the collection.
|
|
91
|
+
*/
|
|
74
92
|
readonly count: number;
|
|
75
|
-
/**
|
|
93
|
+
/**
|
|
94
|
+
* Pointer to the oldest client in the collection.
|
|
95
|
+
*/
|
|
76
96
|
readonly oldestClient: ILinkedClient | undefined;
|
|
77
|
-
/**
|
|
97
|
+
/**
|
|
98
|
+
* Returns a sorted array of all the clients in the collection.
|
|
99
|
+
*/
|
|
78
100
|
getAllClients(): ILinkedClient[];
|
|
79
101
|
}
|
|
80
102
|
|
|
@@ -89,22 +111,28 @@ export class OrderedClientCollection
|
|
|
89
111
|
extends TypedEventEmitter<IOrderedClientCollectionEvents>
|
|
90
112
|
implements IOrderedClientCollection
|
|
91
113
|
{
|
|
92
|
-
/**
|
|
114
|
+
/**
|
|
115
|
+
* Collection of ALL clients currently in the quorum, with client ids as keys.
|
|
116
|
+
*/
|
|
93
117
|
private readonly clientMap = new Map<string, ILinkedClient>();
|
|
94
|
-
/**
|
|
118
|
+
/**
|
|
119
|
+
* Placeholder head node of linked list, for simplified null checking.
|
|
120
|
+
*/
|
|
95
121
|
private readonly rootNode: IRootLinkNode = {
|
|
96
122
|
sequenceNumber: -1,
|
|
97
123
|
olderClient: undefined,
|
|
98
124
|
youngerClient: undefined,
|
|
99
125
|
};
|
|
100
|
-
/**
|
|
126
|
+
/**
|
|
127
|
+
* Pointer to end of linked list, for optimized client adds.
|
|
128
|
+
*/
|
|
101
129
|
private _youngestClient: LinkNode = this.rootNode;
|
|
102
130
|
private readonly logger: ITelemetryLoggerExt;
|
|
103
131
|
|
|
104
|
-
public get count() {
|
|
132
|
+
public get count(): number {
|
|
105
133
|
return this.clientMap.size;
|
|
106
134
|
}
|
|
107
|
-
public get oldestClient() {
|
|
135
|
+
public get oldestClient(): ILinkedClient | undefined {
|
|
108
136
|
return this.rootNode.youngerClient;
|
|
109
137
|
}
|
|
110
138
|
|
|
@@ -201,7 +229,9 @@ export class OrderedClientCollection
|
|
|
201
229
|
return removeClient;
|
|
202
230
|
}
|
|
203
231
|
|
|
204
|
-
/**
|
|
232
|
+
/**
|
|
233
|
+
* Returns an array of all clients being tracked in order from oldest to newest.
|
|
234
|
+
*/
|
|
205
235
|
public getAllClients(): ILinkedClient[] {
|
|
206
236
|
const result: ILinkedClient[] = [];
|
|
207
237
|
let currClient: LinkNode = this.rootNode;
|
|
@@ -213,17 +243,27 @@ export class OrderedClientCollection
|
|
|
213
243
|
}
|
|
214
244
|
}
|
|
215
245
|
|
|
216
|
-
/**
|
|
246
|
+
/**
|
|
247
|
+
* Events raised by an OrderedClientElection.
|
|
248
|
+
*/
|
|
217
249
|
export interface IOrderedClientElectionEvents extends IEvent {
|
|
218
|
-
/**
|
|
250
|
+
/**
|
|
251
|
+
* Event fires when the currently elected client changes.
|
|
252
|
+
*/
|
|
219
253
|
(
|
|
220
254
|
event: "election",
|
|
221
255
|
listener: (
|
|
222
|
-
/**
|
|
256
|
+
/**
|
|
257
|
+
* Newly elected client.
|
|
258
|
+
*/
|
|
223
259
|
client: ITrackedClient | undefined,
|
|
224
|
-
/**
|
|
260
|
+
/**
|
|
261
|
+
* Sequence number where election took place.
|
|
262
|
+
*/
|
|
225
263
|
sequenceNumber: number,
|
|
226
|
-
/**
|
|
264
|
+
/**
|
|
265
|
+
* Previously elected client.
|
|
266
|
+
*/
|
|
227
267
|
prevClient: ITrackedClient | undefined,
|
|
228
268
|
) => void,
|
|
229
269
|
);
|
|
@@ -235,7 +275,9 @@ export interface IOrderedClientElectionEvents extends IEvent {
|
|
|
235
275
|
* @alpha
|
|
236
276
|
*/
|
|
237
277
|
export interface ISerializedElection {
|
|
238
|
-
/**
|
|
278
|
+
/**
|
|
279
|
+
* Sequence number at the time of the latest election.
|
|
280
|
+
*/
|
|
239
281
|
readonly electionSequenceNumber: number;
|
|
240
282
|
|
|
241
283
|
/**
|
|
@@ -248,13 +290,19 @@ export interface ISerializedElection {
|
|
|
248
290
|
*/
|
|
249
291
|
readonly electedClientId: string | undefined;
|
|
250
292
|
|
|
251
|
-
/**
|
|
293
|
+
/**
|
|
294
|
+
* Most recently elected parent client id. This is always an interactive client.
|
|
295
|
+
*/
|
|
252
296
|
readonly electedParentId: string | undefined;
|
|
253
297
|
}
|
|
254
298
|
|
|
255
|
-
/**
|
|
299
|
+
/**
|
|
300
|
+
* Contract for maintaining a deterministic client election based on eligibility.
|
|
301
|
+
*/
|
|
256
302
|
export interface IOrderedClientElection extends IEventProvider<IOrderedClientElectionEvents> {
|
|
257
|
-
/**
|
|
303
|
+
/**
|
|
304
|
+
* Count of eligible clients in the collection.
|
|
305
|
+
*/
|
|
258
306
|
readonly eligibleCount: number;
|
|
259
307
|
|
|
260
308
|
/**
|
|
@@ -266,17 +314,29 @@ export interface IOrderedClientElection extends IEventProvider<IOrderedClientEle
|
|
|
266
314
|
* 2. the non-interactive summarizer client itself.
|
|
267
315
|
*/
|
|
268
316
|
readonly electedClient: ITrackedClient | undefined;
|
|
269
|
-
/**
|
|
317
|
+
/**
|
|
318
|
+
* Currently elected parent client. This is always an interactive client.
|
|
319
|
+
*/
|
|
270
320
|
readonly electedParent: ITrackedClient | undefined;
|
|
271
|
-
/**
|
|
321
|
+
/**
|
|
322
|
+
* Sequence number of most recent election.
|
|
323
|
+
*/
|
|
272
324
|
readonly electionSequenceNumber: number;
|
|
273
|
-
/**
|
|
325
|
+
/**
|
|
326
|
+
* Resets the currently elected client back to the oldest eligible client.
|
|
327
|
+
*/
|
|
274
328
|
resetElectedClient(sequenceNumber: number): void;
|
|
275
|
-
/**
|
|
329
|
+
/**
|
|
330
|
+
* Peeks at what the next elected client would be if incrementElectedClient were called.
|
|
331
|
+
*/
|
|
276
332
|
peekNextElectedClient(): ITrackedClient | undefined;
|
|
277
|
-
/**
|
|
333
|
+
/**
|
|
334
|
+
* Returns a sorted array of all the eligible clients in the collection.
|
|
335
|
+
*/
|
|
278
336
|
getAllEligibleClients(): ITrackedClient[];
|
|
279
|
-
/**
|
|
337
|
+
/**
|
|
338
|
+
* Serialize election data
|
|
339
|
+
*/
|
|
280
340
|
serialize(): ISerializedElection;
|
|
281
341
|
}
|
|
282
342
|
|
|
@@ -295,10 +355,10 @@ export class OrderedClientElection
|
|
|
295
355
|
private _electedParent: ILinkedClient | undefined;
|
|
296
356
|
private _electionSequenceNumber: number;
|
|
297
357
|
|
|
298
|
-
public get eligibleCount() {
|
|
358
|
+
public get eligibleCount(): number {
|
|
299
359
|
return this._eligibleCount;
|
|
300
360
|
}
|
|
301
|
-
public get electionSequenceNumber() {
|
|
361
|
+
public get electionSequenceNumber(): number {
|
|
302
362
|
return this._electionSequenceNumber;
|
|
303
363
|
}
|
|
304
364
|
|
|
@@ -338,17 +398,19 @@ export class OrderedClientElection
|
|
|
338
398
|
*
|
|
339
399
|
* vii. SummaryManager running on B spawns a summarizer client, B'. electedParent === B, electedClient === B'
|
|
340
400
|
*/
|
|
341
|
-
public get electedClient() {
|
|
401
|
+
public get electedClient(): ILinkedClient | undefined {
|
|
342
402
|
return this._electedClient;
|
|
343
403
|
}
|
|
344
|
-
public get electedParent() {
|
|
404
|
+
public get electedParent(): ILinkedClient | undefined {
|
|
345
405
|
return this._electedParent;
|
|
346
406
|
}
|
|
347
407
|
|
|
348
408
|
constructor(
|
|
349
409
|
private readonly logger: ITelemetryLoggerExt,
|
|
350
410
|
private readonly orderedClientCollection: IOrderedClientCollection,
|
|
351
|
-
/**
|
|
411
|
+
/**
|
|
412
|
+
* Serialized state from summary or current sequence number at time of load if new.
|
|
413
|
+
*/
|
|
352
414
|
initialState: ISerializedElection | number,
|
|
353
415
|
private readonly isEligibleFn: (c: ITrackedClient) => boolean,
|
|
354
416
|
private readonly recordPerformanceEvents: boolean = false,
|
|
@@ -617,7 +679,7 @@ export class OrderedClientElection
|
|
|
617
679
|
sequenceNumber: number,
|
|
618
680
|
forceSend: boolean = false,
|
|
619
681
|
reason?: string,
|
|
620
|
-
) {
|
|
682
|
+
): void {
|
|
621
683
|
if (this.recordPerformanceEvents || forceSend) {
|
|
622
684
|
this.logger.sendPerformanceEvent({
|
|
623
685
|
eventName,
|
|
@@ -36,7 +36,7 @@ export class RunWhileConnectedCoordinator implements ICancellableSummarizerContr
|
|
|
36
36
|
private _cancelled = false;
|
|
37
37
|
private readonly stopDeferred = new Deferred<SummarizerStopReason>();
|
|
38
38
|
|
|
39
|
-
public get cancelled() {
|
|
39
|
+
public get cancelled(): boolean {
|
|
40
40
|
if (!this._cancelled) {
|
|
41
41
|
assert(this.active(), 0x25d /* "We should never connect as 'read'" */);
|
|
42
42
|
|
|
@@ -63,7 +63,10 @@ export class RunWhileConnectedCoordinator implements ICancellableSummarizerContr
|
|
|
63
63
|
return this.stopDeferred.promise;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
public static async create(
|
|
66
|
+
public static async create(
|
|
67
|
+
runtime: IConnectableRuntime,
|
|
68
|
+
active: () => boolean,
|
|
69
|
+
): Promise<RunWhileConnectedCoordinator> {
|
|
67
70
|
const obj = new RunWhileConnectedCoordinator(runtime, active);
|
|
68
71
|
await obj.waitStart();
|
|
69
72
|
return obj;
|
|
@@ -87,7 +90,7 @@ export class RunWhileConnectedCoordinator implements ICancellableSummarizerContr
|
|
|
87
90
|
* of non-summarized ops, where can make determination to continue with summary even if main
|
|
88
91
|
* client is disconnected.
|
|
89
92
|
*/
|
|
90
|
-
protected async waitStart() {
|
|
93
|
+
protected async waitStart(): Promise<void> {
|
|
91
94
|
if (this.runtime.disposed) {
|
|
92
95
|
this.stop("summarizerClientDisconnected");
|
|
93
96
|
return;
|
|
@@ -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";
|
|
@@ -163,7 +164,7 @@ export class RunningSummarizer
|
|
|
163
164
|
return summarizer;
|
|
164
165
|
}
|
|
165
166
|
|
|
166
|
-
public get disposed() {
|
|
167
|
+
public get disposed(): boolean {
|
|
167
168
|
return this._disposed;
|
|
168
169
|
}
|
|
169
170
|
private stopping = false;
|
|
@@ -189,7 +190,9 @@ export class RunningSummarizer
|
|
|
189
190
|
|
|
190
191
|
private readonly runtimeListener;
|
|
191
192
|
|
|
192
|
-
/**
|
|
193
|
+
/**
|
|
194
|
+
* The maximum number of summary attempts to do when submit summary fails.
|
|
195
|
+
*/
|
|
193
196
|
private readonly maxAttemptsForSubmitFailures: number;
|
|
194
197
|
|
|
195
198
|
/**
|
|
@@ -317,7 +320,7 @@ export class RunningSummarizer
|
|
|
317
320
|
: defaultMaxAttemptsForSubmitFailures;
|
|
318
321
|
}
|
|
319
322
|
|
|
320
|
-
private async handleSummaryAck(ack: IAckedSummary) {
|
|
323
|
+
private async handleSummaryAck(ack: IAckedSummary): Promise<void> {
|
|
321
324
|
const refSequenceNumber = ack.summaryOp.referenceSequenceNumber;
|
|
322
325
|
const summaryLogger = this.tryGetCorrelatedLogger(refSequenceNumber) ?? this.mc.logger;
|
|
323
326
|
const summaryOpHandle = ack.summaryOp.contents.handle;
|
|
@@ -352,7 +355,7 @@ export class RunningSummarizer
|
|
|
352
355
|
|
|
353
356
|
private readonly refreshLatestSummaryAckAndHandleError = async (
|
|
354
357
|
options: IRefreshSummaryAckOptions,
|
|
355
|
-
) => {
|
|
358
|
+
): Promise<void> => {
|
|
356
359
|
return this.refreshLatestSummaryAckCallback(options).catch(async (error) => {
|
|
357
360
|
// If the error is 404, so maybe the fetched version no longer exists on server. We just
|
|
358
361
|
// ignore this error in that case, as that means we will have another summaryAck for the
|
|
@@ -387,7 +390,7 @@ export class RunningSummarizer
|
|
|
387
390
|
* @param referenceSequenceNumber - The referenceSequenceNumber of the summary from which to start processing
|
|
388
391
|
* acks.
|
|
389
392
|
*/
|
|
390
|
-
private async processIncomingSummaryAcks(referenceSequenceNumber: number) {
|
|
393
|
+
private async processIncomingSummaryAcks(referenceSequenceNumber: number): Promise<void> {
|
|
391
394
|
// Start waiting for acks that are for summaries newer that the one this client loaded from.
|
|
392
395
|
let nextReferenceSequenceNumber = referenceSequenceNumber;
|
|
393
396
|
while (!this.disposed) {
|
|
@@ -417,15 +420,19 @@ export class RunningSummarizer
|
|
|
417
420
|
* but only if they're logging about that same summary.
|
|
418
421
|
* @param summaryOpRefSeq - RefSeq number of the summary op, to ensure the log correlation will be correct
|
|
419
422
|
*/
|
|
420
|
-
public tryGetCorrelatedLogger = (
|
|
423
|
+
public tryGetCorrelatedLogger = (
|
|
424
|
+
summaryOpRefSeq: number,
|
|
425
|
+
): ITelemetryLoggerExt | undefined =>
|
|
421
426
|
this.heuristicData.lastAttempt.refSequenceNumber === summaryOpRefSeq
|
|
422
427
|
? this.mc.logger
|
|
423
428
|
: undefined;
|
|
424
429
|
|
|
425
|
-
/**
|
|
430
|
+
/**
|
|
431
|
+
* We only want a single heuristic runner micro-task (will provide better optimized grouping of ops)
|
|
432
|
+
*/
|
|
426
433
|
private heuristicRunnerMicroTaskExists = false;
|
|
427
434
|
|
|
428
|
-
public handleOp(op: ISequencedDocumentMessage, runtimeMessage: boolean) {
|
|
435
|
+
public handleOp(op: ISequencedDocumentMessage, runtimeMessage: boolean): void {
|
|
429
436
|
this.heuristicData.lastOpSequenceNumber = op.sequenceNumber;
|
|
430
437
|
|
|
431
438
|
if (runtimeMessage) {
|
|
@@ -525,7 +532,7 @@ export class RunningSummarizer
|
|
|
525
532
|
this.lastSummarizeFailureEventProps = undefined;
|
|
526
533
|
}
|
|
527
534
|
|
|
528
|
-
private async waitStart() {
|
|
535
|
+
private async waitStart(): Promise<void> {
|
|
529
536
|
// Wait no longer than ack timeout for all pending
|
|
530
537
|
const waitStartResult = await raceTimer(
|
|
531
538
|
this.summaryWatcher.waitFlushed(),
|
|
@@ -548,11 +555,11 @@ export class RunningSummarizer
|
|
|
548
555
|
this.initialized = true;
|
|
549
556
|
}
|
|
550
557
|
|
|
551
|
-
private beforeSummaryAction() {
|
|
558
|
+
private beforeSummaryAction(): void {
|
|
552
559
|
this.summarizeCount++;
|
|
553
560
|
}
|
|
554
561
|
|
|
555
|
-
private afterSummaryAction() {
|
|
562
|
+
private afterSummaryAction(): void {
|
|
556
563
|
const retry = this.tryWhileSummarizing;
|
|
557
564
|
this.tryWhileSummarizing = false;
|
|
558
565
|
|
|
@@ -576,7 +583,7 @@ export class RunningSummarizer
|
|
|
576
583
|
before: () => void,
|
|
577
584
|
action: () => Promise<T>,
|
|
578
585
|
after: () => void,
|
|
579
|
-
) {
|
|
586
|
+
): Promise<T> {
|
|
580
587
|
assert(
|
|
581
588
|
this.summarizingLock === undefined,
|
|
582
589
|
0x25b /* "Caller is responsible for checking lock" */,
|
|
@@ -680,7 +687,9 @@ export class RunningSummarizer
|
|
|
680
687
|
return resultsBuilder.build();
|
|
681
688
|
}
|
|
682
689
|
|
|
683
|
-
/**
|
|
690
|
+
/**
|
|
691
|
+
* Heuristics summarize attempt.
|
|
692
|
+
*/
|
|
684
693
|
private trySummarize(reason: SummarizeReason): void {
|
|
685
694
|
if (this.summarizingLock !== undefined) {
|
|
686
695
|
// lockedSummaryAction() will retry heuristic-based summary at the end of current attempt
|
|
@@ -712,7 +721,13 @@ export class RunningSummarizer
|
|
|
712
721
|
reason: SummarizeReason,
|
|
713
722
|
): Promise<ISummarizeResults | undefined> {
|
|
714
723
|
// Helper to set summarize options, telemetry properties and call summarize.
|
|
715
|
-
const attemptSummarize = (
|
|
724
|
+
const attemptSummarize = (
|
|
725
|
+
attemptNumber: number,
|
|
726
|
+
finalAttempt: boolean,
|
|
727
|
+
): {
|
|
728
|
+
summarizeProps: ISummarizeTelemetryProperties;
|
|
729
|
+
summarizeResult: ISummarizeResults;
|
|
730
|
+
} => {
|
|
716
731
|
const summarizeOptions: ISummarizeOptions = {
|
|
717
732
|
fullTree: false,
|
|
718
733
|
};
|
|
@@ -878,7 +893,7 @@ export class RunningSummarizer
|
|
|
878
893
|
private async summarizeOnDemandWithRetries(
|
|
879
894
|
reason: SummarizeReason,
|
|
880
895
|
resultsBuilder: SummarizeResultBuilder,
|
|
881
|
-
) {
|
|
896
|
+
): Promise<ISummarizeResults> {
|
|
882
897
|
const results = await this.trySummarizeWithRetries(reason);
|
|
883
898
|
if (results === undefined) {
|
|
884
899
|
resultsBuilder.fail(
|
|
@@ -896,7 +911,9 @@ export class RunningSummarizer
|
|
|
896
911
|
return resultsBuilder.build();
|
|
897
912
|
}
|
|
898
913
|
|
|
899
|
-
/**
|
|
914
|
+
/**
|
|
915
|
+
* {@inheritdoc (ISummarizer:interface).summarizeOnDemand}
|
|
916
|
+
*/
|
|
900
917
|
public summarizeOnDemand(
|
|
901
918
|
options: IOnDemandSummarizeOptions,
|
|
902
919
|
resultsBuilder: SummarizeResultBuilder = new SummarizeResultBuilder(),
|
|
@@ -932,7 +949,9 @@ export class RunningSummarizer
|
|
|
932
949
|
return resultsBuilder.build();
|
|
933
950
|
}
|
|
934
951
|
|
|
935
|
-
/**
|
|
952
|
+
/**
|
|
953
|
+
* {@inheritdoc (ISummarizer:interface).enqueueSummarize}
|
|
954
|
+
*/
|
|
936
955
|
public enqueueSummarize(options: IEnqueueSummarizeOptions): EnqueueSummarizeResult {
|
|
937
956
|
const { reason, afterSequenceNumber = 0, override = false, ...summarizeOptions } = options;
|
|
938
957
|
let overridden = false;
|
|
@@ -968,7 +987,7 @@ export class RunningSummarizer
|
|
|
968
987
|
: results;
|
|
969
988
|
}
|
|
970
989
|
|
|
971
|
-
private tryRunEnqueuedSummary() {
|
|
990
|
+
private tryRunEnqueuedSummary(): boolean {
|
|
972
991
|
if (this.stopping) {
|
|
973
992
|
this.disposeEnqueuedSummary();
|
|
974
993
|
return false;
|
|
@@ -992,7 +1011,7 @@ export class RunningSummarizer
|
|
|
992
1011
|
return true;
|
|
993
1012
|
}
|
|
994
1013
|
|
|
995
|
-
private disposeEnqueuedSummary() {
|
|
1014
|
+
private disposeEnqueuedSummary(): void {
|
|
996
1015
|
if (this.enqueuedSummary !== undefined) {
|
|
997
1016
|
this.enqueuedSummary.resultsBuilder.fail(
|
|
998
1017
|
"RunningSummarizer stopped or disposed",
|