@fluidframework/container-runtime 2.0.0-rc.2.0.1 → 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 +189 -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 +171 -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 +132 -108
- 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 +110 -53
- 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 +223 -167
- 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 +201 -97
- 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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fuzzUtils.js","sourceRoot":"","sources":["../../../src/test/fuzz/fuzzUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,4BAA4B,EAG5B,oBAAoB,GACpB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AA8B/E,MAAM,aAAa,GAAmD;IACrE,OAAO,EAAE;QACR,SAAS,EAAE,CAAC;QACZ,aAAa,EAAE,CAAC;QAChB,WAAW,EAAE,CAAC;QACd,QAAQ,EAAE,CAAC;KACX;CACD,CAAC;AAEF,MAAM,UAAU,4BAA4B,CAC3C,OAA6C;IAE7C,MAAM,SAAS,GAAG,KAAK,EAAE,MAA+B,EAAsB,EAAE,CAAC,CAAC;QACjF,IAAI,EAAE,WAAW;KACjB,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,KAAK,EAAE,MAA+B,EAA0B,EAAE,CAAC,CAAC;QACzF,IAAI,EAAE,eAAe;KACrB,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,KAAK,EAAE,MAA+B,EAAwB,EAAE,CAAC,CAAC;QACrF,IAAI,EAAE,aAAa;KACnB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,KAAK,EAAE,MAA+B,EAAqB,EAAE,CAAC,CAAC;QAC/E,IAAI,EAAE,UAAU;KAChB,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC;IAE/D,OAAO,4BAA4B,CAA+C;QACjF,CAAC,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC;QACpC,CAAC,aAAa,EAAE,aAAa,CAAC,aAAa,CAAC;QAC5C,CAAC,WAAW,EAAE,aAAa,CAAC,WAAW,CAAC;QACxC,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC;KAClC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAmE;IACxF,OAAO,EAAE,WAAW,EAAE;CACtB,CAAC;AAEF,SAAS,WAAW;IACnB,MAAM,OAAO,GACZ,CACC,WAAqD,EACV,EAAE,CAC9C,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QAC1B,MAAM,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACpC,KAAK,CAAC,uBAAuB,CAAC,kBAAkB,EAAE,CAAC;IACpD,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,oBAAoB,CAA+C;QAClF,SAAS,EAAE,KAAK,EAAE,KAA8B,EAAE,GAAc,EAAE,EAAE;YACnE,eAAe;YACf,KAAK,CAAC,gBAAgB,CAAC,SAAS,GAAG,KAAK,CAAC;YACzC,KAAK,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC;QACzC,CAAC;QACD,aAAa,EAAE,KAAK,EAAE,KAA8B,EAAE,GAAkB,EAAE,EAAE;YAC3E,eAAe;YACf,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC;YACnC,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,uBAAuB,CAAC,sBAAsB,CAC5E,IAAI,yBAAyB,EAAE,CAC/B,CAAC;QACH,CAAC;QACD,WAAW,EAAE,KAAK,EAAE,KAA8B,EAAE,GAAgB,EAAE,EAAE;YACvE,uGAAuG;YACvG,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;YAC5C,MAAM,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC;QAC1C,CAAC;QACD,QAAQ,EAAE,KAAK,EAAE,KAA8B,EAAE,GAAa,EAAE,EAAE;YACjE,sGAAsG;QACvG,CAAC;KACD,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\tcreateWeightedAsyncGenerator,\n\tAsyncGenerator,\n\tAsyncReducer,\n\tcombineReducersAsync,\n} from \"@fluid-private/stochastic-test-utils\";\nimport { MockFluidDataStoreRuntime } from \"@fluidframework/test-runtime-utils\";\nimport type { SummarizerFuzzModel, SummarizerFuzzTestState } from \"./summarizerFuzzSuite.js\";\n\ninterface Reconnect {\n\ttype: \"reconnect\";\n}\n\ninterface NewSummarizer {\n\ttype: \"newSummarizer\";\n}\n\ninterface SummaryNack {\n\ttype: \"summaryNack\";\n}\n\ninterface SubmitOp {\n\ttype: \"submitOp\";\n}\n\nexport type SummarizerOperation = Reconnect | NewSummarizer | SummaryNack | SubmitOp;\n\nexport interface ISummarizerOperationGenerationConfig {\n\tweights?: {\n\t\treconnect: number;\n\t\tnewSummarizer: number;\n\t\tsummaryNack: number;\n\t\tsubmitOp: number;\n\t};\n}\n\nconst defaultConfig: Required<ISummarizerOperationGenerationConfig> = {\n\tweights: {\n\t\treconnect: 1,\n\t\tnewSummarizer: 1,\n\t\tsummaryNack: 1,\n\t\tsubmitOp: 1,\n\t},\n};\n\nexport function summarizerOperationGenerator(\n\toptions: ISummarizerOperationGenerationConfig,\n): AsyncGenerator<SummarizerOperation, SummarizerFuzzTestState> {\n\tconst reconnect = async (_state: SummarizerFuzzTestState): Promise<Reconnect> => ({\n\t\ttype: \"reconnect\",\n\t});\n\n\tconst newSummarizer = async (_state: SummarizerFuzzTestState): Promise<NewSummarizer> => ({\n\t\ttype: \"newSummarizer\",\n\t});\n\n\tconst summaryNack = async (_state: SummarizerFuzzTestState): Promise<SummaryNack> => ({\n\t\ttype: \"summaryNack\",\n\t});\n\n\tconst submitOp = async (_state: SummarizerFuzzTestState): Promise<SubmitOp> => ({\n\t\ttype: \"submitOp\",\n\t});\n\n\tconst usableWeights = options.weights ?? defaultConfig.weights;\n\n\treturn createWeightedAsyncGenerator<SummarizerOperation, SummarizerFuzzTestState>([\n\t\t[reconnect, usableWeights.reconnect],\n\t\t[newSummarizer, usableWeights.newSummarizer],\n\t\t[summaryNack, usableWeights.summaryNack],\n\t\t[submitOp, usableWeights.submitOp],\n\t]);\n}\n\nexport const baseModel: Omit<SummarizerFuzzModel, \"workloadName\" | \"generatorFactory\"> = {\n\treducer: makeReducer(),\n};\n\nfunction makeReducer(): AsyncReducer<SummarizerOperation, SummarizerFuzzTestState> {\n\tconst wrapper =\n\t\t<T>(\n\t\t\tbaseReducer: AsyncReducer<T, SummarizerFuzzTestState>,\n\t\t): AsyncReducer<T, SummarizerFuzzTestState> =>\n\t\tasync (state, operation) => {\n\t\t\tawait baseReducer(state, operation);\n\t\t\tstate.containerRuntimeFactory.processAllMessages();\n\t\t};\n\n\tconst reducer = combineReducersAsync<SummarizerOperation, SummarizerFuzzTestState>({\n\t\treconnect: async (state: SummarizerFuzzTestState, _op: Reconnect) => {\n\t\t\t// TODO AB#6954\n\t\t\tstate.containerRuntime.connected = false;\n\t\t\tstate.containerRuntime.connected = true;\n\t\t},\n\t\tnewSummarizer: async (state: SummarizerFuzzTestState, _op: NewSummarizer) => {\n\t\t\t// TODO AB#6954\n\t\t\tstate.containerRuntime.disposeFn();\n\t\t\tstate.containerRuntime = state.containerRuntimeFactory.createContainerRuntime(\n\t\t\t\tnew MockFluidDataStoreRuntime(),\n\t\t\t);\n\t\t},\n\t\tsummaryNack: async (state: SummarizerFuzzTestState, _op: SummaryNack) => {\n\t\t\t// TODO AB#6954: not sure if it deadlocks between needing to process the SummaryNack and waiting for it\n\t\t\tstate.containerRuntime.prepareSummaryNack();\n\t\t\tawait state.containerRuntime.summarize();\n\t\t},\n\t\tsubmitOp: async (state: SummarizerFuzzTestState, _op: SubmitOp) => {\n\t\t\t// TODO AB#6954: Need to move things around package-wise since DDS Factories are in different packages\n\t\t},\n\t});\n\n\treturn wrapper(reducer);\n}\n"]}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
import { takeAsync } from "@fluid-private/stochastic-test-utils";
|
|
6
|
-
import { summarizerOperationGenerator, baseModel } from "./fuzzUtils.js";
|
|
7
|
-
import { createSummarizerFuzzSuite } from "./summarizerFuzzSuite.js";
|
|
8
|
-
/**
|
|
9
|
-
* Summarizer fuzz test should test that we eventually recover and send a summary successfully.
|
|
10
|
-
* For DDS, we test for eventual consistency. For summarizer, we could test for eventual recovery.
|
|
11
|
-
* After performing operations (i.e. disconnects, summaryNacks, ops from other clients, etc.) we should:
|
|
12
|
-
* - start a fresh summarizer
|
|
13
|
-
* - attempt a summary
|
|
14
|
-
* If the system doesn't recover properly, then we have a bug to fix.
|
|
15
|
-
*/
|
|
16
|
-
describe("Summarizer fuzz testing", () => {
|
|
17
|
-
const model = {
|
|
18
|
-
...baseModel,
|
|
19
|
-
workloadName: "summarizer",
|
|
20
|
-
generatorFactory: () => takeAsync(1, summarizerOperationGenerator({
|
|
21
|
-
weights: {
|
|
22
|
-
reconnect: 2,
|
|
23
|
-
newSummarizer: 2,
|
|
24
|
-
summaryNack: 2,
|
|
25
|
-
submitOp: 2,
|
|
26
|
-
},
|
|
27
|
-
})),
|
|
28
|
-
};
|
|
29
|
-
createSummarizerFuzzSuite(model);
|
|
30
|
-
});
|
|
31
|
-
//# sourceMappingURL=summarizer.fuzz.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"summarizer.fuzz.spec.js","sourceRoot":"","sources":["../../../src/test/fuzz/summarizer.fuzz.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,OAAO,EAAE,4BAA4B,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE;;;;;;;GAOG;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACxC,MAAM,KAAK,GAAG;QACb,GAAG,SAAS;QACZ,YAAY,EAAE,YAAY;QAC1B,gBAAgB,EAAE,GAAG,EAAE,CACtB,SAAS,CACR,CAAC,EACD,4BAA4B,CAAC;YAC5B,OAAO,EAAE;gBACR,SAAS,EAAE,CAAC;gBACZ,aAAa,EAAE,CAAC;gBAChB,WAAW,EAAE,CAAC;gBACd,QAAQ,EAAE,CAAC;aACX;SACD,CAAC,CACF;KACF,CAAC;IAEF,yBAAyB,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { takeAsync } from \"@fluid-private/stochastic-test-utils\";\nimport { summarizerOperationGenerator, baseModel } from \"./fuzzUtils.js\";\nimport { createSummarizerFuzzSuite } from \"./summarizerFuzzSuite.js\";\n\n/**\n * Summarizer fuzz test should test that we eventually recover and send a summary successfully.\n * For DDS, we test for eventual consistency. For summarizer, we could test for eventual recovery.\n * After performing operations (i.e. disconnects, summaryNacks, ops from other clients, etc.) we should:\n * - start a fresh summarizer\n * - attempt a summary\n * If the system doesn't recover properly, then we have a bug to fix.\n */\n\ndescribe(\"Summarizer fuzz testing\", () => {\n\tconst model = {\n\t\t...baseModel,\n\t\tworkloadName: \"summarizer\",\n\t\tgeneratorFactory: () =>\n\t\t\ttakeAsync(\n\t\t\t\t1,\n\t\t\t\tsummarizerOperationGenerator({\n\t\t\t\t\tweights: {\n\t\t\t\t\t\treconnect: 2,\n\t\t\t\t\t\tnewSummarizer: 2,\n\t\t\t\t\t\tsummaryNack: 2,\n\t\t\t\t\t\tsubmitOp: 2,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t),\n\t};\n\n\tcreateSummarizerFuzzSuite(model);\n});\n"]}
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
import { MockContainerRuntimeFactoryForReconnection, MockContainerRuntimeForReconnection, } from "@fluidframework/test-runtime-utils";
|
|
6
|
-
import { TypedEventEmitter } from "@fluid-internal/client-utils";
|
|
7
|
-
import { createChildLogger, raiseConnectedEvent, } from "@fluidframework/telemetry-utils";
|
|
8
|
-
import { MessageType, SummaryType, } from "@fluidframework/protocol-definitions";
|
|
9
|
-
import { mergeStats } from "@fluidframework/runtime-utils";
|
|
10
|
-
import { Summarizer, SummaryManager, SummaryCollection, RunWhileConnectedCoordinator, } from "../../summary/index.js";
|
|
11
|
-
export class MockContainerRuntimeFactoryForSummarizer extends MockContainerRuntimeFactoryForReconnection {
|
|
12
|
-
createContainerRuntime(dataStoreRuntime, overrides) {
|
|
13
|
-
const containerRuntime = new MockContainerRuntimeForSummarizer(dataStoreRuntime, this, this.runtimeOptions, overrides);
|
|
14
|
-
this.runtimes.add(containerRuntime);
|
|
15
|
-
return containerRuntime;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
const DefaultSummaryConfiguration = {
|
|
19
|
-
state: "disableHeuristics",
|
|
20
|
-
maxAckWaitTime: 3 * 60 * 1000,
|
|
21
|
-
maxOpsSinceLastSummary: 7000,
|
|
22
|
-
initialSummarizerDelayMs: 5 * 1000, // 5 secs.
|
|
23
|
-
};
|
|
24
|
-
export class MockContainerRuntimeForSummarizer extends MockContainerRuntimeForReconnection {
|
|
25
|
-
constructor(dataStoreRuntime, factory, runtimeOptions = {}, overrides) {
|
|
26
|
-
super(dataStoreRuntime, factory, runtimeOptions, overrides);
|
|
27
|
-
this.logger = createChildLogger();
|
|
28
|
-
this.disposed = false;
|
|
29
|
-
this.deltaManager.on("op", (message) => {
|
|
30
|
-
this.emit("op", message);
|
|
31
|
-
});
|
|
32
|
-
this.summarizerClientElection = new MockSummarizerClientElection(this.clientId);
|
|
33
|
-
this.connectedState = new MockConnectedState(this.logger, this.clientId);
|
|
34
|
-
this.summaryCollection = new SummaryCollection(this.deltaManager, this.logger);
|
|
35
|
-
const summaryConfiguration = {
|
|
36
|
-
...DefaultSummaryConfiguration,
|
|
37
|
-
...runtimeOptions.summaryConfiguration,
|
|
38
|
-
};
|
|
39
|
-
this.summarizer = new Summarizer(this /* summarizerRuntime */, () => summaryConfiguration /* configurationGetter */, this /* ISummarizerInternalsProvider */, {} /* handleContext */, this.summaryCollection, async (runtime) => RunWhileConnectedCoordinator.create(runtime, () => this.deltaManager.active));
|
|
40
|
-
this.summaryManager = new SummaryManager(this.summarizerClientElection, this.connectedState, this.summaryCollection, this.logger, async () => this.summarizer, new MockThrottler());
|
|
41
|
-
this.summaryManager.start();
|
|
42
|
-
}
|
|
43
|
-
/** Prepare a SummaryNack to be sent by the server */
|
|
44
|
-
prepareSummaryNack() {
|
|
45
|
-
const contents = {
|
|
46
|
-
summaryProposal: {
|
|
47
|
-
summarySequenceNumber: this.deltaManager.lastSequenceNumber,
|
|
48
|
-
},
|
|
49
|
-
};
|
|
50
|
-
this.deltaManager.prepareInboundResponse(MessageType.SummaryNack, contents);
|
|
51
|
-
}
|
|
52
|
-
/** Call on the Summarizer object to summarize */
|
|
53
|
-
async summarize() {
|
|
54
|
-
const result = this.summarizer.summarizeOnDemand({
|
|
55
|
-
reason: "fuzzTest",
|
|
56
|
-
retryOnFailure: false,
|
|
57
|
-
});
|
|
58
|
-
return Promise.all([
|
|
59
|
-
result.summarySubmitted,
|
|
60
|
-
result.summaryOpBroadcasted,
|
|
61
|
-
result.receivedSummaryAckOrNack,
|
|
62
|
-
]);
|
|
63
|
-
}
|
|
64
|
-
async submitSummary(options) {
|
|
65
|
-
const summaryMessage = {
|
|
66
|
-
handle: "",
|
|
67
|
-
head: "",
|
|
68
|
-
message: "",
|
|
69
|
-
parents: [],
|
|
70
|
-
};
|
|
71
|
-
const referenceSequenceNumber = this.deltaManager.lastSequenceNumber;
|
|
72
|
-
const summarizeMessage = {
|
|
73
|
-
type: MessageType.Summarize,
|
|
74
|
-
clientSequenceNumber: 0,
|
|
75
|
-
referenceSequenceNumber,
|
|
76
|
-
contents: summaryMessage,
|
|
77
|
-
};
|
|
78
|
-
this.deltaManager.inbound.push({
|
|
79
|
-
...summarizeMessage,
|
|
80
|
-
clientId: this.clientId,
|
|
81
|
-
sequenceNumber: 0,
|
|
82
|
-
minimumSequenceNumber: 0,
|
|
83
|
-
timestamp: 0,
|
|
84
|
-
});
|
|
85
|
-
this.deltaManager.outbound.push([summarizeMessage]);
|
|
86
|
-
const summaryStats = {
|
|
87
|
-
...mergeStats(),
|
|
88
|
-
dataStoreCount: 1,
|
|
89
|
-
summarizedDataStoreCount: 1,
|
|
90
|
-
summaryNumber: 1,
|
|
91
|
-
};
|
|
92
|
-
return {
|
|
93
|
-
stage: "submit",
|
|
94
|
-
handle: "",
|
|
95
|
-
clientSequenceNumber: -1,
|
|
96
|
-
referenceSequenceNumber,
|
|
97
|
-
minimumSequenceNumber: -1,
|
|
98
|
-
submitOpDuration: 0,
|
|
99
|
-
uploadDuration: 0,
|
|
100
|
-
generateDuration: 0,
|
|
101
|
-
forcedFullTree: false,
|
|
102
|
-
summaryTree: {
|
|
103
|
-
type: SummaryType.Tree,
|
|
104
|
-
tree: {},
|
|
105
|
-
},
|
|
106
|
-
summaryStats,
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
async refreshLatestSummaryAck(options) {
|
|
110
|
-
// Do nothing
|
|
111
|
-
}
|
|
112
|
-
setConnectedState(value) {
|
|
113
|
-
super.setConnectedState(value);
|
|
114
|
-
this.connectedState.setConnectedState(value, this.clientId);
|
|
115
|
-
this.summarizerClientElection.setClientId(this.clientId);
|
|
116
|
-
}
|
|
117
|
-
closeFn() {
|
|
118
|
-
this.disposeFn();
|
|
119
|
-
}
|
|
120
|
-
disposeFn() {
|
|
121
|
-
this.connected = false;
|
|
122
|
-
this.disposed = true;
|
|
123
|
-
this.summaryManager.dispose();
|
|
124
|
-
this.summarizer.dispose();
|
|
125
|
-
this.deltaManager.dispose();
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
class MockSummarizerClientElection extends TypedEventEmitter {
|
|
129
|
-
constructor(clientId) {
|
|
130
|
-
super();
|
|
131
|
-
this.setClientId(clientId);
|
|
132
|
-
}
|
|
133
|
-
setClientId(clientId) {
|
|
134
|
-
this.electedClientId = clientId;
|
|
135
|
-
this.electedParentId = clientId;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
class MockConnectedState extends TypedEventEmitter {
|
|
139
|
-
constructor(logger, clientId) {
|
|
140
|
-
super();
|
|
141
|
-
this.logger = logger;
|
|
142
|
-
this.clientId = clientId;
|
|
143
|
-
this.connected = false;
|
|
144
|
-
}
|
|
145
|
-
setConnectedState(connected, clientId) {
|
|
146
|
-
if (this.connected === connected) {
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
this.clientId = clientId;
|
|
150
|
-
raiseConnectedEvent(this.logger, this, connected, clientId);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
class MockThrottler {
|
|
154
|
-
constructor() {
|
|
155
|
-
this.getDelay = () => 0;
|
|
156
|
-
this.numAttempts = 3;
|
|
157
|
-
this.delayWindowMs = 0;
|
|
158
|
-
this.maxDelayMs = 0;
|
|
159
|
-
this.delayFn = () => 0;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
//# sourceMappingURL=summarizerFuzzMocks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"summarizerFuzzMocks.js","sourceRoot":"","sources":["../../../src/test/fuzz/summarizerFuzzMocks.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 {\n\tMockContainerRuntimeFactoryForReconnection,\n\tMockContainerRuntimeForReconnection,\n\ttype IMockContainerRuntimeOptions,\n\tMockFluidDataStoreRuntime,\n} from \"@fluidframework/test-runtime-utils\";\nimport { TypedEventEmitter } from \"@fluid-internal/client-utils\";\nimport {\n\tcreateChildLogger,\n\traiseConnectedEvent,\n\ttype ITelemetryLoggerExt,\n} from \"@fluidframework/telemetry-utils\";\nimport {\n\tMessageType,\n\ttype ISequencedDocumentMessage,\n\ttype ISummaryContent,\n\tSummaryType,\n\ttype ISummaryNack,\n\ttype IDocumentMessage,\n} from \"@fluidframework/protocol-definitions\";\nimport { mergeStats } from \"@fluidframework/runtime-utils\";\nimport { type ISummaryConfiguration } from \"../../index.js\";\nimport {\n\tIConnectableRuntime,\n\tSummarizer,\n\tISummarizerClientElectionEvents,\n\tSummaryManager,\n\tISummarizerClientElection,\n\ttype IConnectedState,\n\ttype IConnectedEvents,\n\tSummaryCollection,\n\ttype ISummarizerRuntime,\n\ttype ISummarizerInternalsProvider,\n\ttype ISubmitSummaryOptions,\n\ttype SubmitSummaryResult,\n\ttype IRefreshSummaryAckOptions,\n\tRunWhileConnectedCoordinator,\n\ttype IGeneratedSummaryStats,\n} from \"../../summary/index.js\";\nimport type { IThrottler } from \"../../throttler.js\";\n\nexport class MockContainerRuntimeFactoryForSummarizer extends MockContainerRuntimeFactoryForReconnection {\n\toverride createContainerRuntime(\n\t\tdataStoreRuntime: MockFluidDataStoreRuntime,\n\t\toverrides?: { minimumSequenceNumber?: number },\n\t): MockContainerRuntimeForSummarizer {\n\t\tconst containerRuntime = new MockContainerRuntimeForSummarizer(\n\t\t\tdataStoreRuntime,\n\t\t\tthis,\n\t\t\tthis.runtimeOptions,\n\t\t\toverrides,\n\t\t);\n\t\tthis.runtimes.add(containerRuntime);\n\t\treturn containerRuntime;\n\t}\n}\n\nexport interface IMockContainerRuntimeForSummarizerOptions extends IMockContainerRuntimeOptions {\n\tsummaryConfiguration?: ISummaryConfiguration;\n}\n\nconst DefaultSummaryConfiguration: ISummaryConfiguration = {\n\tstate: \"disableHeuristics\",\n\tmaxAckWaitTime: 3 * 60 * 1000, // 3 mins.\n\tmaxOpsSinceLastSummary: 7000,\n\tinitialSummarizerDelayMs: 5 * 1000, // 5 secs.\n};\n\nexport class MockContainerRuntimeForSummarizer\n\textends MockContainerRuntimeForReconnection\n\timplements ISummarizerRuntime, ISummarizerInternalsProvider\n{\n\tpublic readonly logger = createChildLogger();\n\tpublic readonly summarizerClientId: string | undefined;\n\tpublic readonly summarizer: Summarizer;\n\n\tprivate readonly summaryManager: SummaryManager;\n\tprivate readonly connectedState: MockConnectedState;\n\tprivate readonly summaryCollection: SummaryCollection;\n\tprivate readonly summarizerClientElection: MockSummarizerClientElection;\n\n\tconstructor(\n\t\tdataStoreRuntime: MockFluidDataStoreRuntime,\n\t\tfactory: MockContainerRuntimeFactoryForSummarizer,\n\t\truntimeOptions: IMockContainerRuntimeForSummarizerOptions = {},\n\t\toverrides?: { minimumSequenceNumber?: number },\n\t) {\n\t\tsuper(dataStoreRuntime, factory, runtimeOptions, overrides);\n\n\t\tthis.deltaManager.on(\"op\", (message: ISequencedDocumentMessage) => {\n\t\t\tthis.emit(\"op\", message);\n\t\t});\n\n\t\tthis.summarizerClientElection = new MockSummarizerClientElection(this.clientId);\n\t\tthis.connectedState = new MockConnectedState(this.logger, this.clientId);\n\t\tthis.summaryCollection = new SummaryCollection(this.deltaManager, this.logger);\n\n\t\tconst summaryConfiguration: ISummaryConfiguration = {\n\t\t\t...DefaultSummaryConfiguration,\n\t\t\t...runtimeOptions.summaryConfiguration,\n\t\t};\n\n\t\tthis.summarizer = new Summarizer(\n\t\t\tthis /* summarizerRuntime */,\n\t\t\t() => summaryConfiguration /* configurationGetter */,\n\t\t\tthis /* ISummarizerInternalsProvider */,\n\t\t\t{} as any /* handleContext */,\n\t\t\tthis.summaryCollection,\n\t\t\tasync (runtime: IConnectableRuntime) =>\n\t\t\t\tRunWhileConnectedCoordinator.create(runtime, () => this.deltaManager.active),\n\t\t);\n\n\t\tthis.summaryManager = new SummaryManager(\n\t\t\tthis.summarizerClientElection,\n\t\t\tthis.connectedState,\n\t\t\tthis.summaryCollection,\n\t\t\tthis.logger,\n\t\t\tasync () => this.summarizer,\n\t\t\tnew MockThrottler(),\n\t\t);\n\t\tthis.summaryManager.start();\n\t}\n\n\t/** Prepare a SummaryNack to be sent by the server */\n\tpublic prepareSummaryNack() {\n\t\tconst contents: ISummaryNack = {\n\t\t\tsummaryProposal: {\n\t\t\t\tsummarySequenceNumber: this.deltaManager.lastSequenceNumber,\n\t\t\t},\n\t\t};\n\t\tthis.deltaManager.prepareInboundResponse(MessageType.SummaryNack, contents);\n\t}\n\n\t/** Call on the Summarizer object to summarize */\n\tpublic async summarize() {\n\t\tconst result = this.summarizer.summarizeOnDemand({\n\t\t\treason: \"fuzzTest\",\n\t\t\tretryOnFailure: false,\n\t\t});\n\t\treturn Promise.all([\n\t\t\tresult.summarySubmitted,\n\t\t\tresult.summaryOpBroadcasted,\n\t\t\tresult.receivedSummaryAckOrNack,\n\t\t]);\n\t}\n\n\tpublic async submitSummary(options: ISubmitSummaryOptions): Promise<SubmitSummaryResult> {\n\t\tconst summaryMessage: ISummaryContent = {\n\t\t\thandle: \"\",\n\t\t\thead: \"\",\n\t\t\tmessage: \"\",\n\t\t\tparents: [],\n\t\t};\n\t\tconst referenceSequenceNumber = this.deltaManager.lastSequenceNumber;\n\n\t\tconst summarizeMessage: IDocumentMessage = {\n\t\t\ttype: MessageType.Summarize,\n\t\t\tclientSequenceNumber: 0,\n\t\t\treferenceSequenceNumber,\n\t\t\tcontents: summaryMessage,\n\t\t};\n\t\tthis.deltaManager.inbound.push({\n\t\t\t...summarizeMessage,\n\t\t\tclientId: this.clientId,\n\t\t\tsequenceNumber: 0,\n\t\t\tminimumSequenceNumber: 0,\n\t\t\ttimestamp: 0,\n\t\t});\n\t\tthis.deltaManager.outbound.push([summarizeMessage]);\n\n\t\tconst summaryStats: IGeneratedSummaryStats = {\n\t\t\t...mergeStats(),\n\t\t\tdataStoreCount: 1,\n\t\t\tsummarizedDataStoreCount: 1,\n\t\t\tsummaryNumber: 1,\n\t\t};\n\n\t\treturn {\n\t\t\tstage: \"submit\",\n\t\t\thandle: \"\",\n\t\t\tclientSequenceNumber: -1,\n\t\t\treferenceSequenceNumber,\n\t\t\tminimumSequenceNumber: -1,\n\t\t\tsubmitOpDuration: 0,\n\t\t\tuploadDuration: 0,\n\t\t\tgenerateDuration: 0,\n\t\t\tforcedFullTree: false,\n\t\t\tsummaryTree: {\n\t\t\t\ttype: SummaryType.Tree,\n\t\t\t\ttree: {},\n\t\t\t},\n\t\t\tsummaryStats,\n\t\t};\n\t}\n\n\tpublic async refreshLatestSummaryAck(options: IRefreshSummaryAckOptions): Promise<void> {\n\t\t// Do nothing\n\t}\n\n\tpublic setConnectedState(value: boolean) {\n\t\tsuper.setConnectedState(value);\n\n\t\tthis.connectedState.setConnectedState(value, this.clientId);\n\t\tthis.summarizerClientElection.setClientId(this.clientId);\n\t}\n\n\tpublic closeFn() {\n\t\tthis.disposeFn();\n\t}\n\n\tpublic disposed: boolean = false;\n\tpublic disposeFn() {\n\t\tthis.connected = false;\n\t\tthis.disposed = true;\n\t\tthis.summaryManager.dispose();\n\t\tthis.summarizer.dispose();\n\t\tthis.deltaManager.dispose();\n\t}\n}\n\nclass MockSummarizerClientElection\n\textends TypedEventEmitter<ISummarizerClientElectionEvents>\n\timplements ISummarizerClientElection\n{\n\tpublic electedClientId: string | undefined;\n\tpublic electedParentId: string | undefined;\n\n\tconstructor(clientId: string) {\n\t\tsuper();\n\t\tthis.setClientId(clientId);\n\t}\n\n\tpublic setClientId(clientId: string) {\n\t\tthis.electedClientId = clientId;\n\t\tthis.electedParentId = clientId;\n\t}\n}\n\nclass MockConnectedState extends TypedEventEmitter<IConnectedEvents> implements IConnectedState {\n\tpublic connected: boolean = false;\n\n\tconstructor(\n\t\tprivate readonly logger: ITelemetryLoggerExt,\n\t\tpublic clientId: string,\n\t) {\n\t\tsuper();\n\t}\n\n\tpublic setConnectedState(connected: boolean, clientId: string): void {\n\t\tif (this.connected === connected) {\n\t\t\treturn;\n\t\t}\n\t\tthis.clientId = clientId;\n\n\t\traiseConnectedEvent(this.logger, this, connected, clientId);\n\t}\n}\n\nclass MockThrottler implements IThrottler {\n\tpublic getDelay = () => 0;\n\tpublic numAttempts = 3;\n\tpublic delayWindowMs = 0;\n\tpublic maxDelayMs = 0;\n\tpublic delayFn = () => 0;\n}\n"]}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
/* eslint-disable import/no-nodejs-modules */
|
|
6
|
-
import { strict as assert } from "assert";
|
|
7
|
-
import { mkdirSync, readFileSync } from "fs";
|
|
8
|
-
import path from "path";
|
|
9
|
-
import { createFuzzDescribe, defaultOptions, asyncGeneratorFromArray, makeRandom, performFuzzActionsAsync, } from "@fluid-private/stochastic-test-utils";
|
|
10
|
-
import { MockFluidDataStoreRuntime } from "@fluidframework/test-runtime-utils";
|
|
11
|
-
import { TypedEventEmitter } from "@fluid-internal/client-utils";
|
|
12
|
-
import { MockContainerRuntimeFactoryForSummarizer, } from "./summarizerFuzzMocks.js";
|
|
13
|
-
/**
|
|
14
|
-
* @internal
|
|
15
|
-
*/
|
|
16
|
-
export const defaultSummarizerFuzzSuiteOptions = {
|
|
17
|
-
defaultTestCount: defaultOptions.defaultTestCount,
|
|
18
|
-
emitter: new TypedEventEmitter(),
|
|
19
|
-
only: [],
|
|
20
|
-
skip: [],
|
|
21
|
-
saveFailures: false,
|
|
22
|
-
parseOperations: (serialized) => JSON.parse(serialized),
|
|
23
|
-
};
|
|
24
|
-
export function createSummarizerFuzzSuite(model, providedOptions) {
|
|
25
|
-
const options = {
|
|
26
|
-
...defaultSummarizerFuzzSuiteOptions,
|
|
27
|
-
...providedOptions,
|
|
28
|
-
saveFailures: false,
|
|
29
|
-
};
|
|
30
|
-
const only = new Set(options.only);
|
|
31
|
-
const skip = new Set(options.skip);
|
|
32
|
-
Object.assign(options, { only, skip });
|
|
33
|
-
assert(isInternalOptions(options));
|
|
34
|
-
const describeFuzz = createFuzzDescribe({ defaultTestCount: options.defaultTestCount });
|
|
35
|
-
describeFuzz(model.workloadName, ({ testCount }) => {
|
|
36
|
-
const directory = getSaveDirectory(model, options);
|
|
37
|
-
before(() => {
|
|
38
|
-
if (directory !== undefined) {
|
|
39
|
-
mkdirSync(directory, { recursive: true });
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
for (let seed = 0; seed < testCount; seed++) {
|
|
43
|
-
runTest(model, options, seed, getSaveInfo(model, options, seed));
|
|
44
|
-
}
|
|
45
|
-
if (options.replay !== undefined) {
|
|
46
|
-
const seed = options.replay;
|
|
47
|
-
describe.only(`replay from file`, () => {
|
|
48
|
-
const saveInfo = getSaveInfo(model, options, seed);
|
|
49
|
-
assert(saveInfo !== undefined, "Cannot replay a file without a directory to save files in!");
|
|
50
|
-
const operations = options.parseOperations(readFileSync(saveInfo.filepath).toString());
|
|
51
|
-
const replayModel = {
|
|
52
|
-
...model,
|
|
53
|
-
// We lose some type safety here because the options interface isn't generic
|
|
54
|
-
generatorFactory: () => asyncGeneratorFromArray(operations),
|
|
55
|
-
};
|
|
56
|
-
runTest(replayModel, options, seed, undefined);
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Runs the provided Summarizer fuzz model. All functionality is already assumed to be mixed in.
|
|
63
|
-
* @privateRemarks This is currently file-exported for testing purposes, but it could be reasonable to
|
|
64
|
-
* expose at the package level if we want to expose some of the harness's building blocks.
|
|
65
|
-
*/
|
|
66
|
-
async function runTestForSeed(model, options, seed, saveInfo) {
|
|
67
|
-
const random = makeRandom(seed);
|
|
68
|
-
const containerRuntimeFactory = new MockContainerRuntimeFactoryForSummarizer(options.containerRuntimeOptions);
|
|
69
|
-
const containerRuntime = containerRuntimeFactory.createContainerRuntime(new MockFluidDataStoreRuntime());
|
|
70
|
-
const initialState = {
|
|
71
|
-
containerRuntimeFactory,
|
|
72
|
-
random,
|
|
73
|
-
containerRuntime,
|
|
74
|
-
};
|
|
75
|
-
options.emitter.emit("testStart", initialState);
|
|
76
|
-
const finalState = await performFuzzActionsAsync(model.generatorFactory(), model.reducer, initialState, saveInfo);
|
|
77
|
-
// TODO AB#6954: Validate we can summarize
|
|
78
|
-
options.emitter.emit("testEnd", finalState);
|
|
79
|
-
return finalState;
|
|
80
|
-
}
|
|
81
|
-
function runTest(model, options, seed, saveInfo) {
|
|
82
|
-
const itFn = options.only.has(seed) ? it.only : options.skip.has(seed) ? it.skip : it;
|
|
83
|
-
itFn(`seed ${seed}`, async () => {
|
|
84
|
-
const inCi = !!process.env.TF_BUILD;
|
|
85
|
-
await runTestForSeed(model, options, seed, inCi ? undefined : saveInfo);
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
function getSaveDirectory(model, options) {
|
|
89
|
-
if (!options.saveFailures) {
|
|
90
|
-
return undefined;
|
|
91
|
-
}
|
|
92
|
-
const workloadFriendly = model.workloadName.replace(/[\s_]+/g, "-").toLowerCase();
|
|
93
|
-
return path.join(options.saveFailures.directory, workloadFriendly);
|
|
94
|
-
}
|
|
95
|
-
function getSaveInfo(model, options, seed) {
|
|
96
|
-
const directory = getSaveDirectory(model, options);
|
|
97
|
-
if (!directory) {
|
|
98
|
-
return undefined;
|
|
99
|
-
}
|
|
100
|
-
const filepath = path.join(directory, `${seed}.json`);
|
|
101
|
-
return { saveOnFailure: true, filepath };
|
|
102
|
-
}
|
|
103
|
-
function isInternalOptions(options) {
|
|
104
|
-
return options.only instanceof Set && options.skip instanceof Set;
|
|
105
|
-
}
|
|
106
|
-
//# sourceMappingURL=summarizerFuzzSuite.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"summarizerFuzzSuite.js","sourceRoot":"","sources":["../../../src/test/fuzz/summarizerFuzzSuite.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/* eslint-disable import/no-nodejs-modules */\n\nimport { strict as assert } from \"assert\";\nimport { mkdirSync, readFileSync } from \"fs\";\nimport path from \"path\";\nimport {\n\tBaseFuzzTestState,\n\tcreateFuzzDescribe,\n\tdefaultOptions,\n\tAsyncGenerator,\n\tSaveInfo,\n\tasyncGeneratorFromArray,\n\tmakeRandom,\n\tperformFuzzActionsAsync,\n\tAsyncReducer,\n} from \"@fluid-private/stochastic-test-utils\";\nimport { MockFluidDataStoreRuntime } from \"@fluidframework/test-runtime-utils\";\nimport { TypedEventEmitter } from \"@fluid-internal/client-utils\";\nimport {\n\tIMockContainerRuntimeForSummarizerOptions,\n\tMockContainerRuntimeFactoryForSummarizer,\n\tMockContainerRuntimeForSummarizer,\n} from \"./summarizerFuzzMocks.js\";\nimport type { SummarizerOperation } from \"./fuzzUtils.js\";\n\nexport interface SummarizerFuzzTestState extends BaseFuzzTestState {\n\tcontainerRuntimeFactory: MockContainerRuntimeFactoryForSummarizer;\n\tcontainerRuntime: MockContainerRuntimeForSummarizer;\n}\n\nexport interface SummarizerFuzzModel {\n\tworkloadName: string;\n\tgeneratorFactory: () => AsyncGenerator<SummarizerOperation, SummarizerFuzzTestState>;\n\treducer: AsyncReducer<SummarizerOperation, SummarizerFuzzTestState>;\n}\n\n/**\n * @internal\n */\nexport interface SummarizerFuzzHarnessEvents {\n\t/**\n\t * Raised for each non-summarizer client created during fuzz test execution.\n\t */\n\t(event: \"clientCreate\", listener: (client: SummarizerFuzzTestState) => void);\n\n\t/**\n\t * Raised after creating the initialState but prior to performing the fuzzActions..\n\t */\n\t(event: \"testStart\", listener: (initialState: SummarizerFuzzTestState) => void);\n\n\t/**\n\t * Raised after all fuzzActions have been completed.\n\t */\n\t(event: \"testEnd\", listener: (finalState: SummarizerFuzzTestState) => void);\n}\n\n/**\n * @internal\n */\nexport interface SummarizerFuzzSuiteOptions {\n\t/**\n\t * Number of tests to generate for correctness modes (which are run in the PR gate).\n\t */\n\tdefaultTestCount: number;\n\n\t/**\n\t * Event emitter which allows hooking into interesting points of Summarizer harness execution.\n\t * Test authors that want to subscribe to any of these events should create a `TypedEventEmitter`,\n\t * do so, and pass it in when creating the suite.\n\t */\n\temitter: TypedEventEmitter<SummarizerFuzzHarnessEvents>;\n\n\t/**\n\t * Seed which should be replayed from disk.\n\t *\n\t * This option is intended for quick, by-hand minimization of failure JSON. As such, it adds a `.only`\n\t * to the corresponding replay test.\n\t */\n\treplay?: number;\n\n\t/**\n\t * Runs only the provided seeds.\n\t *\n\t * @example\n\t *\n\t * ```typescript\n\t * // Runs only seed 42 for the given model.\n\t * createSummarizerFuzzSuite(model, { only: [42] });\n\t * ```\n\t *\n\t * @remarks\n\t * If you prefer, a variant of the standard `.only` syntax works. See {@link (createSummarizerFuzzSuite:namespace).only}.\n\t */\n\tonly: Iterable<number>;\n\n\t/**\n\t * Skips the provided seeds.\n\t *\n\t * @example\n\t *\n\t * ```typescript\n\t * // Skips seed 42 for the given model.\n\t * createSummarizerFuzzSuite(model, { skip: [42] });\n\t * ```\n\t *\n\t * @remarks\n\t * If you prefer, a variant of the standard `.skip` syntax works. See {@link (createSummarizerFuzzSuite:namespace).skip}.\n\t */\n\tskip: Iterable<number>;\n\n\t/**\n\t * Whether failure files should be saved to disk, and if so, the directory in which they should be saved.\n\t * Each seed will be saved in a subfolder of this directory obtained by kebab-casing the model name.\n\t *\n\t * Turning on this feature is encouraged for quick minimization.\n\t */\n\tsaveFailures: false | { directory: string };\n\n\tcontainerRuntimeOptions?: IMockContainerRuntimeForSummarizerOptions;\n\n\tparseOperations: (serialized: string) => SummarizerOperation[];\n}\n\n/**\n * @internal\n */\nexport const defaultSummarizerFuzzSuiteOptions: SummarizerFuzzSuiteOptions = {\n\tdefaultTestCount: defaultOptions.defaultTestCount,\n\temitter: new TypedEventEmitter(),\n\tonly: [],\n\tskip: [],\n\tsaveFailures: false,\n\tparseOperations: (serialized: string) => JSON.parse(serialized) as SummarizerOperation[],\n};\n\nexport function createSummarizerFuzzSuite(\n\tmodel: SummarizerFuzzModel,\n\tprovidedOptions?: Partial<SummarizerFuzzSuiteOptions>,\n): void {\n\tconst options: SummarizerFuzzSuiteOptions = {\n\t\t...defaultSummarizerFuzzSuiteOptions,\n\t\t...providedOptions,\n\t\tsaveFailures: false,\n\t};\n\n\tconst only = new Set(options.only);\n\tconst skip = new Set(options.skip);\n\tObject.assign(options, { only, skip });\n\tassert(isInternalOptions(options));\n\n\tconst describeFuzz = createFuzzDescribe({ defaultTestCount: options.defaultTestCount });\n\tdescribeFuzz(model.workloadName, ({ testCount }) => {\n\t\tconst directory = getSaveDirectory(model, options);\n\t\tbefore(() => {\n\t\t\tif (directory !== undefined) {\n\t\t\t\tmkdirSync(directory, { recursive: true });\n\t\t\t}\n\t\t});\n\n\t\tfor (let seed = 0; seed < testCount; seed++) {\n\t\t\trunTest(model, options, seed, getSaveInfo(model, options, seed));\n\t\t}\n\n\t\tif (options.replay !== undefined) {\n\t\t\tconst seed = options.replay;\n\t\t\tdescribe.only(`replay from file`, () => {\n\t\t\t\tconst saveInfo = getSaveInfo(model, options, seed);\n\t\t\t\tassert(\n\t\t\t\t\tsaveInfo !== undefined,\n\t\t\t\t\t\"Cannot replay a file without a directory to save files in!\",\n\t\t\t\t);\n\t\t\t\tconst operations = options.parseOperations(\n\t\t\t\t\treadFileSync(saveInfo.filepath).toString(),\n\t\t\t\t);\n\n\t\t\t\tconst replayModel = {\n\t\t\t\t\t...model,\n\t\t\t\t\t// We lose some type safety here because the options interface isn't generic\n\t\t\t\t\tgeneratorFactory: (): AsyncGenerator<SummarizerOperation, unknown> =>\n\t\t\t\t\t\tasyncGeneratorFromArray(operations),\n\t\t\t\t};\n\t\t\t\trunTest(replayModel, options, seed, undefined);\n\t\t\t});\n\t\t}\n\t});\n}\n\n/**\n * Runs the provided Summarizer fuzz model. All functionality is already assumed to be mixed in.\n * @privateRemarks This is currently file-exported for testing purposes, but it could be reasonable to\n * expose at the package level if we want to expose some of the harness's building blocks.\n */\nasync function runTestForSeed(\n\tmodel: SummarizerFuzzModel,\n\toptions: Omit<SummarizerFuzzSuiteOptions, \"only\" | \"skip\">,\n\tseed: number,\n\tsaveInfo?: SaveInfo,\n): Promise<SummarizerFuzzTestState> {\n\tconst random = makeRandom(seed);\n\tconst containerRuntimeFactory = new MockContainerRuntimeFactoryForSummarizer(\n\t\toptions.containerRuntimeOptions,\n\t);\n\n\tconst containerRuntime = containerRuntimeFactory.createContainerRuntime(\n\t\tnew MockFluidDataStoreRuntime(),\n\t);\n\n\tconst initialState: SummarizerFuzzTestState = {\n\t\tcontainerRuntimeFactory,\n\t\trandom,\n\t\tcontainerRuntime,\n\t};\n\n\toptions.emitter.emit(\"testStart\", initialState);\n\n\tconst finalState = await performFuzzActionsAsync(\n\t\tmodel.generatorFactory(),\n\t\tmodel.reducer,\n\t\tinitialState,\n\t\tsaveInfo,\n\t);\n\n\t// TODO AB#6954: Validate we can summarize\n\n\toptions.emitter.emit(\"testEnd\", finalState);\n\n\treturn finalState;\n}\n\nfunction runTest(\n\tmodel: SummarizerFuzzModel,\n\toptions: InternalOptions,\n\tseed: number,\n\tsaveInfo: SaveInfo | undefined,\n): void {\n\tconst itFn = options.only.has(seed) ? it.only : options.skip.has(seed) ? it.skip : it;\n\titFn(`seed ${seed}`, async () => {\n\t\tconst inCi = !!process.env.TF_BUILD;\n\t\tawait runTestForSeed(model, options, seed, inCi ? undefined : saveInfo);\n\t});\n}\n\n/**\n * @internal\n */\ninterface HasWorkloadName {\n\tworkloadName: string;\n}\n\nfunction getSaveDirectory(\n\tmodel: HasWorkloadName,\n\toptions: SummarizerFuzzSuiteOptions,\n): string | undefined {\n\tif (!options.saveFailures) {\n\t\treturn undefined;\n\t}\n\tconst workloadFriendly = model.workloadName.replace(/[\\s_]+/g, \"-\").toLowerCase();\n\treturn path.join(options.saveFailures.directory, workloadFriendly);\n}\n\nfunction getSaveInfo(\n\tmodel: HasWorkloadName,\n\toptions: SummarizerFuzzSuiteOptions,\n\tseed: number,\n): SaveInfo | undefined {\n\tconst directory = getSaveDirectory(model, options);\n\tif (!directory) {\n\t\treturn undefined;\n\t}\n\tconst filepath = path.join(directory, `${seed}.json`);\n\treturn { saveOnFailure: true, filepath };\n}\n\ntype InternalOptions = Omit<SummarizerFuzzSuiteOptions, \"only\" | \"skip\"> & {\n\tonly: Set<number>;\n\tskip: Set<number>;\n};\n\nfunction isInternalOptions(options: SummarizerFuzzSuiteOptions): options is InternalOptions {\n\treturn options.only instanceof Set && options.skip instanceof Set;\n}\n"]}
|