@fluidframework/container-runtime 2.0.0-rc.2.0.2 → 2.0.0-rc.3.0.1
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,690 +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 { useFakeTimers } from "sinon";
|
|
7
|
-
import { MockLogger, mixinMonitoringContext, createChildLogger, } from "@fluidframework/telemetry-utils";
|
|
8
|
-
import { GarbageCollector, GCNodeType, defaultSessionExpiryDurationMs, oneDayMs, runGCKey, runSweepKey, defaultInactiveTimeoutMs, defaultSweepGracePeriodMs, gcTestModeKey, nextGCVersion, stableGCVersion, gcVersionUpgradeToV4Key, gcGenerationOptionName, throwOnTombstoneLoadOverrideKey, gcDisableDataStoreSweepOptionName, gcDisableThrowOnTombstoneLoadOptionName, runSessionExpiryKey, disableDatastoreSweepKey, } from "../../gc/index.js";
|
|
9
|
-
import { pkgVersion } from "../../packageVersion.js";
|
|
10
|
-
import { createTestConfigProvider } from "./gcUnitTestHelpers.js";
|
|
11
|
-
describe("Garbage Collection configurations", () => {
|
|
12
|
-
const testPkgPath = ["testPkg"];
|
|
13
|
-
const configProvider = createTestConfigProvider();
|
|
14
|
-
let mockLogger;
|
|
15
|
-
let mc;
|
|
16
|
-
let clock;
|
|
17
|
-
// The default GC data returned by `getGCData` on which GC is run. Update this to update the referenced graph.
|
|
18
|
-
let defaultGCData = { gcNodes: {} };
|
|
19
|
-
const customSessionExpiryDurationMs = defaultSessionExpiryDurationMs + 1;
|
|
20
|
-
const testOverrideInactiveTimeoutKey = "Fluid.GarbageCollection.TestOverride.InactiveTimeoutMs";
|
|
21
|
-
const testOverrideTombstoneTimeoutKey = "Fluid.GarbageCollection.TestOverride.TombstoneTimeoutMs";
|
|
22
|
-
const testOverrideSessionExpiryMsKey = "Fluid.GarbageCollection.TestOverride.SessionExpiryMs";
|
|
23
|
-
let gc;
|
|
24
|
-
const createGcWithPrivateMembers = (gcMetadata, gcOptions, isSummarizerClient) => {
|
|
25
|
-
const metadata = gcMetadata && {
|
|
26
|
-
summaryFormatVersion: 1,
|
|
27
|
-
message: undefined,
|
|
28
|
-
...gcMetadata,
|
|
29
|
-
};
|
|
30
|
-
return createGarbageCollector({ metadata, gcOptions }, undefined /* gcBlobsMap */, undefined /* closeFn */, isSummarizerClient);
|
|
31
|
-
};
|
|
32
|
-
function createGarbageCollector(createParams = {}, gcBlobsMap = new Map(), closeFn = () => { }, isSummarizerClient = true) {
|
|
33
|
-
const getNodeType = (nodePath) => {
|
|
34
|
-
if (nodePath.split("/").length !== 2) {
|
|
35
|
-
return GCNodeType.Other;
|
|
36
|
-
}
|
|
37
|
-
return GCNodeType.DataStore;
|
|
38
|
-
};
|
|
39
|
-
// The runtime to be passed to the garbage collector.
|
|
40
|
-
const gcRuntime = {
|
|
41
|
-
updateStateBeforeGC: async () => { },
|
|
42
|
-
getGCData: async (fullGC) => defaultGCData,
|
|
43
|
-
updateUsedRoutes: (usedRoutes) => {
|
|
44
|
-
return { totalNodeCount: 0, unusedNodeCount: 0 };
|
|
45
|
-
},
|
|
46
|
-
updateUnusedRoutes: (unusedRoutes) => { },
|
|
47
|
-
deleteSweepReadyNodes: (sweepReadyRoutes) => {
|
|
48
|
-
return [];
|
|
49
|
-
},
|
|
50
|
-
updateTombstonedRoutes: (tombstoneRoutes) => { },
|
|
51
|
-
getNodeType,
|
|
52
|
-
getCurrentReferenceTimestampMs: () => Date.now(),
|
|
53
|
-
closeFn,
|
|
54
|
-
};
|
|
55
|
-
return GarbageCollector.create({
|
|
56
|
-
...createParams,
|
|
57
|
-
runtime: gcRuntime,
|
|
58
|
-
gcOptions: createParams.gcOptions ?? {},
|
|
59
|
-
baseSnapshot: createParams.baseSnapshot,
|
|
60
|
-
baseLogger: createChildLogger({ logger: mc.logger }),
|
|
61
|
-
existing: createParams.metadata !== undefined /* existing */,
|
|
62
|
-
metadata: createParams.metadata,
|
|
63
|
-
createContainerMetadata: {
|
|
64
|
-
createContainerRuntimeVersion: pkgVersion,
|
|
65
|
-
createContainerTimestamp: Date.now(),
|
|
66
|
-
},
|
|
67
|
-
isSummarizerClient,
|
|
68
|
-
readAndParseBlob: async (id) => gcBlobsMap.get(id),
|
|
69
|
-
getNodePackagePath: async (nodeId) => testPkgPath,
|
|
70
|
-
getLastSummaryTimestampMs: () => Date.now(),
|
|
71
|
-
submitMessage: (message) => { },
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
before(() => {
|
|
75
|
-
clock = useFakeTimers();
|
|
76
|
-
});
|
|
77
|
-
beforeEach(() => {
|
|
78
|
-
gc = undefined;
|
|
79
|
-
mockLogger = new MockLogger();
|
|
80
|
-
// To ensure inactive timeout is less than tombstone timeout.
|
|
81
|
-
configProvider.set(testOverrideInactiveTimeoutKey, 1);
|
|
82
|
-
mc = mixinMonitoringContext(mockLogger, configProvider);
|
|
83
|
-
});
|
|
84
|
-
afterEach(() => {
|
|
85
|
-
clock.reset();
|
|
86
|
-
configProvider.clear();
|
|
87
|
-
defaultGCData = { gcNodes: {} };
|
|
88
|
-
gc?.dispose();
|
|
89
|
-
});
|
|
90
|
-
after(() => {
|
|
91
|
-
clock.restore();
|
|
92
|
-
});
|
|
93
|
-
describe("Existing container", () => {
|
|
94
|
-
it("No metadata", () => {
|
|
95
|
-
gc = createGcWithPrivateMembers({});
|
|
96
|
-
assert(!gc.configs.gcEnabled, "gcEnabled incorrect");
|
|
97
|
-
assert(!gc.configs.shouldRunGC, "shouldRunGC incorrect");
|
|
98
|
-
assert(gc.configs.sweepEnabled, "sweepEnabled incorrect");
|
|
99
|
-
assert.equal(gc.configs.shouldRunSweep, "NO", "shouldRunSweep incorrect");
|
|
100
|
-
assert(gc.configs.sessionExpiryTimeoutMs === undefined, "sessionExpiryTimeoutMs incorrect");
|
|
101
|
-
assert(gc.configs.tombstoneTimeoutMs === undefined, "tombstoneTimeoutMs incorrect");
|
|
102
|
-
assert.equal(gc.summaryStateTracker.latestSummaryGCVersion, 0, "latestSummaryGCVersion incorrect");
|
|
103
|
-
});
|
|
104
|
-
it("gcFeature 0", () => {
|
|
105
|
-
gc = createGcWithPrivateMembers({ gcFeature: 0 });
|
|
106
|
-
assert(!gc.configs.gcEnabled, "gcEnabled incorrect");
|
|
107
|
-
assert.equal(gc.summaryStateTracker.latestSummaryGCVersion, 0, "latestSummaryGCVersion incorrect");
|
|
108
|
-
});
|
|
109
|
-
it("gcFeature 0, Sweep enabled via gcGeneration", () => {
|
|
110
|
-
gc = createGcWithPrivateMembers({ gcFeature: 0, gcFeatureMatrix: { gcGeneration: 0 } }, { [gcGenerationOptionName]: 0 });
|
|
111
|
-
assert(!gc.configs.gcEnabled, "gcEnabled incorrect");
|
|
112
|
-
assert(gc.configs.sweepEnabled, "sweepEnabled incorrect");
|
|
113
|
-
assert.equal(gc.summaryStateTracker.latestSummaryGCVersion, 0, "latestSummaryGCVersion incorrect");
|
|
114
|
-
});
|
|
115
|
-
it("gcFeature 1", () => {
|
|
116
|
-
gc = createGcWithPrivateMembers({ gcFeature: 1 });
|
|
117
|
-
assert(gc.configs.gcEnabled, "gcEnabled incorrect");
|
|
118
|
-
assert.equal(gc.summaryStateTracker.latestSummaryGCVersion, 1, "latestSummaryGCVersion incorrect");
|
|
119
|
-
});
|
|
120
|
-
it("sweepEnabled value ignored", () => {
|
|
121
|
-
gc = createGcWithPrivateMembers({ sweepEnabled: true }, { [gcGenerationOptionName]: 1 });
|
|
122
|
-
assert(!gc.configs.sweepEnabled, "sweepEnabled incorrect");
|
|
123
|
-
});
|
|
124
|
-
it("sessionExpiryTimeoutMs set (tombstoneTimeoutMs unset)", () => {
|
|
125
|
-
gc = createGcWithPrivateMembers({
|
|
126
|
-
sessionExpiryTimeoutMs: customSessionExpiryDurationMs,
|
|
127
|
-
});
|
|
128
|
-
assert.equal(gc.configs.sessionExpiryTimeoutMs, customSessionExpiryDurationMs, "sessionExpiryTimeoutMs incorrect");
|
|
129
|
-
assert.equal(gc.configs.tombstoneTimeoutMs, customSessionExpiryDurationMs + 6 * oneDayMs, "tombstoneTimeoutMs incorrect");
|
|
130
|
-
});
|
|
131
|
-
it("tombstoneTimeoutMs set", () => {
|
|
132
|
-
gc = createGcWithPrivateMembers({ tombstoneTimeoutMs: 123 });
|
|
133
|
-
assert.equal(gc.configs.tombstoneTimeoutMs, 123, "tombstoneTimeoutMs incorrect");
|
|
134
|
-
});
|
|
135
|
-
it("Metadata Roundtrip", () => {
|
|
136
|
-
const inputMetadata = {
|
|
137
|
-
sweepEnabled: true,
|
|
138
|
-
gcFeature: 1,
|
|
139
|
-
sessionExpiryTimeoutMs: customSessionExpiryDurationMs,
|
|
140
|
-
tombstoneTimeoutMs: 123,
|
|
141
|
-
gcFeatureMatrix: { gcGeneration: 1 },
|
|
142
|
-
};
|
|
143
|
-
gc = createGcWithPrivateMembers(inputMetadata, {
|
|
144
|
-
[gcGenerationOptionName]: 2, // 2 should not replace already-persisted value of 1
|
|
145
|
-
});
|
|
146
|
-
const outputMetadata = gc.getMetadata();
|
|
147
|
-
const expectedOutputMetadata = {
|
|
148
|
-
...inputMetadata,
|
|
149
|
-
sweepEnabled: false,
|
|
150
|
-
gcFeature: stableGCVersion,
|
|
151
|
-
};
|
|
152
|
-
assert.deepEqual(outputMetadata, expectedOutputMetadata, "getMetadata returned different metadata than loaded from");
|
|
153
|
-
});
|
|
154
|
-
it("Metadata Roundtrip - old file with tombstoneGeneration", () => {
|
|
155
|
-
const inputMetadata = {
|
|
156
|
-
sweepEnabled: true,
|
|
157
|
-
gcFeature: 1,
|
|
158
|
-
sessionExpiryTimeoutMs: customSessionExpiryDurationMs,
|
|
159
|
-
tombstoneTimeoutMs: 123,
|
|
160
|
-
gcFeatureMatrix: { tombstoneGeneration: 1 }, // legacy file before gcGeneration
|
|
161
|
-
};
|
|
162
|
-
gc = createGcWithPrivateMembers(inputMetadata, {
|
|
163
|
-
[gcGenerationOptionName]: 2, // Will not be persisted - legacy file will only ever be stamped with tombstoneGeneration
|
|
164
|
-
});
|
|
165
|
-
const outputMetadata = gc.getMetadata();
|
|
166
|
-
const expectedOutputMetadata = {
|
|
167
|
-
...inputMetadata,
|
|
168
|
-
sweepEnabled: false,
|
|
169
|
-
gcFeature: stableGCVersion,
|
|
170
|
-
};
|
|
171
|
-
assert.deepEqual(outputMetadata, expectedOutputMetadata, "getMetadata returned different metadata than loaded from");
|
|
172
|
-
});
|
|
173
|
-
it("Metadata Roundtrip transition to gcGeneration from tombstoneGeneration", () => {
|
|
174
|
-
const inputMetadata = {
|
|
175
|
-
sweepEnabled: true,
|
|
176
|
-
gcFeature: 1,
|
|
177
|
-
sessionExpiryTimeoutMs: customSessionExpiryDurationMs,
|
|
178
|
-
tombstoneTimeoutMs: 123,
|
|
179
|
-
gcFeatureMatrix: { gcGeneration: 1 },
|
|
180
|
-
};
|
|
181
|
-
// An app may write both Generation options to ease the transition. Only gcGeneration will be persisted
|
|
182
|
-
// (and previous to the change introducing gcGeneration, only tombstoneGeneration would have been persisted).
|
|
183
|
-
gc = createGcWithPrivateMembers(inputMetadata, {
|
|
184
|
-
[gcGenerationOptionName]: 1,
|
|
185
|
-
gcTombstoneGeneration: 1, // Legacy - will not be persisted but is ok to pass in
|
|
186
|
-
});
|
|
187
|
-
const outputMetadata = gc.getMetadata();
|
|
188
|
-
const expectedOutputMetadata = {
|
|
189
|
-
...inputMetadata,
|
|
190
|
-
sweepEnabled: false,
|
|
191
|
-
gcFeature: stableGCVersion,
|
|
192
|
-
};
|
|
193
|
-
assert.deepEqual(outputMetadata, expectedOutputMetadata, "getMetadata returned different metadata than loaded from");
|
|
194
|
-
});
|
|
195
|
-
it("Metadata Roundtrip with GC version upgrade to v4 enabled", () => {
|
|
196
|
-
configProvider.set(gcVersionUpgradeToV4Key, true);
|
|
197
|
-
const inputMetadata = {
|
|
198
|
-
sweepEnabled: true,
|
|
199
|
-
gcFeature: 1,
|
|
200
|
-
sessionExpiryTimeoutMs: customSessionExpiryDurationMs,
|
|
201
|
-
tombstoneTimeoutMs: 123,
|
|
202
|
-
gcFeatureMatrix: { gcGeneration: 1 },
|
|
203
|
-
};
|
|
204
|
-
gc = createGcWithPrivateMembers(inputMetadata);
|
|
205
|
-
const outputMetadata = gc.getMetadata();
|
|
206
|
-
const expectedOutputMetadata = {
|
|
207
|
-
...inputMetadata,
|
|
208
|
-
sweepEnabled: false,
|
|
209
|
-
gcFeature: nextGCVersion,
|
|
210
|
-
};
|
|
211
|
-
assert.deepEqual(outputMetadata, expectedOutputMetadata, "getMetadata returned different metadata than loaded from");
|
|
212
|
-
});
|
|
213
|
-
it("Metadata Roundtrip with GC version upgrade to v4 disabled", () => {
|
|
214
|
-
configProvider.set(gcVersionUpgradeToV4Key, false);
|
|
215
|
-
const inputMetadata = {
|
|
216
|
-
sweepEnabled: true,
|
|
217
|
-
gcFeature: 1,
|
|
218
|
-
sessionExpiryTimeoutMs: customSessionExpiryDurationMs,
|
|
219
|
-
tombstoneTimeoutMs: 123,
|
|
220
|
-
gcFeatureMatrix: { gcGeneration: 1 },
|
|
221
|
-
};
|
|
222
|
-
gc = createGcWithPrivateMembers(inputMetadata);
|
|
223
|
-
const outputMetadata = gc.getMetadata();
|
|
224
|
-
const expectedOutputMetadata = {
|
|
225
|
-
...inputMetadata,
|
|
226
|
-
sweepEnabled: false,
|
|
227
|
-
gcFeature: stableGCVersion,
|
|
228
|
-
};
|
|
229
|
-
assert.deepEqual(outputMetadata, expectedOutputMetadata, "getMetadata returned different metadata than loaded from");
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
describe("New Container", () => {
|
|
233
|
-
it("No options", () => {
|
|
234
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, {});
|
|
235
|
-
assert(gc.configs.gcEnabled, "gcEnabled incorrect");
|
|
236
|
-
assert(gc.configs.shouldRunGC, "shouldRunGC incorrect");
|
|
237
|
-
assert(gc.configs.sweepEnabled, "sweepEnabled incorrect"); // Sweep is always allowed for a new container
|
|
238
|
-
assert.equal(gc.configs.shouldRunSweep, "NO", "shouldRunSweep incorrect");
|
|
239
|
-
assert(gc.configs.sessionExpiryTimeoutMs !== undefined, "sessionExpiryTimeoutMs incorrect");
|
|
240
|
-
assert(gc.configs.tombstoneTimeoutMs !== undefined, "tombstoneTimeoutMs incorrect");
|
|
241
|
-
assert.equal(gc.summaryStateTracker.latestSummaryGCVersion, stableGCVersion, "latestSummaryGCVersion incorrect");
|
|
242
|
-
});
|
|
243
|
-
it("gcAllowed true", () => {
|
|
244
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, { gcAllowed: true });
|
|
245
|
-
assert(gc.configs.gcEnabled, "gcEnabled incorrect");
|
|
246
|
-
});
|
|
247
|
-
it("gcAllowed false", () => {
|
|
248
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, { gcAllowed: false });
|
|
249
|
-
assert(!gc.configs.gcEnabled, "gcEnabled incorrect");
|
|
250
|
-
});
|
|
251
|
-
it("Sweep enabled via gcGeneration, gcAllowed true", () => {
|
|
252
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, {
|
|
253
|
-
gcAllowed: true,
|
|
254
|
-
[gcGenerationOptionName]: 1,
|
|
255
|
-
});
|
|
256
|
-
assert(gc.configs.gcEnabled, "gcEnabled incorrect");
|
|
257
|
-
assert(gc.configs.sweepEnabled, "sweepEnabled incorrect");
|
|
258
|
-
assert(gc.configs.tombstoneTimeoutMs !== undefined, "tombstoneTimeoutMs incorrect");
|
|
259
|
-
assert(gc.configs.sessionExpiryTimeoutMs !== undefined, "sessionExpiryTimeoutMs incorrect");
|
|
260
|
-
});
|
|
261
|
-
it("Sweep enabled via gcGeneration, gcAllowed true, sessionExpiry off", () => {
|
|
262
|
-
configProvider.set(runSessionExpiryKey, false);
|
|
263
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, {
|
|
264
|
-
gcAllowed: true,
|
|
265
|
-
[gcGenerationOptionName]: 1,
|
|
266
|
-
});
|
|
267
|
-
assert(gc.configs.gcEnabled, "gcEnabled incorrect");
|
|
268
|
-
assert(gc.configs.sweepEnabled, "sweepEnabled incorrect");
|
|
269
|
-
assert(gc.configs.sessionExpiryTimeoutMs === undefined, "sessionExpiryTimeoutMs incorrect");
|
|
270
|
-
assert(gc.configs.tombstoneTimeoutMs === undefined, "tombstoneTimeoutMs incorrect");
|
|
271
|
-
});
|
|
272
|
-
it("TestOverride.TombstoneTimeoutMs set, sessionExpiry on", () => {
|
|
273
|
-
configProvider.set(testOverrideTombstoneTimeoutKey, 123);
|
|
274
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, {});
|
|
275
|
-
assert(gc.configs.sweepEnabled, "sweepEnabled incorrect");
|
|
276
|
-
assert(gc.configs.sessionExpiryTimeoutMs === defaultSessionExpiryDurationMs, "sessionExpiryTimeoutMs incorrect");
|
|
277
|
-
assert(gc.configs.tombstoneTimeoutMs === 123, "tombstoneTimeoutMs incorrect");
|
|
278
|
-
});
|
|
279
|
-
it("TestOverride.TombstoneTimeoutMs set, sessionExpiry off", () => {
|
|
280
|
-
configProvider.set(testOverrideTombstoneTimeoutKey, 123);
|
|
281
|
-
configProvider.set(runSessionExpiryKey, false);
|
|
282
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, {});
|
|
283
|
-
assert(gc.configs.sweepEnabled, "sweepEnabled incorrect");
|
|
284
|
-
assert(gc.configs.sessionExpiryTimeoutMs === undefined, "sessionExpiryTimeoutMs incorrect");
|
|
285
|
-
assert(gc.configs.tombstoneTimeoutMs === 123, "tombstoneTimeoutMs incorrect");
|
|
286
|
-
});
|
|
287
|
-
it("Metadata Roundtrip", () => {
|
|
288
|
-
const expectedMetadata = {
|
|
289
|
-
sweepEnabled: false,
|
|
290
|
-
gcFeature: stableGCVersion,
|
|
291
|
-
sessionExpiryTimeoutMs: defaultSessionExpiryDurationMs,
|
|
292
|
-
tombstoneTimeoutMs: defaultSessionExpiryDurationMs + 6 * oneDayMs,
|
|
293
|
-
gcFeatureMatrix: { gcGeneration: 2 },
|
|
294
|
-
};
|
|
295
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, {
|
|
296
|
-
[gcGenerationOptionName]: 2,
|
|
297
|
-
});
|
|
298
|
-
const outputMetadata = gc.getMetadata();
|
|
299
|
-
assert.deepEqual(outputMetadata, expectedMetadata, "getMetadata returned different metadata than expected");
|
|
300
|
-
});
|
|
301
|
-
it("Metadata Roundtrip with GC version upgrade to v4 enabled", () => {
|
|
302
|
-
configProvider.set(gcVersionUpgradeToV4Key, true);
|
|
303
|
-
const expectedMetadata = {
|
|
304
|
-
sweepEnabled: false,
|
|
305
|
-
gcFeature: nextGCVersion,
|
|
306
|
-
sessionExpiryTimeoutMs: defaultSessionExpiryDurationMs,
|
|
307
|
-
tombstoneTimeoutMs: defaultSessionExpiryDurationMs + 6 * oneDayMs,
|
|
308
|
-
gcFeatureMatrix: undefined,
|
|
309
|
-
};
|
|
310
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, {});
|
|
311
|
-
const outputMetadata = gc.getMetadata();
|
|
312
|
-
assert.deepEqual(outputMetadata, expectedMetadata, "getMetadata returned different metadata than expected");
|
|
313
|
-
});
|
|
314
|
-
it("Metadata Roundtrip transition to gcGeneration from tombstoneGeneration", () => {
|
|
315
|
-
const expectedMetadata = {
|
|
316
|
-
sweepEnabled: false,
|
|
317
|
-
gcFeature: stableGCVersion,
|
|
318
|
-
sessionExpiryTimeoutMs: defaultSessionExpiryDurationMs,
|
|
319
|
-
tombstoneTimeoutMs: defaultSessionExpiryDurationMs + 6 * oneDayMs,
|
|
320
|
-
gcFeatureMatrix: {
|
|
321
|
-
gcGeneration: 2,
|
|
322
|
-
// tombstoneGeneration will not be persisted
|
|
323
|
-
},
|
|
324
|
-
};
|
|
325
|
-
// An app may write both Generation options to ease the transition. Only gcGeneration will be persisted
|
|
326
|
-
// (and previous to the change introducing gcGeneration, only tombstoneGeneration would have been persisted).
|
|
327
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, {
|
|
328
|
-
[gcGenerationOptionName]: 2,
|
|
329
|
-
gcTombstoneGeneration: 2, // Legacy - will not be persisted but is ok to pass in
|
|
330
|
-
});
|
|
331
|
-
const outputMetadata = gc.getMetadata();
|
|
332
|
-
assert.deepEqual(outputMetadata, expectedMetadata, "getMetadata returned different metadata than expected");
|
|
333
|
-
});
|
|
334
|
-
});
|
|
335
|
-
describe("Session Expiry and Tombstone Timeout", () => {
|
|
336
|
-
beforeEach(() => {
|
|
337
|
-
configProvider.set("Fluid.GarbageCollection.TestOverride.InactiveTimeoutMs", 1); // To ensure it's less than tombstone timeout
|
|
338
|
-
});
|
|
339
|
-
// Config sources for Session Expiry:
|
|
340
|
-
// 1. defaultSessionExpiryDurationMs in code
|
|
341
|
-
// 2. IGCRuntimeOptions.sessionExpiryTimeoutMs
|
|
342
|
-
// 3. IGCMetadata.sessionExpiryTimeoutMs
|
|
343
|
-
// 4. "Fluid.GarbageCollection.TestOverride.SessionExpiryMs" setting
|
|
344
|
-
// Config sources for Tombstone Timeout:
|
|
345
|
-
// 1. IGCMetadata.tombstoneTimeoutMs
|
|
346
|
-
// 2. IGCMetadata_Deprecated.sweepTimeoutMs (backfill from before two-stage sweep)
|
|
347
|
-
// 3. Computed from Session Expiry, fixed upper bound for Snapshot Expiry and a fixed buffer (on create, or to backfill existing)
|
|
348
|
-
// 4. "Fluid.GarbageCollection.TestOverride.TombstoneTimeoutMs" setting (only applicable on create)
|
|
349
|
-
it("defaultSessionExpiryDurationMs", () => {
|
|
350
|
-
gc = createGcWithPrivateMembers();
|
|
351
|
-
assert.equal(gc.configs.sessionExpiryTimeoutMs, defaultSessionExpiryDurationMs, "sessionExpiryTimeoutMs incorrect");
|
|
352
|
-
assert.equal(gc.sessionExpiryTimer.defaultTimeout, defaultSessionExpiryDurationMs, "sessionExpiryTimer incorrect");
|
|
353
|
-
assert.equal(gc.configs.tombstoneTimeoutMs, defaultSessionExpiryDurationMs + 6 * oneDayMs, "tombstoneTimeoutMs incorrect");
|
|
354
|
-
});
|
|
355
|
-
it("defaultSessionExpiryDurationMs, TestOverride.TombstoneTimeoutMs set", () => {
|
|
356
|
-
configProvider.set(testOverrideTombstoneTimeoutKey, 7890);
|
|
357
|
-
gc = createGcWithPrivateMembers();
|
|
358
|
-
assert.equal(gc.configs.sessionExpiryTimeoutMs, defaultSessionExpiryDurationMs, "sessionExpiryTimeoutMs incorrect");
|
|
359
|
-
assert.equal(gc.sessionExpiryTimer.defaultTimeout, defaultSessionExpiryDurationMs, "sessionExpiryTimer incorrect");
|
|
360
|
-
assert.equal(gc.configs.tombstoneTimeoutMs, 7890, "tombstoneTimeoutMs incorrect");
|
|
361
|
-
});
|
|
362
|
-
it("gcAllowed off, session expiry off", () => {
|
|
363
|
-
gc = gc = createGcWithPrivateMembers(undefined /* metadata */, {
|
|
364
|
-
gcAllowed: false,
|
|
365
|
-
});
|
|
366
|
-
assert.equal(gc.configs.sessionExpiryTimeoutMs, undefined, "sessionExpiryTimeoutMs incorrect");
|
|
367
|
-
assert.equal(gc.sessionExpiryTimer, undefined, "sessionExpiryTimer incorrect");
|
|
368
|
-
assert.equal(gc.configs.tombstoneTimeoutMs, undefined, "tombstoneTimeoutMs incorrect");
|
|
369
|
-
});
|
|
370
|
-
it("IGCRuntimeOptions.sessionExpiryTimeoutMs", () => {
|
|
371
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, {
|
|
372
|
-
sessionExpiryTimeoutMs: 123,
|
|
373
|
-
});
|
|
374
|
-
assert.equal(gc.configs.sessionExpiryTimeoutMs, 123, "sessionExpiryTimeoutMs incorrect");
|
|
375
|
-
assert.equal(gc.sessionExpiryTimer.defaultTimeout, 123, "sessionExpiryTimer incorrect");
|
|
376
|
-
assert.equal(gc.configs.tombstoneTimeoutMs, 123 + 6 * oneDayMs, "tombstoneTimeoutMs incorrect");
|
|
377
|
-
});
|
|
378
|
-
it("IGCMetadata.sessionExpiryTimeoutMs, backfill tombstoneTimeoutMs", () => {
|
|
379
|
-
configProvider.set(testOverrideTombstoneTimeoutKey, 1337); // Should be ignored
|
|
380
|
-
gc = createGcWithPrivateMembers({ sessionExpiryTimeoutMs: 456 } /* metadata */);
|
|
381
|
-
assert.equal(gc.configs.sessionExpiryTimeoutMs, 456, "sessionExpiryTimeoutMs incorrect");
|
|
382
|
-
assert.equal(gc.sessionExpiryTimer.defaultTimeout, 456, "sessionExpiryTimer incorrect");
|
|
383
|
-
assert.equal(gc.configs.tombstoneTimeoutMs, 456 + 6 * oneDayMs, "tombstoneTimeoutMs incorrect");
|
|
384
|
-
});
|
|
385
|
-
it("IGCMetadata.sessionExpiryTimeoutMs and IGCMetadata.tombstoneTimeoutMs", () => {
|
|
386
|
-
configProvider.set(testOverrideTombstoneTimeoutKey, 1337); // Should be ignored
|
|
387
|
-
gc = createGcWithPrivateMembers({ sessionExpiryTimeoutMs: 456, tombstoneTimeoutMs: 789 } /* metadata */);
|
|
388
|
-
assert.equal(gc.configs.sessionExpiryTimeoutMs, 456, "sessionExpiryTimeoutMs incorrect");
|
|
389
|
-
assert.equal(gc.sessionExpiryTimer.defaultTimeout, 456, "sessionExpiryTimer incorrect");
|
|
390
|
-
assert.equal(gc.configs.tombstoneTimeoutMs, 789, "tombstoneTimeoutMs incorrect");
|
|
391
|
-
});
|
|
392
|
-
it("IGCMetadata.tombstoneTimeoutMs only", () => {
|
|
393
|
-
configProvider.set(testOverrideTombstoneTimeoutKey, 1337); // Should be ignored
|
|
394
|
-
// This could happen if you used TestOverride.TombstoneTimeoutMs but had SessionExpiry disabled, then loaded that container.
|
|
395
|
-
gc = createGcWithPrivateMembers({ tombstoneTimeoutMs: 789 } /* metadata */);
|
|
396
|
-
assert.equal(gc.configs.sessionExpiryTimeoutMs, undefined, "sessionExpiryTimeoutMs incorrect");
|
|
397
|
-
assert.equal(gc.sessionExpiryTimer, undefined, "sessionExpiryTimer incorrect");
|
|
398
|
-
assert.equal(gc.configs.tombstoneTimeoutMs, 789, "tombstoneTimeoutMs incorrect");
|
|
399
|
-
});
|
|
400
|
-
it("IGCMetadata.tombstoneTimeoutMs - backfill from sweepTimeoutMs", () => {
|
|
401
|
-
configProvider.set(testOverrideTombstoneTimeoutKey, 1337); // Should be ignored
|
|
402
|
-
const metadata = {
|
|
403
|
-
sweepTimeoutMs: 789, // Snapshot was generated by code built before the rename
|
|
404
|
-
};
|
|
405
|
-
gc = createGcWithPrivateMembers(metadata);
|
|
406
|
-
assert.equal(gc.configs.sessionExpiryTimeoutMs, undefined, "sessionExpiryTimeoutMs incorrect");
|
|
407
|
-
assert.equal(gc.sessionExpiryTimer, undefined, "sessionExpiryTimer incorrect");
|
|
408
|
-
assert.equal(gc.configs.tombstoneTimeoutMs, 789, "tombstoneTimeoutMs incorrect");
|
|
409
|
-
});
|
|
410
|
-
it("RunSessionExpiry setting turned off", () => {
|
|
411
|
-
configProvider.set(runSessionExpiryKey, false);
|
|
412
|
-
configProvider.set(testOverrideSessionExpiryMsKey, 123); // This override should be ignored
|
|
413
|
-
gc = createGcWithPrivateMembers();
|
|
414
|
-
assert.equal(gc.configs.sessionExpiryTimeoutMs, undefined, "sessionExpiryTimeoutMs should be undefined if runSessionExpiryKey setting is false");
|
|
415
|
-
assert.equal(gc.sessionExpiryTimer, undefined, "sessionExpiryTimer should be undefined if it's disabled");
|
|
416
|
-
assert.equal(gc.configs.tombstoneTimeoutMs, undefined, "tombstoneTimeoutMs incorrect");
|
|
417
|
-
});
|
|
418
|
-
it("RunSessionExpiry setting turned off, TestOverride.TombstoneTimeoutMs set", () => {
|
|
419
|
-
configProvider.set(runSessionExpiryKey, false);
|
|
420
|
-
configProvider.set(testOverrideTombstoneTimeoutKey, 7890);
|
|
421
|
-
configProvider.set(testOverrideSessionExpiryMsKey, 123); // This override should be ignored
|
|
422
|
-
gc = createGcWithPrivateMembers();
|
|
423
|
-
assert.equal(gc.configs.sessionExpiryTimeoutMs, undefined, "sessionExpiryTimeoutMs should be undefined if runSessionExpiryKey setting is false");
|
|
424
|
-
assert.equal(gc.sessionExpiryTimer, undefined, "sessionExpiryTimer should be undefined if it's disabled");
|
|
425
|
-
assert.equal(gc.configs.tombstoneTimeoutMs, 7890, "tombstoneTimeoutMs incorrect");
|
|
426
|
-
});
|
|
427
|
-
function testSessionExpiryMsOverride() {
|
|
428
|
-
const expectedTombstoneTimeoutMs = defaultSessionExpiryDurationMs + 6 * oneDayMs;
|
|
429
|
-
assert(!!gc, "PRECONDITION: gc must be set before calling this helper");
|
|
430
|
-
assert.equal(gc.configs.sessionExpiryTimeoutMs, defaultSessionExpiryDurationMs, "sessionExpiryTimeoutMs incorrect");
|
|
431
|
-
assert.equal(gc.sessionExpiryTimer.defaultTimeout, 789, "sessionExpiry used for timer should be the override value");
|
|
432
|
-
assert.equal(gc.configs.tombstoneTimeoutMs, expectedTombstoneTimeoutMs, "tombstoneTimeoutMs incorrect");
|
|
433
|
-
const expectedMetadata = {
|
|
434
|
-
sweepEnabled: false,
|
|
435
|
-
gcFeature: stableGCVersion,
|
|
436
|
-
sessionExpiryTimeoutMs: defaultSessionExpiryDurationMs,
|
|
437
|
-
tombstoneTimeoutMs: expectedTombstoneTimeoutMs,
|
|
438
|
-
gcFeatureMatrix: undefined,
|
|
439
|
-
};
|
|
440
|
-
const outputMetadata = gc.getMetadata();
|
|
441
|
-
assert.deepEqual(outputMetadata, expectedMetadata, "getMetadata returned different metadata than expected");
|
|
442
|
-
}
|
|
443
|
-
it("TestOverride.SessionExpiryMs setting applied to timeout but not written to file - New Container", () => {
|
|
444
|
-
configProvider.set(testOverrideSessionExpiryMsKey, 789);
|
|
445
|
-
gc = createGcWithPrivateMembers();
|
|
446
|
-
testSessionExpiryMsOverride();
|
|
447
|
-
});
|
|
448
|
-
it("TestOverride.SessionExpiryMs setting applied to timeout but not written to file - Existing Container", () => {
|
|
449
|
-
configProvider.set(testOverrideSessionExpiryMsKey, 789);
|
|
450
|
-
gc = createGcWithPrivateMembers({
|
|
451
|
-
sessionExpiryTimeoutMs: defaultSessionExpiryDurationMs,
|
|
452
|
-
gcFeature: 1,
|
|
453
|
-
} /* metadata */);
|
|
454
|
-
testSessionExpiryMsOverride();
|
|
455
|
-
});
|
|
456
|
-
});
|
|
457
|
-
describe("Session Behavior (e.g. 'shouldRun' fields)", () => {
|
|
458
|
-
beforeEach(() => {
|
|
459
|
-
configProvider.set("Fluid.GarbageCollection.TestOverride.InactiveTimeoutMs", 1); // To ensure it's less than tombstone timeout
|
|
460
|
-
});
|
|
461
|
-
describe("shouldRunGC", () => {
|
|
462
|
-
const testCases = [
|
|
463
|
-
{ gcEnabled: false, disableGC: true, runGC: true, expectedResult: true },
|
|
464
|
-
{ gcEnabled: true, disableGC: false, runGC: false, expectedResult: false },
|
|
465
|
-
{ gcEnabled: true, disableGC: true, expectedResult: false },
|
|
466
|
-
{ gcEnabled: true, disableGC: false, expectedResult: true },
|
|
467
|
-
{ gcEnabled: true, expectedResult: true },
|
|
468
|
-
{ gcEnabled: false, expectedResult: false },
|
|
469
|
-
];
|
|
470
|
-
testCases.forEach((testCase) => {
|
|
471
|
-
it(`Test Case ${JSON.stringify(testCase)}`, () => {
|
|
472
|
-
configProvider.set(runGCKey, testCase.runGC);
|
|
473
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, {
|
|
474
|
-
gcAllowed: testCase.gcEnabled,
|
|
475
|
-
disableGC: testCase.disableGC,
|
|
476
|
-
});
|
|
477
|
-
assert.equal(gc.configs.gcEnabled, testCase.gcEnabled, "PRECONDITION: gcEnabled set incorrectly");
|
|
478
|
-
assert.equal(gc.configs.shouldRunGC, testCase.expectedResult, "shouldRunGC not set as expected");
|
|
479
|
-
});
|
|
480
|
-
});
|
|
481
|
-
it("shouldRunGC should be true when gcVersionInEffect is newer than gcVersionInBaseSnapshot", () => {
|
|
482
|
-
const gcVersionInBaseSnapshot = stableGCVersion - 1;
|
|
483
|
-
gc = createGcWithPrivateMembers({ gcFeature: gcVersionInBaseSnapshot });
|
|
484
|
-
assert.equal(gc.configs.gcEnabled, true, "PRECONDITION: gcEnabled set incorrectly");
|
|
485
|
-
assert.equal(gc.configs.shouldRunGC, true, "shouldRunGC should be true");
|
|
486
|
-
assert.equal(gc.configs.gcVersionInBaseSnapshot, gcVersionInBaseSnapshot, "gcVersionInBaseSnapshot set incorrectly");
|
|
487
|
-
});
|
|
488
|
-
it("shouldRunGC should be false when gcVersionInEffect is older than gcVersionInBaseSnapshot", () => {
|
|
489
|
-
const gcVersionInBaseSnapshot = nextGCVersion + 1;
|
|
490
|
-
gc = createGcWithPrivateMembers({ gcFeature: gcVersionInBaseSnapshot });
|
|
491
|
-
assert.equal(gc.configs.gcEnabled, true, "PRECONDITION: gcEnabled set incorrectly");
|
|
492
|
-
assert.equal(gc.configs.shouldRunGC, false, "shouldRunGC should be false");
|
|
493
|
-
assert.equal(gc.configs.gcVersionInBaseSnapshot, gcVersionInBaseSnapshot, "gcVersionInBaseSnapshot set incorrectly");
|
|
494
|
-
});
|
|
495
|
-
});
|
|
496
|
-
describe("shouldRunSweep", () => {
|
|
497
|
-
const testCases = [
|
|
498
|
-
{
|
|
499
|
-
shouldRunGC: false,
|
|
500
|
-
sweepEnabled_doc: true,
|
|
501
|
-
sweepEnabled_session: true,
|
|
502
|
-
disableDataStoreSweep: "viaGCOption",
|
|
503
|
-
shouldRunSweep: true,
|
|
504
|
-
expectedShouldRunSweep: "NO",
|
|
505
|
-
},
|
|
506
|
-
{
|
|
507
|
-
shouldRunGC: true,
|
|
508
|
-
sweepEnabled_doc: false,
|
|
509
|
-
sweepEnabled_session: true,
|
|
510
|
-
disableDataStoreSweep: "viaGCOption",
|
|
511
|
-
expectedShouldRunSweep: "NO",
|
|
512
|
-
},
|
|
513
|
-
{
|
|
514
|
-
shouldRunGC: true,
|
|
515
|
-
sweepEnabled_doc: true,
|
|
516
|
-
sweepEnabled_session: false,
|
|
517
|
-
disableDataStoreSweep: "viaGCOption",
|
|
518
|
-
expectedShouldRunSweep: "NO",
|
|
519
|
-
},
|
|
520
|
-
{
|
|
521
|
-
shouldRunGC: true,
|
|
522
|
-
sweepEnabled_doc: true,
|
|
523
|
-
sweepEnabled_session: true,
|
|
524
|
-
shouldRunSweep: false,
|
|
525
|
-
disableDataStoreSweep: "viaGCOption",
|
|
526
|
-
expectedShouldRunSweep: "NO",
|
|
527
|
-
},
|
|
528
|
-
{
|
|
529
|
-
shouldRunGC: true,
|
|
530
|
-
sweepEnabled_doc: true,
|
|
531
|
-
sweepEnabled_session: false,
|
|
532
|
-
shouldRunSweep: true,
|
|
533
|
-
expectedShouldRunSweep: "YES",
|
|
534
|
-
},
|
|
535
|
-
{
|
|
536
|
-
shouldRunGC: true,
|
|
537
|
-
sweepEnabled_doc: true,
|
|
538
|
-
sweepEnabled_session: true,
|
|
539
|
-
expectedShouldRunSweep: "YES",
|
|
540
|
-
},
|
|
541
|
-
{
|
|
542
|
-
shouldRunGC: true,
|
|
543
|
-
sweepEnabled_doc: true,
|
|
544
|
-
sweepEnabled_session: true,
|
|
545
|
-
disableDataStoreSweep: "viaGCOption",
|
|
546
|
-
expectedShouldRunSweep: "ONLY_BLOBS",
|
|
547
|
-
},
|
|
548
|
-
{
|
|
549
|
-
shouldRunGC: true,
|
|
550
|
-
sweepEnabled_doc: true,
|
|
551
|
-
sweepEnabled_session: true,
|
|
552
|
-
disableDataStoreSweep: "viaConfigProvider",
|
|
553
|
-
expectedShouldRunSweep: "ONLY_BLOBS",
|
|
554
|
-
},
|
|
555
|
-
{
|
|
556
|
-
shouldRunGC: true,
|
|
557
|
-
sweepEnabled_doc: true,
|
|
558
|
-
sweepEnabled_session: true,
|
|
559
|
-
shouldRunSweep: true,
|
|
560
|
-
disableDataStoreSweep: "viaGCOption",
|
|
561
|
-
expectedShouldRunSweep: "ONLY_BLOBS",
|
|
562
|
-
},
|
|
563
|
-
];
|
|
564
|
-
testCases.forEach((testCase, index) => {
|
|
565
|
-
it(`Test Case ${JSON.stringify(testCase)}`, () => {
|
|
566
|
-
configProvider.set(runGCKey, testCase.shouldRunGC);
|
|
567
|
-
configProvider.set(runSweepKey, testCase.shouldRunSweep);
|
|
568
|
-
configProvider.set(disableDatastoreSweepKey, testCase.disableDataStoreSweep === "viaConfigProvider");
|
|
569
|
-
gc = createGcWithPrivateMembers({
|
|
570
|
-
gcFeatureMatrix: { gcGeneration: 1 },
|
|
571
|
-
sessionExpiryTimeoutMs: defaultSessionExpiryDurationMs,
|
|
572
|
-
} /* metadata */, {
|
|
573
|
-
[gcDisableDataStoreSweepOptionName]: testCase.disableDataStoreSweep === "viaGCOption",
|
|
574
|
-
enableGCSweep: testCase.sweepEnabled_session ? true : undefined,
|
|
575
|
-
[gcGenerationOptionName]: testCase.sweepEnabled_doc ? 1 : 2,
|
|
576
|
-
} /* gcOptions */);
|
|
577
|
-
assert.equal(gc.configs.shouldRunGC, testCase.shouldRunGC, "PRECONDITION: shouldRunGC set incorrectly");
|
|
578
|
-
assert.equal(gc.configs.sweepEnabled, testCase.sweepEnabled_doc, "PRECONDITION: sweepEnabled set incorrectly");
|
|
579
|
-
assert.equal(gc.configs.shouldRunSweep, testCase.expectedShouldRunSweep, `shouldRunSweep not set as expected`);
|
|
580
|
-
});
|
|
581
|
-
});
|
|
582
|
-
});
|
|
583
|
-
describe("inactiveTimeoutMs", () => {
|
|
584
|
-
beforeEach(() => {
|
|
585
|
-
// Remove setting added in outer describe block
|
|
586
|
-
configProvider.set("Fluid.GarbageCollection.TestOverride.InactiveTimeoutMs", undefined);
|
|
587
|
-
});
|
|
588
|
-
const testCases = [
|
|
589
|
-
{ testOverride: 123, option: 456, expectedResult: 123 },
|
|
590
|
-
{ option: 456, expectedResult: 456 },
|
|
591
|
-
{ expectedResult: defaultInactiveTimeoutMs },
|
|
592
|
-
];
|
|
593
|
-
testCases.forEach((testCase) => {
|
|
594
|
-
it(`Test Case ${JSON.stringify(testCase)}`, () => {
|
|
595
|
-
configProvider.set("Fluid.GarbageCollection.TestOverride.InactiveTimeoutMs", testCase.testOverride);
|
|
596
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, {
|
|
597
|
-
inactiveTimeoutMs: testCase.option,
|
|
598
|
-
});
|
|
599
|
-
assert.equal(gc.configs.inactiveTimeoutMs, testCase.expectedResult, "inactiveTimeoutMs not set as expected");
|
|
600
|
-
});
|
|
601
|
-
});
|
|
602
|
-
it("inactiveTimeout must not be greater than tombstoneTimeout", () => {
|
|
603
|
-
configProvider.set("Fluid.GarbageCollection.TestOverride.InactiveTimeoutMs", Number.MAX_VALUE);
|
|
604
|
-
assert.throws(() => {
|
|
605
|
-
gc = createGcWithPrivateMembers();
|
|
606
|
-
}, (e) => e.errorType === "usageError", "inactiveTimeout must not be greater than tombstoneTimeout");
|
|
607
|
-
});
|
|
608
|
-
});
|
|
609
|
-
describe("sweepGracePeriodMs", () => {
|
|
610
|
-
const testCases = [
|
|
611
|
-
{ option: 123, expectedResult: 123 },
|
|
612
|
-
{ option: 0, expectedResult: 0 },
|
|
613
|
-
{ option: undefined, expectedResult: defaultSweepGracePeriodMs },
|
|
614
|
-
];
|
|
615
|
-
testCases.forEach((testCase) => {
|
|
616
|
-
it(`Test Case ${JSON.stringify(testCase)}`, () => {
|
|
617
|
-
gc = createGcWithPrivateMembers({} /* metadata */, {
|
|
618
|
-
sweepGracePeriodMs: testCase.option,
|
|
619
|
-
});
|
|
620
|
-
assert.equal(gc.configs.sweepGracePeriodMs, testCase.expectedResult);
|
|
621
|
-
});
|
|
622
|
-
});
|
|
623
|
-
it("sweepGracePeriodMs must be non-negative", () => {
|
|
624
|
-
assert.throws(() => {
|
|
625
|
-
gc = createGcWithPrivateMembers({} /* metadata */, {
|
|
626
|
-
sweepGracePeriodMs: -1,
|
|
627
|
-
});
|
|
628
|
-
}, (e) => e.errorType === "usageError", "sweepGracePeriodMs must be non-negative");
|
|
629
|
-
});
|
|
630
|
-
});
|
|
631
|
-
describe("testMode", () => {
|
|
632
|
-
const testCases = [
|
|
633
|
-
{ setting: true, option: false, expectedResult: true },
|
|
634
|
-
{ setting: false, option: true, expectedResult: false },
|
|
635
|
-
{ option: true, expectedResult: true },
|
|
636
|
-
{ expectedResult: false },
|
|
637
|
-
];
|
|
638
|
-
testCases.forEach((testCase) => {
|
|
639
|
-
it(`Test Case ${JSON.stringify(testCase)}`, () => {
|
|
640
|
-
configProvider.set(gcTestModeKey, testCase.setting);
|
|
641
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, {
|
|
642
|
-
runGCInTestMode: testCase.option,
|
|
643
|
-
});
|
|
644
|
-
assert.equal(gc.configs.testMode, testCase.expectedResult, "testMode not set as expected");
|
|
645
|
-
});
|
|
646
|
-
});
|
|
647
|
-
});
|
|
648
|
-
});
|
|
649
|
-
describe("throwOnTombstoneLoad (using new container)", () => {
|
|
650
|
-
beforeEach(() => {
|
|
651
|
-
configProvider.set(testOverrideSessionExpiryMsKey, defaultSessionExpiryDurationMs); // Required for sweep to be enabled
|
|
652
|
-
});
|
|
653
|
-
it("gcDisableThrowOnTombstoneLoad true", () => {
|
|
654
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, { enableGCSweep: true, [gcDisableThrowOnTombstoneLoadOptionName]: true }, false /* isSummarizerClient */);
|
|
655
|
-
assert.equal(gc.configs.throwOnTombstoneLoad, false, "throwOnTombstoneLoad incorrect");
|
|
656
|
-
});
|
|
657
|
-
it("gcDisableThrowOnTombstoneLoad false", () => {
|
|
658
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, { enableGCSweep: true, [gcDisableThrowOnTombstoneLoadOptionName]: false }, false /* isSummarizerClient */);
|
|
659
|
-
assert.equal(gc.configs.throwOnTombstoneLoad, true, "throwOnTombstoneLoad incorrect");
|
|
660
|
-
});
|
|
661
|
-
it("gcDisableThrowOnTombstoneLoad undefined", () => {
|
|
662
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, {
|
|
663
|
-
enableGCSweep: true,
|
|
664
|
-
[gcDisableThrowOnTombstoneLoadOptionName]: undefined,
|
|
665
|
-
}, false /* isSummarizerClient */);
|
|
666
|
-
assert.equal(gc.configs.throwOnTombstoneLoad, true, "throwOnTombstoneLoad incorrect");
|
|
667
|
-
});
|
|
668
|
-
it("gcDisableThrowOnTombstoneLoad undefined - Sweep Disabled does not interfere", () => {
|
|
669
|
-
configProvider.set(runSweepKey, false); // Disable Sweep
|
|
670
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, { [gcDisableThrowOnTombstoneLoadOptionName]: undefined }, false /* isSummarizerClient */);
|
|
671
|
-
assert.equal(gc.configs.throwOnTombstoneLoad, true, "throwOnTombstoneLoad incorrect");
|
|
672
|
-
});
|
|
673
|
-
it("Old 'enable' option false (ignored)", () => {
|
|
674
|
-
const gcThrowOnTombstoneLoadOptionName_old = "gcThrowOnTombstoneLoad";
|
|
675
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, { enableGCSweep: true, [gcThrowOnTombstoneLoadOptionName_old]: false }, false /* isSummarizerClient */);
|
|
676
|
-
assert.equal(gc.configs.throwOnTombstoneLoad, true, "throwOnTombstoneLoad incorrect");
|
|
677
|
-
});
|
|
678
|
-
it("throwOnTombstoneLoad enabled via override", () => {
|
|
679
|
-
configProvider.set(throwOnTombstoneLoadOverrideKey, true);
|
|
680
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, { enableGCSweep: true, [gcDisableThrowOnTombstoneLoadOptionName]: true }, false /* isSummarizerClient */);
|
|
681
|
-
assert.equal(gc.configs.throwOnTombstoneLoad, true, "throwOnTombstoneLoad incorrect");
|
|
682
|
-
});
|
|
683
|
-
it("throwOnTombstoneLoad disabled via override", () => {
|
|
684
|
-
configProvider.set(throwOnTombstoneLoadOverrideKey, false);
|
|
685
|
-
gc = createGcWithPrivateMembers(undefined /* metadata */, { enableGCSweep: true, [gcDisableThrowOnTombstoneLoadOptionName]: false }, false /* isSummarizerClient */);
|
|
686
|
-
assert.equal(gc.configs.throwOnTombstoneLoad, false, "throwOnTombstoneLoad incorrect");
|
|
687
|
-
});
|
|
688
|
-
});
|
|
689
|
-
});
|
|
690
|
-
//# sourceMappingURL=gcConfigs.spec.js.map
|