@fluidframework/container-runtime 2.0.0-internal.6.1.1 → 2.0.0-internal.6.3.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/CHANGELOG.md +39 -0
- package/README.md +4 -3
- package/dist/batchTracker.d.ts +1 -1
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js +5 -4
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager.d.ts +4 -21
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +119 -185
- package/dist/blobManager.js.map +1 -1
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +13 -12
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerRuntime.d.ts +99 -16
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +380 -242
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.d.ts.map +1 -1
- package/dist/dataStore.js +4 -5
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +2 -1
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +40 -41
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts +1 -2
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js +7 -8
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/dataStoreRegistry.js +2 -2
- package/dist/dataStoreRegistry.js.map +1 -1
- package/dist/dataStores.d.ts.map +1 -1
- package/dist/dataStores.js +23 -25
- package/dist/dataStores.js.map +1 -1
- package/dist/deltaManagerProxyBase.d.ts +1 -1
- package/dist/deltaManagerProxyBase.js +2 -2
- package/dist/deltaManagerProxyBase.js.map +1 -1
- package/dist/deltaScheduler.js +6 -6
- package/dist/deltaScheduler.js.map +1 -1
- package/dist/error.d.ts +14 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +21 -0
- package/dist/error.js.map +1 -0
- package/dist/gc/garbageCollection.d.ts +4 -6
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +26 -25
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.d.ts.map +1 -1
- package/dist/gc/gcConfigs.js +5 -3
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +4 -2
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcHelpers.js +7 -7
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts +4 -7
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js +15 -52
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +2 -0
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.js +4 -4
- package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
- package/dist/gc/index.d.ts +1 -1
- package/dist/gc/index.d.ts.map +1 -1
- package/dist/gc/index.js +1 -2
- package/dist/gc/index.js.map +1 -1
- package/dist/id-compressor/appendOnlySortedMap.d.ts +8 -30
- package/dist/id-compressor/appendOnlySortedMap.d.ts.map +1 -1
- package/dist/id-compressor/appendOnlySortedMap.js +26 -68
- package/dist/id-compressor/appendOnlySortedMap.js.map +1 -1
- package/dist/id-compressor/finalSpace.d.ts +29 -0
- package/dist/id-compressor/finalSpace.d.ts.map +1 -0
- package/dist/id-compressor/finalSpace.js +62 -0
- package/dist/id-compressor/finalSpace.js.map +1 -0
- package/dist/id-compressor/idCompressor.d.ts +25 -250
- package/dist/id-compressor/idCompressor.d.ts.map +1 -1
- package/dist/id-compressor/idCompressor.js +387 -1150
- package/dist/id-compressor/idCompressor.js.map +1 -1
- package/dist/id-compressor/identifiers.d.ts +32 -0
- package/dist/id-compressor/identifiers.d.ts.map +1 -0
- package/dist/id-compressor/identifiers.js +15 -0
- package/dist/id-compressor/identifiers.js.map +1 -0
- package/dist/id-compressor/index.d.ts +5 -6
- package/dist/id-compressor/index.d.ts.map +1 -1
- package/dist/id-compressor/index.js +20 -26
- package/dist/id-compressor/index.js.map +1 -1
- package/dist/id-compressor/persistanceUtilities.d.ts +22 -0
- package/dist/id-compressor/persistanceUtilities.d.ts.map +1 -0
- package/dist/id-compressor/persistanceUtilities.js +43 -0
- package/dist/id-compressor/persistanceUtilities.js.map +1 -0
- package/dist/id-compressor/sessionSpaceNormalizer.d.ts +46 -0
- package/dist/id-compressor/sessionSpaceNormalizer.d.ts.map +1 -0
- package/dist/id-compressor/sessionSpaceNormalizer.js +80 -0
- package/dist/id-compressor/sessionSpaceNormalizer.js.map +1 -0
- package/dist/id-compressor/sessions.d.ts +115 -0
- package/dist/id-compressor/sessions.d.ts.map +1 -0
- package/dist/id-compressor/sessions.js +305 -0
- package/dist/id-compressor/sessions.js.map +1 -0
- package/dist/id-compressor/utilities.d.ts +49 -0
- package/dist/id-compressor/utilities.d.ts.map +1 -0
- package/dist/id-compressor/utilities.js +166 -0
- package/dist/id-compressor/utilities.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/opLifecycle/opCompressor.js +5 -5
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +11 -10
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js +3 -3
- package/dist/opLifecycle/opGroupingManager.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +14 -15
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +1 -0
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +16 -17
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js +11 -5
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/pendingStateManager.d.ts +12 -5
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +36 -23
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js +23 -23
- package/dist/scheduleManager.js.map +1 -1
- package/dist/summary/index.d.ts +3 -3
- package/dist/summary/index.d.ts.map +1 -1
- package/dist/summary/index.js +2 -1
- package/dist/summary/index.js.map +1 -1
- package/dist/summary/orderedClientElection.d.ts +2 -3
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js +8 -8
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.js +3 -3
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/dist/summary/runningSummarizer.d.ts +27 -4
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +246 -74
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.d.ts +6 -5
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +73 -69
- package/dist/summary/summarizer.js.map +1 -1
- package/dist/summary/summarizerClientElection.d.ts +2 -2
- package/dist/summary/summarizerClientElection.d.ts.map +1 -1
- package/dist/summary/summarizerClientElection.js +2 -2
- package/dist/summary/summarizerClientElection.js.map +1 -1
- package/dist/summary/summarizerHeuristics.js +2 -2
- package/dist/summary/summarizerHeuristics.js.map +1 -1
- package/dist/summary/summarizerNode/index.d.ts +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 +5 -14
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js +32 -109
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +6 -30
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +0 -11
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +5 -88
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +38 -25
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryCollection.d.ts +2 -3
- package/dist/summary/summaryCollection.d.ts.map +1 -1
- package/dist/summary/summaryCollection.js +9 -8
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryFormat.js +2 -2
- package/dist/summary/summaryFormat.js.map +1 -1
- package/dist/summary/summaryGenerator.d.ts +10 -4
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +52 -48
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryManager.d.ts +7 -6
- package/dist/summary/summaryManager.d.ts.map +1 -1
- package/dist/summary/summaryManager.js +30 -22
- package/dist/summary/summaryManager.js.map +1 -1
- package/lib/batchTracker.d.ts +1 -1
- package/lib/batchTracker.d.ts.map +1 -1
- package/lib/batchTracker.js +3 -2
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager.d.ts +4 -21
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +91 -157
- package/lib/blobManager.js.map +1 -1
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +2 -1
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerRuntime.d.ts +99 -16
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +332 -192
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStore.d.ts.map +1 -1
- package/lib/dataStore.js +2 -3
- package/lib/dataStore.js.map +1 -1
- package/lib/dataStoreContext.d.ts +2 -1
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +3 -4
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.d.ts +1 -2
- package/lib/dataStoreContexts.d.ts.map +1 -1
- package/lib/dataStoreContexts.js +1 -2
- package/lib/dataStoreContexts.js.map +1 -1
- package/lib/dataStoreRegistry.js +1 -1
- package/lib/dataStoreRegistry.js.map +1 -1
- package/lib/dataStores.d.ts.map +1 -1
- package/lib/dataStores.js +2 -4
- package/lib/dataStores.js.map +1 -1
- package/lib/deltaManagerProxyBase.d.ts +1 -1
- package/lib/deltaManagerProxyBase.js +1 -1
- package/lib/deltaManagerProxyBase.js.map +1 -1
- package/lib/deltaScheduler.js +1 -1
- package/lib/deltaScheduler.js.map +1 -1
- package/lib/error.d.ts +14 -0
- package/lib/error.d.ts.map +1 -0
- package/lib/error.js +17 -0
- package/lib/error.js.map +1 -0
- package/lib/gc/garbageCollection.d.ts +4 -6
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +26 -25
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcConfigs.d.ts.map +1 -1
- package/lib/gc/gcConfigs.js +3 -1
- package/lib/gc/gcConfigs.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +4 -2
- package/lib/gc/gcDefinitions.d.ts.map +1 -1
- package/lib/gc/gcDefinitions.js.map +1 -1
- package/lib/gc/gcHelpers.js +1 -1
- package/lib/gc/gcHelpers.js.map +1 -1
- package/lib/gc/gcSummaryStateTracker.d.ts +4 -7
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/lib/gc/gcSummaryStateTracker.js +16 -53
- package/lib/gc/gcSummaryStateTracker.js.map +1 -1
- package/lib/gc/gcTelemetry.d.ts.map +1 -1
- package/lib/gc/gcTelemetry.js +2 -0
- package/lib/gc/gcTelemetry.js.map +1 -1
- package/lib/gc/gcUnreferencedStateTracker.js +1 -1
- package/lib/gc/gcUnreferencedStateTracker.js.map +1 -1
- package/lib/gc/index.d.ts +1 -1
- package/lib/gc/index.d.ts.map +1 -1
- package/lib/gc/index.js +1 -1
- package/lib/gc/index.js.map +1 -1
- package/lib/id-compressor/appendOnlySortedMap.d.ts +8 -30
- package/lib/id-compressor/appendOnlySortedMap.d.ts.map +1 -1
- package/lib/id-compressor/appendOnlySortedMap.js +25 -66
- package/lib/id-compressor/appendOnlySortedMap.js.map +1 -1
- package/lib/id-compressor/finalSpace.d.ts +29 -0
- package/lib/id-compressor/finalSpace.d.ts.map +1 -0
- package/lib/id-compressor/finalSpace.js +58 -0
- package/lib/id-compressor/finalSpace.js.map +1 -0
- package/lib/id-compressor/idCompressor.d.ts +25 -250
- package/lib/id-compressor/idCompressor.d.ts.map +1 -1
- package/lib/id-compressor/idCompressor.js +382 -1139
- package/lib/id-compressor/idCompressor.js.map +1 -1
- package/lib/id-compressor/identifiers.d.ts +32 -0
- package/lib/id-compressor/identifiers.d.ts.map +1 -0
- package/lib/id-compressor/identifiers.js +11 -0
- package/lib/id-compressor/identifiers.js.map +1 -0
- package/lib/id-compressor/index.d.ts +5 -6
- package/lib/id-compressor/index.d.ts.map +1 -1
- package/lib/id-compressor/index.js +5 -6
- package/lib/id-compressor/index.js.map +1 -1
- package/lib/id-compressor/persistanceUtilities.d.ts +22 -0
- package/lib/id-compressor/persistanceUtilities.d.ts.map +1 -0
- package/lib/id-compressor/persistanceUtilities.js +34 -0
- package/lib/id-compressor/persistanceUtilities.js.map +1 -0
- package/lib/id-compressor/sessionSpaceNormalizer.d.ts +46 -0
- package/lib/id-compressor/sessionSpaceNormalizer.d.ts.map +1 -0
- package/lib/id-compressor/sessionSpaceNormalizer.js +76 -0
- package/lib/id-compressor/sessionSpaceNormalizer.js.map +1 -0
- package/lib/id-compressor/sessions.d.ts +115 -0
- package/lib/id-compressor/sessions.d.ts.map +1 -0
- package/lib/id-compressor/sessions.js +290 -0
- package/lib/id-compressor/sessions.js.map +1 -0
- package/lib/id-compressor/utilities.d.ts +49 -0
- package/lib/id-compressor/utilities.d.ts.map +1 -0
- package/lib/id-compressor/utilities.js +148 -0
- package/lib/id-compressor/utilities.js.map +1 -0
- package/lib/index.d.ts +3 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/opLifecycle/opCompressor.js +3 -3
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +2 -1
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opGroupingManager.js +1 -1
- package/lib/opLifecycle/opGroupingManager.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +2 -3
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +1 -0
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +7 -8
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.js +12 -6
- 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 +12 -5
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +21 -8
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/scheduleManager.d.ts.map +1 -1
- package/lib/scheduleManager.js +3 -3
- package/lib/scheduleManager.js.map +1 -1
- package/lib/summary/index.d.ts +3 -3
- package/lib/summary/index.d.ts.map +1 -1
- package/lib/summary/index.js +1 -1
- package/lib/summary/index.js.map +1 -1
- package/lib/summary/orderedClientElection.d.ts +2 -3
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js +3 -3
- package/lib/summary/orderedClientElection.js.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/lib/summary/runningSummarizer.d.ts +27 -4
- package/lib/summary/runningSummarizer.d.ts.map +1 -1
- package/lib/summary/runningSummarizer.js +240 -68
- package/lib/summary/runningSummarizer.js.map +1 -1
- package/lib/summary/summarizer.d.ts +6 -5
- package/lib/summary/summarizer.d.ts.map +1 -1
- package/lib/summary/summarizer.js +69 -65
- package/lib/summary/summarizer.js.map +1 -1
- package/lib/summary/summarizerClientElection.d.ts +2 -2
- package/lib/summary/summarizerClientElection.d.ts.map +1 -1
- package/lib/summary/summarizerClientElection.js +1 -1
- package/lib/summary/summarizerClientElection.js.map +1 -1
- package/lib/summary/summarizerHeuristics.js +1 -1
- package/lib/summary/summarizerHeuristics.js.map +1 -1
- package/lib/summary/summarizerNode/index.d.ts +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 +5 -14
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.js +16 -93
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +6 -30
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +0 -11
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +3 -86
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/lib/summary/summarizerTypes.d.ts +38 -25
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryCollection.d.ts +2 -3
- package/lib/summary/summaryCollection.d.ts.map +1 -1
- package/lib/summary/summaryCollection.js +2 -1
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryFormat.js +1 -1
- package/lib/summary/summaryFormat.js.map +1 -1
- package/lib/summary/summaryGenerator.d.ts +10 -4
- package/lib/summary/summaryGenerator.d.ts.map +1 -1
- package/lib/summary/summaryGenerator.js +46 -42
- package/lib/summary/summaryGenerator.js.map +1 -1
- package/lib/summary/summaryManager.d.ts +7 -6
- package/lib/summary/summaryManager.d.ts.map +1 -1
- package/lib/summary/summaryManager.js +26 -18
- package/lib/summary/summaryManager.js.map +1 -1
- package/package.json +30 -29
- package/src/batchTracker.ts +3 -2
- package/src/blobManager.ts +105 -185
- package/src/connectionTelemetry.ts +2 -1
- package/src/containerRuntime.ts +481 -267
- package/src/dataStore.ts +2 -3
- package/src/dataStoreContext.ts +5 -8
- package/src/dataStoreContexts.ts +2 -4
- package/src/dataStoreRegistry.ts +1 -1
- package/src/dataStores.ts +4 -7
- package/src/deltaManagerProxyBase.ts +1 -1
- package/src/deltaScheduler.ts +1 -1
- package/src/error.ts +18 -0
- package/src/gc/garbageCollection.ts +39 -41
- package/src/gc/gcConfigs.ts +4 -2
- package/src/gc/gcDefinitions.ts +4 -6
- package/src/gc/gcHelpers.ts +1 -1
- package/src/gc/gcSummaryStateTracker.ts +19 -65
- package/src/gc/gcTelemetry.ts +2 -0
- package/src/gc/gcUnreferencedStateTracker.ts +1 -1
- package/src/gc/index.ts +0 -1
- package/src/id-compressor/appendOnlySortedMap.ts +26 -87
- package/src/id-compressor/finalSpace.ts +67 -0
- package/src/id-compressor/idCompressor.ts +456 -1681
- package/src/id-compressor/identifiers.ts +42 -0
- package/src/id-compressor/index.ts +11 -20
- package/src/id-compressor/persistanceUtilities.ts +58 -0
- package/src/id-compressor/sessionSpaceNormalizer.ts +83 -0
- package/src/id-compressor/sessions.ts +405 -0
- package/src/id-compressor/utilities.ts +187 -0
- package/src/index.ts +7 -1
- package/src/opLifecycle/opCompressor.ts +3 -3
- package/src/opLifecycle/opDecompressor.ts +2 -1
- package/src/opLifecycle/opGroupingManager.ts +1 -1
- package/src/opLifecycle/opSplitter.ts +4 -4
- package/src/opLifecycle/outbox.ts +14 -11
- package/src/opLifecycle/remoteMessageProcessor.ts +19 -6
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +50 -29
- package/src/scheduleManager.ts +6 -4
- package/src/summary/index.ts +4 -3
- package/src/summary/orderedClientElection.ts +8 -5
- package/src/summary/runWhileConnectedCoordinator.ts +1 -1
- package/src/summary/runningSummarizer.ts +273 -97
- package/src/summary/summarizer.ts +23 -12
- package/src/summary/summarizerClientElection.ts +2 -2
- package/src/summary/summarizerHeuristics.ts +1 -1
- package/src/summary/summarizerNode/index.ts +1 -2
- package/src/summary/summarizerNode/summarizerNode.ts +23 -145
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +7 -38
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +3 -123
- package/src/summary/summarizerTypes.ts +40 -25
- package/src/summary/summaryCollection.ts +3 -3
- package/src/summary/summaryFormat.ts +1 -1
- package/src/summary/summaryGenerator.ts +52 -55
- package/src/summary/summaryManager.ts +36 -13
- package/dist/id-compressor/idRange.d.ts +0 -11
- package/dist/id-compressor/idRange.d.ts.map +0 -1
- package/dist/id-compressor/idRange.js +0 -29
- package/dist/id-compressor/idRange.js.map +0 -1
- package/dist/id-compressor/numericUuid.d.ts +0 -59
- package/dist/id-compressor/numericUuid.d.ts.map +0 -1
- package/dist/id-compressor/numericUuid.js +0 -325
- package/dist/id-compressor/numericUuid.js.map +0 -1
- package/dist/id-compressor/sessionIdNormalizer.d.ts +0 -138
- package/dist/id-compressor/sessionIdNormalizer.d.ts.map +0 -1
- package/dist/id-compressor/sessionIdNormalizer.js +0 -483
- package/dist/id-compressor/sessionIdNormalizer.js.map +0 -1
- package/dist/id-compressor/utils.d.ts +0 -57
- package/dist/id-compressor/utils.d.ts.map +0 -1
- package/dist/id-compressor/utils.js +0 -90
- package/dist/id-compressor/utils.js.map +0 -1
- package/dist/id-compressor/uuidUtilities.d.ts +0 -28
- package/dist/id-compressor/uuidUtilities.d.ts.map +0 -1
- package/dist/id-compressor/uuidUtilities.js +0 -104
- package/dist/id-compressor/uuidUtilities.js.map +0 -1
- package/lib/id-compressor/idRange.d.ts +0 -11
- package/lib/id-compressor/idRange.d.ts.map +0 -1
- package/lib/id-compressor/idRange.js +0 -25
- package/lib/id-compressor/idRange.js.map +0 -1
- package/lib/id-compressor/numericUuid.d.ts +0 -59
- package/lib/id-compressor/numericUuid.d.ts.map +0 -1
- package/lib/id-compressor/numericUuid.js +0 -315
- package/lib/id-compressor/numericUuid.js.map +0 -1
- package/lib/id-compressor/sessionIdNormalizer.d.ts +0 -138
- package/lib/id-compressor/sessionIdNormalizer.d.ts.map +0 -1
- package/lib/id-compressor/sessionIdNormalizer.js +0 -479
- package/lib/id-compressor/sessionIdNormalizer.js.map +0 -1
- package/lib/id-compressor/utils.d.ts +0 -57
- package/lib/id-compressor/utils.d.ts.map +0 -1
- package/lib/id-compressor/utils.js +0 -79
- package/lib/id-compressor/utils.js.map +0 -1
- package/lib/id-compressor/uuidUtilities.d.ts +0 -28
- package/lib/id-compressor/uuidUtilities.d.ts.map +0 -1
- package/lib/id-compressor/uuidUtilities.js +0 -96
- package/lib/id-compressor/uuidUtilities.js.map +0 -1
- package/src/id-compressor/idRange.ts +0 -35
- package/src/id-compressor/numericUuid.ts +0 -383
- package/src/id-compressor/sessionIdNormalizer.ts +0 -609
- package/src/id-compressor/utils.ts +0 -114
- package/src/id-compressor/uuidUtilities.ts +0 -120
|
@@ -2,15 +2,25 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
import { isFluidError, createChildMonitoringContext, createChildLogger, } from "@fluidframework/telemetry-utils";
|
|
6
|
-
import { assert, delay, Deferred, PromiseTimer } from "@fluidframework/
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
5
|
+
import { isFluidError, createChildMonitoringContext, createChildLogger, UsageError, } from "@fluidframework/telemetry-utils";
|
|
6
|
+
import { assert, delay, Deferred, PromiseTimer } from "@fluidframework/core-utils";
|
|
7
|
+
import { TypedEventEmitter } from "@fluid-internal/client-utils";
|
|
8
|
+
import { DriverErrorTypes } from "@fluidframework/driver-definitions";
|
|
9
9
|
import { MessageType } from "@fluidframework/protocol-definitions";
|
|
10
10
|
import { opSize } from "../opProperties";
|
|
11
11
|
import { SummarizeHeuristicRunner } from "./summarizerHeuristics";
|
|
12
12
|
import { raceTimer, SummarizeResultBuilder, SummaryGenerator, } from "./summaryGenerator";
|
|
13
13
|
const maxSummarizeAckWaitTime = 10 * 60 * 1000; // 10 minutes
|
|
14
|
+
/**
|
|
15
|
+
* The maximum number of summarization attempts that will be done by default in case of failures
|
|
16
|
+
* that can be retried.
|
|
17
|
+
*/
|
|
18
|
+
export const defaultMaxAttempts = 2;
|
|
19
|
+
/**
|
|
20
|
+
* The default value for maximum number of summarization attempts that will be done for summarization failures where
|
|
21
|
+
* submit fails and the failure can be retried.
|
|
22
|
+
*/
|
|
23
|
+
export const defaultMaxAttemptsForSubmitFailures = 5;
|
|
14
24
|
/**
|
|
15
25
|
* An instance of RunningSummarizer manages the heuristics for summarizing.
|
|
16
26
|
* Until disposed, the instance of RunningSummarizer can assume that it is
|
|
@@ -18,8 +28,9 @@ const maxSummarizeAckWaitTime = 10 * 60 * 1000; // 10 minutes
|
|
|
18
28
|
* track of summaries that it is generating as they are broadcast and acked/nacked.
|
|
19
29
|
* This object is created and controlled by Summarizer object.
|
|
20
30
|
*/
|
|
21
|
-
export class RunningSummarizer {
|
|
31
|
+
export class RunningSummarizer extends TypedEventEmitter {
|
|
22
32
|
constructor(baseLogger, summaryWatcher, configuration, submitSummaryCallback, refreshLatestSummaryAckCallback, heuristicData, summaryCollection, cancellationToken, stopSummarizerCallback, runtime) {
|
|
33
|
+
super();
|
|
23
34
|
this.summaryWatcher = summaryWatcher;
|
|
24
35
|
this.configuration = configuration;
|
|
25
36
|
this.submitSummaryCallback = submitSummaryCallback;
|
|
@@ -97,6 +108,14 @@ export class RunningSummarizer {
|
|
|
97
108
|
this.handleOp(op, runtimeMessage === true);
|
|
98
109
|
};
|
|
99
110
|
this.runtime.on("op", this.runtimeListener);
|
|
111
|
+
// The max attempts for submit failures can be overridden via a feature flag. This allows us to
|
|
112
|
+
// tweak this as per telemetry data until we arrive at a stable number.
|
|
113
|
+
// If its set to a number higher than `defaultMaxAttemptsForSubmitFailures`, it will be ignored.
|
|
114
|
+
const overrideMaxAttempts = this.mc.config.getNumber("Fluid.Summarizer.AttemptsForSubmitFailures");
|
|
115
|
+
this.maxAttemptsForSubmitFailures =
|
|
116
|
+
overrideMaxAttempts && overrideMaxAttempts < defaultMaxAttemptsForSubmitFailures
|
|
117
|
+
? overrideMaxAttempts
|
|
118
|
+
: defaultMaxAttemptsForSubmitFailures;
|
|
100
119
|
}
|
|
101
120
|
static async start(logger, summaryWatcher, configuration, submitSummaryCallback, refreshLatestSummaryAckCallback, heuristicData, summaryCollection, cancellationToken, stopSummarizerCallback, runtime) {
|
|
102
121
|
const summarizer = new RunningSummarizer(logger, summaryWatcher, configuration, submitSummaryCallback, refreshLatestSummaryAckCallback, heuristicData, summaryCollection, cancellationToken, stopSummarizerCallback, runtime);
|
|
@@ -169,7 +188,7 @@ export class RunningSummarizer {
|
|
|
169
188
|
// code in `submitSummary` function in container runtime, will refresh the latest state
|
|
170
189
|
// by calling `refreshLatestSummaryAckFromServer` and we will be fine.
|
|
171
190
|
const isIgnoredError = isFluidError(error) &&
|
|
172
|
-
error.errorType ===
|
|
191
|
+
error.errorType === DriverErrorTypes.fileNotFoundOrAccessDeniedError;
|
|
173
192
|
summaryLogger.sendTelemetryEvent({
|
|
174
193
|
eventName: isIgnoredError
|
|
175
194
|
? "HandleSummaryAckErrorIgnored"
|
|
@@ -277,7 +296,7 @@ export class RunningSummarizer {
|
|
|
277
296
|
if (this.summarizingLock === undefined) {
|
|
278
297
|
this.trySummarizeOnce(
|
|
279
298
|
// summarizeProps
|
|
280
|
-
{
|
|
299
|
+
{ summarizeReason: "lastSummary" },
|
|
281
300
|
// ISummarizeOptions, using defaults: { refreshLatestAck: false, fullTree: false }
|
|
282
301
|
{});
|
|
283
302
|
}
|
|
@@ -346,11 +365,20 @@ export class RunningSummarizer {
|
|
|
346
365
|
* @param resultsBuilder - optional, result builder to use.
|
|
347
366
|
* @returns ISummarizeResult - result of running a summary.
|
|
348
367
|
*/
|
|
349
|
-
trySummarizeOnce(summarizeProps, options,
|
|
368
|
+
trySummarizeOnce(summarizeProps, options, resultsBuilder = new SummarizeResultBuilder()) {
|
|
350
369
|
this.lockedSummaryAction(() => {
|
|
351
370
|
this.beforeSummaryAction();
|
|
352
371
|
}, async () => {
|
|
353
|
-
const
|
|
372
|
+
const summaryLogger = createChildLogger({
|
|
373
|
+
logger: this.mc.logger,
|
|
374
|
+
properties: { all: summarizeProps },
|
|
375
|
+
});
|
|
376
|
+
const summaryOptions = {
|
|
377
|
+
...options,
|
|
378
|
+
summaryLogger,
|
|
379
|
+
cancellationToken: this.cancellationToken,
|
|
380
|
+
};
|
|
381
|
+
const summarizeResult = this.generator.summarize(summaryOptions, resultsBuilder);
|
|
354
382
|
// ensure we wait till the end of the process
|
|
355
383
|
return summarizeResult.receivedSummaryAckOrNack;
|
|
356
384
|
}, () => {
|
|
@@ -364,7 +392,7 @@ export class RunningSummarizer {
|
|
|
364
392
|
return resultsBuilder.build();
|
|
365
393
|
}
|
|
366
394
|
/** Heuristics summarize attempt. */
|
|
367
|
-
trySummarize(reason
|
|
395
|
+
trySummarize(reason) {
|
|
368
396
|
if (this.summarizingLock !== undefined) {
|
|
369
397
|
// lockedSummaryAction() will retry heuristic-based summary at the end of current attempt
|
|
370
398
|
// if it's still needed
|
|
@@ -374,64 +402,207 @@ export class RunningSummarizer {
|
|
|
374
402
|
this.lockedSummaryAction(() => {
|
|
375
403
|
this.beforeSummaryAction();
|
|
376
404
|
}, async () => {
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
];
|
|
381
|
-
let overrideDelaySeconds;
|
|
382
|
-
let summaryAttempts = 0;
|
|
383
|
-
let summaryAttemptsPerPhase = 0;
|
|
384
|
-
let summaryAttemptPhase = 0;
|
|
385
|
-
while (summaryAttemptPhase < attempts.length) {
|
|
386
|
-
if (this.cancellationToken.cancelled) {
|
|
387
|
-
return;
|
|
388
|
-
}
|
|
389
|
-
// We only want to attempt 1 summary when reason is "lastSummary"
|
|
390
|
-
if (++summaryAttempts > 1 && reason === "lastSummary") {
|
|
391
|
-
return;
|
|
392
|
-
}
|
|
393
|
-
summaryAttemptsPerPhase++;
|
|
394
|
-
const summarizeOptions = attempts[summaryAttemptPhase];
|
|
395
|
-
const summarizeProps = {
|
|
396
|
-
reason,
|
|
397
|
-
summaryAttempts,
|
|
398
|
-
summaryAttemptsPerPhase,
|
|
399
|
-
summaryAttemptPhase: summaryAttemptPhase + 1,
|
|
400
|
-
...summarizeOptions,
|
|
401
|
-
};
|
|
402
|
-
// Note: no need to account for cancellationToken.waitCancelled here, as
|
|
403
|
-
// this is accounted SummaryGenerator.summarizeCore that controls receivedSummaryAckOrNack.
|
|
404
|
-
const resultSummarize = this.generator.summarize(summarizeProps, summarizeOptions, cancellationToken);
|
|
405
|
-
const result = await resultSummarize.receivedSummaryAckOrNack;
|
|
406
|
-
if (result.success) {
|
|
407
|
-
return;
|
|
408
|
-
}
|
|
409
|
-
// Check for retryDelay that can come from summaryNack or upload summary flow.
|
|
410
|
-
// Retry the same step only once per retryAfter response.
|
|
411
|
-
const delaySeconds = result.retryAfterSeconds;
|
|
412
|
-
if (delaySeconds === undefined || summaryAttemptsPerPhase > 1) {
|
|
413
|
-
summaryAttemptPhase++;
|
|
414
|
-
summaryAttemptsPerPhase = 0;
|
|
415
|
-
}
|
|
416
|
-
if (delaySeconds !== undefined) {
|
|
417
|
-
this.mc.logger.sendPerformanceEvent({
|
|
418
|
-
eventName: "SummarizeAttemptDelay",
|
|
419
|
-
duration: delaySeconds,
|
|
420
|
-
summaryNackDelay: overrideDelaySeconds !== undefined,
|
|
421
|
-
...summarizeProps,
|
|
422
|
-
});
|
|
423
|
-
await delay(delaySeconds * 1000);
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
this.stopSummarizerCallback("failToSummarize");
|
|
405
|
+
return this.mc.config.getBoolean("Fluid.Summarizer.UseDynamicRetries")
|
|
406
|
+
? this.trySummarizeWithRetries(reason)
|
|
407
|
+
: this.trySummarizeWithStaticAttempts(reason);
|
|
427
408
|
}, () => {
|
|
428
409
|
this.afterSummaryAction();
|
|
429
410
|
}).catch((error) => {
|
|
430
411
|
this.mc.logger.sendErrorEvent({ eventName: "UnexpectedSummarizeError" }, error);
|
|
431
412
|
});
|
|
432
413
|
}
|
|
414
|
+
/**
|
|
415
|
+
* Tries to summarize 2 times with pre-defined summary options. If an attempt fails with "retryAfterSeconds"
|
|
416
|
+
* param, that attempt is tried once more.
|
|
417
|
+
*/
|
|
418
|
+
async trySummarizeWithStaticAttempts(reason) {
|
|
419
|
+
const attemptOptions = [
|
|
420
|
+
{ refreshLatestAck: false, fullTree: false },
|
|
421
|
+
{ refreshLatestAck: true, fullTree: false },
|
|
422
|
+
];
|
|
423
|
+
let summaryAttempts = 0;
|
|
424
|
+
let summaryAttemptsPerPhase = 0;
|
|
425
|
+
let summaryAttemptPhase = 0;
|
|
426
|
+
while (summaryAttemptPhase < attemptOptions.length) {
|
|
427
|
+
if (this.cancellationToken.cancelled) {
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
// We only want to attempt 1 summary when reason is "lastSummary"
|
|
431
|
+
if (++summaryAttempts > 1 && reason === "lastSummary") {
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
summaryAttemptsPerPhase++;
|
|
435
|
+
const summarizeOptions = attemptOptions[summaryAttemptPhase];
|
|
436
|
+
const summarizeProps = {
|
|
437
|
+
summarizeReason: reason,
|
|
438
|
+
summaryAttempts,
|
|
439
|
+
summaryAttemptsPerPhase,
|
|
440
|
+
summaryAttemptPhase: summaryAttemptPhase + 1,
|
|
441
|
+
...summarizeOptions,
|
|
442
|
+
};
|
|
443
|
+
const summaryLogger = createChildLogger({
|
|
444
|
+
logger: this.mc.logger,
|
|
445
|
+
properties: { all: summarizeProps },
|
|
446
|
+
});
|
|
447
|
+
const summaryOptions = {
|
|
448
|
+
...summarizeOptions,
|
|
449
|
+
summaryLogger,
|
|
450
|
+
cancellationToken: this.cancellationToken,
|
|
451
|
+
};
|
|
452
|
+
// Note: no need to account for cancellationToken.waitCancelled here, as
|
|
453
|
+
// this is accounted SummaryGenerator.summarizeCore that controls receivedSummaryAckOrNack.
|
|
454
|
+
const resultSummarize = this.generator.summarize(summaryOptions);
|
|
455
|
+
const ackNackResult = await resultSummarize.receivedSummaryAckOrNack;
|
|
456
|
+
if (ackNackResult.success) {
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
// Check for retryDelay that can come from summaryNack, upload summary or submit summary flows.
|
|
460
|
+
// Retry the same step only once per retryAfter response.
|
|
461
|
+
const submitResult = await resultSummarize.summarySubmitted;
|
|
462
|
+
const delaySeconds = !submitResult.success
|
|
463
|
+
? submitResult.data?.retryAfterSeconds
|
|
464
|
+
: ackNackResult.data?.retryAfterSeconds;
|
|
465
|
+
if (delaySeconds === undefined || summaryAttemptsPerPhase > 1) {
|
|
466
|
+
summaryAttemptPhase++;
|
|
467
|
+
summaryAttemptsPerPhase = 0;
|
|
468
|
+
}
|
|
469
|
+
if (delaySeconds !== undefined) {
|
|
470
|
+
this.mc.logger.sendPerformanceEvent({
|
|
471
|
+
eventName: "SummarizeAttemptDelay",
|
|
472
|
+
duration: delaySeconds,
|
|
473
|
+
summaryNackDelay: ackNackResult.data?.retryAfterSeconds !== undefined,
|
|
474
|
+
...summarizeProps,
|
|
475
|
+
});
|
|
476
|
+
await delay(delaySeconds * 1000);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
this.stopSummarizerCallback("failToSummarize");
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Tries to summarize with retries where retry is based on the failure params.
|
|
483
|
+
* For example, summarization may be retried for failures with "retryAfterSeconds" param.
|
|
484
|
+
*/
|
|
485
|
+
async trySummarizeWithRetries(reason) {
|
|
486
|
+
// Helper to set summarize options, telemetry properties and call summarize.
|
|
487
|
+
const attemptSummarize = (attemptNumber, finalAttempt) => {
|
|
488
|
+
const summarizeOptions = {
|
|
489
|
+
fullTree: false,
|
|
490
|
+
};
|
|
491
|
+
const summarizeProps = {
|
|
492
|
+
summarizeReason: reason,
|
|
493
|
+
summaryAttempts: attemptNumber,
|
|
494
|
+
...summarizeOptions,
|
|
495
|
+
finalAttempt,
|
|
496
|
+
};
|
|
497
|
+
const summaryLogger = createChildLogger({
|
|
498
|
+
logger: this.mc.logger,
|
|
499
|
+
properties: { all: summarizeProps },
|
|
500
|
+
});
|
|
501
|
+
const summaryOptions = {
|
|
502
|
+
...summarizeOptions,
|
|
503
|
+
summaryLogger,
|
|
504
|
+
cancellationToken: this.cancellationToken,
|
|
505
|
+
finalAttempt,
|
|
506
|
+
};
|
|
507
|
+
const summarizeResult = this.generator.summarize(summaryOptions);
|
|
508
|
+
return { summarizeProps, summarizeResult };
|
|
509
|
+
};
|
|
510
|
+
// The max number of attempts are based on the stage at which summarization failed. If it fails before it is
|
|
511
|
+
// submitted, a different value is used compared to if it fails after submission. Usually, in the former case,
|
|
512
|
+
// we would retry more often as its cheaper and retries are likely to succeed.
|
|
513
|
+
// This makes it harder to predict how many attempts would actually happen as that depends on how far an attempt
|
|
514
|
+
// made. To keep things simple, the max attempts is reset after every attempt based on where it failed. This may
|
|
515
|
+
// result in some failures not being retried depending on what happened before this attempt. That's fine because
|
|
516
|
+
// such scenarios are very unlikely and even if it happens, it would resolve when a new summarizer starts over.
|
|
517
|
+
// For example - When failure switches from one the submit failures to nack failure, only one more retry will
|
|
518
|
+
// happen irrespective of the value of `defaultMaxAttempts`.
|
|
519
|
+
let maxAttempts = defaultMaxAttempts;
|
|
520
|
+
let currentAttempt = 0;
|
|
521
|
+
let retryAfterSeconds;
|
|
522
|
+
let done = false;
|
|
523
|
+
let result = "success";
|
|
524
|
+
do {
|
|
525
|
+
currentAttempt++;
|
|
526
|
+
if (this.cancellationToken.cancelled) {
|
|
527
|
+
result = "canceled";
|
|
528
|
+
done = true;
|
|
529
|
+
break;
|
|
530
|
+
}
|
|
531
|
+
const { summarizeProps, summarizeResult } = attemptSummarize(currentAttempt, false /* finalAttempt */);
|
|
532
|
+
// Ack / nack is the final step, so if it succeeds we're done.
|
|
533
|
+
const ackNackResult = await summarizeResult.receivedSummaryAckOrNack;
|
|
534
|
+
if (ackNackResult.success) {
|
|
535
|
+
result = "success";
|
|
536
|
+
done = true;
|
|
537
|
+
break;
|
|
538
|
+
}
|
|
539
|
+
// Update max attempts and retry params from the failure result.
|
|
540
|
+
// If submit summary failed, use the params from "summarySubmitted" result. Else, use the params
|
|
541
|
+
// from "receivedSummaryAckOrNack" result.
|
|
542
|
+
// Note: Check "summarySubmitted" result first because if it fails, ack nack would fail as well.
|
|
543
|
+
const submitSummaryResult = await summarizeResult.summarySubmitted;
|
|
544
|
+
if (!submitSummaryResult.success) {
|
|
545
|
+
maxAttempts = this.maxAttemptsForSubmitFailures;
|
|
546
|
+
retryAfterSeconds = submitSummaryResult.data?.retryAfterSeconds;
|
|
547
|
+
}
|
|
548
|
+
else {
|
|
549
|
+
maxAttempts = defaultMaxAttempts;
|
|
550
|
+
retryAfterSeconds = ackNackResult.data?.retryAfterSeconds;
|
|
551
|
+
}
|
|
552
|
+
// Emit "summarize" event for this failed attempt.
|
|
553
|
+
result = "failure";
|
|
554
|
+
const eventProps = {
|
|
555
|
+
result,
|
|
556
|
+
currentAttempt,
|
|
557
|
+
maxAttempts,
|
|
558
|
+
error: ackNackResult.error,
|
|
559
|
+
};
|
|
560
|
+
this.emit("summarize", eventProps);
|
|
561
|
+
// If the failure doesn't have "retryAfterSeconds" or the max number of attempts have been done, we're done.
|
|
562
|
+
if (retryAfterSeconds === undefined || currentAttempt >= maxAttempts - 1) {
|
|
563
|
+
done = true;
|
|
564
|
+
}
|
|
565
|
+
// If the failure has "retryAfterSeconds", add a delay of that time. In this case, a final attempt will
|
|
566
|
+
// take place and we need to wait for "retryAfterSeconds" before that.
|
|
567
|
+
if (retryAfterSeconds !== undefined) {
|
|
568
|
+
this.mc.logger.sendPerformanceEvent({
|
|
569
|
+
eventName: "SummarizeAttemptDelay",
|
|
570
|
+
duration: retryAfterSeconds,
|
|
571
|
+
summaryNackDelay: ackNackResult.data?.retryAfterSeconds !== undefined,
|
|
572
|
+
stage: submitSummaryResult.data?.stage,
|
|
573
|
+
dynamicRetries: true,
|
|
574
|
+
...summarizeProps,
|
|
575
|
+
});
|
|
576
|
+
await delay(retryAfterSeconds * 1000);
|
|
577
|
+
}
|
|
578
|
+
} while (!done);
|
|
579
|
+
// If summarize attempt did not fail, emit "summarize" event and return. A failed attempt may be retried below.
|
|
580
|
+
if (result !== "failure") {
|
|
581
|
+
this.emit("summarize", { result, currentAttempt, maxAttempts });
|
|
582
|
+
return;
|
|
583
|
+
}
|
|
584
|
+
// If summarization wasn't successful above and the failure contains "retryAfterSeconds", perform one last
|
|
585
|
+
// attempt. This gives a chance to the runtime to perform additional steps in the last attempt.
|
|
586
|
+
if (retryAfterSeconds !== undefined) {
|
|
587
|
+
const { summarizeResult } = attemptSummarize(++currentAttempt, true /* finalAttempt */);
|
|
588
|
+
// Ack / nack is the final step, so if it succeeds we're done.
|
|
589
|
+
const ackNackResult = await summarizeResult.receivedSummaryAckOrNack;
|
|
590
|
+
result = ackNackResult.success ? "success" : "failure";
|
|
591
|
+
const eventProps = {
|
|
592
|
+
result,
|
|
593
|
+
currentAttempt,
|
|
594
|
+
maxAttempts,
|
|
595
|
+
error: ackNackResult.success ? undefined : ackNackResult.error,
|
|
596
|
+
};
|
|
597
|
+
this.emit("summarize", eventProps);
|
|
598
|
+
}
|
|
599
|
+
// If summarization is still unsuccessful, stop the summarizer.
|
|
600
|
+
if (result === "failure") {
|
|
601
|
+
this.stopSummarizerCallback("failToSummarize");
|
|
602
|
+
}
|
|
603
|
+
}
|
|
433
604
|
/** {@inheritdoc (ISummarizer:interface).summarizeOnDemand} */
|
|
434
|
-
summarizeOnDemand(resultsBuilder = new SummarizeResultBuilder()
|
|
605
|
+
summarizeOnDemand(options, resultsBuilder = new SummarizeResultBuilder()) {
|
|
435
606
|
if (this.stopping) {
|
|
436
607
|
resultsBuilder.fail("RunningSummarizer stopped or disposed", undefined);
|
|
437
608
|
return resultsBuilder.build();
|
|
@@ -442,12 +613,13 @@ export class RunningSummarizer {
|
|
|
442
613
|
// The heuristics are blocking concurrent summarize attempts.
|
|
443
614
|
throw new UsageError("Attempted to run an already-running summarizer on demand");
|
|
444
615
|
}
|
|
445
|
-
const
|
|
616
|
+
const { reason, ...summarizeOptions } = options;
|
|
617
|
+
const result = this.trySummarizeOnce({ summarizeReason: `onDemand/${reason}` }, summarizeOptions, resultsBuilder);
|
|
446
618
|
return result;
|
|
447
619
|
}
|
|
448
620
|
/** {@inheritdoc (ISummarizer:interface).enqueueSummarize} */
|
|
449
|
-
enqueueSummarize(
|
|
450
|
-
const
|
|
621
|
+
enqueueSummarize(options) {
|
|
622
|
+
const { reason, afterSequenceNumber = 0, override = false, ...summarizeOptions } = options;
|
|
451
623
|
let overridden = false;
|
|
452
624
|
if (this.enqueuedSummary !== undefined) {
|
|
453
625
|
if (!override) {
|
|
@@ -459,9 +631,9 @@ export class RunningSummarizer {
|
|
|
459
631
|
overridden = true;
|
|
460
632
|
}
|
|
461
633
|
this.enqueuedSummary = {
|
|
462
|
-
reason:
|
|
634
|
+
reason: `enqueue;${reason}`,
|
|
463
635
|
afterSequenceNumber,
|
|
464
|
-
|
|
636
|
+
summarizeOptions,
|
|
465
637
|
resultsBuilder: new SummarizeResultBuilder(),
|
|
466
638
|
};
|
|
467
639
|
const results = this.enqueuedSummary.resultsBuilder.build();
|
|
@@ -485,10 +657,10 @@ export class RunningSummarizer {
|
|
|
485
657
|
// If no enqueued summary is ready or a summary is already in progress, take no action.
|
|
486
658
|
return false;
|
|
487
659
|
}
|
|
488
|
-
const { reason, resultsBuilder,
|
|
660
|
+
const { reason, resultsBuilder, summarizeOptions } = this.enqueuedSummary;
|
|
489
661
|
// Set to undefined first, so that subsequent enqueue attempt while summarize will occur later.
|
|
490
662
|
this.enqueuedSummary = undefined;
|
|
491
|
-
this.trySummarizeOnce({
|
|
663
|
+
this.trySummarizeOnce({ summarizeReason: `enqueuedSummary/${reason}` }, summarizeOptions, resultsBuilder);
|
|
492
664
|
return true;
|
|
493
665
|
}
|
|
494
666
|
disposeEnqueuedSummary() {
|