@fluidframework/container-runtime 2.0.0-rc.4.0.6 → 2.0.0-rc.5.0.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 +46 -0
- package/api-extractor/api-extractor-lint-bundle.json +5 -0
- package/api-extractor/api-extractor-lint-legacy.cjs.json +5 -0
- package/api-extractor/api-extractor-lint-legacy.esm.json +5 -0
- package/api-extractor/api-extractor-lint-public.cjs.json +5 -0
- package/api-extractor/api-extractor-lint-public.esm.json +5 -0
- package/api-extractor.json +1 -1
- package/api-report/{container-runtime.api.md → container-runtime.alpha.api.md} +33 -516
- package/api-report/container-runtime.beta.api.md +73 -0
- package/api-report/container-runtime.public.api.md +73 -0
- package/biome.jsonc +4 -0
- 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.d.ts +3 -20
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +1 -35
- package/dist/blobManager.js.map +1 -1
- package/dist/channelCollection.d.ts +21 -12
- package/dist/channelCollection.d.ts.map +1 -1
- package/dist/channelCollection.js +113 -110
- package/dist/channelCollection.js.map +1 -1
- package/dist/connectionTelemetry.d.ts +1 -1
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +14 -14
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerHandleContext.d.ts +2 -1
- package/dist/containerHandleContext.d.ts.map +1 -1
- package/dist/containerHandleContext.js.map +1 -1
- package/dist/containerRuntime.d.ts +17 -34
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +109 -145
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.d.ts.map +1 -1
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +30 -44
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +26 -40
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/dataStoreRegistry.js.map +1 -1
- package/dist/deltaManagerProxies.d.ts +4 -3
- package/dist/deltaManagerProxies.d.ts.map +1 -1
- package/dist/deltaManagerProxies.js.map +1 -1
- package/dist/deltaScheduler.d.ts +1 -1
- package/dist/deltaScheduler.d.ts.map +1 -1
- package/dist/deltaScheduler.js +1 -3
- package/dist/deltaScheduler.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts +5 -5
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +29 -30
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.d.ts.map +1 -1
- package/dist/gc/gcConfigs.js +12 -31
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +10 -38
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js +1 -5
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcHelpers.d.ts +2 -3
- package/dist/gc/gcHelpers.d.ts.map +1 -1
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -1
- package/dist/gc/gcSummaryDefinitions.d.ts +1 -1
- package/dist/gc/gcSummaryDefinitions.d.ts.map +1 -1
- package/dist/gc/gcSummaryDefinitions.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts +2 -35
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js +9 -62
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts +2 -2
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +3 -9
- package/dist/gc/gcTelemetry.js.map +1 -1
- 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 -3
- package/dist/gc/index.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/legacy.d.ts +1 -1
- package/dist/messageTypes.d.ts +6 -22
- package/dist/messageTypes.d.ts.map +1 -1
- package/dist/messageTypes.js.map +1 -1
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/definitions.d.ts +2 -2
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -1
- package/dist/opLifecycle/index.d.ts +1 -1
- package/dist/opLifecycle/index.d.ts.map +1 -1
- package/dist/opLifecycle/index.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts +11 -1
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +13 -2
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +1 -2
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts +10 -3
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js +7 -0
- package/dist/opLifecycle/opGroupingManager.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts +4 -2
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +13 -8
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +10 -0
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +13 -18
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js +2 -2
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/dist/opProperties.d.ts +1 -1
- package/dist/opProperties.d.ts.map +1 -1
- package/dist/opProperties.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +15 -5
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/scheduleManager.d.ts +1 -1
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js.map +1 -1
- package/dist/storageServiceWithAttachBlobs.js.map +1 -1
- package/dist/summary/documentSchema.d.ts.map +1 -1
- package/dist/summary/documentSchema.js +2 -3
- package/dist/summary/documentSchema.js.map +1 -1
- package/dist/summary/index.d.ts +2 -2
- package/dist/summary/index.d.ts.map +1 -1
- package/dist/summary/index.js.map +1 -1
- package/dist/summary/orderedClientElection.d.ts +4 -2
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js +35 -13
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/dist/summary/runningSummarizer.d.ts +1 -6
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +23 -110
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.d.ts +1 -1
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +4 -1
- package/dist/summary/summarizer.js.map +1 -1
- package/dist/summary/summarizerClientElection.d.ts +1 -1
- 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.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.d.ts +2 -3
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js +16 -16
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -3
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +5 -2
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +17 -29
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryCollection.d.ts +1 -1
- package/dist/summary/summaryCollection.d.ts.map +1 -1
- package/dist/summary/summaryCollection.js +11 -11
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +2 -3
- package/dist/summary/summaryFormat.d.ts.map +1 -1
- package/dist/summary/summaryFormat.js +2 -2
- package/dist/summary/summaryFormat.js.map +1 -1
- package/dist/summary/summaryGenerator.d.ts +7 -8
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +27 -24
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryManager.d.ts.map +1 -1
- package/dist/summary/summaryManager.js +1 -2
- package/dist/summary/summaryManager.js.map +1 -1
- package/dist/throttler.d.ts.map +1 -1
- package/dist/throttler.js +3 -1
- package/dist/throttler.js.map +1 -1
- package/lib/batchTracker.d.ts.map +1 -1
- package/lib/batchTracker.js +1 -1
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager.d.ts +3 -20
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +2 -36
- package/lib/blobManager.js.map +1 -1
- package/lib/channelCollection.d.ts +21 -12
- package/lib/channelCollection.d.ts.map +1 -1
- package/lib/channelCollection.js +114 -112
- package/lib/channelCollection.js.map +1 -1
- package/lib/connectionTelemetry.d.ts +1 -1
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +2 -2
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerHandleContext.d.ts +2 -1
- package/lib/containerHandleContext.d.ts.map +1 -1
- package/lib/containerHandleContext.js.map +1 -1
- package/lib/containerRuntime.d.ts +17 -34
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +106 -142
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStore.d.ts.map +1 -1
- package/lib/dataStore.js.map +1 -1
- package/lib/dataStoreContext.d.ts +30 -44
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +29 -43
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.d.ts.map +1 -1
- package/lib/dataStoreContexts.js +1 -1
- package/lib/dataStoreContexts.js.map +1 -1
- package/lib/dataStoreRegistry.js.map +1 -1
- package/lib/deltaManagerProxies.d.ts +4 -3
- package/lib/deltaManagerProxies.d.ts.map +1 -1
- package/lib/deltaManagerProxies.js.map +1 -1
- package/lib/deltaScheduler.d.ts +1 -1
- package/lib/deltaScheduler.d.ts.map +1 -1
- package/lib/deltaScheduler.js +1 -3
- package/lib/deltaScheduler.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts +5 -5
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +30 -31
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcConfigs.d.ts.map +1 -1
- package/lib/gc/gcConfigs.js +13 -32
- package/lib/gc/gcConfigs.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +10 -38
- package/lib/gc/gcDefinitions.d.ts.map +1 -1
- package/lib/gc/gcDefinitions.js +0 -4
- package/lib/gc/gcDefinitions.js.map +1 -1
- package/lib/gc/gcHelpers.d.ts +2 -3
- package/lib/gc/gcHelpers.d.ts.map +1 -1
- package/lib/gc/gcHelpers.js.map +1 -1
- package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -1
- package/lib/gc/gcSummaryDefinitions.d.ts +1 -1
- package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -1
- package/lib/gc/gcSummaryDefinitions.js.map +1 -1
- package/lib/gc/gcSummaryStateTracker.d.ts +2 -35
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/lib/gc/gcSummaryStateTracker.js +4 -57
- package/lib/gc/gcSummaryStateTracker.js.map +1 -1
- package/lib/gc/gcTelemetry.d.ts +2 -2
- package/lib/gc/gcTelemetry.d.ts.map +1 -1
- package/lib/gc/gcTelemetry.js +3 -9
- package/lib/gc/gcTelemetry.js.map +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/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/legacy.d.ts +1 -1
- package/lib/messageTypes.d.ts +6 -22
- package/lib/messageTypes.d.ts.map +1 -1
- package/lib/messageTypes.js.map +1 -1
- package/lib/opLifecycle/batchManager.js.map +1 -1
- package/lib/opLifecycle/definitions.d.ts +2 -2
- package/lib/opLifecycle/definitions.d.ts.map +1 -1
- package/lib/opLifecycle/definitions.js.map +1 -1
- package/lib/opLifecycle/index.d.ts +1 -1
- package/lib/opLifecycle/index.d.ts.map +1 -1
- package/lib/opLifecycle/index.js +1 -1
- package/lib/opLifecycle/index.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts +11 -1
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js +13 -2
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +1 -2
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts +10 -3
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/lib/opLifecycle/opGroupingManager.js +7 -0
- package/lib/opLifecycle/opGroupingManager.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts +4 -2
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +13 -8
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +10 -0
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +13 -18
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.js +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/lib/opProperties.d.ts +1 -1
- package/lib/opProperties.d.ts.map +1 -1
- package/lib/opProperties.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +15 -5
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/scheduleManager.d.ts +1 -1
- package/lib/scheduleManager.d.ts.map +1 -1
- package/lib/scheduleManager.js.map +1 -1
- package/lib/storageServiceWithAttachBlobs.js.map +1 -1
- package/lib/summary/documentSchema.d.ts.map +1 -1
- package/lib/summary/documentSchema.js +2 -3
- package/lib/summary/documentSchema.js.map +1 -1
- package/lib/summary/index.d.ts +2 -2
- 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 +4 -2
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js +35 -13
- package/lib/summary/orderedClientElection.js.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/lib/summary/runningSummarizer.d.ts +1 -6
- package/lib/summary/runningSummarizer.d.ts.map +1 -1
- package/lib/summary/runningSummarizer.js +22 -109
- package/lib/summary/runningSummarizer.js.map +1 -1
- package/lib/summary/summarizer.d.ts +1 -1
- package/lib/summary/summarizer.d.ts.map +1 -1
- package/lib/summary/summarizer.js +4 -1
- package/lib/summary/summarizer.js.map +1 -1
- package/lib/summary/summarizerClientElection.d.ts +1 -1
- 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.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.d.ts +2 -3
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.js +14 -14
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -3
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +5 -2
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/lib/summary/summarizerTypes.d.ts +17 -29
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryCollection.d.ts +1 -1
- package/lib/summary/summaryCollection.d.ts.map +1 -1
- package/lib/summary/summaryCollection.js +3 -3
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryFormat.d.ts +2 -3
- package/lib/summary/summaryFormat.d.ts.map +1 -1
- package/lib/summary/summaryFormat.js +2 -2
- package/lib/summary/summaryFormat.js.map +1 -1
- package/lib/summary/summaryGenerator.d.ts +7 -8
- package/lib/summary/summaryGenerator.d.ts.map +1 -1
- package/lib/summary/summaryGenerator.js +26 -23
- package/lib/summary/summaryGenerator.js.map +1 -1
- package/lib/summary/summaryManager.d.ts.map +1 -1
- package/lib/summary/summaryManager.js +1 -2
- package/lib/summary/summaryManager.js.map +1 -1
- package/lib/throttler.d.ts.map +1 -1
- package/lib/throttler.js +3 -1
- package/lib/throttler.js.map +1 -1
- package/lib/tsdoc-metadata.json +1 -1
- package/package.json +92 -28
- package/src/batchTracker.ts +5 -2
- package/src/blobManager.ts +21 -61
- package/src/channelCollection.ts +179 -186
- package/src/connectionTelemetry.ts +18 -12
- package/src/containerHandleContext.ts +2 -1
- package/src/containerRuntime.ts +166 -214
- package/src/dataStore.ts +2 -1
- package/src/dataStoreContext.ts +79 -98
- package/src/dataStoreContexts.ts +7 -2
- package/src/deltaManagerProxies.ts +15 -6
- package/src/deltaScheduler.ts +5 -4
- package/src/gc/garbageCollection.md +0 -8
- package/src/gc/garbageCollection.ts +66 -57
- package/src/gc/gcConfigs.ts +15 -37
- package/src/gc/gcDefinitions.ts +20 -39
- package/src/gc/gcHelpers.ts +8 -4
- package/src/gc/gcSummaryDefinitions.ts +1 -1
- package/src/gc/gcSummaryStateTracker.ts +11 -74
- package/src/gc/gcTelemetry.ts +4 -11
- package/src/gc/index.ts +0 -2
- package/src/index.ts +1 -2
- package/src/messageTypes.ts +8 -24
- package/src/opLifecycle/README.md +120 -160
- package/src/opLifecycle/definitions.ts +2 -2
- package/src/opLifecycle/index.ts +5 -1
- package/src/opLifecycle/opCompressor.ts +13 -2
- package/src/opLifecycle/opDecompressor.ts +3 -7
- package/src/opLifecycle/opGroupingManager.ts +12 -8
- package/src/opLifecycle/opSplitter.ts +22 -11
- package/src/opLifecycle/outbox.ts +14 -32
- package/src/opLifecycle/remoteMessageProcessor.ts +4 -1
- package/src/opProperties.ts +2 -2
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +20 -7
- package/src/scheduleManager.ts +4 -1
- package/src/summary/documentSchema.ts +4 -7
- package/src/summary/images/appTree.png +0 -0
- package/src/summary/images/protocolAndAppTree.png +0 -0
- package/src/summary/images/summaryTree.png +0 -0
- package/src/summary/index.ts +5 -2
- package/src/summary/orderedClientElection.ts +100 -22
- package/src/summary/runningSummarizer.ts +54 -124
- package/src/summary/summarizer.ts +5 -2
- package/src/summary/summarizerClientElection.ts +4 -2
- package/src/summary/summarizerNode/summarizerNode.ts +23 -30
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +9 -3
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +11 -11
- package/src/summary/summarizerTypes.ts +32 -33
- package/src/summary/summaryCollection.ts +6 -3
- package/src/summary/summaryFormat.ts +18 -10
- package/src/summary/summaryFormats.md +160 -0
- package/src/summary/summaryGenerator.ts +47 -30
- package/src/summary/summaryManager.ts +6 -9
- package/src/throttler.ts +3 -1
- package/tsconfig.json +2 -0
- package/tsdoc.json +4 -0
|
@@ -6,8 +6,11 @@
|
|
|
6
6
|
import { TypedEventEmitter } from "@fluid-internal/client-utils";
|
|
7
7
|
import { IDisposable, ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
|
|
8
8
|
import { assert, Deferred, PromiseTimer, delay } from "@fluidframework/core-utils/internal";
|
|
9
|
-
import {
|
|
10
|
-
|
|
9
|
+
import {
|
|
10
|
+
DriverErrorTypes,
|
|
11
|
+
MessageType,
|
|
12
|
+
ISequencedDocumentMessage,
|
|
13
|
+
} from "@fluidframework/driver-definitions/internal";
|
|
11
14
|
import {
|
|
12
15
|
MonitoringContext,
|
|
13
16
|
UsageError,
|
|
@@ -38,9 +41,15 @@ import {
|
|
|
38
41
|
ISummaryCancellationToken,
|
|
39
42
|
SubmitSummaryResult,
|
|
40
43
|
SummarizerStopReason,
|
|
44
|
+
type IRetriableFailureError,
|
|
41
45
|
} from "./summarizerTypes.js";
|
|
42
|
-
import { IAckedSummary, IClientSummaryWatcher, SummaryCollection } from "./summaryCollection.js";
|
|
43
46
|
import {
|
|
47
|
+
IAckedSummary,
|
|
48
|
+
IClientSummaryWatcher,
|
|
49
|
+
SummaryCollection,
|
|
50
|
+
} from "./summaryCollection.js";
|
|
51
|
+
import {
|
|
52
|
+
RetriableSummaryError,
|
|
44
53
|
SummarizeReason,
|
|
45
54
|
SummarizeResultBuilder,
|
|
46
55
|
SummaryGenerator,
|
|
@@ -67,7 +76,10 @@ export const defaultMaxAttemptsForSubmitFailures = 5;
|
|
|
67
76
|
* track of summaries that it is generating as they are broadcast and acked/nacked.
|
|
68
77
|
* This object is created and controlled by Summarizer object.
|
|
69
78
|
*/
|
|
70
|
-
export class RunningSummarizer
|
|
79
|
+
export class RunningSummarizer
|
|
80
|
+
extends TypedEventEmitter<ISummarizerEvents>
|
|
81
|
+
implements IDisposable
|
|
82
|
+
{
|
|
71
83
|
public static async start(
|
|
72
84
|
logger: ITelemetryBaseLogger,
|
|
73
85
|
summaryWatcher: IClientSummaryWatcher,
|
|
@@ -229,7 +241,10 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
|
|
|
229
241
|
// Cap the maximum amount of time client will wait for a summarize op ack to maxSummarizeAckWaitTime
|
|
230
242
|
// configuration.maxAckWaitTime is composed from defaults, server values, and runtime overrides
|
|
231
243
|
|
|
232
|
-
const maxAckWaitTime = Math.min(
|
|
244
|
+
const maxAckWaitTime = Math.min(
|
|
245
|
+
this.configuration.maxAckWaitTime,
|
|
246
|
+
maxSummarizeAckWaitTime,
|
|
247
|
+
);
|
|
233
248
|
|
|
234
249
|
this.pendingAckTimer = new PromiseTimer(maxAckWaitTime, () => {
|
|
235
250
|
// Note: summarizeCount (from ChildLogger definition) may be 0,
|
|
@@ -257,8 +272,7 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
|
|
|
257
272
|
});
|
|
258
273
|
|
|
259
274
|
const immediatelyRefreshLatestSummaryAck =
|
|
260
|
-
this.mc.config.getBoolean("Fluid.Summarizer.immediatelyRefreshLatestSummaryAck") ??
|
|
261
|
-
true;
|
|
275
|
+
this.mc.config.getBoolean("Fluid.Summarizer.immediatelyRefreshLatestSummaryAck") ?? true;
|
|
262
276
|
this.generator = new SummaryGenerator(
|
|
263
277
|
this.pendingAckTimer,
|
|
264
278
|
this.heuristicData,
|
|
@@ -437,7 +451,10 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
|
|
|
437
451
|
* @param op - op to check
|
|
438
452
|
* @returns true if this op can trigger a summary
|
|
439
453
|
*/
|
|
440
|
-
private opCanTriggerSummary(
|
|
454
|
+
private opCanTriggerSummary(
|
|
455
|
+
op: ISequencedDocumentMessage,
|
|
456
|
+
runtimeMessage: boolean,
|
|
457
|
+
): boolean {
|
|
441
458
|
switch (op.type) {
|
|
442
459
|
case MessageType.Summarize:
|
|
443
460
|
case MessageType.SummaryAck:
|
|
@@ -474,7 +491,6 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
|
|
|
474
491
|
this.trySummarizeOnce(
|
|
475
492
|
// summarizeProps
|
|
476
493
|
{ summarizeReason: "lastSummary" },
|
|
477
|
-
// ISummarizeOptions, using defaults: { refreshLatestAck: false, fullTree: false }
|
|
478
494
|
{},
|
|
479
495
|
);
|
|
480
496
|
}
|
|
@@ -583,8 +599,7 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
|
|
|
583
599
|
...options,
|
|
584
600
|
summaryLogger,
|
|
585
601
|
cancellationToken: this.cancellationToken,
|
|
586
|
-
latestSummaryRefSeqNum:
|
|
587
|
-
this.heuristicData.lastSuccessfulSummary.refSequenceNumber,
|
|
602
|
+
latestSummaryRefSeqNum: this.heuristicData.lastSuccessfulSummary.refSequenceNumber,
|
|
588
603
|
};
|
|
589
604
|
const summarizeResult = this.generator.summarize(summaryOptions, resultsBuilder);
|
|
590
605
|
// ensure we wait till the end of the process
|
|
@@ -627,9 +642,7 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
|
|
|
627
642
|
this.beforeSummaryAction();
|
|
628
643
|
},
|
|
629
644
|
async () => {
|
|
630
|
-
return this.
|
|
631
|
-
? this.trySummarizeWithRetries(reason)
|
|
632
|
-
: this.trySummarizeWithStaticAttempts(reason);
|
|
645
|
+
return this.trySummarizeWithRetries(reason);
|
|
633
646
|
},
|
|
634
647
|
() => {
|
|
635
648
|
this.afterSummaryAction();
|
|
@@ -639,92 +652,6 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
|
|
|
639
652
|
});
|
|
640
653
|
}
|
|
641
654
|
|
|
642
|
-
/**
|
|
643
|
-
* Tries to summarize 2 times with pre-defined summary options. If an attempt fails with "retryAfterSeconds"
|
|
644
|
-
* param, that attempt is tried once more.
|
|
645
|
-
*/
|
|
646
|
-
private async trySummarizeWithStaticAttempts(reason: SummarizeReason) {
|
|
647
|
-
const attemptOptions: ISummarizeOptions[] = [
|
|
648
|
-
{ refreshLatestAck: false, fullTree: false },
|
|
649
|
-
{ refreshLatestAck: true, fullTree: false },
|
|
650
|
-
];
|
|
651
|
-
let summaryAttempts = 0;
|
|
652
|
-
let summaryAttemptsPerPhase = 0;
|
|
653
|
-
let summaryAttemptPhase = 0;
|
|
654
|
-
let error: any;
|
|
655
|
-
while (summaryAttemptPhase < attemptOptions.length) {
|
|
656
|
-
if (this.cancellationToken.cancelled) {
|
|
657
|
-
return;
|
|
658
|
-
}
|
|
659
|
-
|
|
660
|
-
// We only want to attempt 1 summary when reason is "lastSummary"
|
|
661
|
-
if (++summaryAttempts > 1 && reason === "lastSummary") {
|
|
662
|
-
return;
|
|
663
|
-
}
|
|
664
|
-
|
|
665
|
-
summaryAttemptsPerPhase++;
|
|
666
|
-
|
|
667
|
-
const summarizeOptions = attemptOptions[summaryAttemptPhase];
|
|
668
|
-
const summarizeProps: ISummarizeTelemetryProperties = {
|
|
669
|
-
summarizeReason: reason,
|
|
670
|
-
summaryAttempts,
|
|
671
|
-
summaryAttemptsPerPhase,
|
|
672
|
-
summaryAttemptPhase: summaryAttemptPhase + 1, // make everything 1-based
|
|
673
|
-
...summarizeOptions,
|
|
674
|
-
};
|
|
675
|
-
const summaryLogger = createChildLogger({
|
|
676
|
-
logger: this.mc.logger,
|
|
677
|
-
properties: { all: summarizeProps },
|
|
678
|
-
});
|
|
679
|
-
const summaryOptions: ISubmitSummaryOptions = {
|
|
680
|
-
...summarizeOptions,
|
|
681
|
-
summaryLogger,
|
|
682
|
-
cancellationToken: this.cancellationToken,
|
|
683
|
-
latestSummaryRefSeqNum: this.heuristicData.lastSuccessfulSummary.refSequenceNumber,
|
|
684
|
-
};
|
|
685
|
-
|
|
686
|
-
// Note: no need to account for cancellationToken.waitCancelled here, as
|
|
687
|
-
// this is accounted SummaryGenerator.summarizeCore that controls receivedSummaryAckOrNack.
|
|
688
|
-
const resultSummarize = this.generator.summarize(summaryOptions);
|
|
689
|
-
const ackNackResult = await resultSummarize.receivedSummaryAckOrNack;
|
|
690
|
-
if (ackNackResult.success) {
|
|
691
|
-
return;
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
error = ackNackResult.error;
|
|
695
|
-
|
|
696
|
-
// Check for retryDelay that can come from summaryNack, upload summary or submit summary flows.
|
|
697
|
-
// Retry the same step only once per retryAfter response.
|
|
698
|
-
const submitResult = await resultSummarize.summarySubmitted;
|
|
699
|
-
const delaySeconds = !submitResult.success
|
|
700
|
-
? submitResult.data?.retryAfterSeconds
|
|
701
|
-
: ackNackResult.data?.retryAfterSeconds;
|
|
702
|
-
if (delaySeconds === undefined || summaryAttemptsPerPhase > 1) {
|
|
703
|
-
summaryAttemptPhase++;
|
|
704
|
-
summaryAttemptsPerPhase = 0;
|
|
705
|
-
}
|
|
706
|
-
|
|
707
|
-
if (delaySeconds !== undefined) {
|
|
708
|
-
this.mc.logger.sendPerformanceEvent({
|
|
709
|
-
eventName: "SummarizeAttemptDelay",
|
|
710
|
-
duration: delaySeconds,
|
|
711
|
-
summaryNackDelay: ackNackResult.data?.retryAfterSeconds !== undefined,
|
|
712
|
-
...summarizeProps,
|
|
713
|
-
});
|
|
714
|
-
await delay(delaySeconds * 1000);
|
|
715
|
-
}
|
|
716
|
-
}
|
|
717
|
-
this.mc.logger.sendErrorEvent(
|
|
718
|
-
{
|
|
719
|
-
eventName: "SummarizeFailed",
|
|
720
|
-
maxAttempts: attemptOptions.length,
|
|
721
|
-
summaryAttempts: summaryAttemptPhase,
|
|
722
|
-
},
|
|
723
|
-
error,
|
|
724
|
-
);
|
|
725
|
-
this.stopSummarizerCallback("failToSummarize");
|
|
726
|
-
}
|
|
727
|
-
|
|
728
655
|
/**
|
|
729
656
|
* Tries to summarize with retries where retry is based on the failure params.
|
|
730
657
|
* For example, summarization may be retried for failures with "retryAfterSeconds" param.
|
|
@@ -773,7 +700,7 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
|
|
|
773
700
|
let done = false;
|
|
774
701
|
let status: "success" | "failure" | "canceled" = "success";
|
|
775
702
|
let results: ISummarizeResults | undefined;
|
|
776
|
-
let error:
|
|
703
|
+
let error: IRetriableFailureError | undefined;
|
|
777
704
|
do {
|
|
778
705
|
currentAttempt++;
|
|
779
706
|
if (this.cancellationToken.cancelled) {
|
|
@@ -793,22 +720,18 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
|
|
|
793
720
|
break;
|
|
794
721
|
}
|
|
795
722
|
|
|
796
|
-
// Update max attempts
|
|
797
|
-
// If submit summary failed, use
|
|
798
|
-
// from "receivedSummaryAckOrNack" result.
|
|
723
|
+
// Update max attempts from the failure result.
|
|
724
|
+
// If submit summary failed, use maxAttemptsForSubmitFailures. Else use the defaultMaxAttempts.
|
|
799
725
|
// Note: Check "summarySubmitted" result first because if it fails, ack nack would fail as well.
|
|
800
726
|
const submitSummaryResult = await results.summarySubmitted;
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
} else {
|
|
805
|
-
maxAttempts = defaultMaxAttempts;
|
|
806
|
-
retryAfterSeconds = ackNackResult.data?.retryAfterSeconds;
|
|
807
|
-
}
|
|
727
|
+
maxAttempts = !submitSummaryResult.success
|
|
728
|
+
? this.maxAttemptsForSubmitFailures
|
|
729
|
+
: defaultMaxAttempts;
|
|
808
730
|
|
|
809
731
|
// Emit "summarize" event for this failed attempt.
|
|
810
732
|
status = "failure";
|
|
811
733
|
error = ackNackResult.error;
|
|
734
|
+
retryAfterSeconds = error.retryAfterSeconds;
|
|
812
735
|
const eventProps: ISummarizeEventProps = {
|
|
813
736
|
result: status,
|
|
814
737
|
currentAttempt,
|
|
@@ -817,27 +740,26 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
|
|
|
817
740
|
};
|
|
818
741
|
this.emit("summarize", eventProps);
|
|
819
742
|
|
|
820
|
-
//
|
|
743
|
+
// Break if the failure doesn't have "retryAfterSeconds" or we are one less from max number of attempts.
|
|
744
|
+
// Note that the final attempt if "retryAfterSeconds" does exist happens outside of the do..while loop.
|
|
821
745
|
if (retryAfterSeconds === undefined || currentAttempt >= maxAttempts - 1) {
|
|
822
746
|
done = true;
|
|
823
747
|
}
|
|
824
748
|
|
|
825
|
-
// If the failure has "retryAfterSeconds", add a delay of that time
|
|
826
|
-
|
|
827
|
-
if (retryAfterSeconds !== undefined) {
|
|
749
|
+
// If the failure has "retryAfterSeconds", add a delay of that time before starting the next attempt.
|
|
750
|
+
if (retryAfterSeconds !== undefined && retryAfterSeconds > 0) {
|
|
828
751
|
this.mc.logger.sendPerformanceEvent({
|
|
829
752
|
eventName: "SummarizeAttemptDelay",
|
|
830
|
-
duration: retryAfterSeconds,
|
|
831
|
-
summaryNackDelay: ackNackResult.data
|
|
753
|
+
duration: retryAfterSeconds * 1000,
|
|
754
|
+
summaryNackDelay: ackNackResult.data !== undefined, // This will only be defined only for nack failures.
|
|
832
755
|
stage: submitSummaryResult.data?.stage,
|
|
833
|
-
dynamicRetries: true, // To differentiate this telemetry from regular retry logic
|
|
834
756
|
...attemptResult.summarizeProps,
|
|
835
757
|
});
|
|
836
758
|
await delay(retryAfterSeconds * 1000);
|
|
837
759
|
}
|
|
838
760
|
} while (!done);
|
|
839
761
|
|
|
840
|
-
// If
|
|
762
|
+
// If the attempt was successful, emit "summarize" event and return. A failed attempt may be retried below.
|
|
841
763
|
if (status !== "failure") {
|
|
842
764
|
this.emit("summarize", { result: status, currentAttempt, maxAttempts });
|
|
843
765
|
return results;
|
|
@@ -888,7 +810,10 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
|
|
|
888
810
|
) {
|
|
889
811
|
const results = await this.trySummarizeWithRetries(reason);
|
|
890
812
|
if (results === undefined) {
|
|
891
|
-
resultsBuilder.fail(
|
|
813
|
+
resultsBuilder.fail(
|
|
814
|
+
"Summarization was canceled",
|
|
815
|
+
new RetriableSummaryError("Summarization was canceled"),
|
|
816
|
+
);
|
|
892
817
|
return resultsBuilder.build();
|
|
893
818
|
}
|
|
894
819
|
const submitResult = await results.summarySubmitted;
|
|
@@ -906,7 +831,10 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
|
|
|
906
831
|
resultsBuilder: SummarizeResultBuilder = new SummarizeResultBuilder(),
|
|
907
832
|
): ISummarizeResults {
|
|
908
833
|
if (this.stopping) {
|
|
909
|
-
resultsBuilder.fail(
|
|
834
|
+
resultsBuilder.fail(
|
|
835
|
+
"RunningSummarizer stopped or disposed",
|
|
836
|
+
new RetriableSummaryError("RunningSummarizer stopped or disposed"),
|
|
837
|
+
);
|
|
910
838
|
return resultsBuilder.build();
|
|
911
839
|
}
|
|
912
840
|
// Check for concurrent summary attempts. If one is found,
|
|
@@ -944,7 +872,9 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
|
|
|
944
872
|
// Override existing enqueued summarize attempt.
|
|
945
873
|
this.enqueuedSummary.resultsBuilder.fail(
|
|
946
874
|
"Aborted; overridden by another enqueue summarize attempt",
|
|
947
|
-
|
|
875
|
+
new RetriableSummaryError(
|
|
876
|
+
"Summary was overridden by another enqueue summarize attempt",
|
|
877
|
+
),
|
|
948
878
|
);
|
|
949
879
|
this.enqueuedSummary = undefined;
|
|
950
880
|
overridden = true;
|
|
@@ -963,7 +893,7 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
|
|
|
963
893
|
...results,
|
|
964
894
|
alreadyEnqueued: true,
|
|
965
895
|
overridden: true,
|
|
966
|
-
|
|
896
|
+
}
|
|
967
897
|
: results;
|
|
968
898
|
}
|
|
969
899
|
|
|
@@ -995,7 +925,7 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
|
|
|
995
925
|
if (this.enqueuedSummary !== undefined) {
|
|
996
926
|
this.enqueuedSummary.resultsBuilder.fail(
|
|
997
927
|
"RunningSummarizer stopped or disposed",
|
|
998
|
-
|
|
928
|
+
new RetriableSummaryError("RunningSummarizer stopped or disposed"),
|
|
999
929
|
);
|
|
1000
930
|
this.enqueuedSummary = undefined;
|
|
1001
931
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { TypedEventEmitter } from "@fluid-internal/client-utils";
|
|
7
|
-
import { IFluidHandleContext } from "@fluidframework/core-interfaces";
|
|
7
|
+
import { IFluidHandleContext } from "@fluidframework/core-interfaces/internal";
|
|
8
8
|
import { Deferred } from "@fluidframework/core-utils/internal";
|
|
9
9
|
import {
|
|
10
10
|
IFluidErrorBase,
|
|
@@ -98,7 +98,10 @@ export class Summarizer extends TypedEventEmitter<ISummarizerEvents> implements
|
|
|
98
98
|
) => Promise<ICancellableSummarizerController>,
|
|
99
99
|
) {
|
|
100
100
|
super();
|
|
101
|
-
this.logger = createChildLogger({
|
|
101
|
+
this.logger = createChildLogger({
|
|
102
|
+
logger: this.runtime.baseLogger,
|
|
103
|
+
namespace: "Summarizer",
|
|
104
|
+
});
|
|
102
105
|
}
|
|
103
106
|
|
|
104
107
|
public async run(onBehalfOf: string): Promise<SummarizerStopReason> {
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
import { TypedEventEmitter } from "@fluid-internal/client-utils";
|
|
7
7
|
import { IEvent, IEventProvider } from "@fluidframework/core-interfaces";
|
|
8
|
-
import { IClientDetails
|
|
8
|
+
import { IClientDetails } from "@fluidframework/driver-definitions";
|
|
9
|
+
import { MessageType } from "@fluidframework/driver-definitions/internal";
|
|
9
10
|
import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils/internal";
|
|
10
11
|
|
|
11
12
|
import {
|
|
@@ -21,7 +22,8 @@ export interface ISummarizerClientElectionEvents extends IEvent {
|
|
|
21
22
|
(event: "electedSummarizerChanged", handler: () => void): void;
|
|
22
23
|
}
|
|
23
24
|
|
|
24
|
-
export interface ISummarizerClientElection
|
|
25
|
+
export interface ISummarizerClientElection
|
|
26
|
+
extends IEventProvider<ISummarizerClientElectionEvents> {
|
|
25
27
|
readonly electedClientId: string | undefined;
|
|
26
28
|
readonly electedParentId: string | undefined;
|
|
27
29
|
}
|
|
@@ -5,16 +5,14 @@
|
|
|
5
5
|
|
|
6
6
|
import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
|
|
7
7
|
import { assert, unreachableCase } from "@fluidframework/core-utils/internal";
|
|
8
|
+
import { SummaryType } from "@fluidframework/driver-definitions";
|
|
8
9
|
import {
|
|
9
|
-
ISequencedDocumentMessage,
|
|
10
10
|
ISnapshotTree,
|
|
11
|
-
|
|
12
|
-
} from "@fluidframework/
|
|
11
|
+
ISequencedDocumentMessage,
|
|
12
|
+
} from "@fluidframework/driver-definitions/internal";
|
|
13
13
|
import {
|
|
14
14
|
IExperimentalIncrementalSummaryContext,
|
|
15
15
|
ITelemetryContext,
|
|
16
|
-
} from "@fluidframework/runtime-definitions";
|
|
17
|
-
import {
|
|
18
16
|
CreateChildSummarizerNodeParam,
|
|
19
17
|
CreateSummarizerNodeSource,
|
|
20
18
|
ISummarizeResult,
|
|
@@ -167,15 +165,6 @@ export class SummarizerNode implements IRootSummarizerNode {
|
|
|
167
165
|
trackState: boolean = true,
|
|
168
166
|
telemetryContext?: ITelemetryContext,
|
|
169
167
|
): Promise<ISummarizeResult> {
|
|
170
|
-
assert(
|
|
171
|
-
this.isSummaryInProgress(),
|
|
172
|
-
0x1a1 /* "summarize should not be called when not tracking the summary" */,
|
|
173
|
-
);
|
|
174
|
-
assert(
|
|
175
|
-
this.wipSummaryLogger !== undefined,
|
|
176
|
-
0x1a2 /* "wipSummaryLogger should have been set in startSummary or ctor" */,
|
|
177
|
-
);
|
|
178
|
-
|
|
179
168
|
// Try to reuse the tree if unchanged
|
|
180
169
|
if (this.canReuseHandle && !fullTree && !this.hasChanged()) {
|
|
181
170
|
const latestSummary = this._latestSummary;
|
|
@@ -198,21 +187,22 @@ export class SummarizerNode implements IRootSummarizerNode {
|
|
|
198
187
|
}
|
|
199
188
|
}
|
|
200
189
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
190
|
+
let incrementalSummaryContext: IExperimentalIncrementalSummaryContext | undefined;
|
|
191
|
+
if (!fullTree) {
|
|
192
|
+
assert(
|
|
193
|
+
this.wipReferenceSequenceNumber !== undefined,
|
|
194
|
+
0x5df /* Summarize should not be called when not tracking the summary */,
|
|
195
|
+
);
|
|
196
|
+
incrementalSummaryContext =
|
|
197
|
+
this._latestSummary !== undefined
|
|
198
|
+
? {
|
|
199
|
+
summarySequenceNumber: this.wipReferenceSequenceNumber,
|
|
200
|
+
latestSummarySequenceNumber: this._latestSummary.referenceSequenceNumber,
|
|
201
|
+
// TODO: remove summaryPath
|
|
202
|
+
summaryPath: this._latestSummary.fullPath.path,
|
|
203
|
+
}
|
|
204
|
+
: undefined;
|
|
205
|
+
}
|
|
216
206
|
|
|
217
207
|
const result = await this.summarizeInternalFn(
|
|
218
208
|
fullTree,
|
|
@@ -332,7 +322,10 @@ export class SummarizerNode implements IRootSummarizerNode {
|
|
|
332
322
|
parentPath: EscapedPath | undefined,
|
|
333
323
|
parentSkipRecursion: boolean,
|
|
334
324
|
) {
|
|
335
|
-
assert(
|
|
325
|
+
assert(
|
|
326
|
+
this.wipReferenceSequenceNumber !== undefined,
|
|
327
|
+
0x1a4 /* "Not tracking a summary" */,
|
|
328
|
+
);
|
|
336
329
|
let localPathsToUse = this.wipLocalPaths;
|
|
337
330
|
|
|
338
331
|
if (parentSkipRecursion) {
|
|
@@ -3,9 +3,13 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import { SummaryObject } from "@fluidframework/driver-definitions";
|
|
7
|
+
import { ISnapshotTree } from "@fluidframework/driver-definitions/internal";
|
|
7
8
|
import { channelsTreeName } from "@fluidframework/runtime-definitions/internal";
|
|
8
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
ITelemetryLoggerExt,
|
|
11
|
+
TelemetryDataTag,
|
|
12
|
+
} from "@fluidframework/telemetry-utils/internal";
|
|
9
13
|
|
|
10
14
|
export interface IRefreshSummaryResult {
|
|
11
15
|
/** Tells whether this summary is tracked by this client. */
|
|
@@ -172,7 +176,9 @@ export interface ISubtreeInfo<T extends ISnapshotTree | SummaryObject> {
|
|
|
172
176
|
* would be located if exists.
|
|
173
177
|
* @param baseSummary - summary to check
|
|
174
178
|
*/
|
|
175
|
-
export function parseSummaryForSubtrees(
|
|
179
|
+
export function parseSummaryForSubtrees(
|
|
180
|
+
baseSummary: ISnapshotTree,
|
|
181
|
+
): ISubtreeInfo<ISnapshotTree> {
|
|
176
182
|
// New versions of snapshots have child nodes isolated in .channels subtree
|
|
177
183
|
const channelsSubtree = baseSummary.trees[channelsTreeName];
|
|
178
184
|
if (channelsSubtree !== undefined) {
|
|
@@ -7,10 +7,8 @@ import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
|
|
|
7
7
|
import { assert, LazyPromise } from "@fluidframework/core-utils/internal";
|
|
8
8
|
import {
|
|
9
9
|
IExperimentalIncrementalSummaryContext,
|
|
10
|
-
IGarbageCollectionData,
|
|
11
10
|
ITelemetryContext,
|
|
12
|
-
|
|
13
|
-
import {
|
|
11
|
+
IGarbageCollectionData,
|
|
14
12
|
CreateChildSummarizerNodeParam,
|
|
15
13
|
IGarbageCollectionDetailsBase,
|
|
16
14
|
ISummarizeInternalResult,
|
|
@@ -78,13 +76,13 @@ export class SummarizerNodeWithGC extends SummarizerNode implements IRootSummari
|
|
|
78
76
|
private referenceUsedRoutes: string[] | undefined;
|
|
79
77
|
|
|
80
78
|
// The base GC details of this node used to initialize the GC state.
|
|
81
|
-
private readonly baseGCDetailsP:
|
|
79
|
+
private readonly baseGCDetailsP: Promise<IGarbageCollectionDetailsBase>;
|
|
82
80
|
|
|
83
81
|
// Keeps track of whether we have loaded the base details to ensure that we only do it once.
|
|
84
82
|
private baseGCDetailsLoaded: boolean = false;
|
|
85
83
|
|
|
86
84
|
// The base GC details for the child nodes. This is passed to child nodes when creating them.
|
|
87
|
-
private readonly childNodesBaseGCDetailsP:
|
|
85
|
+
private readonly childNodesBaseGCDetailsP: Promise<
|
|
88
86
|
Map<string, IGarbageCollectionDetailsBase>
|
|
89
87
|
>;
|
|
90
88
|
|
|
@@ -228,7 +226,12 @@ export class SummarizerNodeWithGC extends SummarizerNode implements IRootSummari
|
|
|
228
226
|
// GC data may not be available if loaded from a snapshot with either GC disabled or before GC was added.
|
|
229
227
|
// Note - canReuseHandle is checked to be consistent with summarize - generate GC data for nodes for which
|
|
230
228
|
// summary must be generated.
|
|
231
|
-
if (
|
|
229
|
+
if (
|
|
230
|
+
this.canReuseHandle &&
|
|
231
|
+
!fullGC &&
|
|
232
|
+
!this.hasDataChanged() &&
|
|
233
|
+
this.gcData !== undefined
|
|
234
|
+
) {
|
|
232
235
|
return cloneGCData(this.gcData);
|
|
233
236
|
}
|
|
234
237
|
|
|
@@ -324,10 +327,7 @@ export class SummarizerNodeWithGC extends SummarizerNode implements IRootSummari
|
|
|
324
327
|
if (!this.gcDisabled) {
|
|
325
328
|
const summaryNode = this.pendingSummaries.get(proposalHandle);
|
|
326
329
|
if (summaryNode !== undefined) {
|
|
327
|
-
const summaryNodeWithGC = new SummaryNodeWithGC(
|
|
328
|
-
wipSerializedUsedRoutes,
|
|
329
|
-
summaryNode,
|
|
330
|
-
);
|
|
330
|
+
const summaryNodeWithGC = new SummaryNodeWithGC(wipSerializedUsedRoutes, summaryNode);
|
|
331
331
|
this.pendingSummaries.set(proposalHandle, summaryNodeWithGC);
|
|
332
332
|
}
|
|
333
333
|
}
|
|
@@ -517,7 +517,7 @@ export class SummarizerNodeWithGC extends SummarizerNode implements IRootSummari
|
|
|
517
517
|
* was previously used and became unused (or vice versa), its used state has changed.
|
|
518
518
|
*/
|
|
519
519
|
private hasUsedStateChanged(): boolean {
|
|
520
|
-
// If GC is disabled,
|
|
520
|
+
// If GC is disabled, it should not affect summary state, return false.
|
|
521
521
|
if (this.gcDisabled) {
|
|
522
522
|
return false;
|
|
523
523
|
}
|
|
@@ -3,14 +3,22 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
7
|
-
|
|
6
|
+
import {
|
|
7
|
+
IDeltaManager,
|
|
8
|
+
ContainerWarning,
|
|
9
|
+
} from "@fluidframework/container-definitions/internal";
|
|
10
|
+
import {
|
|
11
|
+
IEvent,
|
|
12
|
+
IEventProvider,
|
|
13
|
+
ITelemetryBaseProperties,
|
|
14
|
+
ITelemetryBaseLogger,
|
|
15
|
+
} from "@fluidframework/core-interfaces";
|
|
16
|
+
import { ISummaryTree } from "@fluidframework/driver-definitions";
|
|
8
17
|
import {
|
|
9
18
|
IDocumentMessage,
|
|
10
19
|
ISequencedDocumentMessage,
|
|
11
|
-
|
|
12
|
-
} from "@fluidframework/
|
|
13
|
-
import { ISummaryStats } from "@fluidframework/runtime-definitions";
|
|
20
|
+
} from "@fluidframework/driver-definitions/internal";
|
|
21
|
+
import { ISummaryStats } from "@fluidframework/runtime-definitions/internal";
|
|
14
22
|
import {
|
|
15
23
|
ITelemetryLoggerExt,
|
|
16
24
|
ITelemetryLoggerPropertyBag,
|
|
@@ -18,7 +26,11 @@ import {
|
|
|
18
26
|
|
|
19
27
|
import { ISummaryConfigurationHeuristics } from "../containerRuntime.js";
|
|
20
28
|
|
|
21
|
-
import {
|
|
29
|
+
import {
|
|
30
|
+
ISummaryAckMessage,
|
|
31
|
+
ISummaryNackMessage,
|
|
32
|
+
ISummaryOpMessage,
|
|
33
|
+
} from "./summaryCollection.js";
|
|
22
34
|
import { SummarizeReason } from "./summaryGenerator.js";
|
|
23
35
|
|
|
24
36
|
/**
|
|
@@ -90,7 +102,7 @@ export interface IConnectableRuntime {
|
|
|
90
102
|
* @alpha
|
|
91
103
|
*/
|
|
92
104
|
export interface ISummarizerRuntime extends IConnectableRuntime {
|
|
93
|
-
readonly
|
|
105
|
+
readonly baseLogger: ITelemetryBaseLogger;
|
|
94
106
|
/** clientId of parent (non-summarizing) container that owns summarizer container */
|
|
95
107
|
readonly summarizerClientId: string | undefined;
|
|
96
108
|
readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>;
|
|
@@ -113,13 +125,6 @@ export interface ISummarizerRuntime extends IConnectableRuntime {
|
|
|
113
125
|
export interface ISummarizeOptions {
|
|
114
126
|
/** True to generate the full tree with no handle reuse optimizations; defaults to false */
|
|
115
127
|
readonly fullTree?: boolean;
|
|
116
|
-
/**
|
|
117
|
-
* True to ask the server what the latest summary is first; defaults to false
|
|
118
|
-
*
|
|
119
|
-
* @deprecated Summarize will not refresh latest snapshot state anymore. Instead it updates the cache and closes.
|
|
120
|
-
* It's expected a new summarizer client will be created, likely by the same parent.
|
|
121
|
-
*/
|
|
122
|
-
readonly refreshLatestAck?: boolean;
|
|
123
128
|
}
|
|
124
129
|
|
|
125
130
|
/**
|
|
@@ -183,14 +188,22 @@ export interface IGeneratedSummaryStats extends ISummaryStats {
|
|
|
183
188
|
readonly summaryNumber: number;
|
|
184
189
|
}
|
|
185
190
|
|
|
191
|
+
/**
|
|
192
|
+
* Type for summarization failures that are retriable.
|
|
193
|
+
* @alpha
|
|
194
|
+
*/
|
|
195
|
+
export interface IRetriableFailureError extends Error {
|
|
196
|
+
readonly retryAfterSeconds?: number;
|
|
197
|
+
}
|
|
198
|
+
|
|
186
199
|
/**
|
|
187
200
|
* Base results for all submitSummary attempts.
|
|
188
201
|
* @alpha
|
|
189
202
|
*/
|
|
190
203
|
export interface IBaseSummarizeResult {
|
|
191
204
|
readonly stage: "base";
|
|
192
|
-
/**
|
|
193
|
-
readonly error:
|
|
205
|
+
/** Retriable error object related to failed summarize attempt. */
|
|
206
|
+
readonly error: IRetriableFailureError | undefined;
|
|
194
207
|
/** Reference sequence number as of the generate summary attempt. */
|
|
195
208
|
readonly referenceSequenceNumber: number;
|
|
196
209
|
readonly minimumSequenceNumber: number;
|
|
@@ -208,8 +221,6 @@ export interface IGenerateSummaryTreeResult extends Omit<IBaseSummarizeResult, "
|
|
|
208
221
|
readonly summaryStats: IGeneratedSummaryStats;
|
|
209
222
|
/** Time it took to generate the summary tree and stats. */
|
|
210
223
|
readonly generateDuration: number;
|
|
211
|
-
/** True if the full tree regeneration with no handle reuse optimizations was forced. */
|
|
212
|
-
readonly forcedFullTree: boolean;
|
|
213
224
|
}
|
|
214
225
|
|
|
215
226
|
/**
|
|
@@ -265,19 +276,11 @@ export type SubmitSummaryResult =
|
|
|
265
276
|
*/
|
|
266
277
|
export type SummaryStage = SubmitSummaryResult["stage"] | "unknown";
|
|
267
278
|
|
|
268
|
-
/**
|
|
269
|
-
* Type for summarization failures that are retriable.
|
|
270
|
-
* @alpha
|
|
271
|
-
*/
|
|
272
|
-
export interface IRetriableFailureResult {
|
|
273
|
-
readonly retryAfterSeconds?: number;
|
|
274
|
-
}
|
|
275
|
-
|
|
276
279
|
/**
|
|
277
280
|
* The data in summarizer result when submit summary stage fails.
|
|
278
281
|
* @alpha
|
|
279
282
|
*/
|
|
280
|
-
export interface SubmitSummaryFailureData
|
|
283
|
+
export interface SubmitSummaryFailureData {
|
|
281
284
|
stage: SummaryStage;
|
|
282
285
|
}
|
|
283
286
|
|
|
@@ -300,7 +303,7 @@ export interface IAckSummaryResult {
|
|
|
300
303
|
/**
|
|
301
304
|
* @alpha
|
|
302
305
|
*/
|
|
303
|
-
export interface INackSummaryResult
|
|
306
|
+
export interface INackSummaryResult {
|
|
304
307
|
readonly summaryNackOp: ISummaryNackMessage;
|
|
305
308
|
readonly ackNackDuration: number;
|
|
306
309
|
}
|
|
@@ -317,7 +320,7 @@ export type SummarizeResultPart<TSuccess, TFailure = undefined> =
|
|
|
317
320
|
success: false;
|
|
318
321
|
data: TFailure | undefined;
|
|
319
322
|
message: string;
|
|
320
|
-
error:
|
|
323
|
+
error: IRetriableFailureError;
|
|
321
324
|
};
|
|
322
325
|
|
|
323
326
|
/**
|
|
@@ -535,10 +538,6 @@ type ISummarizeTelemetryRequiredProperties =
|
|
|
535
538
|
type ISummarizeTelemetryOptionalProperties =
|
|
536
539
|
/** Number of attempts within the last time window, used for calculating the throttle delay. */
|
|
537
540
|
| "summaryAttempts"
|
|
538
|
-
/** Number of attempts within the current phase (currently capped at 2 ) */
|
|
539
|
-
| "summaryAttemptsPerPhase"
|
|
540
|
-
/** One-based count of phases we've attempted (used to index into an array of ISummarizeOptions */
|
|
541
|
-
| "summaryAttemptPhase"
|
|
542
541
|
/** Summarization may be attempted multiple times. This tells whether this is the final summarization attempt */
|
|
543
542
|
| "finalAttempt"
|
|
544
543
|
| keyof ISummarizeOptions;
|