@fluidframework/container-runtime 2.0.0-rc.2.0.2 → 2.0.0-rc.3.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 +23 -0
- package/api-report/container-runtime.api.md +471 -52
- package/dist/batchTracker.d.ts +1 -1
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js +4 -4
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager.d.ts +33 -30
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +82 -107
- package/dist/blobManager.js.map +1 -1
- package/dist/channelCollection.d.ts +27 -22
- package/dist/channelCollection.d.ts.map +1 -1
- package/dist/channelCollection.js +155 -165
- package/dist/channelCollection.js.map +1 -1
- package/dist/connectionTelemetry.d.ts +3 -3
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +17 -17
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerHandleContext.d.ts.map +1 -1
- package/dist/containerHandleContext.js +2 -2
- package/dist/containerHandleContext.js.map +1 -1
- package/dist/containerRuntime.d.ts +42 -39
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +425 -292
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.d.ts +1 -1
- package/dist/dataStore.d.ts.map +1 -1
- package/dist/dataStore.js +8 -8
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +58 -19
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +169 -114
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts +1 -0
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js +12 -11
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/dataStoreRegistry.d.ts +5 -1
- package/dist/dataStoreRegistry.d.ts.map +1 -1
- package/dist/dataStoreRegistry.js +4 -4
- package/dist/dataStoreRegistry.js.map +1 -1
- package/dist/deltaManagerSummarizerProxy.d.ts +1 -1
- package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
- package/dist/deltaManagerSummarizerProxy.js.map +1 -1
- package/dist/deltaScheduler.d.ts +1 -1
- package/dist/deltaScheduler.d.ts.map +1 -1
- package/dist/deltaScheduler.js +6 -6
- package/dist/deltaScheduler.js.map +1 -1
- package/dist/error.d.ts +1 -1
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +4 -4
- package/dist/error.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts +3 -2
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +23 -23
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.d.ts +2 -2
- package/dist/gc/gcConfigs.d.ts.map +1 -1
- package/dist/gc/gcConfigs.js +4 -5
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +4 -5
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcHelpers.d.ts +5 -1
- package/dist/gc/gcHelpers.d.ts.map +1 -1
- package/dist/gc/gcHelpers.js +21 -12
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts +2 -2
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js +11 -11
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts +2 -1
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +11 -9
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.js +6 -6
- 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 +2 -1
- package/dist/gc/index.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/legacy.d.ts +91 -0
- package/dist/messageTypes.d.ts +11 -5
- package/dist/messageTypes.d.ts.map +1 -1
- package/dist/messageTypes.js +4 -0
- package/dist/messageTypes.js.map +1 -1
- package/dist/opLifecycle/batchManager.d.ts.map +1 -1
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/definitions.d.ts +2 -20
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -1
- package/dist/opLifecycle/index.d.ts +3 -3
- package/dist/opLifecycle/index.d.ts.map +1 -1
- package/dist/opLifecycle/index.js +3 -1
- package/dist/opLifecycle/index.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +5 -6
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts +15 -4
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +62 -63
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts +2 -1
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js +14 -16
- package/dist/opLifecycle/opGroupingManager.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts +12 -4
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +63 -53
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +2 -1
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +30 -29
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts +8 -0
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js +36 -32
- 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 +1 -1
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +18 -18
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/public.d.ts +12 -0
- package/dist/scheduleManager.d.ts +1 -1
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js +28 -24
- package/dist/scheduleManager.js.map +1 -1
- package/dist/storageServiceWithAttachBlobs.d.ts +2 -2
- package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -1
- package/dist/storageServiceWithAttachBlobs.js +2 -2
- package/dist/storageServiceWithAttachBlobs.js.map +1 -1
- package/dist/summary/documentSchema.d.ts +209 -0
- package/dist/summary/documentSchema.d.ts.map +1 -0
- package/dist/summary/documentSchema.js +390 -0
- package/dist/summary/documentSchema.js.map +1 -0
- package/dist/summary/index.d.ts +2 -1
- package/dist/summary/index.d.ts.map +1 -1
- package/dist/summary/index.js +4 -1
- package/dist/summary/index.js.map +1 -1
- package/dist/summary/orderedClientElection.d.ts +2 -2
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js +12 -7
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -1
- package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.js +3 -3
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/dist/summary/runningSummarizer.d.ts +3 -3
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +16 -16
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.d.ts +3 -2
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +13 -13
- 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.map +1 -1
- package/dist/summary/summarizerHeuristics.d.ts +1 -1
- package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
- package/dist/summary/summarizerHeuristics.js +2 -2
- package/dist/summary/summarizerHeuristics.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.d.ts +3 -2
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js +28 -28
- 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 +3 -3
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +14 -14
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +5 -3
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryCollection.d.ts +2 -2
- package/dist/summary/summaryCollection.d.ts.map +1 -1
- package/dist/summary/summaryCollection.js +7 -7
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +6 -17
- package/dist/summary/summaryFormat.d.ts.map +1 -1
- package/dist/summary/summaryFormat.js +8 -8
- package/dist/summary/summaryFormat.js.map +1 -1
- package/dist/summary/summaryGenerator.d.ts +4 -3
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +17 -17
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryManager.d.ts +1 -1
- package/dist/summary/summaryManager.d.ts.map +1 -1
- package/dist/summary/summaryManager.js +15 -14
- package/dist/summary/summaryManager.js.map +1 -1
- package/internal.d.ts +11 -0
- package/legacy.d.ts +11 -0
- package/lib/batchTracker.d.ts +1 -1
- package/lib/batchTracker.d.ts.map +1 -1
- package/lib/batchTracker.js +2 -2
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager.d.ts +33 -30
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +48 -73
- package/lib/blobManager.js.map +1 -1
- package/lib/channelCollection.d.ts +27 -22
- package/lib/channelCollection.d.ts.map +1 -1
- package/lib/channelCollection.js +96 -106
- package/lib/channelCollection.js.map +1 -1
- package/lib/connectionTelemetry.d.ts +3 -3
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +3 -3
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerHandleContext.d.ts.map +1 -1
- package/lib/containerHandleContext.js +1 -1
- package/lib/containerHandleContext.js.map +1 -1
- package/lib/containerRuntime.d.ts +42 -39
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +276 -141
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStore.d.ts +1 -1
- package/lib/dataStore.d.ts.map +1 -1
- package/lib/dataStore.js +3 -3
- package/lib/dataStore.js.map +1 -1
- package/lib/dataStoreContext.d.ts +58 -19
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +107 -52
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.d.ts +1 -0
- package/lib/dataStoreContexts.d.ts.map +1 -1
- package/lib/dataStoreContexts.js +3 -2
- package/lib/dataStoreContexts.js.map +1 -1
- package/lib/dataStoreRegistry.d.ts +5 -1
- package/lib/dataStoreRegistry.d.ts.map +1 -1
- package/lib/dataStoreRegistry.js +1 -1
- package/lib/dataStoreRegistry.js.map +1 -1
- package/lib/deltaManagerSummarizerProxy.d.ts +1 -1
- package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -1
- package/lib/deltaManagerSummarizerProxy.js.map +1 -1
- package/lib/deltaScheduler.d.ts +1 -1
- package/lib/deltaScheduler.d.ts.map +1 -1
- package/lib/deltaScheduler.js +1 -1
- package/lib/deltaScheduler.js.map +1 -1
- package/lib/error.d.ts +1 -1
- package/lib/error.d.ts.map +1 -1
- package/lib/error.js +2 -2
- package/lib/error.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts +3 -2
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +8 -8
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcConfigs.d.ts +2 -2
- package/lib/gc/gcConfigs.d.ts.map +1 -1
- package/lib/gc/gcConfigs.js +4 -5
- package/lib/gc/gcConfigs.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +4 -5
- package/lib/gc/gcDefinitions.d.ts.map +1 -1
- package/lib/gc/gcDefinitions.js.map +1 -1
- package/lib/gc/gcHelpers.d.ts +5 -1
- package/lib/gc/gcHelpers.d.ts.map +1 -1
- package/lib/gc/gcHelpers.js +10 -2
- package/lib/gc/gcHelpers.js.map +1 -1
- package/lib/gc/gcSummaryStateTracker.d.ts +2 -2
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/lib/gc/gcSummaryStateTracker.js +2 -2
- package/lib/gc/gcSummaryStateTracker.js.map +1 -1
- package/lib/gc/gcTelemetry.d.ts +2 -1
- package/lib/gc/gcTelemetry.d.ts.map +1 -1
- package/lib/gc/gcTelemetry.js +4 -2
- package/lib/gc/gcTelemetry.js.map +1 -1
- package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
- package/lib/gc/gcUnreferencedStateTracker.js +2 -2
- 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 +5 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +5 -2
- package/lib/index.js.map +1 -1
- package/lib/legacy.d.ts +91 -0
- package/lib/messageTypes.d.ts +11 -5
- package/lib/messageTypes.d.ts.map +1 -1
- package/lib/messageTypes.js +4 -0
- package/lib/messageTypes.js.map +1 -1
- package/lib/opLifecycle/batchManager.d.ts.map +1 -1
- package/lib/opLifecycle/batchManager.js.map +1 -1
- package/lib/opLifecycle/definitions.d.ts +2 -20
- package/lib/opLifecycle/definitions.d.ts.map +1 -1
- package/lib/opLifecycle/definitions.js.map +1 -1
- package/lib/opLifecycle/index.d.ts +3 -3
- package/lib/opLifecycle/index.d.ts.map +1 -1
- package/lib/opLifecycle/index.js +2 -2
- package/lib/opLifecycle/index.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js +2 -3
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts +15 -4
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +61 -62
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts +2 -1
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/lib/opLifecycle/opGroupingManager.js +9 -12
- package/lib/opLifecycle/opGroupingManager.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts +12 -4
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +47 -38
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +2 -1
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +19 -18
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts +8 -0
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.js +36 -32
- 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 +1 -1
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +2 -2
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/public.d.ts +12 -0
- package/lib/scheduleManager.d.ts +1 -1
- package/lib/scheduleManager.d.ts.map +1 -1
- package/lib/scheduleManager.js +7 -3
- package/lib/scheduleManager.js.map +1 -1
- package/lib/storageServiceWithAttachBlobs.d.ts +2 -2
- package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -1
- package/lib/storageServiceWithAttachBlobs.js +1 -1
- package/lib/storageServiceWithAttachBlobs.js.map +1 -1
- package/lib/summary/documentSchema.d.ts +209 -0
- package/lib/summary/documentSchema.d.ts.map +1 -0
- package/lib/summary/documentSchema.js +386 -0
- package/lib/summary/documentSchema.js.map +1 -0
- package/lib/summary/index.d.ts +2 -1
- package/lib/summary/index.d.ts.map +1 -1
- package/lib/summary/index.js +1 -0
- package/lib/summary/index.js.map +1 -1
- package/lib/summary/orderedClientElection.d.ts +2 -2
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js +7 -2
- package/lib/summary/orderedClientElection.js.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.d.ts +1 -1
- package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/lib/summary/runningSummarizer.d.ts +3 -3
- package/lib/summary/runningSummarizer.d.ts.map +1 -1
- package/lib/summary/runningSummarizer.js +3 -3
- package/lib/summary/runningSummarizer.js.map +1 -1
- package/lib/summary/summarizer.d.ts +3 -2
- package/lib/summary/summarizer.d.ts.map +1 -1
- package/lib/summary/summarizer.js +3 -3
- 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.map +1 -1
- package/lib/summary/summarizerHeuristics.d.ts +1 -1
- package/lib/summary/summarizerHeuristics.d.ts.map +1 -1
- package/lib/summary/summarizerHeuristics.js +1 -1
- package/lib/summary/summarizerHeuristics.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.d.ts +3 -2
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.js +5 -5
- 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 +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +3 -3
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/lib/summary/summarizerTypes.d.ts +5 -3
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryCollection.d.ts +2 -2
- package/lib/summary/summaryCollection.d.ts.map +1 -1
- package/lib/summary/summaryCollection.js +1 -1
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryFormat.d.ts +6 -17
- package/lib/summary/summaryFormat.d.ts.map +1 -1
- package/lib/summary/summaryFormat.js +3 -3
- package/lib/summary/summaryFormat.js.map +1 -1
- package/lib/summary/summaryGenerator.d.ts +4 -3
- package/lib/summary/summaryGenerator.d.ts.map +1 -1
- package/lib/summary/summaryGenerator.js +4 -4
- package/lib/summary/summaryGenerator.js.map +1 -1
- package/lib/summary/summaryManager.d.ts +1 -1
- package/lib/summary/summaryManager.d.ts.map +1 -1
- package/lib/summary/summaryManager.js +9 -8
- package/lib/summary/summaryManager.js.map +1 -1
- package/package.json +57 -65
- package/src/batchTracker.ts +4 -3
- package/src/blobManager.ts +100 -77
- package/src/channelCollection.ts +180 -165
- package/src/connectionTelemetry.ts +12 -12
- package/src/containerHandleContext.ts +3 -2
- package/src/containerRuntime.ts +481 -277
- package/src/dataStore.ts +9 -4
- package/src/dataStoreContext.ts +195 -93
- package/src/dataStoreContexts.ts +5 -2
- package/src/dataStoreRegistry.ts +3 -2
- package/src/deltaManagerSummarizerProxy.ts +1 -1
- package/src/deltaScheduler.ts +2 -1
- package/src/error.ts +2 -2
- package/src/gc/garbageCollection.ts +21 -20
- package/src/gc/gcConfigs.ts +15 -18
- package/src/gc/gcDefinitions.ts +6 -8
- package/src/gc/gcHelpers.ts +22 -5
- package/src/gc/gcSummaryStateTracker.ts +7 -5
- package/src/gc/gcTelemetry.ts +13 -7
- package/src/gc/gcUnreferencedStateTracker.ts +3 -2
- package/src/gc/index.ts +1 -0
- package/src/index.ts +22 -1
- package/src/messageTypes.ts +20 -6
- package/src/opLifecycle/README.md +89 -0
- package/src/opLifecycle/batchManager.ts +1 -0
- package/src/opLifecycle/definitions.ts +3 -21
- package/src/opLifecycle/index.ts +3 -9
- package/src/opLifecycle/opCompressor.ts +6 -5
- package/src/opLifecycle/opDecompressor.ts +90 -100
- package/src/opLifecycle/opGroupingManager.ts +12 -14
- package/src/opLifecycle/opSplitter.ts +76 -48
- package/src/opLifecycle/outbox.ts +30 -38
- package/src/opLifecycle/remoteMessageProcessor.ts +43 -55
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +6 -6
- package/src/scheduleManager.ts +10 -8
- package/src/storageServiceWithAttachBlobs.ts +2 -2
- package/src/summary/documentSchema.ts +631 -0
- package/src/summary/index.ts +10 -1
- package/src/summary/orderedClientElection.ts +7 -7
- package/src/summary/runWhileConnectedCoordinator.ts +3 -2
- package/src/summary/runningSummarizer.ts +22 -20
- package/src/summary/summarizer.ts +17 -15
- package/src/summary/summarizerClientElection.ts +3 -2
- package/src/summary/summarizerHeuristics.ts +4 -2
- package/src/summary/summarizerNode/summarizerNode.ts +20 -18
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +3 -2
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +16 -8
- package/src/summary/summarizerTypes.ts +7 -3
- package/src/summary/summaryCollection.ts +3 -3
- package/src/summary/summaryFormat.ts +14 -26
- package/src/summary/summaryGenerator.ts +12 -15
- package/src/summary/summaryManager.ts +16 -13
- package/api-extractor-cjs.json +0 -8
- package/dist/container-runtime-alpha.d.ts +0 -1753
- package/dist/container-runtime-beta.d.ts +0 -268
- package/dist/container-runtime-public.d.ts +0 -268
- package/dist/container-runtime-untrimmed.d.ts +0 -1893
- package/lib/container-runtime-alpha.d.ts +0 -1753
- package/lib/container-runtime-beta.d.ts +0 -268
- package/lib/container-runtime-public.d.ts +0 -268
- package/lib/container-runtime-untrimmed.d.ts +0 -1893
- package/lib/test/batchTracker.spec.js +0 -88
- package/lib/test/batchTracker.spec.js.map +0 -1
- package/lib/test/blobManager.spec.js +0 -835
- package/lib/test/blobManager.spec.js.map +0 -1
- package/lib/test/channelCollection.spec.js +0 -141
- package/lib/test/channelCollection.spec.js.map +0 -1
- package/lib/test/containerRuntime.spec.js +0 -1748
- package/lib/test/containerRuntime.spec.js.map +0 -1
- package/lib/test/dataStoreContext.spec.js +0 -801
- package/lib/test/dataStoreContext.spec.js.map +0 -1
- package/lib/test/dataStoreCreation.spec.js +0 -312
- package/lib/test/dataStoreCreation.spec.js.map +0 -1
- package/lib/test/dataStoreRegistry.spec.js +0 -26
- package/lib/test/dataStoreRegistry.spec.js.map +0 -1
- package/lib/test/fuzz/fuzzUtils.js +0 -66
- package/lib/test/fuzz/fuzzUtils.js.map +0 -1
- package/lib/test/fuzz/summarizer.fuzz.spec.js +0 -31
- package/lib/test/fuzz/summarizer.fuzz.spec.js.map +0 -1
- package/lib/test/fuzz/summarizerFuzzMocks.js +0 -162
- package/lib/test/fuzz/summarizerFuzzMocks.js.map +0 -1
- package/lib/test/fuzz/summarizerFuzzSuite.js +0 -106
- package/lib/test/fuzz/summarizerFuzzSuite.js.map +0 -1
- package/lib/test/gc/garbageCollection.spec.js +0 -1465
- package/lib/test/gc/garbageCollection.spec.js.map +0 -1
- package/lib/test/gc/gcConfigs.spec.js +0 -690
- package/lib/test/gc/gcConfigs.spec.js.map +0 -1
- package/lib/test/gc/gcHelpers.spec.js +0 -110
- package/lib/test/gc/gcHelpers.spec.js.map +0 -1
- package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +0 -68
- package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +0 -1
- package/lib/test/gc/gcStats.spec.js +0 -391
- package/lib/test/gc/gcStats.spec.js.map +0 -1
- package/lib/test/gc/gcSummaryStateTracker.spec.js +0 -228
- package/lib/test/gc/gcSummaryStateTracker.spec.js.map +0 -1
- package/lib/test/gc/gcTelemetry.spec.js +0 -530
- package/lib/test/gc/gcTelemetry.spec.js.map +0 -1
- package/lib/test/gc/gcUnitTestHelpers.js +0 -29
- package/lib/test/gc/gcUnitTestHelpers.js.map +0 -1
- package/lib/test/gc/gcUnreferencedStateTracker.spec.js +0 -192
- package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +0 -1
- package/lib/test/getPendingBlobs.spec.js +0 -193
- package/lib/test/getPendingBlobs.spec.js.map +0 -1
- package/lib/test/hardwareStats.spec.js +0 -93
- package/lib/test/hardwareStats.spec.js.map +0 -1
- package/lib/test/index.js +0 -6
- package/lib/test/index.js.map +0 -1
- package/lib/test/opLifecycle/OpGroupingManager.spec.js +0 -225
- package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +0 -1
- package/lib/test/opLifecycle/batchManager.spec.js +0 -189
- package/lib/test/opLifecycle/batchManager.spec.js.map +0 -1
- package/lib/test/opLifecycle/opCompressor.spec.js +0 -74
- package/lib/test/opLifecycle/opCompressor.spec.js.map +0 -1
- package/lib/test/opLifecycle/opDecompressor.spec.js +0 -218
- package/lib/test/opLifecycle/opDecompressor.spec.js.map +0 -1
- package/lib/test/opLifecycle/opSplitter.spec.js +0 -272
- package/lib/test/opLifecycle/opSplitter.spec.js.map +0 -1
- package/lib/test/opLifecycle/outbox.spec.js +0 -675
- package/lib/test/opLifecycle/outbox.spec.js.map +0 -1
- package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +0 -196
- package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +0 -1
- package/lib/test/pendingStateManager.spec.js +0 -329
- package/lib/test/pendingStateManager.spec.js.map +0 -1
- package/lib/test/scheduleManager.spec.js +0 -270
- package/lib/test/scheduleManager.spec.js.map +0 -1
- package/lib/test/summarizerNode.spec.js +0 -326
- package/lib/test/summarizerNode.spec.js.map +0 -1
- package/lib/test/summarizerNodeWithGc.spec.js +0 -318
- package/lib/test/summarizerNodeWithGc.spec.js.map +0 -1
- package/lib/test/summary/orderedClientElection.spec.js +0 -535
- package/lib/test/summary/orderedClientElection.spec.js.map +0 -1
- package/lib/test/summary/runningSummarizer.spec.js +0 -1349
- package/lib/test/summary/runningSummarizer.spec.js.map +0 -1
- package/lib/test/summary/summarizer.spec.js +0 -29
- package/lib/test/summary/summarizer.spec.js.map +0 -1
- package/lib/test/summary/summarizerClientElection.spec.js +0 -436
- package/lib/test/summary/summarizerClientElection.spec.js.map +0 -1
- package/lib/test/summary/summarizerHeuristics.spec.js +0 -289
- package/lib/test/summary/summarizerHeuristics.spec.js.map +0 -1
- package/lib/test/summary/summaryCollection.spec.js +0 -200
- package/lib/test/summary/summaryCollection.spec.js.map +0 -1
- package/lib/test/summary/summaryManager.spec.js +0 -430
- package/lib/test/summary/summaryManager.spec.js.map +0 -1
- package/lib/test/summary/testQuorumClients.js +0 -34
- package/lib/test/summary/testQuorumClients.js.map +0 -1
- package/lib/test/throttler.spec.js +0 -175
- package/lib/test/throttler.spec.js.map +0 -1
- package/lib/test/types/validateContainerRuntimePrevious.generated.js +0 -180
- package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +0 -1
- /package/{dist → lib}/tsdoc-metadata.json +0 -0
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
import { strict as assert } from "assert";
|
|
6
|
-
import { SummaryType } from "@fluidframework/protocol-definitions";
|
|
7
|
-
import { gcDeletedBlobKey, gcTombstoneBlobKey } from "@fluidframework/runtime-definitions";
|
|
8
|
-
import { nextGCVersion, gcStateBlobKey, GCSummaryStateTracker, } from "../../gc/index.js";
|
|
9
|
-
describe("GCSummaryStateTracker tests", () => {
|
|
10
|
-
describe("Summary state reset", () => {
|
|
11
|
-
// In these tests, Persisted = gcVersionInBaseSnapshot. Current = gcVersionInEffect.
|
|
12
|
-
it("Persisted < Current: Do Need Reset", async () => {
|
|
13
|
-
const tracker = new GCSummaryStateTracker({
|
|
14
|
-
shouldRunGC: true,
|
|
15
|
-
tombstoneMode: false,
|
|
16
|
-
gcVersionInBaseSnapshot: 0,
|
|
17
|
-
gcVersionInEffect: 1,
|
|
18
|
-
}, true /* wasGCRunInBaseSnapshot */);
|
|
19
|
-
assert.equal(tracker.doesGCStateNeedReset, false, "Precondition 1");
|
|
20
|
-
assert.equal(tracker.doesSummaryStateNeedReset, true, "Should need reset: Persisted GC Version was old");
|
|
21
|
-
// After the first summary succeeds (refreshLatestSummary called), the state should not need reset.
|
|
22
|
-
await tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });
|
|
23
|
-
assert.equal(tracker.doesSummaryStateNeedReset, false, "Shouldn't need reset after first summary");
|
|
24
|
-
});
|
|
25
|
-
it("Persisted === Current: Don't Need Reset", () => {
|
|
26
|
-
const tracker = new GCSummaryStateTracker({
|
|
27
|
-
shouldRunGC: true,
|
|
28
|
-
tombstoneMode: false,
|
|
29
|
-
gcVersionInBaseSnapshot: 1,
|
|
30
|
-
gcVersionInEffect: 1,
|
|
31
|
-
}, true /* wasGCRunInBaseSnapshot */);
|
|
32
|
-
assert.equal(tracker.doesGCStateNeedReset, false, "Precondition 1");
|
|
33
|
-
assert.equal(tracker.doesSummaryStateNeedReset, false, "Shouldn't need reset: GC Versions match");
|
|
34
|
-
});
|
|
35
|
-
it("Persisted > Current: Do Need Reset", async () => {
|
|
36
|
-
const tracker = new GCSummaryStateTracker({
|
|
37
|
-
shouldRunGC: true,
|
|
38
|
-
tombstoneMode: false,
|
|
39
|
-
gcVersionInBaseSnapshot: 2,
|
|
40
|
-
gcVersionInEffect: 1,
|
|
41
|
-
}, true /* wasGCRunInBaseSnapshot */);
|
|
42
|
-
assert.equal(tracker.doesGCStateNeedReset, false, "Precondition 1");
|
|
43
|
-
// This covers the case where we rolled back an upgrade. Containers that successfully "upgraded" (reset)
|
|
44
|
-
// shouldn't need to do it again.
|
|
45
|
-
assert.equal(tracker.doesSummaryStateNeedReset, true, "Should need reset: Persisted GC Version is not old");
|
|
46
|
-
// After the first summary succeeds (refreshLatestSummary called), the state should not need reset.
|
|
47
|
-
await tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });
|
|
48
|
-
assert.equal(tracker.doesSummaryStateNeedReset, false, "Shouldn't need reset after first summary");
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
describe("GC state reset", () => {
|
|
52
|
-
it("wasGCRunInBaseSnapshot = false, shouldRunGC = false: Don't Need Reset", () => {
|
|
53
|
-
const tracker = new GCSummaryStateTracker({
|
|
54
|
-
shouldRunGC: false,
|
|
55
|
-
tombstoneMode: false,
|
|
56
|
-
gcVersionInBaseSnapshot: 1,
|
|
57
|
-
gcVersionInEffect: 1,
|
|
58
|
-
}, false /* wasGCRunInBaseSnapshot */);
|
|
59
|
-
assert.equal(tracker.doesGCStateNeedReset, false, "Shouldn't need reset");
|
|
60
|
-
});
|
|
61
|
-
it("wasGCRunInBaseSnapshot = true, shouldRunGC = false: Do Need Reset", async () => {
|
|
62
|
-
const tracker = new GCSummaryStateTracker({
|
|
63
|
-
shouldRunGC: false,
|
|
64
|
-
tombstoneMode: false,
|
|
65
|
-
gcVersionInBaseSnapshot: 1,
|
|
66
|
-
gcVersionInEffect: 1,
|
|
67
|
-
}, true /* wasGCRunInBaseSnapshot */);
|
|
68
|
-
assert.equal(tracker.doesGCStateNeedReset, true, "Should need reset");
|
|
69
|
-
// After the first summary succeeds (refreshLatestSummary called), the state should not need reset.
|
|
70
|
-
await tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });
|
|
71
|
-
assert.equal(tracker.doesGCStateNeedReset, false, "Shouldn't need reset after first summary");
|
|
72
|
-
});
|
|
73
|
-
it("wasGCRunInBaseSnapshot = false, shouldRunGC = true: Do Need Reset", async () => {
|
|
74
|
-
const tracker = new GCSummaryStateTracker({
|
|
75
|
-
shouldRunGC: true,
|
|
76
|
-
tombstoneMode: false,
|
|
77
|
-
gcVersionInBaseSnapshot: 1,
|
|
78
|
-
gcVersionInEffect: 1,
|
|
79
|
-
}, false /* wasGCRunInBaseSnapshot */);
|
|
80
|
-
assert.equal(tracker.doesGCStateNeedReset, true, "Should need reset");
|
|
81
|
-
// After the first summary succeeds (refreshLatestSummary called), the state should not need reset.
|
|
82
|
-
await tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });
|
|
83
|
-
assert.equal(tracker.doesGCStateNeedReset, false, "Shouldn't need reset after first summary");
|
|
84
|
-
});
|
|
85
|
-
it("wasGCRunInBaseSnapshot = true, shouldRunGC = true: Don't Need Reset", () => {
|
|
86
|
-
const tracker = new GCSummaryStateTracker({
|
|
87
|
-
shouldRunGC: true,
|
|
88
|
-
tombstoneMode: false,
|
|
89
|
-
gcVersionInBaseSnapshot: 1,
|
|
90
|
-
gcVersionInEffect: 1,
|
|
91
|
-
}, true /* wasGCRunInBaseSnapshot */);
|
|
92
|
-
assert.equal(tracker.doesGCStateNeedReset, false, "Shouldn't need reset");
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
it("Autorecovery: requesting Full GC", async () => {
|
|
96
|
-
const tracker = new GCSummaryStateTracker({
|
|
97
|
-
shouldRunGC: true,
|
|
98
|
-
tombstoneMode: false,
|
|
99
|
-
gcVersionInBaseSnapshot: 1,
|
|
100
|
-
gcVersionInEffect: 1,
|
|
101
|
-
}, false /* wasGCRunInBaseSnapshot */);
|
|
102
|
-
assert.equal(tracker.autoRecovery.fullGCRequested(), false, "Should be false by default");
|
|
103
|
-
tracker.autoRecovery.requestFullGCOnNextRun();
|
|
104
|
-
assert.equal(tracker.autoRecovery.fullGCRequested(), true, "Should be true after requesting full GC");
|
|
105
|
-
// After the first summary succeeds (refreshLatestSummary called), the state should be reset.
|
|
106
|
-
await tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });
|
|
107
|
-
assert.equal(tracker.autoRecovery.fullGCRequested(), false, "Should be false after Summary Ack");
|
|
108
|
-
});
|
|
109
|
-
/**
|
|
110
|
-
* These tests validate that the GC data is written in summary incrementally. Basically, only parts of the GC
|
|
111
|
-
* data that has changed since the last successful summary is re-written, rest is written as SummaryHandle.
|
|
112
|
-
*/
|
|
113
|
-
describe("Incremental summary of GC data", () => {
|
|
114
|
-
const nodes = ["node1", "node2", "node3"];
|
|
115
|
-
const initialGCState = {
|
|
116
|
-
gcNodes: {
|
|
117
|
-
"/": { outboundRoutes: [] },
|
|
118
|
-
[nodes[0]]: { outboundRoutes: [] },
|
|
119
|
-
[nodes[1]]: { outboundRoutes: [] },
|
|
120
|
-
},
|
|
121
|
-
};
|
|
122
|
-
const initialTombstones = [nodes[0], nodes[1]];
|
|
123
|
-
const initialDeletedNodes = new Set([nodes[1]]);
|
|
124
|
-
let summaryStateTracker;
|
|
125
|
-
beforeEach(async () => {
|
|
126
|
-
// Creates a summary state tracker and initialize it.
|
|
127
|
-
summaryStateTracker = new GCSummaryStateTracker({
|
|
128
|
-
shouldRunGC: true,
|
|
129
|
-
tombstoneMode: true,
|
|
130
|
-
gcVersionInBaseSnapshot: nextGCVersion,
|
|
131
|
-
gcVersionInEffect: nextGCVersion,
|
|
132
|
-
}, false /* wasGCRunInBaseSnapshot */);
|
|
133
|
-
summaryStateTracker.initializeBaseState({
|
|
134
|
-
gcState: initialGCState,
|
|
135
|
-
tombstones: initialTombstones,
|
|
136
|
-
deletedNodes: Array.from(initialDeletedNodes),
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
it("does incremental summary when nothing changes", async () => {
|
|
140
|
-
// Summarize with the same GC state, tombstone state and deleted nodes as in the initial state.
|
|
141
|
-
// The GC data should be summarized as a summary handle.
|
|
142
|
-
const summary = summaryStateTracker.summarize(true /* trackState */, initialGCState, initialDeletedNodes, initialTombstones);
|
|
143
|
-
assert(summary?.summary.type === SummaryType.Handle, "GC summary should be a handle");
|
|
144
|
-
});
|
|
145
|
-
it("does incremental summary when only GC state changes", async () => {
|
|
146
|
-
// Summarize with the same tombstone state and deleted nodes but different GC state as in the initial.
|
|
147
|
-
// state. The GC state should be summarized as a summary handle.
|
|
148
|
-
const newGCState = {
|
|
149
|
-
gcNodes: {
|
|
150
|
-
...initialGCState.gcNodes,
|
|
151
|
-
[nodes[2]]: { outboundRoutes: [] },
|
|
152
|
-
},
|
|
153
|
-
};
|
|
154
|
-
const summary = summaryStateTracker.summarize(true /* trackState */, newGCState, initialDeletedNodes, initialTombstones);
|
|
155
|
-
assert(summary?.summary.type === SummaryType.Tree, "GC summary should be a tree");
|
|
156
|
-
assert(summary.summary.tree[gcStateBlobKey].type === SummaryType.Blob, "GC state should be written as a blob");
|
|
157
|
-
assert(summary.summary.tree[gcTombstoneBlobKey].type === SummaryType.Handle, "Tombstone state should be written as handle");
|
|
158
|
-
assert(summary.summary.tree[gcDeletedBlobKey].type === SummaryType.Handle, "Deleted nodes should be written as handle");
|
|
159
|
-
});
|
|
160
|
-
it("does incremental summary when only tombstone state changes", async () => {
|
|
161
|
-
// Summarize with the same GC state and deleted nodes but different tombstone state as in the initial.
|
|
162
|
-
// state. The tombstone state should be summarized as a summary handle.
|
|
163
|
-
const newTombstones = Array.from([...initialTombstones, nodes[2]]);
|
|
164
|
-
const summary = summaryStateTracker.summarize(true /* trackState */, initialGCState, initialDeletedNodes, newTombstones);
|
|
165
|
-
assert(summary?.summary.type === SummaryType.Tree, "GC summary should be a tree");
|
|
166
|
-
assert(summary.summary.tree[gcStateBlobKey].type === SummaryType.Handle, "GC state should be written as handle");
|
|
167
|
-
assert(summary.summary.tree[gcTombstoneBlobKey].type === SummaryType.Blob, "Tombstone state should be written as a blob");
|
|
168
|
-
assert(summary.summary.tree[gcDeletedBlobKey].type === SummaryType.Handle, "Deleted nodes should be written as handle");
|
|
169
|
-
});
|
|
170
|
-
it("does incremental summary when only deleted nodes change", async () => {
|
|
171
|
-
// Summarize with the same GC state and tombstone state but different deleted nodes as in the initial.
|
|
172
|
-
// state. The deleted nodes should be summarized as a summary handle.
|
|
173
|
-
const newDeletedNodes = new Set(...initialDeletedNodes, nodes[2]);
|
|
174
|
-
const summary = summaryStateTracker.summarize(true /* trackState */, initialGCState, newDeletedNodes, initialTombstones);
|
|
175
|
-
assert(summary?.summary.type === SummaryType.Tree, "GC summary should be a tree");
|
|
176
|
-
assert(summary.summary.tree[gcStateBlobKey].type === SummaryType.Handle, "GC state should be written as handle");
|
|
177
|
-
assert(summary.summary.tree[gcTombstoneBlobKey].type === SummaryType.Handle, "Tombstone state should be written as handle");
|
|
178
|
-
assert(summary.summary.tree[gcDeletedBlobKey].type === SummaryType.Blob, "Deleted nodes should be written as a blob");
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
it("updates state updated data store count correctly", async () => {
|
|
182
|
-
const updatedDataStoreCount = 10;
|
|
183
|
-
const gcStats = {
|
|
184
|
-
nodeCount: 0,
|
|
185
|
-
unrefNodeCount: 0,
|
|
186
|
-
updatedNodeCount: 0,
|
|
187
|
-
dataStoreCount: 0,
|
|
188
|
-
unrefDataStoreCount: 0,
|
|
189
|
-
updatedDataStoreCount,
|
|
190
|
-
attachmentBlobCount: 0,
|
|
191
|
-
unrefAttachmentBlobCount: 0,
|
|
192
|
-
updatedAttachmentBlobCount: 0,
|
|
193
|
-
lifetimeNodeCount: 0,
|
|
194
|
-
lifetimeDataStoreCount: 0,
|
|
195
|
-
lifetimeAttachmentBlobCount: 0,
|
|
196
|
-
deletedNodeCount: 0,
|
|
197
|
-
deletedDataStoreCount: 0,
|
|
198
|
-
deletedAttachmentBlobCount: 0,
|
|
199
|
-
};
|
|
200
|
-
const summaryStateTracker = new GCSummaryStateTracker({
|
|
201
|
-
shouldRunGC: true,
|
|
202
|
-
tombstoneMode: true,
|
|
203
|
-
gcVersionInBaseSnapshot: nextGCVersion,
|
|
204
|
-
gcVersionInEffect: nextGCVersion,
|
|
205
|
-
}, false /* wasGCRunInBaseSnapshot */);
|
|
206
|
-
let expectedUpdatedDataStoreCount = updatedDataStoreCount;
|
|
207
|
-
// Update the state from GC stats and validate it's the same as updatedDataStoreCount.
|
|
208
|
-
summaryStateTracker.updateStateFromGCRunStats(gcStats);
|
|
209
|
-
assert.strictEqual(summaryStateTracker.updatedDSCountSinceLastSummary, expectedUpdatedDataStoreCount, "Updated DS count is not correct");
|
|
210
|
-
// Call summarize but do not refresh latest summary. This mimics scenarios where summary generation fails
|
|
211
|
-
// sometime after summarize. This means updatedDSCountSinceLastSummary should be updated incrementally
|
|
212
|
-
// without resetting it.
|
|
213
|
-
summaryStateTracker.summarize(true /* trackState */, { gcNodes: {} }, new Set(), []);
|
|
214
|
-
// Update the stat from GC state again mimicking a GC run after a failed summary.
|
|
215
|
-
expectedUpdatedDataStoreCount += updatedDataStoreCount;
|
|
216
|
-
summaryStateTracker.updateStateFromGCRunStats(gcStats);
|
|
217
|
-
assert.strictEqual(summaryStateTracker.updatedDSCountSinceLastSummary, expectedUpdatedDataStoreCount, "Updated DS count should have been incrementally updated");
|
|
218
|
-
// Call summarize and refresh latest summary. This mimics a successful summary after a failed one. After
|
|
219
|
-
// this, updatedDSCountSinceLastSummary should be reset to 0.
|
|
220
|
-
summaryStateTracker.summarize(true /* trackState */, { gcNodes: {} }, new Set(), []);
|
|
221
|
-
await summaryStateTracker.refreshLatestSummary({
|
|
222
|
-
isSummaryTracked: true,
|
|
223
|
-
isSummaryNewer: true,
|
|
224
|
-
});
|
|
225
|
-
assert.strictEqual(summaryStateTracker.updatedDSCountSinceLastSummary, 0, "Updated DS count should be reset after refresh latest summary");
|
|
226
|
-
});
|
|
227
|
-
});
|
|
228
|
-
//# sourceMappingURL=gcSummaryStateTracker.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gcSummaryStateTracker.spec.js","sourceRoot":"","sources":["../../../src/test/gc/gcSummaryStateTracker.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\nimport { SummaryType } from \"@fluidframework/protocol-definitions\";\nimport { gcDeletedBlobKey, gcTombstoneBlobKey } from \"@fluidframework/runtime-definitions\";\nimport {\n\tnextGCVersion,\n\tgcStateBlobKey,\n\tGCSummaryStateTracker,\n\tGCVersion,\n\tIGarbageCollectionState,\n\tIGCStats,\n} from \"../../gc/index.js\";\n\ntype GCSummaryStateTrackerWithPrivates = Omit<GCSummaryStateTracker, \"latestSummaryGCVersion\"> & {\n\tlatestSummaryGCVersion: GCVersion;\n};\n\ndescribe(\"GCSummaryStateTracker tests\", () => {\n\tdescribe(\"Summary state reset\", () => {\n\t\t// In these tests, Persisted = gcVersionInBaseSnapshot. Current = gcVersionInEffect.\n\t\tit(\"Persisted < Current: Do Need Reset\", async () => {\n\t\t\tconst tracker: GCSummaryStateTrackerWithPrivates = new GCSummaryStateTracker(\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\ttombstoneMode: false,\n\t\t\t\t\tgcVersionInBaseSnapshot: 0,\n\t\t\t\t\tgcVersionInEffect: 1,\n\t\t\t\t},\n\t\t\t\ttrue /* wasGCRunInBaseSnapshot */,\n\t\t\t) as any;\n\t\t\tassert.equal(tracker.doesGCStateNeedReset, false, \"Precondition 1\");\n\t\t\tassert.equal(\n\t\t\t\ttracker.doesSummaryStateNeedReset,\n\t\t\t\ttrue,\n\t\t\t\t\"Should need reset: Persisted GC Version was old\",\n\t\t\t);\n\n\t\t\t// After the first summary succeeds (refreshLatestSummary called), the state should not need reset.\n\t\t\tawait tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });\n\n\t\t\tassert.equal(\n\t\t\t\ttracker.doesSummaryStateNeedReset,\n\t\t\t\tfalse,\n\t\t\t\t\"Shouldn't need reset after first summary\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"Persisted === Current: Don't Need Reset\", () => {\n\t\t\tconst tracker: GCSummaryStateTrackerWithPrivates = new GCSummaryStateTracker(\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\ttombstoneMode: false,\n\t\t\t\t\tgcVersionInBaseSnapshot: 1,\n\t\t\t\t\tgcVersionInEffect: 1,\n\t\t\t\t},\n\t\t\t\ttrue /* wasGCRunInBaseSnapshot */,\n\t\t\t) as any;\n\t\t\tassert.equal(tracker.doesGCStateNeedReset, false, \"Precondition 1\");\n\t\t\tassert.equal(\n\t\t\t\ttracker.doesSummaryStateNeedReset,\n\t\t\t\tfalse,\n\t\t\t\t\"Shouldn't need reset: GC Versions match\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"Persisted > Current: Do Need Reset\", async () => {\n\t\t\tconst tracker: GCSummaryStateTrackerWithPrivates = new GCSummaryStateTracker(\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\ttombstoneMode: false,\n\t\t\t\t\tgcVersionInBaseSnapshot: 2,\n\t\t\t\t\tgcVersionInEffect: 1,\n\t\t\t\t},\n\t\t\t\ttrue /* wasGCRunInBaseSnapshot */,\n\t\t\t) as any;\n\t\t\tassert.equal(tracker.doesGCStateNeedReset, false, \"Precondition 1\");\n\n\t\t\t// This covers the case where we rolled back an upgrade. Containers that successfully \"upgraded\" (reset)\n\t\t\t// shouldn't need to do it again.\n\t\t\tassert.equal(\n\t\t\t\ttracker.doesSummaryStateNeedReset,\n\t\t\t\ttrue,\n\t\t\t\t\"Should need reset: Persisted GC Version is not old\",\n\t\t\t);\n\n\t\t\t// After the first summary succeeds (refreshLatestSummary called), the state should not need reset.\n\t\t\tawait tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });\n\t\t\tassert.equal(\n\t\t\t\ttracker.doesSummaryStateNeedReset,\n\t\t\t\tfalse,\n\t\t\t\t\"Shouldn't need reset after first summary\",\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribe(\"GC state reset\", () => {\n\t\tit(\"wasGCRunInBaseSnapshot = false, shouldRunGC = false: Don't Need Reset\", () => {\n\t\t\tconst tracker: GCSummaryStateTrackerWithPrivates = new GCSummaryStateTracker(\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: false,\n\t\t\t\t\ttombstoneMode: false,\n\t\t\t\t\tgcVersionInBaseSnapshot: 1,\n\t\t\t\t\tgcVersionInEffect: 1,\n\t\t\t\t},\n\t\t\t\tfalse /* wasGCRunInBaseSnapshot */,\n\t\t\t) as any;\n\t\t\tassert.equal(tracker.doesGCStateNeedReset, false, \"Shouldn't need reset\");\n\t\t});\n\n\t\tit(\"wasGCRunInBaseSnapshot = true, shouldRunGC = false: Do Need Reset\", async () => {\n\t\t\tconst tracker: GCSummaryStateTrackerWithPrivates = new GCSummaryStateTracker(\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: false,\n\t\t\t\t\ttombstoneMode: false,\n\t\t\t\t\tgcVersionInBaseSnapshot: 1,\n\t\t\t\t\tgcVersionInEffect: 1,\n\t\t\t\t},\n\t\t\t\ttrue /* wasGCRunInBaseSnapshot */,\n\t\t\t) as any;\n\t\t\tassert.equal(tracker.doesGCStateNeedReset, true, \"Should need reset\");\n\n\t\t\t// After the first summary succeeds (refreshLatestSummary called), the state should not need reset.\n\t\t\tawait tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });\n\t\t\tassert.equal(\n\t\t\t\ttracker.doesGCStateNeedReset,\n\t\t\t\tfalse,\n\t\t\t\t\"Shouldn't need reset after first summary\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"wasGCRunInBaseSnapshot = false, shouldRunGC = true: Do Need Reset\", async () => {\n\t\t\tconst tracker: GCSummaryStateTrackerWithPrivates = new GCSummaryStateTracker(\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\ttombstoneMode: false,\n\t\t\t\t\tgcVersionInBaseSnapshot: 1,\n\t\t\t\t\tgcVersionInEffect: 1,\n\t\t\t\t},\n\t\t\t\tfalse /* wasGCRunInBaseSnapshot */,\n\t\t\t) as any;\n\t\t\tassert.equal(tracker.doesGCStateNeedReset, true, \"Should need reset\");\n\n\t\t\t// After the first summary succeeds (refreshLatestSummary called), the state should not need reset.\n\t\t\tawait tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });\n\n\t\t\tassert.equal(\n\t\t\t\ttracker.doesGCStateNeedReset,\n\t\t\t\tfalse,\n\t\t\t\t\"Shouldn't need reset after first summary\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"wasGCRunInBaseSnapshot = true, shouldRunGC = true: Don't Need Reset\", () => {\n\t\t\tconst tracker: GCSummaryStateTrackerWithPrivates = new GCSummaryStateTracker(\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\ttombstoneMode: false,\n\t\t\t\t\tgcVersionInBaseSnapshot: 1,\n\t\t\t\t\tgcVersionInEffect: 1,\n\t\t\t\t},\n\t\t\t\ttrue /* wasGCRunInBaseSnapshot */,\n\t\t\t) as any;\n\t\t\tassert.equal(tracker.doesGCStateNeedReset, false, \"Shouldn't need reset\");\n\t\t});\n\t});\n\n\tit(\"Autorecovery: requesting Full GC\", async () => {\n\t\tconst tracker: GCSummaryStateTrackerWithPrivates = new GCSummaryStateTracker(\n\t\t\t{\n\t\t\t\tshouldRunGC: true,\n\t\t\t\ttombstoneMode: false,\n\t\t\t\tgcVersionInBaseSnapshot: 1,\n\t\t\t\tgcVersionInEffect: 1,\n\t\t\t},\n\t\t\tfalse /* wasGCRunInBaseSnapshot */,\n\t\t) as any;\n\t\tassert.equal(tracker.autoRecovery.fullGCRequested(), false, \"Should be false by default\");\n\n\t\ttracker.autoRecovery.requestFullGCOnNextRun();\n\n\t\tassert.equal(\n\t\t\ttracker.autoRecovery.fullGCRequested(),\n\t\t\ttrue,\n\t\t\t\"Should be true after requesting full GC\",\n\t\t);\n\n\t\t// After the first summary succeeds (refreshLatestSummary called), the state should be reset.\n\t\tawait tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });\n\n\t\tassert.equal(\n\t\t\ttracker.autoRecovery.fullGCRequested(),\n\t\t\tfalse,\n\t\t\t\"Should be false after Summary Ack\",\n\t\t);\n\t});\n\n\t/**\n\t * These tests validate that the GC data is written in summary incrementally. Basically, only parts of the GC\n\t * data that has changed since the last successful summary is re-written, rest is written as SummaryHandle.\n\t */\n\tdescribe(\"Incremental summary of GC data\", () => {\n\t\tconst nodes = [\"node1\", \"node2\", \"node3\"];\n\t\tconst initialGCState: IGarbageCollectionState = {\n\t\t\tgcNodes: {\n\t\t\t\t\"/\": { outboundRoutes: [] },\n\t\t\t\t[nodes[0]]: { outboundRoutes: [] },\n\t\t\t\t[nodes[1]]: { outboundRoutes: [] },\n\t\t\t},\n\t\t};\n\t\tconst initialTombstones: string[] = [nodes[0], nodes[1]];\n\t\tconst initialDeletedNodes: Set<string> = new Set([nodes[1]]);\n\t\tlet summaryStateTracker: GCSummaryStateTracker;\n\n\t\tbeforeEach(async () => {\n\t\t\t// Creates a summary state tracker and initialize it.\n\t\t\tsummaryStateTracker = new GCSummaryStateTracker(\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\ttombstoneMode: true,\n\t\t\t\t\tgcVersionInBaseSnapshot: nextGCVersion,\n\t\t\t\t\tgcVersionInEffect: nextGCVersion,\n\t\t\t\t},\n\t\t\t\tfalse /* wasGCRunInBaseSnapshot */,\n\t\t\t);\n\n\t\t\tsummaryStateTracker.initializeBaseState({\n\t\t\t\tgcState: initialGCState,\n\t\t\t\ttombstones: initialTombstones,\n\t\t\t\tdeletedNodes: Array.from(initialDeletedNodes),\n\t\t\t});\n\t\t});\n\n\t\tit(\"does incremental summary when nothing changes\", async () => {\n\t\t\t// Summarize with the same GC state, tombstone state and deleted nodes as in the initial state.\n\t\t\t// The GC data should be summarized as a summary handle.\n\t\t\tconst summary = summaryStateTracker.summarize(\n\t\t\t\ttrue /* trackState */,\n\t\t\t\tinitialGCState,\n\t\t\t\tinitialDeletedNodes,\n\t\t\t\tinitialTombstones,\n\t\t\t);\n\t\t\tassert(summary?.summary.type === SummaryType.Handle, \"GC summary should be a handle\");\n\t\t});\n\n\t\tit(\"does incremental summary when only GC state changes\", async () => {\n\t\t\t// Summarize with the same tombstone state and deleted nodes but different GC state as in the initial.\n\t\t\t// state. The GC state should be summarized as a summary handle.\n\t\t\tconst newGCState: IGarbageCollectionState = {\n\t\t\t\tgcNodes: {\n\t\t\t\t\t...initialGCState.gcNodes,\n\t\t\t\t\t[nodes[2]]: { outboundRoutes: [] },\n\t\t\t\t},\n\t\t\t};\n\t\t\tconst summary = summaryStateTracker.summarize(\n\t\t\t\ttrue /* trackState */,\n\t\t\t\tnewGCState,\n\t\t\t\tinitialDeletedNodes,\n\t\t\t\tinitialTombstones,\n\t\t\t);\n\t\t\tassert(summary?.summary.type === SummaryType.Tree, \"GC summary should be a tree\");\n\t\t\tassert(\n\t\t\t\tsummary.summary.tree[gcStateBlobKey].type === SummaryType.Blob,\n\t\t\t\t\"GC state should be written as a blob\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tsummary.summary.tree[gcTombstoneBlobKey].type === SummaryType.Handle,\n\t\t\t\t\"Tombstone state should be written as handle\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tsummary.summary.tree[gcDeletedBlobKey].type === SummaryType.Handle,\n\t\t\t\t\"Deleted nodes should be written as handle\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"does incremental summary when only tombstone state changes\", async () => {\n\t\t\t// Summarize with the same GC state and deleted nodes but different tombstone state as in the initial.\n\t\t\t// state. The tombstone state should be summarized as a summary handle.\n\t\t\tconst newTombstones: string[] = Array.from([...initialTombstones, nodes[2]]);\n\t\t\tconst summary = summaryStateTracker.summarize(\n\t\t\t\ttrue /* trackState */,\n\t\t\t\tinitialGCState,\n\t\t\t\tinitialDeletedNodes,\n\t\t\t\tnewTombstones,\n\t\t\t);\n\t\t\tassert(summary?.summary.type === SummaryType.Tree, \"GC summary should be a tree\");\n\t\t\tassert(\n\t\t\t\tsummary.summary.tree[gcStateBlobKey].type === SummaryType.Handle,\n\t\t\t\t\"GC state should be written as handle\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tsummary.summary.tree[gcTombstoneBlobKey].type === SummaryType.Blob,\n\t\t\t\t\"Tombstone state should be written as a blob\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tsummary.summary.tree[gcDeletedBlobKey].type === SummaryType.Handle,\n\t\t\t\t\"Deleted nodes should be written as handle\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"does incremental summary when only deleted nodes change\", async () => {\n\t\t\t// Summarize with the same GC state and tombstone state but different deleted nodes as in the initial.\n\t\t\t// state. The deleted nodes should be summarized as a summary handle.\n\t\t\tconst newDeletedNodes: Set<string> = new Set(...initialDeletedNodes, nodes[2]);\n\t\t\tconst summary = summaryStateTracker.summarize(\n\t\t\t\ttrue /* trackState */,\n\t\t\t\tinitialGCState,\n\t\t\t\tnewDeletedNodes,\n\t\t\t\tinitialTombstones,\n\t\t\t);\n\t\t\tassert(summary?.summary.type === SummaryType.Tree, \"GC summary should be a tree\");\n\t\t\tassert(\n\t\t\t\tsummary.summary.tree[gcStateBlobKey].type === SummaryType.Handle,\n\t\t\t\t\"GC state should be written as handle\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tsummary.summary.tree[gcTombstoneBlobKey].type === SummaryType.Handle,\n\t\t\t\t\"Tombstone state should be written as handle\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tsummary.summary.tree[gcDeletedBlobKey].type === SummaryType.Blob,\n\t\t\t\t\"Deleted nodes should be written as a blob\",\n\t\t\t);\n\t\t});\n\t});\n\n\tit(\"updates state updated data store count correctly\", async () => {\n\t\tconst updatedDataStoreCount = 10;\n\t\tconst gcStats: IGCStats = {\n\t\t\tnodeCount: 0,\n\t\t\tunrefNodeCount: 0,\n\t\t\tupdatedNodeCount: 0,\n\t\t\tdataStoreCount: 0,\n\t\t\tunrefDataStoreCount: 0,\n\t\t\tupdatedDataStoreCount,\n\t\t\tattachmentBlobCount: 0,\n\t\t\tunrefAttachmentBlobCount: 0,\n\t\t\tupdatedAttachmentBlobCount: 0,\n\t\t\tlifetimeNodeCount: 0,\n\t\t\tlifetimeDataStoreCount: 0,\n\t\t\tlifetimeAttachmentBlobCount: 0,\n\t\t\tdeletedNodeCount: 0,\n\t\t\tdeletedDataStoreCount: 0,\n\t\t\tdeletedAttachmentBlobCount: 0,\n\t\t};\n\n\t\tconst summaryStateTracker = new GCSummaryStateTracker(\n\t\t\t{\n\t\t\t\tshouldRunGC: true,\n\t\t\t\ttombstoneMode: true,\n\t\t\t\tgcVersionInBaseSnapshot: nextGCVersion,\n\t\t\t\tgcVersionInEffect: nextGCVersion,\n\t\t\t},\n\t\t\tfalse /* wasGCRunInBaseSnapshot */,\n\t\t);\n\n\t\tlet expectedUpdatedDataStoreCount = updatedDataStoreCount;\n\t\t// Update the state from GC stats and validate it's the same as updatedDataStoreCount.\n\t\tsummaryStateTracker.updateStateFromGCRunStats(gcStats);\n\t\tassert.strictEqual(\n\t\t\tsummaryStateTracker.updatedDSCountSinceLastSummary,\n\t\t\texpectedUpdatedDataStoreCount,\n\t\t\t\"Updated DS count is not correct\",\n\t\t);\n\n\t\t// Call summarize but do not refresh latest summary. This mimics scenarios where summary generation fails\n\t\t// sometime after summarize. This means updatedDSCountSinceLastSummary should be updated incrementally\n\t\t// without resetting it.\n\t\tsummaryStateTracker.summarize(true /* trackState */, { gcNodes: {} }, new Set(), []);\n\n\t\t// Update the stat from GC state again mimicking a GC run after a failed summary.\n\t\texpectedUpdatedDataStoreCount += updatedDataStoreCount;\n\t\tsummaryStateTracker.updateStateFromGCRunStats(gcStats);\n\t\tassert.strictEqual(\n\t\t\tsummaryStateTracker.updatedDSCountSinceLastSummary,\n\t\t\texpectedUpdatedDataStoreCount,\n\t\t\t\"Updated DS count should have been incrementally updated\",\n\t\t);\n\n\t\t// Call summarize and refresh latest summary. This mimics a successful summary after a failed one. After\n\t\t// this, updatedDSCountSinceLastSummary should be reset to 0.\n\t\tsummaryStateTracker.summarize(true /* trackState */, { gcNodes: {} }, new Set(), []);\n\n\t\tawait summaryStateTracker.refreshLatestSummary({\n\t\t\tisSummaryTracked: true,\n\t\t\tisSummaryNewer: true,\n\t\t});\n\t\tassert.strictEqual(\n\t\t\tsummaryStateTracker.updatedDSCountSinceLastSummary,\n\t\t\t0,\n\t\t\t\"Updated DS count should be reset after refresh latest summary\",\n\t\t);\n\t});\n});\n"]}
|