@fluidframework/container-runtime 2.0.0-dev-rc.3.0.0.250606 → 2.0.0-dev-rc.3.0.0.253463
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/api-report/container-runtime.api.md +34 -33
- 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 +31 -23
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +81 -99
- package/dist/blobManager.js.map +1 -1
- package/dist/channelCollection.d.ts +3 -2
- package/dist/channelCollection.d.ts.map +1 -1
- package/dist/channelCollection.js +71 -71
- package/dist/channelCollection.js.map +1 -1
- package/dist/connectionTelemetry.d.ts +1 -1
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +16 -16
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/container-runtime-alpha.d.ts +64 -36
- package/dist/container-runtime-beta.d.ts +28 -28
- package/dist/container-runtime-public.d.ts +28 -28
- package/dist/container-runtime-untrimmed.d.ts +66 -38
- 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 +12 -8
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +177 -150
- 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 +7 -7
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +8 -8
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +60 -60
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js +11 -11
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/dataStoreRegistry.d.ts +1 -1
- package/dist/dataStoreRegistry.d.ts.map +1 -1
- package/dist/dataStoreRegistry.js +2 -2
- 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.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 +2 -1
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +20 -20
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.d.ts +1 -1
- 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 +3 -2
- 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 +1 -1
- 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/messageTypes.d.ts +2 -2
- package/dist/messageTypes.d.ts.map +1 -1
- 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 +1 -1
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +5 -5
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +12 -12
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js +7 -7
- package/dist/opLifecycle/opGroupingManager.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts +1 -1
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +17 -17
- 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 +13 -13
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/pendingStateManager.js +18 -18
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js +24 -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 +37 -6
- package/dist/summary/documentSchema.d.ts.map +1 -1
- package/dist/summary/documentSchema.js +58 -21
- package/dist/summary/documentSchema.js.map +1 -1
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js +7 -7
- package/dist/summary/orderedClientElection.js.map +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 +1 -1
- 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 +2 -1
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +12 -12
- package/dist/summary/summarizer.js.map +1 -1
- package/dist/summary/summarizerClientElection.d.ts.map +1 -1
- package/dist/summary/summarizerClientElection.js.map +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 +2 -1
- 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 +4 -2
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryCollection.js +7 -7
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +1 -1
- 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 +3 -2
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +16 -16
- package/dist/summary/summaryGenerator.js.map +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/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 +31 -23
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +46 -64
- package/lib/blobManager.js.map +1 -1
- package/lib/channelCollection.d.ts +3 -2
- package/lib/channelCollection.d.ts.map +1 -1
- package/lib/channelCollection.js +6 -6
- package/lib/channelCollection.js.map +1 -1
- package/lib/connectionTelemetry.d.ts +1 -1
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +2 -2
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/container-runtime-alpha.d.ts +64 -36
- package/lib/container-runtime-beta.d.ts +28 -28
- package/lib/container-runtime-public.d.ts +28 -28
- package/lib/container-runtime-untrimmed.d.ts +66 -38
- 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 +12 -8
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +56 -27
- 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 +2 -2
- package/lib/dataStore.js.map +1 -1
- package/lib/dataStoreContext.d.ts +8 -8
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +6 -6
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.d.ts.map +1 -1
- package/lib/dataStoreContexts.js +2 -2
- package/lib/dataStoreContexts.js.map +1 -1
- package/lib/dataStoreRegistry.d.ts +1 -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.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 +2 -1
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +4 -4
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcConfigs.d.ts +1 -1
- 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 +3 -2
- 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 +1 -1
- 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 +3 -1
- 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/messageTypes.d.ts +2 -2
- package/lib/messageTypes.d.ts.map +1 -1
- 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 +1 -1
- package/lib/opLifecycle/definitions.d.ts.map +1 -1
- package/lib/opLifecycle/definitions.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js +2 -2
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +2 -2
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/lib/opLifecycle/opGroupingManager.js +2 -2
- package/lib/opLifecycle/opGroupingManager.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts +1 -1
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +2 -2
- 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 +2 -2
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- 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.map +1 -1
- package/lib/pendingStateManager.js +2 -2
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/scheduleManager.d.ts.map +1 -1
- package/lib/scheduleManager.js +3 -3
- package/lib/scheduleManager.js.map +1 -1
- package/lib/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 +37 -6
- package/lib/summary/documentSchema.d.ts.map +1 -1
- package/lib/summary/documentSchema.js +48 -11
- package/lib/summary/documentSchema.js.map +1 -1
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js +2 -2
- package/lib/summary/orderedClientElection.js.map +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 +1 -1
- package/lib/summary/runningSummarizer.d.ts.map +1 -1
- package/lib/summary/runningSummarizer.js +2 -2
- package/lib/summary/runningSummarizer.js.map +1 -1
- package/lib/summary/summarizer.d.ts +2 -1
- package/lib/summary/summarizer.d.ts.map +1 -1
- package/lib/summary/summarizer.js +2 -2
- package/lib/summary/summarizer.js.map +1 -1
- package/lib/summary/summarizerClientElection.d.ts.map +1 -1
- package/lib/summary/summarizerClientElection.js.map +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 +2 -1
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.js +4 -4
- 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 +4 -2
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryCollection.js +1 -1
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryFormat.d.ts +1 -1
- 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 +3 -2
- package/lib/summary/summaryGenerator.d.ts.map +1 -1
- package/lib/summary/summaryGenerator.js +3 -3
- package/lib/summary/summaryGenerator.js.map +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/lib/tsdoc-metadata.json +11 -0
- package/package.json +18 -30
- package/src/batchTracker.ts +3 -2
- package/src/blobManager.ts +87 -56
- package/src/channelCollection.ts +14 -11
- package/src/connectionTelemetry.ts +4 -4
- package/src/containerHandleContext.ts +2 -1
- package/src/containerRuntime.ts +90 -58
- package/src/dataStore.ts +5 -3
- package/src/dataStoreContext.ts +16 -13
- package/src/dataStoreContexts.ts +4 -2
- package/src/dataStoreRegistry.ts +2 -2
- package/src/deltaManagerSummarizerProxy.ts +1 -1
- package/src/deltaScheduler.ts +2 -1
- package/src/error.ts +2 -2
- package/src/gc/garbageCollection.ts +8 -7
- package/src/gc/gcConfigs.ts +5 -8
- package/src/gc/gcDefinitions.ts +4 -4
- package/src/gc/gcHelpers.ts +21 -4
- package/src/gc/gcSummaryStateTracker.ts +5 -3
- package/src/gc/gcTelemetry.ts +7 -1
- package/src/gc/gcUnreferencedStateTracker.ts +3 -2
- package/src/gc/index.ts +1 -0
- package/src/messageTypes.ts +3 -2
- package/src/opLifecycle/batchManager.ts +1 -0
- package/src/opLifecycle/definitions.ts +2 -1
- package/src/opLifecycle/opCompressor.ts +4 -2
- package/src/opLifecycle/opDecompressor.ts +3 -2
- package/src/opLifecycle/opGroupingManager.ts +3 -2
- package/src/opLifecycle/opSplitter.ts +5 -3
- package/src/opLifecycle/outbox.ts +6 -3
- package/src/opLifecycle/remoteMessageProcessor.ts +2 -0
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +4 -4
- package/src/scheduleManager.ts +5 -4
- package/src/storageServiceWithAttachBlobs.ts +2 -2
- package/src/summary/documentSchema.ts +71 -12
- package/src/summary/orderedClientElection.ts +4 -6
- package/src/summary/runWhileConnectedCoordinator.ts +2 -1
- package/src/summary/runningSummarizer.ts +4 -2
- package/src/summary/summarizer.ts +5 -3
- package/src/summary/summarizerClientElection.ts +1 -0
- package/src/summary/summarizerHeuristics.ts +3 -1
- package/src/summary/summarizerNode/summarizerNode.ts +10 -8
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +3 -2
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +14 -6
- package/src/summary/summarizerTypes.ts +6 -2
- package/src/summary/summaryCollection.ts +1 -1
- package/src/summary/summaryFormat.ts +7 -8
- package/src/summary/summaryGenerator.ts +5 -8
- package/src/summary/summaryManager.ts +14 -11
- 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 -138
- package/lib/test/channelCollection.spec.js.map +0 -1
- package/lib/test/containerRuntime.spec.js +0 -1750
- package/lib/test/containerRuntime.spec.js.map +0 -1
- package/lib/test/dataStoreContext.spec.js +0 -771
- package/lib/test/dataStoreContext.spec.js.map +0 -1
- package/lib/test/dataStoreCreation.spec.js +0 -303
- 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/documentSchema.spec.js +0 -282
- package/lib/test/documentSchema.spec.js.map +0 -1
- package/lib/test/fuzz/fuzzUtils.js +0 -70
- package/lib/test/fuzz/fuzzUtils.js.map +0 -1
- package/lib/test/fuzz/summarizer.fuzz.spec.js +0 -33
- package/lib/test/fuzz/summarizer.fuzz.spec.js.map +0 -1
- package/lib/test/fuzz/summarizerFuzzMocks.js +0 -180
- package/lib/test/fuzz/summarizerFuzzMocks.js.map +0 -1
- package/lib/test/fuzz/summarizerFuzzSuite.js +0 -109
- package/lib/test/fuzz/summarizerFuzzSuite.js.map +0 -1
- package/lib/test/gc/garbageCollection.spec.js +0 -1464
- package/lib/test/gc/garbageCollection.spec.js.map +0 -1
- package/lib/test/gc/gcConfigs.spec.js +0 -689
- 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 -390
- 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 -202
- 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 -73
- package/lib/test/opLifecycle/opCompressor.spec.js.map +0 -1
- package/lib/test/opLifecycle/opDecompressor.spec.js +0 -223
- package/lib/test/opLifecycle/opDecompressor.spec.js.map +0 -1
- package/lib/test/opLifecycle/opSplitter.spec.js +0 -287
- package/lib/test/opLifecycle/opSplitter.spec.js.map +0 -1
- package/lib/test/opLifecycle/outbox.spec.js +0 -783
- package/lib/test/opLifecycle/outbox.spec.js.map +0 -1
- package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +0 -220
- 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 -182
- package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connectionTelemetry.js","sourceRoot":"","sources":["../src/connectionTelemetry.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+DAA2D;AAI3D,2DAAoD;AACpD,+EAI8C;AAC9C,qEAOyC;AAEzC;;GAEG;AACU,QAAA,gBAAgB,GAAG,IAAI,CAAC;AAgCrC,MAAM,eAAe;IA+BpB;;;;;;;OAOG;IACH;IACC;;;;;;OAMG;IACK,QAA4B;IACpC;;OAEG;IACc,YAAwE;IACzF;;OAEG;IACH,sBAA+D;IAC/D;;OAEG;IACH,MAA2B;QAZnB,aAAQ,GAAR,QAAQ,CAAoB;QAInB,iBAAY,GAAZ,YAAY,CAA4D;QA9ClF,yBAAoB,GAAW,CAAC,CAAC;QAGzC,sEAAsE;QACrD,sBAAiB,GAAG,IAAI,GAAG,EAMzC,CAAC;QAEI,oBAAe,GAAG,IAAI,CAAC;QAEd,aAAQ,GAAG,0BAAW,CAAC,GAAG,EAAE,CAAC;QACtC,wBAAmB,GAAG,CAAC,CAAC;QACxB,QAAG,GAAG,CAAC,CAAC;QAwCf,IAAI,CAAC,MAAM,GAAG,IAAA,mCAAiB,EAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEjE,MAAM,wBAAwB,GAAkB,CAAC,GAAG,EAAE;YACrD,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;YACpB,OAAO;gBACN,MAAM,EAAE,GAAG,EAAE;oBACZ,UAAU,EAAE,CAAC;oBACb,MAAM,YAAY,GACjB,UAAU,GAAG,eAAe,CAAC,yBAAyB,KAAK,CAAC,CAAC;oBAC9D,IAAI,YAAY,EAAE;wBACjB,UAAU,GAAG,CAAC,CAAC;qBACf;oBACD,OAAO,YAAY,CAAC;gBACrB,CAAC;aACD,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,IAAI,CAAC,kBAAkB,GAAG,IAAA,qCAAmB,EAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;QAEhF,4FAA4F;QAC5F,4GAA4G;QAC5G,wFAAwF;QACxF,IAAI,CAAC,eAAe,GAAG,IAAA,qCAAmB,EAAC,MAAM,CAAC,CAAC;QAEnD,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;QAE5E,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;QAEzE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE;YACtD,IAAI,SAAS,KAAK,SAAS,EAAE;gBAC5B,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC;gBAClE,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;gBACrB,IAAI,CAAC,mBAAmB,GAAG,0BAAW,CAAC,GAAG,EAAE,CAAC;gBAE7C,6DAA6D;gBAC7D,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;oBAClB,IAAI,CAAC,qBAAqB,EAAE,CAAC;iBAC7B;aACD;QACF,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YACvC,IAAI,CAAC,4BAA4B,GAAG,SAAS,CAAC;YAC9C,IAAI,CAAC,wCAAwC,GAAG,SAAS,CAAC;YAC1D,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;YACvC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;YAClD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;gBAC3B,IACC,GAAG,CAAC,IAAI,KAAK,kCAAW,CAAC,SAAS;oBAClC,CAAC,IAAI,CAAC,eAAe,CAAC,kBAAkB;wBACvC,IAAI,CAAC,wCAAwC,KAAK,GAAG,CAAC,oBAAoB,CAAC,EAC3E;oBACD,oEAAoE;oBACpE,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAE,CAAC;oBAC3E,IAAA,mBAAM,EACL,YAAY,KAAK,SAAS,EAC1B,KAAK,CAAC,uCAAuC,CAC7C,CAAC;oBACF,IAAA,mBAAM,EACL,YAAY,CAAC,iBAAiB,CAAC,qBAAqB,KAAK,SAAS,EAClE,KAAK,CAAC,iDAAiD,CACvD,CAAC;oBACF,IAAA,mBAAM,EACL,YAAY,CAAC,UAAU,CAAC,eAAe,KAAK,SAAS,EACrD,KAAK,CAAC,2CAA2C,CACjD,CAAC;oBACF,YAAY,CAAC,iBAAiB,CAAC,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAElE,IAAA,mBAAM,EACL,YAAY,CAAC,UAAU,CAAC,wBAAwB,KAAK,SAAS,EAC9D,KAAK,CAAC,oDAAoD,CAC1D,CAAC;oBAEF,IAAA,mBAAM,EACL,YAAY,CAAC,iBAAiB,CAAC,iBAAiB,KAAK,SAAS,EAC9D,KAAK,CAAC,6CAA6C,CACnD,CAAC;oBAEF,YAAY,CAAC,UAAU,CAAC,wBAAwB;wBAC/C,YAAY,CAAC,iBAAiB,CAAC,qBAAqB;4BACpD,YAAY,CAAC,iBAAiB,CAAC,iBAAiB,CAAC;iBAClD;aACD;QACF,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,OAAkC,EAAE,EAAE;YAC3E,IACC,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ;gBAClC,OAAO,CAAC,IAAI,KAAK,kCAAW,CAAC,SAAS;gBACtC,CAAC,IAAI,CAAC,eAAe,CAAC,kBAAkB;oBACvC,IAAI,CAAC,wCAAwC,KAAK,OAAO,CAAC,oBAAoB,CAAC,EAC/E;gBACD,yDAAyD;gBACzD,oEAAoE;gBACpE,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAE,CAAC;gBAC/E,IAAA,mBAAM,EAAC,YAAY,KAAK,SAAS,EAAE,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBAClF,IAAI,YAAY,CAAC,iBAAiB,CAAC,qBAAqB,KAAK,SAAS,EAAE;oBACvE,YAAY,CAAC,iBAAiB,CAAC,oBAAoB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBACjE,YAAY,CAAC,UAAU,CAAC,eAAe;wBACtC,YAAY,CAAC,iBAAiB,CAAC,oBAAoB;4BACnD,YAAY,CAAC,iBAAiB,CAAC,qBAAqB,CAAC;oBACtD,YAAY,CAAC,UAAU,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC;iBAC9E;aACD;QACF,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,QAAgB,EAAE,EAAE;YACxE,oCAAoC;YACpC,gGAAgG;YAChG,0GAA0G;YAC1G,uBAAuB;YACvB,4FAA4F;YAC5F,8BAA8B;YAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,GAAG,EAAE;gBAC9C,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC;oBAChC,SAAS,EAAE,wBAAwB;oBACnC,KAAK;oBACL,QAAQ;iBACR,CAAC,CAAC;aACH;QACF,CAAC,CAAC,CAAC;QAEH,sBAAsB,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;YACtD,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;QAC7B,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,qBAAqB;QAC5B,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC;YAChC,SAAS,EAAE,iBAAiB;YAC5B,QAAQ,EAAE,0BAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,mBAAmB;YACtD,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,mDAAmD;YACnD,aAAa,EAAE,IAAI,CAAC,eAAe;gBAClC,CAAC,CAAC,IAAA,4BAAU,EAAC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC;gBACtD,CAAC,CAAC,SAAS;YACZ,eAAe,EAAE,IAAI,CAAC,eAAe;SACrC,CAAC,CAAC;IACJ,CAAC;IAEO,cAAc,CAAC,OAAe;QACrC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAE3B,sCAAsC;QACtC,IAAI,OAAO,GAAG,IAAI,GAAG,EAAE,EAAE;YACxB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;gBAC1B,SAAS,EAAE,gBAAgB;gBAC3B,QAAQ,EAAE,OAAO;aACjB,CAAC,CAAC;SACH;QAED,6GAA6G;QAC7G,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAC7B,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC;gBAC5C,SAAS,EAAE,cAAc;gBACzB,QAAQ,EAAE,OAAO;aACjB,CAAC,CAAC;SACH;IACF,CAAC;IAEO,cAAc,CAAC,OAAyB;QAC/C,sEAAsE;QACtE,IACC,IAAI,CAAC,eAAe,CAAC,kBAAkB;YACvC,CAAC,IAAI,CAAC,wCAAwC,KAAK,SAAS;gBAC3D,OAAO,CAAC,oBAAoB,GAAG,eAAe,CAAC,sBAAsB,KAAK,CAAC,CAAC,EAC5E;YACD,IAAA,mBAAM,EACL,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,SAAS,EACtE,KAAK,CAAC,sDAAsD,CAC5D,CAAC;YACF,IAAI,CAAC,wCAAwC,GAAG,OAAO,CAAC,oBAAoB,CAAC;YAC7E,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE;gBACxD,iBAAiB,EAAE;oBAClB,iBAAiB,EAAE,IAAI,CAAC,GAAG,EAAE;iBAC7B;gBACD,UAAU,EAAE,EAAE;aACd,CAAC,CAAC;SACH;IACF,CAAC;IAEO,iBAAiB,CAAC,OAAkC;QAC3D,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAE9C,IAAI,cAAc,KAAK,IAAI,CAAC,qBAAqB,EAAE;YAClD,IAAI,CAAC,qBAAqB,EAAE,CAAC;SAC7B;QAED,uDAAuD;QACvD,IAAI,IAAI,CAAC,4BAA4B,KAAK,SAAS,IAAI,cAAc,GAAG,IAAI,KAAK,CAAC,EAAE;YACnF,IAAI,CAAC,4BAA4B,GAAG,cAAc,CAAC;YACnD,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,SAAS,CAAC;SAC9C;QACD,IACC,IAAI,CAAC,4BAA4B,KAAK,SAAS;YAC/C,OAAO,CAAC,qBAAqB,IAAI,IAAI,CAAC,4BAA4B,EACjE;YACD,IAAA,mBAAM,EACL,IAAI,CAAC,oBAAoB,KAAK,SAAS,EACvC,KAAK,CAAC,oDAAoD,CAC1D,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC;gBAChC,SAAS,EAAE,eAAe;gBAC1B,cAAc;gBACd,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC,4BAA4B;gBAC/D,QAAQ,EAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,oBAAoB;aACvD,CAAC,CAAC;YACH,IAAI,CAAC,4BAA4B,GAAG,SAAS,CAAC;SAC9C;QAED,IACC,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ;YAClC,CAAC,IAAI,CAAC,eAAe,CAAC,kBAAkB;gBACvC,IAAI,CAAC,wCAAwC,KAAK,OAAO,CAAC,oBAAoB,CAAC,EAC/E;YACD,yDAAyD;YACzD,oEAAoE;YACpE,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAE,CAAC;YAC9E,IAAA,mBAAM,EAAC,WAAW,KAAK,SAAS,EAAE,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACnF,IAAA,mBAAM,EACL,WAAW,CAAC,iBAAiB,CAAC,iBAAiB,KAAK,SAAS,EAC7D,KAAK,CAAC,0DAA0D,CAChE,CAAC;YACF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,IAAI,WAAW,CAAC,iBAAiB,CAAC,oBAAoB,KAAK,SAAS,EAAE;gBACrE,WAAW,CAAC,UAAU,CAAC,2BAA2B;oBACjD,WAAW,GAAG,WAAW,CAAC,iBAAiB,CAAC,oBAAoB,CAAC;aAClE;YACD,MAAM,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC,iBAAiB,CAAC,iBAAiB,CAAC;YAE/E,gEAAgE;YAChE,mFAAmF;YACnF,mBAAmB;YACnB,0FAA0F;YAC1F,yFAAyF;YACzF,uFAAuF;YACvF,wDAAwD;YACxD,MAAM,QAAQ,GAAG,QAAQ,GAAG,wBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;YACvE,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC;gBACzC,SAAS,EAAE,iBAAiB;gBAC5B,cAAc;gBACd,uBAAuB,EAAE,OAAO,CAAC,uBAAuB;gBACxD,QAAQ;gBACR,QAAQ;gBACR,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW,EACV,IAAI,CAAC,YAAY,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB;gBAC/E,GAAG,WAAW,CAAC,UAAU;aACzB,CAAC,CAAC;YACH,IAAI,CAAC,wCAAwC,GAAG,SAAS,CAAC;YAC1D,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;SAC5D;IACF,CAAC;;AArSuB,sCAAsB,GAAG,GAAG,AAAN,CAAO;AAG7B,yCAAyB,GAAG,GAAG,AAAN,CAAO;AA0TzD;;;;;;;GAOG;AACH,SAAgB,qBAAqB,CACpC,QAA4B,EAC5B,YAAwE,EACxE,sBAA+D,EAC/D,MAA2B;IAE3B,IAAI,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC;AAC7E,CAAC;AAPD,sDAOC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { performance } from \"@fluid-internal/client-utils\";\nimport { IDeltaManager } from \"@fluidframework/container-definitions\";\nimport { IContainerRuntimeEvents } from \"@fluidframework/container-runtime-definitions\";\nimport { IEventProvider } from \"@fluidframework/core-interfaces\";\nimport { assert } from \"@fluidframework/core-utils\";\nimport {\n\tIDocumentMessage,\n\tISequencedDocumentMessage,\n\tMessageType,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n\tIEventSampler,\n\tISampledTelemetryLogger,\n\tITelemetryLoggerExt,\n\tcreateChildLogger,\n\tcreateSampledLogger,\n\tformatTick,\n} from \"@fluidframework/telemetry-utils\";\n\n/**\n * We report various latency-related errors when waiting for op roundtrip takes longer than that amout of time.\n */\nexport const latencyThreshold = 5000;\n\n// Phases in OpPerfTelemetry:\n// 1.\tOp is added to DeltaManager (DM) buffer.\n// 2.\tOp is sent to service (op leaves outbound queue).\n// \t - Note: We do not know for sure when op is sent, we only track when it is added to outbound queue.\n// If outbound queue is paused, time queue is paused is counted as network time.\n// 3.\tOp received from service back (pushed to inbound queue).\n// 4.\tOp is processed.\ninterface IOpPerfTelemetryProperties {\n\t/** Measure time between (1) and (2) - Measure time outbound op is sitting in queue due to active batch */\n\tdurationOutboundBatching: number; // was durationOutboundQueue in previous versions\n\t/** Measure time between (2) and (3) - Track how long it took for op to be acked by service */\n\tdurationNetwork: number; // was durationInboundQueue\n\t/** Measure time between (3) and (4) - Time between DM's inbound \"push\" event until DM's \"op\" event */\n\tdurationInboundToProcessing: number;\n\t/** Length of the DeltaManager's inbound queue at the time of the DM's inbound \"push\" event (3) */\n\tlengthInboundQueue: number;\n}\n\n/**\n * Timings collected at various moments during the op processing.\n */\ninterface IOpPerfTimings {\n\t/** Starting time for (1) */\n\tsubmitOpEventTime: number;\n\t/** Starting time for (2) */\n\toutboundPushEventTime: number;\n\t/** Starting time for (3) */\n\tinboundPushEventTime: number;\n}\n\nclass OpPerfTelemetry {\n\tprivate pingLatency: number | undefined;\n\n\t// Collab window tracking. This is timestamp of %1000 message.\n\tprivate sequenceNumberForMsnTracking: number | undefined;\n\tprivate msnTrackingTimestamp: number = 0;\n\t// To track round trip time for every %500 client message.\n\tprivate clientSequenceNumberForLatencyStatistics: number | undefined;\n\t// Performance Data to be reported for ops round trips and processing.\n\tprivate readonly latencyStatistics = new Map<\n\t\tnumber,\n\t\t{\n\t\t\topProcessingTimes: Partial<IOpPerfTimings>;\n\t\t\topPerfData: Partial<IOpPerfTelemetryProperties>;\n\t\t}\n\t>();\n\n\tprivate firstConnection = true;\n\tprivate connectionOpSeqNumber: number | undefined;\n\tprivate readonly bootTime = performance.now();\n\tprivate connectionStartTime = 0;\n\tprivate gap = 0;\n\n\tprivate readonly logger: ITelemetryLoggerExt;\n\n\tprivate static readonly OP_LATENCY_SAMPLE_RATE = 500;\n\tprivate readonly opLatencyLogger: ISampledTelemetryLogger;\n\n\tprivate static readonly DELTA_LATENCY_SAMPLE_RATE = 100;\n\tprivate readonly deltaLatencyLogger: ISampledTelemetryLogger;\n\n\t/**\n\t * Create an instance of OpPerfTelemetry which starts monitoring and generating telemetry related to op performance.\n\t *\n\t * @param clientId - The clientId of the current container.\n\t * @param deltaManager - DeltaManager instance to monitor.\n\t * @param containerRuntimeEvents - Emitter of events for the container runtime.\n\t * @param logger - Telemetry logger to write events to.\n\t */\n\tpublic constructor(\n\t\t/**\n\t\t * The clientId of the current container.\n\t\t *\n\t\t * @remarks Until the container connects to the server and receives an ack for its own join op, this can be undefined.\n\t\t * It gets updated in response to event changes once the value provided by the server is available.\n\t\t * If the container loses its connection, this could be the last known clientId.\n\t\t */\n\t\tprivate clientId: string | undefined,\n\t\t/**\n\t\t * DeltaManager instance to monitor.\n\t\t */\n\t\tprivate readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,\n\t\t/**\n\t\t * Emitter of events for the container runtime.\n\t\t */\n\t\tcontainerRuntimeEvents: IEventProvider<IContainerRuntimeEvents>,\n\t\t/**\n\t\t * Telemetry logger to write events to.\n\t\t */\n\t\tlogger: ITelemetryLoggerExt,\n\t) {\n\t\tthis.logger = createChildLogger({ logger, namespace: \"OpPerf\" });\n\n\t\tconst deltaLatencyEventSampler: IEventSampler = (() => {\n\t\t\tlet eventCount = -1;\n\t\t\treturn {\n\t\t\t\tsample: () => {\n\t\t\t\t\teventCount++;\n\t\t\t\t\tconst shouldSample =\n\t\t\t\t\t\teventCount % OpPerfTelemetry.DELTA_LATENCY_SAMPLE_RATE === 0;\n\t\t\t\t\tif (shouldSample) {\n\t\t\t\t\t\teventCount = 0;\n\t\t\t\t\t}\n\t\t\t\t\treturn shouldSample;\n\t\t\t\t},\n\t\t\t};\n\t\t})();\n\n\t\tthis.deltaLatencyLogger = createSampledLogger(logger, deltaLatencyEventSampler);\n\n\t\t// The SampledLogger here is used get access to the isSamplingDisabled property derived from\n\t\t// telemetry config properties. The actual sampling logic for op messages happens outside this SampledLogger\n\t\t// due to complexity of the different asynchronus scenarios of the op message lifecycle.\n\t\tthis.opLatencyLogger = createSampledLogger(logger);\n\n\t\tthis.deltaManager.on(\"pong\", (latency) => this.recordPingTime(latency));\n\t\tthis.deltaManager.on(\"submitOp\", (message) => this.beforeOpSubmit(message));\n\n\t\tthis.deltaManager.on(\"op\", (message) => this.afterProcessingOp(message));\n\n\t\tthis.deltaManager.on(\"connect\", (details, opsBehind) => {\n\t\t\tif (opsBehind !== undefined) {\n\t\t\t\tthis.connectionOpSeqNumber = this.deltaManager.lastKnownSeqNumber;\n\t\t\t\tthis.gap = opsBehind;\n\t\t\t\tthis.connectionStartTime = performance.now();\n\n\t\t\t\t// We might be already up-today. If so, report it right away.\n\t\t\t\tif (this.gap <= 0) {\n\t\t\t\t\tthis.reportGettingUpToDate();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tthis.deltaManager.on(\"disconnect\", () => {\n\t\t\tthis.sequenceNumberForMsnTracking = undefined;\n\t\t\tthis.clientSequenceNumberForLatencyStatistics = undefined;\n\t\t\tthis.connectionOpSeqNumber = undefined;\n\t\t\tthis.firstConnection = false;\n\t\t\tthis.latencyStatistics.clear();\n\t\t});\n\n\t\tthis.deltaManager.outbound.on(\"push\", (messages) => {\n\t\t\tfor (const msg of messages) {\n\t\t\t\tif (\n\t\t\t\t\tmsg.type === MessageType.Operation &&\n\t\t\t\t\t(this.opLatencyLogger.isSamplingDisabled ||\n\t\t\t\t\t\tthis.clientSequenceNumberForLatencyStatistics === msg.clientSequenceNumber)\n\t\t\t\t) {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\tconst latencyStats = this.latencyStatistics.get(msg.clientSequenceNumber)!;\n\t\t\t\t\tassert(\n\t\t\t\t\t\tlatencyStats !== undefined,\n\t\t\t\t\t\t0x7c2 /* Latency stats for op should exist */,\n\t\t\t\t\t);\n\t\t\t\t\tassert(\n\t\t\t\t\t\tlatencyStats.opProcessingTimes.outboundPushEventTime === undefined,\n\t\t\t\t\t\t0x2c8 /* \"outboundPushEventTime should be undefined\" */,\n\t\t\t\t\t);\n\t\t\t\t\tassert(\n\t\t\t\t\t\tlatencyStats.opPerfData.durationNetwork === undefined,\n\t\t\t\t\t\t0x2c9 /* \"durationNetwork should be undefined\" */,\n\t\t\t\t\t);\n\t\t\t\t\tlatencyStats.opProcessingTimes.outboundPushEventTime = Date.now();\n\n\t\t\t\t\tassert(\n\t\t\t\t\t\tlatencyStats.opPerfData.durationOutboundBatching === undefined,\n\t\t\t\t\t\t0x2ca /* \"durationOutboundBatching should be undefined\" */,\n\t\t\t\t\t);\n\n\t\t\t\t\tassert(\n\t\t\t\t\t\tlatencyStats.opProcessingTimes.submitOpEventTime !== undefined,\n\t\t\t\t\t\t0x2cb /* \"submitOpEventTime should be undefined\" */,\n\t\t\t\t\t);\n\n\t\t\t\t\tlatencyStats.opPerfData.durationOutboundBatching =\n\t\t\t\t\t\tlatencyStats.opProcessingTimes.outboundPushEventTime -\n\t\t\t\t\t\tlatencyStats.opProcessingTimes.submitOpEventTime;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.deltaManager.inbound.on(\"push\", (message: ISequencedDocumentMessage) => {\n\t\t\tif (\n\t\t\t\tthis.clientId === message.clientId &&\n\t\t\t\tmessage.type === MessageType.Operation &&\n\t\t\t\t(this.opLatencyLogger.isSamplingDisabled ||\n\t\t\t\t\tthis.clientSequenceNumberForLatencyStatistics === message.clientSequenceNumber)\n\t\t\t) {\n\t\t\t\t// We do an explicit check for undefined right after this\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\tconst latencyStats = this.latencyStatistics.get(message.clientSequenceNumber)!;\n\t\t\t\tassert(latencyStats !== undefined, 0x7c3 /* Latency stats for op should exist */);\n\t\t\t\tif (latencyStats.opProcessingTimes.outboundPushEventTime !== undefined) {\n\t\t\t\t\tlatencyStats.opProcessingTimes.inboundPushEventTime = Date.now();\n\t\t\t\t\tlatencyStats.opPerfData.durationNetwork =\n\t\t\t\t\t\tlatencyStats.opProcessingTimes.inboundPushEventTime -\n\t\t\t\t\t\tlatencyStats.opProcessingTimes.outboundPushEventTime;\n\t\t\t\t\tlatencyStats.opPerfData.lengthInboundQueue = this.deltaManager.inbound.length;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.deltaManager.inbound.on(\"idle\", (count: number, duration: number) => {\n\t\t\t// Do not want to log zero for sure.\n\t\t\t// We are more interested in aggregates, so logging only if we are processing some number of ops\n\t\t\t// Cut-off is arbitrary - can be increased or decreased based on amount of data collected and questions we\n\t\t\t// want to get answered\n\t\t\t// back-compat: Once 0.36 loader version saturates (count & duration args were added there),\n\t\t\t// we can remove typeof check.\n\t\t\tif (typeof count === \"number\" && count >= 100) {\n\t\t\t\tthis.logger.sendPerformanceEvent({\n\t\t\t\t\teventName: \"GetDeltas_OpProcessing\",\n\t\t\t\t\tcount,\n\t\t\t\t\tduration,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tcontainerRuntimeEvents.on(\"connected\", (newClientId) => {\n\t\t\tthis.clientId = newClientId;\n\t\t});\n\t}\n\n\tprivate reportGettingUpToDate() {\n\t\tthis.connectionOpSeqNumber = undefined;\n\t\tthis.logger.sendPerformanceEvent({\n\t\t\teventName: \"ConnectionSpeed\",\n\t\t\tduration: performance.now() - this.connectionStartTime,\n\t\t\tops: this.gap,\n\t\t\t// track time to connect only for first connection.\n\t\t\ttimeToConnect: this.firstConnection\n\t\t\t\t? formatTick(this.connectionStartTime - this.bootTime)\n\t\t\t\t: undefined,\n\t\t\tfirstConnection: this.firstConnection,\n\t\t});\n\t}\n\n\tprivate recordPingTime(latency: number) {\n\t\tthis.pingLatency = latency;\n\n\t\t// Log if latency is longer than 1 min\n\t\tif (latency > 1000 * 60) {\n\t\t\tthis.logger.sendErrorEvent({\n\t\t\t\teventName: \"LatencyTooLong\",\n\t\t\t\tduration: latency,\n\t\t\t});\n\t\t}\n\n\t\t// logging one in every DELTA_LATENCY_SAMPLE_RATE pongs, including the first time, if it is a \"write\" client.\n\t\tif (this.deltaManager.active) {\n\t\t\tthis.deltaLatencyLogger.sendPerformanceEvent({\n\t\t\t\teventName: \"DeltaLatency\",\n\t\t\t\tduration: latency,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate beforeOpSubmit(message: IDocumentMessage) {\n\t\t// start with first client op and measure latency every 500 client ops\n\t\tif (\n\t\t\tthis.opLatencyLogger.isSamplingDisabled ||\n\t\t\t(this.clientSequenceNumberForLatencyStatistics === undefined &&\n\t\t\t\tmessage.clientSequenceNumber % OpPerfTelemetry.OP_LATENCY_SAMPLE_RATE === 1)\n\t\t) {\n\t\t\tassert(\n\t\t\t\tthis.latencyStatistics.get(message.clientSequenceNumber) === undefined,\n\t\t\t\t0x7c4 /* Existing op perf data for client sequence number */,\n\t\t\t);\n\t\t\tthis.clientSequenceNumberForLatencyStatistics = message.clientSequenceNumber;\n\t\t\tthis.latencyStatistics.set(message.clientSequenceNumber, {\n\t\t\t\topProcessingTimes: {\n\t\t\t\t\tsubmitOpEventTime: Date.now(),\n\t\t\t\t},\n\t\t\t\topPerfData: {},\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate afterProcessingOp(message: ISequencedDocumentMessage) {\n\t\tconst sequenceNumber = message.sequenceNumber;\n\n\t\tif (sequenceNumber === this.connectionOpSeqNumber) {\n\t\t\tthis.reportGettingUpToDate();\n\t\t}\n\n\t\t// Record collab window max size after every 1000th op.\n\t\tif (this.sequenceNumberForMsnTracking === undefined && sequenceNumber % 1000 === 0) {\n\t\t\tthis.sequenceNumberForMsnTracking = sequenceNumber;\n\t\t\tthis.msnTrackingTimestamp = message.timestamp;\n\t\t}\n\t\tif (\n\t\t\tthis.sequenceNumberForMsnTracking !== undefined &&\n\t\t\tmessage.minimumSequenceNumber >= this.sequenceNumberForMsnTracking\n\t\t) {\n\t\t\tassert(\n\t\t\t\tthis.msnTrackingTimestamp !== undefined,\n\t\t\t\t0x2ce /* \"msnTrackingTimestamp should not be undefined\" */,\n\t\t\t);\n\t\t\tthis.logger.sendPerformanceEvent({\n\t\t\t\teventName: \"MsnStatistics\",\n\t\t\t\tsequenceNumber,\n\t\t\t\tmsnDistance: sequenceNumber - this.sequenceNumberForMsnTracking,\n\t\t\t\tduration: message.timestamp - this.msnTrackingTimestamp,\n\t\t\t});\n\t\t\tthis.sequenceNumberForMsnTracking = undefined;\n\t\t}\n\n\t\tif (\n\t\t\tthis.clientId === message.clientId &&\n\t\t\t(this.opLatencyLogger.isSamplingDisabled ||\n\t\t\t\tthis.clientSequenceNumberForLatencyStatistics === message.clientSequenceNumber)\n\t\t) {\n\t\t\t// We do an explicit check for undefined right after this\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tconst latencyData = this.latencyStatistics.get(message.clientSequenceNumber)!;\n\t\t\tassert(latencyData !== undefined, 0x7c5 /* Undefined latency statistics for op */);\n\t\t\tassert(\n\t\t\t\tlatencyData.opProcessingTimes.submitOpEventTime !== undefined,\n\t\t\t\t0x120 /* \"Undefined latency statistics for op (op send time)\" */,\n\t\t\t);\n\t\t\tconst currentTime = Date.now();\n\t\t\tif (latencyData.opProcessingTimes.inboundPushEventTime !== undefined) {\n\t\t\t\tlatencyData.opPerfData.durationInboundToProcessing =\n\t\t\t\t\tcurrentTime - latencyData.opProcessingTimes.inboundPushEventTime;\n\t\t\t}\n\t\t\tconst duration = currentTime - latencyData.opProcessingTimes.submitOpEventTime;\n\n\t\t\t// One of the core expectations for Fluid service is to be fast.\n\t\t\t// When it's not the case, we want to learn about it and be able to investigate, so\n\t\t\t// raise awareness.\n\t\t\t// This also helps identify cases where it's due to client behavior (sending too many ops)\n\t\t\t// that results in overwhelming ordering service and thus starting to see long latencies.\n\t\t\t// The threshold could be adjusted, but ideally it stays workload-agnostic, as service\n\t\t\t// performance impacts all workloads relying on service.\n\t\t\tconst category = duration > latencyThreshold ? \"error\" : \"performance\";\n\t\t\tthis.opLatencyLogger.sendPerformanceEvent({\n\t\t\t\teventName: \"OpRoundtripTime\",\n\t\t\t\tsequenceNumber,\n\t\t\t\treferenceSequenceNumber: message.referenceSequenceNumber,\n\t\t\t\tduration,\n\t\t\t\tcategory,\n\t\t\t\tpingLatency: this.pingLatency,\n\t\t\t\tmsnDistance:\n\t\t\t\t\tthis.deltaManager.lastSequenceNumber - this.deltaManager.minimumSequenceNumber,\n\t\t\t\t...latencyData.opPerfData,\n\t\t\t});\n\t\t\tthis.clientSequenceNumberForLatencyStatistics = undefined;\n\t\t\tthis.latencyStatistics.delete(message.clientSequenceNumber);\n\t\t}\n\t}\n}\nexport interface IPerfSignalReport {\n\t/**\n\t * Identifier for the signal being submitted in order to\n\t * allow collection of data around the roundtrip of signal messages.\n\t */\n\tsignalSequenceNumber: number;\n\t/**\n\t * Number of signals that were expected but not received.\n\t */\n\tsignalsLost: number;\n\n\t/**\n\t * Timestamp before submitting the signal we will trace.\n\t */\n\tsignalTimestamp: number;\n\n\t/**\n\t * Expected Signal Sequence to be received.\n\t */\n\ttrackingSignalSequenceNumber: number | undefined;\n}\n\n/**\n * Starts monitoring and generation of telemetry related to op performance.\n *\n * @param clientId - The clientId of the current container.\n * @param deltaManager - DeltaManager instance to monitor.\n * @param containerRuntimeEvents - Emitter of events for the container runtime.\n * @param logger - Telemetry logger to write events to.\n */\nexport function ReportOpPerfTelemetry(\n\tclientId: string | undefined,\n\tdeltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,\n\tcontainerRuntimeEvents: IEventProvider<IContainerRuntimeEvents>,\n\tlogger: ITelemetryLoggerExt,\n): void {\n\tnew OpPerfTelemetry(clientId, deltaManager, containerRuntimeEvents, logger);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"connectionTelemetry.js","sourceRoot":"","sources":["../src/connectionTelemetry.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 { performance } from \"@fluid-internal/client-utils\";\nimport { IDeltaManager } from \"@fluidframework/container-definitions\";\nimport { IContainerRuntimeEvents } from \"@fluidframework/container-runtime-definitions/internal\";\nimport { IEventProvider } from \"@fluidframework/core-interfaces\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport {\n\tIDocumentMessage,\n\tISequencedDocumentMessage,\n\tMessageType,\n} from \"@fluidframework/protocol-definitions\";\nimport { ITelemetryLoggerExt } from \"@fluidframework/telemetry-utils\";\nimport {\n\tIEventSampler,\n\tISampledTelemetryLogger,\n\tcreateChildLogger,\n\tcreateSampledLogger,\n\tformatTick,\n} from \"@fluidframework/telemetry-utils/internal\";\n\n/**\n * We report various latency-related errors when waiting for op roundtrip takes longer than that amout of time.\n */\nexport const latencyThreshold = 5000;\n\n// Phases in OpPerfTelemetry:\n// 1.\tOp is added to DeltaManager (DM) buffer.\n// 2.\tOp is sent to service (op leaves outbound queue).\n// \t - Note: We do not know for sure when op is sent, we only track when it is added to outbound queue.\n// If outbound queue is paused, time queue is paused is counted as network time.\n// 3.\tOp received from service back (pushed to inbound queue).\n// 4.\tOp is processed.\ninterface IOpPerfTelemetryProperties {\n\t/** Measure time between (1) and (2) - Measure time outbound op is sitting in queue due to active batch */\n\tdurationOutboundBatching: number; // was durationOutboundQueue in previous versions\n\t/** Measure time between (2) and (3) - Track how long it took for op to be acked by service */\n\tdurationNetwork: number; // was durationInboundQueue\n\t/** Measure time between (3) and (4) - Time between DM's inbound \"push\" event until DM's \"op\" event */\n\tdurationInboundToProcessing: number;\n\t/** Length of the DeltaManager's inbound queue at the time of the DM's inbound \"push\" event (3) */\n\tlengthInboundQueue: number;\n}\n\n/**\n * Timings collected at various moments during the op processing.\n */\ninterface IOpPerfTimings {\n\t/** Starting time for (1) */\n\tsubmitOpEventTime: number;\n\t/** Starting time for (2) */\n\toutboundPushEventTime: number;\n\t/** Starting time for (3) */\n\tinboundPushEventTime: number;\n}\n\nclass OpPerfTelemetry {\n\tprivate pingLatency: number | undefined;\n\n\t// Collab window tracking. This is timestamp of %1000 message.\n\tprivate sequenceNumberForMsnTracking: number | undefined;\n\tprivate msnTrackingTimestamp: number = 0;\n\t// To track round trip time for every %500 client message.\n\tprivate clientSequenceNumberForLatencyStatistics: number | undefined;\n\t// Performance Data to be reported for ops round trips and processing.\n\tprivate readonly latencyStatistics = new Map<\n\t\tnumber,\n\t\t{\n\t\t\topProcessingTimes: Partial<IOpPerfTimings>;\n\t\t\topPerfData: Partial<IOpPerfTelemetryProperties>;\n\t\t}\n\t>();\n\n\tprivate firstConnection = true;\n\tprivate connectionOpSeqNumber: number | undefined;\n\tprivate readonly bootTime = performance.now();\n\tprivate connectionStartTime = 0;\n\tprivate gap = 0;\n\n\tprivate readonly logger: ITelemetryLoggerExt;\n\n\tprivate static readonly OP_LATENCY_SAMPLE_RATE = 500;\n\tprivate readonly opLatencyLogger: ISampledTelemetryLogger;\n\n\tprivate static readonly DELTA_LATENCY_SAMPLE_RATE = 100;\n\tprivate readonly deltaLatencyLogger: ISampledTelemetryLogger;\n\n\t/**\n\t * Create an instance of OpPerfTelemetry which starts monitoring and generating telemetry related to op performance.\n\t *\n\t * @param clientId - The clientId of the current container.\n\t * @param deltaManager - DeltaManager instance to monitor.\n\t * @param containerRuntimeEvents - Emitter of events for the container runtime.\n\t * @param logger - Telemetry logger to write events to.\n\t */\n\tpublic constructor(\n\t\t/**\n\t\t * The clientId of the current container.\n\t\t *\n\t\t * @remarks Until the container connects to the server and receives an ack for its own join op, this can be undefined.\n\t\t * It gets updated in response to event changes once the value provided by the server is available.\n\t\t * If the container loses its connection, this could be the last known clientId.\n\t\t */\n\t\tprivate clientId: string | undefined,\n\t\t/**\n\t\t * DeltaManager instance to monitor.\n\t\t */\n\t\tprivate readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,\n\t\t/**\n\t\t * Emitter of events for the container runtime.\n\t\t */\n\t\tcontainerRuntimeEvents: IEventProvider<IContainerRuntimeEvents>,\n\t\t/**\n\t\t * Telemetry logger to write events to.\n\t\t */\n\t\tlogger: ITelemetryLoggerExt,\n\t) {\n\t\tthis.logger = createChildLogger({ logger, namespace: \"OpPerf\" });\n\n\t\tconst deltaLatencyEventSampler: IEventSampler = (() => {\n\t\t\tlet eventCount = -1;\n\t\t\treturn {\n\t\t\t\tsample: () => {\n\t\t\t\t\teventCount++;\n\t\t\t\t\tconst shouldSample =\n\t\t\t\t\t\teventCount % OpPerfTelemetry.DELTA_LATENCY_SAMPLE_RATE === 0;\n\t\t\t\t\tif (shouldSample) {\n\t\t\t\t\t\teventCount = 0;\n\t\t\t\t\t}\n\t\t\t\t\treturn shouldSample;\n\t\t\t\t},\n\t\t\t};\n\t\t})();\n\n\t\tthis.deltaLatencyLogger = createSampledLogger(logger, deltaLatencyEventSampler);\n\n\t\t// The SampledLogger here is used get access to the isSamplingDisabled property derived from\n\t\t// telemetry config properties. The actual sampling logic for op messages happens outside this SampledLogger\n\t\t// due to complexity of the different asynchronus scenarios of the op message lifecycle.\n\t\tthis.opLatencyLogger = createSampledLogger(logger);\n\n\t\tthis.deltaManager.on(\"pong\", (latency) => this.recordPingTime(latency));\n\t\tthis.deltaManager.on(\"submitOp\", (message) => this.beforeOpSubmit(message));\n\n\t\tthis.deltaManager.on(\"op\", (message) => this.afterProcessingOp(message));\n\n\t\tthis.deltaManager.on(\"connect\", (details, opsBehind) => {\n\t\t\tif (opsBehind !== undefined) {\n\t\t\t\tthis.connectionOpSeqNumber = this.deltaManager.lastKnownSeqNumber;\n\t\t\t\tthis.gap = opsBehind;\n\t\t\t\tthis.connectionStartTime = performance.now();\n\n\t\t\t\t// We might be already up-today. If so, report it right away.\n\t\t\t\tif (this.gap <= 0) {\n\t\t\t\t\tthis.reportGettingUpToDate();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tthis.deltaManager.on(\"disconnect\", () => {\n\t\t\tthis.sequenceNumberForMsnTracking = undefined;\n\t\t\tthis.clientSequenceNumberForLatencyStatistics = undefined;\n\t\t\tthis.connectionOpSeqNumber = undefined;\n\t\t\tthis.firstConnection = false;\n\t\t\tthis.latencyStatistics.clear();\n\t\t});\n\n\t\tthis.deltaManager.outbound.on(\"push\", (messages) => {\n\t\t\tfor (const msg of messages) {\n\t\t\t\tif (\n\t\t\t\t\tmsg.type === MessageType.Operation &&\n\t\t\t\t\t(this.opLatencyLogger.isSamplingDisabled ||\n\t\t\t\t\t\tthis.clientSequenceNumberForLatencyStatistics === msg.clientSequenceNumber)\n\t\t\t\t) {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\tconst latencyStats = this.latencyStatistics.get(msg.clientSequenceNumber)!;\n\t\t\t\t\tassert(\n\t\t\t\t\t\tlatencyStats !== undefined,\n\t\t\t\t\t\t0x7c2 /* Latency stats for op should exist */,\n\t\t\t\t\t);\n\t\t\t\t\tassert(\n\t\t\t\t\t\tlatencyStats.opProcessingTimes.outboundPushEventTime === undefined,\n\t\t\t\t\t\t0x2c8 /* \"outboundPushEventTime should be undefined\" */,\n\t\t\t\t\t);\n\t\t\t\t\tassert(\n\t\t\t\t\t\tlatencyStats.opPerfData.durationNetwork === undefined,\n\t\t\t\t\t\t0x2c9 /* \"durationNetwork should be undefined\" */,\n\t\t\t\t\t);\n\t\t\t\t\tlatencyStats.opProcessingTimes.outboundPushEventTime = Date.now();\n\n\t\t\t\t\tassert(\n\t\t\t\t\t\tlatencyStats.opPerfData.durationOutboundBatching === undefined,\n\t\t\t\t\t\t0x2ca /* \"durationOutboundBatching should be undefined\" */,\n\t\t\t\t\t);\n\n\t\t\t\t\tassert(\n\t\t\t\t\t\tlatencyStats.opProcessingTimes.submitOpEventTime !== undefined,\n\t\t\t\t\t\t0x2cb /* \"submitOpEventTime should be undefined\" */,\n\t\t\t\t\t);\n\n\t\t\t\t\tlatencyStats.opPerfData.durationOutboundBatching =\n\t\t\t\t\t\tlatencyStats.opProcessingTimes.outboundPushEventTime -\n\t\t\t\t\t\tlatencyStats.opProcessingTimes.submitOpEventTime;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.deltaManager.inbound.on(\"push\", (message: ISequencedDocumentMessage) => {\n\t\t\tif (\n\t\t\t\tthis.clientId === message.clientId &&\n\t\t\t\tmessage.type === MessageType.Operation &&\n\t\t\t\t(this.opLatencyLogger.isSamplingDisabled ||\n\t\t\t\t\tthis.clientSequenceNumberForLatencyStatistics === message.clientSequenceNumber)\n\t\t\t) {\n\t\t\t\t// We do an explicit check for undefined right after this\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\tconst latencyStats = this.latencyStatistics.get(message.clientSequenceNumber)!;\n\t\t\t\tassert(latencyStats !== undefined, 0x7c3 /* Latency stats for op should exist */);\n\t\t\t\tif (latencyStats.opProcessingTimes.outboundPushEventTime !== undefined) {\n\t\t\t\t\tlatencyStats.opProcessingTimes.inboundPushEventTime = Date.now();\n\t\t\t\t\tlatencyStats.opPerfData.durationNetwork =\n\t\t\t\t\t\tlatencyStats.opProcessingTimes.inboundPushEventTime -\n\t\t\t\t\t\tlatencyStats.opProcessingTimes.outboundPushEventTime;\n\t\t\t\t\tlatencyStats.opPerfData.lengthInboundQueue = this.deltaManager.inbound.length;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.deltaManager.inbound.on(\"idle\", (count: number, duration: number) => {\n\t\t\t// Do not want to log zero for sure.\n\t\t\t// We are more interested in aggregates, so logging only if we are processing some number of ops\n\t\t\t// Cut-off is arbitrary - can be increased or decreased based on amount of data collected and questions we\n\t\t\t// want to get answered\n\t\t\t// back-compat: Once 0.36 loader version saturates (count & duration args were added there),\n\t\t\t// we can remove typeof check.\n\t\t\tif (typeof count === \"number\" && count >= 100) {\n\t\t\t\tthis.logger.sendPerformanceEvent({\n\t\t\t\t\teventName: \"GetDeltas_OpProcessing\",\n\t\t\t\t\tcount,\n\t\t\t\t\tduration,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tcontainerRuntimeEvents.on(\"connected\", (newClientId) => {\n\t\t\tthis.clientId = newClientId;\n\t\t});\n\t}\n\n\tprivate reportGettingUpToDate() {\n\t\tthis.connectionOpSeqNumber = undefined;\n\t\tthis.logger.sendPerformanceEvent({\n\t\t\teventName: \"ConnectionSpeed\",\n\t\t\tduration: performance.now() - this.connectionStartTime,\n\t\t\tops: this.gap,\n\t\t\t// track time to connect only for first connection.\n\t\t\ttimeToConnect: this.firstConnection\n\t\t\t\t? formatTick(this.connectionStartTime - this.bootTime)\n\t\t\t\t: undefined,\n\t\t\tfirstConnection: this.firstConnection,\n\t\t});\n\t}\n\n\tprivate recordPingTime(latency: number) {\n\t\tthis.pingLatency = latency;\n\n\t\t// Log if latency is longer than 1 min\n\t\tif (latency > 1000 * 60) {\n\t\t\tthis.logger.sendErrorEvent({\n\t\t\t\teventName: \"LatencyTooLong\",\n\t\t\t\tduration: latency,\n\t\t\t});\n\t\t}\n\n\t\t// logging one in every DELTA_LATENCY_SAMPLE_RATE pongs, including the first time, if it is a \"write\" client.\n\t\tif (this.deltaManager.active) {\n\t\t\tthis.deltaLatencyLogger.sendPerformanceEvent({\n\t\t\t\teventName: \"DeltaLatency\",\n\t\t\t\tduration: latency,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate beforeOpSubmit(message: IDocumentMessage) {\n\t\t// start with first client op and measure latency every 500 client ops\n\t\tif (\n\t\t\tthis.opLatencyLogger.isSamplingDisabled ||\n\t\t\t(this.clientSequenceNumberForLatencyStatistics === undefined &&\n\t\t\t\tmessage.clientSequenceNumber % OpPerfTelemetry.OP_LATENCY_SAMPLE_RATE === 1)\n\t\t) {\n\t\t\tassert(\n\t\t\t\tthis.latencyStatistics.get(message.clientSequenceNumber) === undefined,\n\t\t\t\t0x7c4 /* Existing op perf data for client sequence number */,\n\t\t\t);\n\t\t\tthis.clientSequenceNumberForLatencyStatistics = message.clientSequenceNumber;\n\t\t\tthis.latencyStatistics.set(message.clientSequenceNumber, {\n\t\t\t\topProcessingTimes: {\n\t\t\t\t\tsubmitOpEventTime: Date.now(),\n\t\t\t\t},\n\t\t\t\topPerfData: {},\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate afterProcessingOp(message: ISequencedDocumentMessage) {\n\t\tconst sequenceNumber = message.sequenceNumber;\n\n\t\tif (sequenceNumber === this.connectionOpSeqNumber) {\n\t\t\tthis.reportGettingUpToDate();\n\t\t}\n\n\t\t// Record collab window max size after every 1000th op.\n\t\tif (this.sequenceNumberForMsnTracking === undefined && sequenceNumber % 1000 === 0) {\n\t\t\tthis.sequenceNumberForMsnTracking = sequenceNumber;\n\t\t\tthis.msnTrackingTimestamp = message.timestamp;\n\t\t}\n\t\tif (\n\t\t\tthis.sequenceNumberForMsnTracking !== undefined &&\n\t\t\tmessage.minimumSequenceNumber >= this.sequenceNumberForMsnTracking\n\t\t) {\n\t\t\tassert(\n\t\t\t\tthis.msnTrackingTimestamp !== undefined,\n\t\t\t\t0x2ce /* \"msnTrackingTimestamp should not be undefined\" */,\n\t\t\t);\n\t\t\tthis.logger.sendPerformanceEvent({\n\t\t\t\teventName: \"MsnStatistics\",\n\t\t\t\tsequenceNumber,\n\t\t\t\tmsnDistance: sequenceNumber - this.sequenceNumberForMsnTracking,\n\t\t\t\tduration: message.timestamp - this.msnTrackingTimestamp,\n\t\t\t});\n\t\t\tthis.sequenceNumberForMsnTracking = undefined;\n\t\t}\n\n\t\tif (\n\t\t\tthis.clientId === message.clientId &&\n\t\t\t(this.opLatencyLogger.isSamplingDisabled ||\n\t\t\t\tthis.clientSequenceNumberForLatencyStatistics === message.clientSequenceNumber)\n\t\t) {\n\t\t\t// We do an explicit check for undefined right after this\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tconst latencyData = this.latencyStatistics.get(message.clientSequenceNumber)!;\n\t\t\tassert(latencyData !== undefined, 0x7c5 /* Undefined latency statistics for op */);\n\t\t\tassert(\n\t\t\t\tlatencyData.opProcessingTimes.submitOpEventTime !== undefined,\n\t\t\t\t0x120 /* \"Undefined latency statistics for op (op send time)\" */,\n\t\t\t);\n\t\t\tconst currentTime = Date.now();\n\t\t\tif (latencyData.opProcessingTimes.inboundPushEventTime !== undefined) {\n\t\t\t\tlatencyData.opPerfData.durationInboundToProcessing =\n\t\t\t\t\tcurrentTime - latencyData.opProcessingTimes.inboundPushEventTime;\n\t\t\t}\n\t\t\tconst duration = currentTime - latencyData.opProcessingTimes.submitOpEventTime;\n\n\t\t\t// One of the core expectations for Fluid service is to be fast.\n\t\t\t// When it's not the case, we want to learn about it and be able to investigate, so\n\t\t\t// raise awareness.\n\t\t\t// This also helps identify cases where it's due to client behavior (sending too many ops)\n\t\t\t// that results in overwhelming ordering service and thus starting to see long latencies.\n\t\t\t// The threshold could be adjusted, but ideally it stays workload-agnostic, as service\n\t\t\t// performance impacts all workloads relying on service.\n\t\t\tconst category = duration > latencyThreshold ? \"error\" : \"performance\";\n\t\t\tthis.opLatencyLogger.sendPerformanceEvent({\n\t\t\t\teventName: \"OpRoundtripTime\",\n\t\t\t\tsequenceNumber,\n\t\t\t\treferenceSequenceNumber: message.referenceSequenceNumber,\n\t\t\t\tduration,\n\t\t\t\tcategory,\n\t\t\t\tpingLatency: this.pingLatency,\n\t\t\t\tmsnDistance:\n\t\t\t\t\tthis.deltaManager.lastSequenceNumber - this.deltaManager.minimumSequenceNumber,\n\t\t\t\t...latencyData.opPerfData,\n\t\t\t});\n\t\t\tthis.clientSequenceNumberForLatencyStatistics = undefined;\n\t\t\tthis.latencyStatistics.delete(message.clientSequenceNumber);\n\t\t}\n\t}\n}\nexport interface IPerfSignalReport {\n\t/**\n\t * Identifier for the signal being submitted in order to\n\t * allow collection of data around the roundtrip of signal messages.\n\t */\n\tsignalSequenceNumber: number;\n\t/**\n\t * Number of signals that were expected but not received.\n\t */\n\tsignalsLost: number;\n\n\t/**\n\t * Timestamp before submitting the signal we will trace.\n\t */\n\tsignalTimestamp: number;\n\n\t/**\n\t * Expected Signal Sequence to be received.\n\t */\n\ttrackingSignalSequenceNumber: number | undefined;\n}\n\n/**\n * Starts monitoring and generation of telemetry related to op performance.\n *\n * @param clientId - The clientId of the current container.\n * @param deltaManager - DeltaManager instance to monitor.\n * @param containerRuntimeEvents - Emitter of events for the container runtime.\n * @param logger - Telemetry logger to write events to.\n */\nexport function ReportOpPerfTelemetry(\n\tclientId: string | undefined,\n\tdeltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,\n\tcontainerRuntimeEvents: IEventProvider<IContainerRuntimeEvents>,\n\tlogger: ITelemetryLoggerExt,\n): void {\n\tnew OpPerfTelemetry(clientId, deltaManager, containerRuntimeEvents, logger);\n}\n"]}
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
import { AliasResult } from '@fluidframework/runtime-definitions';
|
|
1
|
+
import { AliasResult } from '@fluidframework/runtime-definitions/internal';
|
|
2
2
|
import { AttachState } from '@fluidframework/container-definitions';
|
|
3
|
-
import { ContainerWarning } from '@fluidframework/container-definitions';
|
|
4
|
-
import { CreateChildSummarizerNodeFn } from '@fluidframework/runtime-definitions';
|
|
5
|
-
import { CreateChildSummarizerNodeParam } from '@fluidframework/runtime-definitions';
|
|
6
|
-
import { FluidDataStoreRegistryEntry } from '@fluidframework/runtime-definitions';
|
|
3
|
+
import { ContainerWarning } from '@fluidframework/container-definitions/internal';
|
|
4
|
+
import { CreateChildSummarizerNodeFn } from '@fluidframework/runtime-definitions/internal';
|
|
5
|
+
import { CreateChildSummarizerNodeParam } from '@fluidframework/runtime-definitions/internal';
|
|
6
|
+
import { FluidDataStoreRegistryEntry } from '@fluidframework/runtime-definitions/internal';
|
|
7
7
|
import { FluidObject } from '@fluidframework/core-interfaces';
|
|
8
|
-
import { FlushMode } from '@fluidframework/runtime-definitions';
|
|
8
|
+
import { FlushMode } from '@fluidframework/runtime-definitions/internal';
|
|
9
9
|
import { IAudience } from '@fluidframework/container-definitions';
|
|
10
10
|
import { IClientDetails } from '@fluidframework/protocol-definitions';
|
|
11
|
-
import { IContainerContext } from '@fluidframework/container-definitions';
|
|
12
|
-
import { IContainerRuntime } from '@fluidframework/container-runtime-definitions';
|
|
13
|
-
import { IContainerRuntimeBase } from '@fluidframework/runtime-definitions';
|
|
14
|
-
import { IContainerRuntimeEvents } from '@fluidframework/container-runtime-definitions';
|
|
11
|
+
import { IContainerContext } from '@fluidframework/container-definitions/internal';
|
|
12
|
+
import { IContainerRuntime } from '@fluidframework/container-runtime-definitions/internal';
|
|
13
|
+
import { IContainerRuntimeBase } from '@fluidframework/runtime-definitions/internal';
|
|
14
|
+
import { IContainerRuntimeEvents } from '@fluidframework/container-runtime-definitions/internal';
|
|
15
15
|
import { ICriticalContainerError } from '@fluidframework/container-definitions';
|
|
16
|
-
import { IDataStore } from '@fluidframework/runtime-definitions';
|
|
16
|
+
import { IDataStore } from '@fluidframework/runtime-definitions/internal';
|
|
17
17
|
import { IDeltaManager } from '@fluidframework/container-definitions';
|
|
18
18
|
import { IDisposable } from '@fluidframework/core-interfaces';
|
|
19
19
|
import { IDocumentMessage } from '@fluidframework/protocol-definitions';
|
|
20
|
-
import { IDocumentStorageService } from '@fluidframework/driver-definitions';
|
|
21
|
-
import { IEnvelope } from '@fluidframework/runtime-definitions';
|
|
20
|
+
import { IDocumentStorageService } from '@fluidframework/driver-definitions/internal';
|
|
21
|
+
import { IEnvelope } from '@fluidframework/runtime-definitions/internal';
|
|
22
22
|
import { IEvent } from '@fluidframework/core-interfaces';
|
|
23
23
|
import { IEventProvider } from '@fluidframework/core-interfaces';
|
|
24
|
-
import { IFluidDataStoreChannel } from '@fluidframework/runtime-definitions';
|
|
25
|
-
import { IFluidDataStoreContext } from '@fluidframework/runtime-definitions';
|
|
26
|
-
import { IFluidDataStoreContextDetached } from '@fluidframework/runtime-definitions';
|
|
27
|
-
import { IFluidDataStoreFactory } from '@fluidframework/runtime-definitions';
|
|
28
|
-
import { IFluidDataStoreRegistry } from '@fluidframework/runtime-definitions';
|
|
24
|
+
import { IFluidDataStoreChannel } from '@fluidframework/runtime-definitions/internal';
|
|
25
|
+
import { IFluidDataStoreContext } from '@fluidframework/runtime-definitions/internal';
|
|
26
|
+
import { IFluidDataStoreContextDetached } from '@fluidframework/runtime-definitions/internal';
|
|
27
|
+
import { IFluidDataStoreFactory } from '@fluidframework/runtime-definitions/internal';
|
|
28
|
+
import { IFluidDataStoreRegistry } from '@fluidframework/runtime-definitions/internal';
|
|
29
29
|
import { IFluidHandle } from '@fluidframework/core-interfaces';
|
|
30
30
|
import { IFluidHandleContext } from '@fluidframework/core-interfaces';
|
|
31
|
-
import { IFluidParentContext } from '@fluidframework/runtime-definitions';
|
|
31
|
+
import { IFluidParentContext } from '@fluidframework/runtime-definitions/internal';
|
|
32
32
|
import { IGarbageCollectionData } from '@fluidframework/runtime-definitions';
|
|
33
|
-
import { IGarbageCollectionDetailsBase } from '@fluidframework/runtime-definitions';
|
|
34
|
-
import { IGetPendingLocalStateProps } from '@fluidframework/container-definitions';
|
|
33
|
+
import { IGarbageCollectionDetailsBase } from '@fluidframework/runtime-definitions/internal';
|
|
34
|
+
import { IGetPendingLocalStateProps } from '@fluidframework/container-definitions/internal';
|
|
35
35
|
import type { IIdCompressor } from '@fluidframework/id-compressor';
|
|
36
|
-
import type { IIdCompressorCore } from '@fluidframework/id-compressor';
|
|
36
|
+
import type { IIdCompressorCore } from '@fluidframework/id-compressor/internal';
|
|
37
37
|
import { IInboundSignalMessage } from '@fluidframework/runtime-definitions';
|
|
38
38
|
import { IProvideFluidHandleContext } from '@fluidframework/core-interfaces';
|
|
39
39
|
import { IQuorumClients } from '@fluidframework/protocol-definitions';
|
|
40
40
|
import { IRequest } from '@fluidframework/core-interfaces';
|
|
41
41
|
import { IResponse } from '@fluidframework/core-interfaces';
|
|
42
|
-
import { IRuntime } from '@fluidframework/container-definitions';
|
|
42
|
+
import { IRuntime } from '@fluidframework/container-definitions/internal';
|
|
43
43
|
import { ISequencedDocumentMessage } from '@fluidframework/protocol-definitions';
|
|
44
44
|
import { ISignalMessage } from '@fluidframework/protocol-definitions';
|
|
45
45
|
import { ISnapshotTree } from '@fluidframework/protocol-definitions';
|
|
46
|
-
import { ISummarizeResult } from '@fluidframework/runtime-definitions';
|
|
47
|
-
import { ISummarizerNodeWithGC } from '@fluidframework/runtime-definitions';
|
|
46
|
+
import { ISummarizeResult } from '@fluidframework/runtime-definitions/internal';
|
|
47
|
+
import { ISummarizerNodeWithGC } from '@fluidframework/runtime-definitions/internal';
|
|
48
48
|
import { ISummaryAck } from '@fluidframework/protocol-definitions';
|
|
49
49
|
import { ISummaryContent } from '@fluidframework/protocol-definitions';
|
|
50
50
|
import { ISummaryNack } from '@fluidframework/protocol-definitions';
|
|
@@ -55,9 +55,9 @@ import { ITelemetryBaseLogger } from '@fluidframework/core-interfaces';
|
|
|
55
55
|
import { ITelemetryContext } from '@fluidframework/runtime-definitions';
|
|
56
56
|
import { ITelemetryLoggerExt } from '@fluidframework/telemetry-utils';
|
|
57
57
|
import { MessageType } from '@fluidframework/protocol-definitions';
|
|
58
|
-
import { MonitoringContext } from '@fluidframework/telemetry-utils';
|
|
59
|
-
import { NamedFluidDataStoreRegistryEntries } from '@fluidframework/runtime-definitions';
|
|
60
|
-
import { SummarizeInternalFn } from '@fluidframework/runtime-definitions';
|
|
58
|
+
import { MonitoringContext } from '@fluidframework/telemetry-utils/internal';
|
|
59
|
+
import { NamedFluidDataStoreRegistryEntries } from '@fluidframework/runtime-definitions/internal';
|
|
60
|
+
import { SummarizeInternalFn } from '@fluidframework/runtime-definitions/internal';
|
|
61
61
|
import { TypedEventEmitter } from '@fluid-internal/client-utils';
|
|
62
62
|
|
|
63
63
|
/* Excluded from this release type: agentSchedulerId */
|
|
@@ -178,6 +178,7 @@ export declare class ContainerRuntime extends TypedEventEmitter<IContainerRuntim
|
|
|
178
178
|
compressionLz4?: true | undefined;
|
|
179
179
|
idCompressorMode?: IdCompressorMode;
|
|
180
180
|
opGroupingEnabled?: true | undefined;
|
|
181
|
+
disallowedVersions?: string[] | undefined;
|
|
181
182
|
};
|
|
182
183
|
private _idCompressor;
|
|
183
184
|
private pendingIdCompressorOps;
|
|
@@ -444,10 +445,10 @@ export declare class ContainerRuntime extends TypedEventEmitter<IContainerRuntim
|
|
|
444
445
|
/**
|
|
445
446
|
* Submits the signal to be sent to other clients.
|
|
446
447
|
* @param type - Type of the signal.
|
|
447
|
-
* @param content - Content of the signal.
|
|
448
|
+
* @param content - Content of the signal. Should be a JSON serializable object or primitive.
|
|
448
449
|
* @param targetClientId - When specified, the signal is only sent to the provided client id.
|
|
449
450
|
*/
|
|
450
|
-
submitSignal(type: string, content:
|
|
451
|
+
submitSignal(type: string, content: unknown, targetClientId?: string): void;
|
|
451
452
|
setAttachState(attachState: AttachState.Attaching | AttachState.Attached): void;
|
|
452
453
|
/**
|
|
453
454
|
* Create a summary. Used when attaching or serializing a detached container.
|
|
@@ -663,7 +664,7 @@ export declare const disabledCompressionConfig: ICompressionRuntimeOptions;
|
|
|
663
664
|
* we want them to continue to collaborate alongside clients who support that capability, but such capability is shipping dark for now.
|
|
664
665
|
* @alpha
|
|
665
666
|
*/
|
|
666
|
-
export declare type DocumentSchemaValueType = string | true | number | undefined;
|
|
667
|
+
export declare type DocumentSchemaValueType = string | string[] | true | number | undefined;
|
|
667
668
|
|
|
668
669
|
/**
|
|
669
670
|
* Controller of document schema.
|
|
@@ -694,6 +695,18 @@ export declare type DocumentSchemaValueType = string | true | number | undefined
|
|
|
694
695
|
* clients who do not understand such feature will continue to fail to open such documents, as such documents very
|
|
695
696
|
* likely contain data in a new format.
|
|
696
697
|
*
|
|
698
|
+
* Controller operates with 4 schemas:
|
|
699
|
+
* - document schema: whatever we loaded from summary metadata + ops. It follows eventuall consistency rules (i.e. like DDS).
|
|
700
|
+
* - desired schema - what client is asking for to have (i.e. all the desired settings, based on runtime options / feature gates).
|
|
701
|
+
* - session schema - current session schema. It's "and" of the above two schemas.
|
|
702
|
+
* - future schema - "or" of document and desires schemas.
|
|
703
|
+
*
|
|
704
|
+
* "or" & "and" operators are defined individually for each property. For Boolean properties it's literally &&, || operators.
|
|
705
|
+
* But for other properties it's more nuanced.
|
|
706
|
+
*
|
|
707
|
+
* Whenver document schema does not match future schema, controller will send an op that attempts to changs documents schema to
|
|
708
|
+
* future schema.
|
|
709
|
+
*
|
|
697
710
|
* Users of this class need to use DocumentsSchemaController.sessionSchema to determine what features can be used.
|
|
698
711
|
*
|
|
699
712
|
* There are two modes this class can operate:
|
|
@@ -728,18 +741,22 @@ export declare class DocumentsSchemaController {
|
|
|
728
741
|
sessionSchema: IDocumentSchemaCurrent;
|
|
729
742
|
/**
|
|
730
743
|
* Constructs DocumentsSchemaController that controls current schema and processes around it, including changes in schema.
|
|
731
|
-
* @param explicitSchemaControl - Tells if schema changes are done implicitly (without ops - legacy behavior), or go through formal schema change ops process.
|
|
732
744
|
* @param existing - Is the document existing document, or a new doc.
|
|
733
745
|
* @param documentMetadataSchema - current document's schema, if present.
|
|
734
|
-
* @param
|
|
735
|
-
* @param
|
|
736
|
-
* @param opGroupingEnabled - true if it's desired to use op grouping.
|
|
746
|
+
* @param features - features of the document schema that current session wants to see enabled.
|
|
747
|
+
* @param onSchemaChange - callback that is called whenever schema is changed (not called on creation / load, only when processing document schema change ops)
|
|
737
748
|
*/
|
|
738
749
|
constructor(existing: boolean, documentMetadataSchema: IDocumentSchema | undefined, features: IDocumentSchemaFeatures, onSchemaChange: (schema: IDocumentSchemaCurrent) => void);
|
|
739
750
|
summarizeDocumentSchema(refSeq: number): IDocumentSchemaCurrent | undefined;
|
|
740
|
-
|
|
751
|
+
/**
|
|
752
|
+
* Called by Container runtime whenever it is about to send some op.
|
|
753
|
+
* It gives opportunity for controller to issue its own ops - we do not want to send ops if there are no local changes in document.
|
|
754
|
+
* @returns Optional message to send.
|
|
755
|
+
*/
|
|
756
|
+
maybeSendSchemaMessage(): IDocumentSchemaChangeMessage | undefined;
|
|
741
757
|
/**
|
|
742
758
|
* Process document schema change message
|
|
759
|
+
* Called by ContainerRuntime whenever it sees document schema messages.
|
|
743
760
|
* @param content - content of the message
|
|
744
761
|
* @param local - whether op is local
|
|
745
762
|
* @param sequenceNumber - sequence number of the op
|
|
@@ -1129,6 +1146,17 @@ export declare interface IDocumentSchemaFeatures {
|
|
|
1129
1146
|
compressionLz4: boolean;
|
|
1130
1147
|
idCompressorMode: IdCompressorMode;
|
|
1131
1148
|
opGroupingEnabled: boolean;
|
|
1149
|
+
/**
|
|
1150
|
+
* List of disallowed versions of the runtime.
|
|
1151
|
+
* This option is sticky. Once a version of runtime is added to this list (when supplied to DocumentsSchemaController's constructor)
|
|
1152
|
+
* it will be added to the list of disallowed versions and stored in document metadata.
|
|
1153
|
+
* Each runtime checks if its version is in this list on container open. If it is, it immediately exits with error message
|
|
1154
|
+
* indicating to the user that this version is no longer supported.
|
|
1155
|
+
* Currently there is no mechanism to remove version from this list. I.e. If it was once added to the list,
|
|
1156
|
+
* it gets added to any document metadata (documents that gets open by this runtime) and there is no way to clear it from document's
|
|
1157
|
+
* metadata.
|
|
1158
|
+
*/
|
|
1159
|
+
disallowedVersions: string[];
|
|
1132
1160
|
}
|
|
1133
1161
|
|
|
1134
1162
|
/**
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
import { AliasResult } from '@fluidframework/runtime-definitions';
|
|
1
|
+
import { AliasResult } from '@fluidframework/runtime-definitions/internal';
|
|
2
2
|
import { AttachState } from '@fluidframework/container-definitions';
|
|
3
|
-
import { ContainerWarning } from '@fluidframework/container-definitions';
|
|
4
|
-
import { CreateChildSummarizerNodeFn } from '@fluidframework/runtime-definitions';
|
|
5
|
-
import { CreateChildSummarizerNodeParam } from '@fluidframework/runtime-definitions';
|
|
6
|
-
import { FluidDataStoreRegistryEntry } from '@fluidframework/runtime-definitions';
|
|
3
|
+
import { ContainerWarning } from '@fluidframework/container-definitions/internal';
|
|
4
|
+
import { CreateChildSummarizerNodeFn } from '@fluidframework/runtime-definitions/internal';
|
|
5
|
+
import { CreateChildSummarizerNodeParam } from '@fluidframework/runtime-definitions/internal';
|
|
6
|
+
import { FluidDataStoreRegistryEntry } from '@fluidframework/runtime-definitions/internal';
|
|
7
7
|
import { FluidObject } from '@fluidframework/core-interfaces';
|
|
8
|
-
import { FlushMode } from '@fluidframework/runtime-definitions';
|
|
8
|
+
import { FlushMode } from '@fluidframework/runtime-definitions/internal';
|
|
9
9
|
import { IAudience } from '@fluidframework/container-definitions';
|
|
10
10
|
import { IClientDetails } from '@fluidframework/protocol-definitions';
|
|
11
|
-
import { IContainerContext } from '@fluidframework/container-definitions';
|
|
12
|
-
import { IContainerRuntime } from '@fluidframework/container-runtime-definitions';
|
|
13
|
-
import { IContainerRuntimeBase } from '@fluidframework/runtime-definitions';
|
|
14
|
-
import { IContainerRuntimeEvents } from '@fluidframework/container-runtime-definitions';
|
|
11
|
+
import { IContainerContext } from '@fluidframework/container-definitions/internal';
|
|
12
|
+
import { IContainerRuntime } from '@fluidframework/container-runtime-definitions/internal';
|
|
13
|
+
import { IContainerRuntimeBase } from '@fluidframework/runtime-definitions/internal';
|
|
14
|
+
import { IContainerRuntimeEvents } from '@fluidframework/container-runtime-definitions/internal';
|
|
15
15
|
import { ICriticalContainerError } from '@fluidframework/container-definitions';
|
|
16
|
-
import { IDataStore } from '@fluidframework/runtime-definitions';
|
|
16
|
+
import { IDataStore } from '@fluidframework/runtime-definitions/internal';
|
|
17
17
|
import { IDeltaManager } from '@fluidframework/container-definitions';
|
|
18
18
|
import { IDisposable } from '@fluidframework/core-interfaces';
|
|
19
19
|
import { IDocumentMessage } from '@fluidframework/protocol-definitions';
|
|
20
|
-
import { IDocumentStorageService } from '@fluidframework/driver-definitions';
|
|
21
|
-
import { IEnvelope } from '@fluidframework/runtime-definitions';
|
|
20
|
+
import { IDocumentStorageService } from '@fluidframework/driver-definitions/internal';
|
|
21
|
+
import { IEnvelope } from '@fluidframework/runtime-definitions/internal';
|
|
22
22
|
import { IEvent } from '@fluidframework/core-interfaces';
|
|
23
23
|
import { IEventProvider } from '@fluidframework/core-interfaces';
|
|
24
|
-
import { IFluidDataStoreChannel } from '@fluidframework/runtime-definitions';
|
|
25
|
-
import { IFluidDataStoreContext } from '@fluidframework/runtime-definitions';
|
|
26
|
-
import { IFluidDataStoreContextDetached } from '@fluidframework/runtime-definitions';
|
|
27
|
-
import { IFluidDataStoreFactory } from '@fluidframework/runtime-definitions';
|
|
28
|
-
import { IFluidDataStoreRegistry } from '@fluidframework/runtime-definitions';
|
|
24
|
+
import { IFluidDataStoreChannel } from '@fluidframework/runtime-definitions/internal';
|
|
25
|
+
import { IFluidDataStoreContext } from '@fluidframework/runtime-definitions/internal';
|
|
26
|
+
import { IFluidDataStoreContextDetached } from '@fluidframework/runtime-definitions/internal';
|
|
27
|
+
import { IFluidDataStoreFactory } from '@fluidframework/runtime-definitions/internal';
|
|
28
|
+
import { IFluidDataStoreRegistry } from '@fluidframework/runtime-definitions/internal';
|
|
29
29
|
import { IFluidHandle } from '@fluidframework/core-interfaces';
|
|
30
30
|
import { IFluidHandleContext } from '@fluidframework/core-interfaces';
|
|
31
|
-
import { IFluidParentContext } from '@fluidframework/runtime-definitions';
|
|
31
|
+
import { IFluidParentContext } from '@fluidframework/runtime-definitions/internal';
|
|
32
32
|
import { IGarbageCollectionData } from '@fluidframework/runtime-definitions';
|
|
33
|
-
import { IGarbageCollectionDetailsBase } from '@fluidframework/runtime-definitions';
|
|
34
|
-
import { IGetPendingLocalStateProps } from '@fluidframework/container-definitions';
|
|
33
|
+
import { IGarbageCollectionDetailsBase } from '@fluidframework/runtime-definitions/internal';
|
|
34
|
+
import { IGetPendingLocalStateProps } from '@fluidframework/container-definitions/internal';
|
|
35
35
|
import type { IIdCompressor } from '@fluidframework/id-compressor';
|
|
36
|
-
import type { IIdCompressorCore } from '@fluidframework/id-compressor';
|
|
36
|
+
import type { IIdCompressorCore } from '@fluidframework/id-compressor/internal';
|
|
37
37
|
import { IInboundSignalMessage } from '@fluidframework/runtime-definitions';
|
|
38
38
|
import { IProvideFluidHandleContext } from '@fluidframework/core-interfaces';
|
|
39
39
|
import { IQuorumClients } from '@fluidframework/protocol-definitions';
|
|
40
40
|
import { IRequest } from '@fluidframework/core-interfaces';
|
|
41
41
|
import { IResponse } from '@fluidframework/core-interfaces';
|
|
42
|
-
import { IRuntime } from '@fluidframework/container-definitions';
|
|
42
|
+
import { IRuntime } from '@fluidframework/container-definitions/internal';
|
|
43
43
|
import { ISequencedDocumentMessage } from '@fluidframework/protocol-definitions';
|
|
44
44
|
import { ISignalMessage } from '@fluidframework/protocol-definitions';
|
|
45
45
|
import { ISnapshotTree } from '@fluidframework/protocol-definitions';
|
|
46
|
-
import { ISummarizeResult } from '@fluidframework/runtime-definitions';
|
|
47
|
-
import { ISummarizerNodeWithGC } from '@fluidframework/runtime-definitions';
|
|
46
|
+
import { ISummarizeResult } from '@fluidframework/runtime-definitions/internal';
|
|
47
|
+
import { ISummarizerNodeWithGC } from '@fluidframework/runtime-definitions/internal';
|
|
48
48
|
import { ISummaryAck } from '@fluidframework/protocol-definitions';
|
|
49
49
|
import { ISummaryContent } from '@fluidframework/protocol-definitions';
|
|
50
50
|
import { ISummaryNack } from '@fluidframework/protocol-definitions';
|
|
@@ -55,9 +55,9 @@ import { ITelemetryBaseLogger } from '@fluidframework/core-interfaces';
|
|
|
55
55
|
import { ITelemetryContext } from '@fluidframework/runtime-definitions';
|
|
56
56
|
import { ITelemetryLoggerExt } from '@fluidframework/telemetry-utils';
|
|
57
57
|
import { MessageType } from '@fluidframework/protocol-definitions';
|
|
58
|
-
import { MonitoringContext } from '@fluidframework/telemetry-utils';
|
|
59
|
-
import { NamedFluidDataStoreRegistryEntries } from '@fluidframework/runtime-definitions';
|
|
60
|
-
import { SummarizeInternalFn } from '@fluidframework/runtime-definitions';
|
|
58
|
+
import { MonitoringContext } from '@fluidframework/telemetry-utils/internal';
|
|
59
|
+
import { NamedFluidDataStoreRegistryEntries } from '@fluidframework/runtime-definitions/internal';
|
|
60
|
+
import { SummarizeInternalFn } from '@fluidframework/runtime-definitions/internal';
|
|
61
61
|
import { TypedEventEmitter } from '@fluid-internal/client-utils';
|
|
62
62
|
|
|
63
63
|
/* Excluded from this release type: agentSchedulerId */
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
import { AliasResult } from '@fluidframework/runtime-definitions';
|
|
1
|
+
import { AliasResult } from '@fluidframework/runtime-definitions/internal';
|
|
2
2
|
import { AttachState } from '@fluidframework/container-definitions';
|
|
3
|
-
import { ContainerWarning } from '@fluidframework/container-definitions';
|
|
4
|
-
import { CreateChildSummarizerNodeFn } from '@fluidframework/runtime-definitions';
|
|
5
|
-
import { CreateChildSummarizerNodeParam } from '@fluidframework/runtime-definitions';
|
|
6
|
-
import { FluidDataStoreRegistryEntry } from '@fluidframework/runtime-definitions';
|
|
3
|
+
import { ContainerWarning } from '@fluidframework/container-definitions/internal';
|
|
4
|
+
import { CreateChildSummarizerNodeFn } from '@fluidframework/runtime-definitions/internal';
|
|
5
|
+
import { CreateChildSummarizerNodeParam } from '@fluidframework/runtime-definitions/internal';
|
|
6
|
+
import { FluidDataStoreRegistryEntry } from '@fluidframework/runtime-definitions/internal';
|
|
7
7
|
import { FluidObject } from '@fluidframework/core-interfaces';
|
|
8
|
-
import { FlushMode } from '@fluidframework/runtime-definitions';
|
|
8
|
+
import { FlushMode } from '@fluidframework/runtime-definitions/internal';
|
|
9
9
|
import { IAudience } from '@fluidframework/container-definitions';
|
|
10
10
|
import { IClientDetails } from '@fluidframework/protocol-definitions';
|
|
11
|
-
import { IContainerContext } from '@fluidframework/container-definitions';
|
|
12
|
-
import { IContainerRuntime } from '@fluidframework/container-runtime-definitions';
|
|
13
|
-
import { IContainerRuntimeBase } from '@fluidframework/runtime-definitions';
|
|
14
|
-
import { IContainerRuntimeEvents } from '@fluidframework/container-runtime-definitions';
|
|
11
|
+
import { IContainerContext } from '@fluidframework/container-definitions/internal';
|
|
12
|
+
import { IContainerRuntime } from '@fluidframework/container-runtime-definitions/internal';
|
|
13
|
+
import { IContainerRuntimeBase } from '@fluidframework/runtime-definitions/internal';
|
|
14
|
+
import { IContainerRuntimeEvents } from '@fluidframework/container-runtime-definitions/internal';
|
|
15
15
|
import { ICriticalContainerError } from '@fluidframework/container-definitions';
|
|
16
|
-
import { IDataStore } from '@fluidframework/runtime-definitions';
|
|
16
|
+
import { IDataStore } from '@fluidframework/runtime-definitions/internal';
|
|
17
17
|
import { IDeltaManager } from '@fluidframework/container-definitions';
|
|
18
18
|
import { IDisposable } from '@fluidframework/core-interfaces';
|
|
19
19
|
import { IDocumentMessage } from '@fluidframework/protocol-definitions';
|
|
20
|
-
import { IDocumentStorageService } from '@fluidframework/driver-definitions';
|
|
21
|
-
import { IEnvelope } from '@fluidframework/runtime-definitions';
|
|
20
|
+
import { IDocumentStorageService } from '@fluidframework/driver-definitions/internal';
|
|
21
|
+
import { IEnvelope } from '@fluidframework/runtime-definitions/internal';
|
|
22
22
|
import { IEvent } from '@fluidframework/core-interfaces';
|
|
23
23
|
import { IEventProvider } from '@fluidframework/core-interfaces';
|
|
24
|
-
import { IFluidDataStoreChannel } from '@fluidframework/runtime-definitions';
|
|
25
|
-
import { IFluidDataStoreContext } from '@fluidframework/runtime-definitions';
|
|
26
|
-
import { IFluidDataStoreContextDetached } from '@fluidframework/runtime-definitions';
|
|
27
|
-
import { IFluidDataStoreFactory } from '@fluidframework/runtime-definitions';
|
|
28
|
-
import { IFluidDataStoreRegistry } from '@fluidframework/runtime-definitions';
|
|
24
|
+
import { IFluidDataStoreChannel } from '@fluidframework/runtime-definitions/internal';
|
|
25
|
+
import { IFluidDataStoreContext } from '@fluidframework/runtime-definitions/internal';
|
|
26
|
+
import { IFluidDataStoreContextDetached } from '@fluidframework/runtime-definitions/internal';
|
|
27
|
+
import { IFluidDataStoreFactory } from '@fluidframework/runtime-definitions/internal';
|
|
28
|
+
import { IFluidDataStoreRegistry } from '@fluidframework/runtime-definitions/internal';
|
|
29
29
|
import { IFluidHandle } from '@fluidframework/core-interfaces';
|
|
30
30
|
import { IFluidHandleContext } from '@fluidframework/core-interfaces';
|
|
31
|
-
import { IFluidParentContext } from '@fluidframework/runtime-definitions';
|
|
31
|
+
import { IFluidParentContext } from '@fluidframework/runtime-definitions/internal';
|
|
32
32
|
import { IGarbageCollectionData } from '@fluidframework/runtime-definitions';
|
|
33
|
-
import { IGarbageCollectionDetailsBase } from '@fluidframework/runtime-definitions';
|
|
34
|
-
import { IGetPendingLocalStateProps } from '@fluidframework/container-definitions';
|
|
33
|
+
import { IGarbageCollectionDetailsBase } from '@fluidframework/runtime-definitions/internal';
|
|
34
|
+
import { IGetPendingLocalStateProps } from '@fluidframework/container-definitions/internal';
|
|
35
35
|
import type { IIdCompressor } from '@fluidframework/id-compressor';
|
|
36
|
-
import type { IIdCompressorCore } from '@fluidframework/id-compressor';
|
|
36
|
+
import type { IIdCompressorCore } from '@fluidframework/id-compressor/internal';
|
|
37
37
|
import { IInboundSignalMessage } from '@fluidframework/runtime-definitions';
|
|
38
38
|
import { IProvideFluidHandleContext } from '@fluidframework/core-interfaces';
|
|
39
39
|
import { IQuorumClients } from '@fluidframework/protocol-definitions';
|
|
40
40
|
import { IRequest } from '@fluidframework/core-interfaces';
|
|
41
41
|
import { IResponse } from '@fluidframework/core-interfaces';
|
|
42
|
-
import { IRuntime } from '@fluidframework/container-definitions';
|
|
42
|
+
import { IRuntime } from '@fluidframework/container-definitions/internal';
|
|
43
43
|
import { ISequencedDocumentMessage } from '@fluidframework/protocol-definitions';
|
|
44
44
|
import { ISignalMessage } from '@fluidframework/protocol-definitions';
|
|
45
45
|
import { ISnapshotTree } from '@fluidframework/protocol-definitions';
|
|
46
|
-
import { ISummarizeResult } from '@fluidframework/runtime-definitions';
|
|
47
|
-
import { ISummarizerNodeWithGC } from '@fluidframework/runtime-definitions';
|
|
46
|
+
import { ISummarizeResult } from '@fluidframework/runtime-definitions/internal';
|
|
47
|
+
import { ISummarizerNodeWithGC } from '@fluidframework/runtime-definitions/internal';
|
|
48
48
|
import { ISummaryAck } from '@fluidframework/protocol-definitions';
|
|
49
49
|
import { ISummaryContent } from '@fluidframework/protocol-definitions';
|
|
50
50
|
import { ISummaryNack } from '@fluidframework/protocol-definitions';
|
|
@@ -55,9 +55,9 @@ import { ITelemetryBaseLogger } from '@fluidframework/core-interfaces';
|
|
|
55
55
|
import { ITelemetryContext } from '@fluidframework/runtime-definitions';
|
|
56
56
|
import { ITelemetryLoggerExt } from '@fluidframework/telemetry-utils';
|
|
57
57
|
import { MessageType } from '@fluidframework/protocol-definitions';
|
|
58
|
-
import { MonitoringContext } from '@fluidframework/telemetry-utils';
|
|
59
|
-
import { NamedFluidDataStoreRegistryEntries } from '@fluidframework/runtime-definitions';
|
|
60
|
-
import { SummarizeInternalFn } from '@fluidframework/runtime-definitions';
|
|
58
|
+
import { MonitoringContext } from '@fluidframework/telemetry-utils/internal';
|
|
59
|
+
import { NamedFluidDataStoreRegistryEntries } from '@fluidframework/runtime-definitions/internal';
|
|
60
|
+
import { SummarizeInternalFn } from '@fluidframework/runtime-definitions/internal';
|
|
61
61
|
import { TypedEventEmitter } from '@fluid-internal/client-utils';
|
|
62
62
|
|
|
63
63
|
/* Excluded from this release type: agentSchedulerId */
|