@fluidframework/container-runtime 2.0.0-rc.2.0.2 → 2.0.0-rc.3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/api-report/container-runtime.api.md +471 -52
- package/dist/batchTracker.d.ts +1 -1
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js +4 -4
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager.d.ts +33 -30
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +82 -107
- package/dist/blobManager.js.map +1 -1
- package/dist/channelCollection.d.ts +27 -22
- package/dist/channelCollection.d.ts.map +1 -1
- package/dist/channelCollection.js +155 -165
- package/dist/channelCollection.js.map +1 -1
- package/dist/connectionTelemetry.d.ts +3 -3
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +17 -17
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerHandleContext.d.ts.map +1 -1
- package/dist/containerHandleContext.js +2 -2
- package/dist/containerHandleContext.js.map +1 -1
- package/dist/containerRuntime.d.ts +42 -39
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +425 -292
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.d.ts +1 -1
- package/dist/dataStore.d.ts.map +1 -1
- package/dist/dataStore.js +8 -8
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +58 -19
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +169 -114
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts +1 -0
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js +12 -11
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/dataStoreRegistry.d.ts +5 -1
- package/dist/dataStoreRegistry.d.ts.map +1 -1
- package/dist/dataStoreRegistry.js +4 -4
- package/dist/dataStoreRegistry.js.map +1 -1
- package/dist/deltaManagerSummarizerProxy.d.ts +1 -1
- package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
- package/dist/deltaManagerSummarizerProxy.js.map +1 -1
- package/dist/deltaScheduler.d.ts +1 -1
- package/dist/deltaScheduler.d.ts.map +1 -1
- package/dist/deltaScheduler.js +6 -6
- package/dist/deltaScheduler.js.map +1 -1
- package/dist/error.d.ts +1 -1
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +4 -4
- package/dist/error.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts +3 -2
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +23 -23
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.d.ts +2 -2
- package/dist/gc/gcConfigs.d.ts.map +1 -1
- package/dist/gc/gcConfigs.js +4 -5
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +4 -5
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcHelpers.d.ts +5 -1
- package/dist/gc/gcHelpers.d.ts.map +1 -1
- package/dist/gc/gcHelpers.js +21 -12
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts +2 -2
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js +11 -11
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts +2 -1
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +11 -9
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.js +6 -6
- package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
- package/dist/gc/index.d.ts +1 -1
- package/dist/gc/index.d.ts.map +1 -1
- package/dist/gc/index.js +2 -1
- package/dist/gc/index.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/legacy.d.ts +91 -0
- package/dist/messageTypes.d.ts +11 -5
- package/dist/messageTypes.d.ts.map +1 -1
- package/dist/messageTypes.js +4 -0
- package/dist/messageTypes.js.map +1 -1
- package/dist/opLifecycle/batchManager.d.ts.map +1 -1
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/definitions.d.ts +2 -20
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -1
- package/dist/opLifecycle/index.d.ts +3 -3
- package/dist/opLifecycle/index.d.ts.map +1 -1
- package/dist/opLifecycle/index.js +3 -1
- package/dist/opLifecycle/index.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +5 -6
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts +15 -4
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +62 -63
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts +2 -1
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js +14 -16
- package/dist/opLifecycle/opGroupingManager.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts +12 -4
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +63 -53
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +2 -1
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +30 -29
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts +8 -0
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js +36 -32
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/pendingStateManager.d.ts +1 -1
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +18 -18
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/public.d.ts +12 -0
- package/dist/scheduleManager.d.ts +1 -1
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js +28 -24
- package/dist/scheduleManager.js.map +1 -1
- package/dist/storageServiceWithAttachBlobs.d.ts +2 -2
- package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -1
- package/dist/storageServiceWithAttachBlobs.js +2 -2
- package/dist/storageServiceWithAttachBlobs.js.map +1 -1
- package/dist/summary/documentSchema.d.ts +209 -0
- package/dist/summary/documentSchema.d.ts.map +1 -0
- package/dist/summary/documentSchema.js +390 -0
- package/dist/summary/documentSchema.js.map +1 -0
- package/dist/summary/index.d.ts +2 -1
- package/dist/summary/index.d.ts.map +1 -1
- package/dist/summary/index.js +4 -1
- package/dist/summary/index.js.map +1 -1
- package/dist/summary/orderedClientElection.d.ts +2 -2
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js +12 -7
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -1
- package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.js +3 -3
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/dist/summary/runningSummarizer.d.ts +3 -3
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +16 -16
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.d.ts +3 -2
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +13 -13
- package/dist/summary/summarizer.js.map +1 -1
- package/dist/summary/summarizerClientElection.d.ts +2 -2
- package/dist/summary/summarizerClientElection.d.ts.map +1 -1
- package/dist/summary/summarizerClientElection.js.map +1 -1
- package/dist/summary/summarizerHeuristics.d.ts +1 -1
- package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
- package/dist/summary/summarizerHeuristics.js +2 -2
- package/dist/summary/summarizerHeuristics.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.d.ts +3 -2
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js +28 -28
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.js +3 -3
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +14 -14
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +5 -3
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryCollection.d.ts +2 -2
- package/dist/summary/summaryCollection.d.ts.map +1 -1
- package/dist/summary/summaryCollection.js +7 -7
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +6 -17
- package/dist/summary/summaryFormat.d.ts.map +1 -1
- package/dist/summary/summaryFormat.js +8 -8
- package/dist/summary/summaryFormat.js.map +1 -1
- package/dist/summary/summaryGenerator.d.ts +4 -3
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +17 -17
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryManager.d.ts +1 -1
- package/dist/summary/summaryManager.d.ts.map +1 -1
- package/dist/summary/summaryManager.js +15 -14
- package/dist/summary/summaryManager.js.map +1 -1
- package/internal.d.ts +11 -0
- package/legacy.d.ts +11 -0
- package/lib/batchTracker.d.ts +1 -1
- package/lib/batchTracker.d.ts.map +1 -1
- package/lib/batchTracker.js +2 -2
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager.d.ts +33 -30
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +48 -73
- package/lib/blobManager.js.map +1 -1
- package/lib/channelCollection.d.ts +27 -22
- package/lib/channelCollection.d.ts.map +1 -1
- package/lib/channelCollection.js +96 -106
- package/lib/channelCollection.js.map +1 -1
- package/lib/connectionTelemetry.d.ts +3 -3
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +3 -3
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerHandleContext.d.ts.map +1 -1
- package/lib/containerHandleContext.js +1 -1
- package/lib/containerHandleContext.js.map +1 -1
- package/lib/containerRuntime.d.ts +42 -39
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +276 -141
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStore.d.ts +1 -1
- package/lib/dataStore.d.ts.map +1 -1
- package/lib/dataStore.js +3 -3
- package/lib/dataStore.js.map +1 -1
- package/lib/dataStoreContext.d.ts +58 -19
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +107 -52
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.d.ts +1 -0
- package/lib/dataStoreContexts.d.ts.map +1 -1
- package/lib/dataStoreContexts.js +3 -2
- package/lib/dataStoreContexts.js.map +1 -1
- package/lib/dataStoreRegistry.d.ts +5 -1
- package/lib/dataStoreRegistry.d.ts.map +1 -1
- package/lib/dataStoreRegistry.js +1 -1
- package/lib/dataStoreRegistry.js.map +1 -1
- package/lib/deltaManagerSummarizerProxy.d.ts +1 -1
- package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -1
- package/lib/deltaManagerSummarizerProxy.js.map +1 -1
- package/lib/deltaScheduler.d.ts +1 -1
- package/lib/deltaScheduler.d.ts.map +1 -1
- package/lib/deltaScheduler.js +1 -1
- package/lib/deltaScheduler.js.map +1 -1
- package/lib/error.d.ts +1 -1
- package/lib/error.d.ts.map +1 -1
- package/lib/error.js +2 -2
- package/lib/error.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts +3 -2
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +8 -8
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcConfigs.d.ts +2 -2
- package/lib/gc/gcConfigs.d.ts.map +1 -1
- package/lib/gc/gcConfigs.js +4 -5
- package/lib/gc/gcConfigs.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +4 -5
- package/lib/gc/gcDefinitions.d.ts.map +1 -1
- package/lib/gc/gcDefinitions.js.map +1 -1
- package/lib/gc/gcHelpers.d.ts +5 -1
- package/lib/gc/gcHelpers.d.ts.map +1 -1
- package/lib/gc/gcHelpers.js +10 -2
- package/lib/gc/gcHelpers.js.map +1 -1
- package/lib/gc/gcSummaryStateTracker.d.ts +2 -2
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/lib/gc/gcSummaryStateTracker.js +2 -2
- package/lib/gc/gcSummaryStateTracker.js.map +1 -1
- package/lib/gc/gcTelemetry.d.ts +2 -1
- package/lib/gc/gcTelemetry.d.ts.map +1 -1
- package/lib/gc/gcTelemetry.js +4 -2
- package/lib/gc/gcTelemetry.js.map +1 -1
- package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
- package/lib/gc/gcUnreferencedStateTracker.js +2 -2
- package/lib/gc/gcUnreferencedStateTracker.js.map +1 -1
- package/lib/gc/index.d.ts +1 -1
- package/lib/gc/index.d.ts.map +1 -1
- package/lib/gc/index.js +1 -1
- package/lib/gc/index.js.map +1 -1
- package/lib/index.d.ts +5 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +5 -2
- package/lib/index.js.map +1 -1
- package/lib/legacy.d.ts +91 -0
- package/lib/messageTypes.d.ts +11 -5
- package/lib/messageTypes.d.ts.map +1 -1
- package/lib/messageTypes.js +4 -0
- package/lib/messageTypes.js.map +1 -1
- package/lib/opLifecycle/batchManager.d.ts.map +1 -1
- package/lib/opLifecycle/batchManager.js.map +1 -1
- package/lib/opLifecycle/definitions.d.ts +2 -20
- package/lib/opLifecycle/definitions.d.ts.map +1 -1
- package/lib/opLifecycle/definitions.js.map +1 -1
- package/lib/opLifecycle/index.d.ts +3 -3
- package/lib/opLifecycle/index.d.ts.map +1 -1
- package/lib/opLifecycle/index.js +2 -2
- package/lib/opLifecycle/index.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js +2 -3
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts +15 -4
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +61 -62
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts +2 -1
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/lib/opLifecycle/opGroupingManager.js +9 -12
- package/lib/opLifecycle/opGroupingManager.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts +12 -4
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +47 -38
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +2 -1
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +19 -18
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts +8 -0
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.js +36 -32
- package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/pendingStateManager.d.ts +1 -1
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +2 -2
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/public.d.ts +12 -0
- package/lib/scheduleManager.d.ts +1 -1
- package/lib/scheduleManager.d.ts.map +1 -1
- package/lib/scheduleManager.js +7 -3
- package/lib/scheduleManager.js.map +1 -1
- package/lib/storageServiceWithAttachBlobs.d.ts +2 -2
- package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -1
- package/lib/storageServiceWithAttachBlobs.js +1 -1
- package/lib/storageServiceWithAttachBlobs.js.map +1 -1
- package/lib/summary/documentSchema.d.ts +209 -0
- package/lib/summary/documentSchema.d.ts.map +1 -0
- package/lib/summary/documentSchema.js +386 -0
- package/lib/summary/documentSchema.js.map +1 -0
- package/lib/summary/index.d.ts +2 -1
- package/lib/summary/index.d.ts.map +1 -1
- package/lib/summary/index.js +1 -0
- package/lib/summary/index.js.map +1 -1
- package/lib/summary/orderedClientElection.d.ts +2 -2
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js +7 -2
- package/lib/summary/orderedClientElection.js.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.d.ts +1 -1
- package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/lib/summary/runningSummarizer.d.ts +3 -3
- package/lib/summary/runningSummarizer.d.ts.map +1 -1
- package/lib/summary/runningSummarizer.js +3 -3
- package/lib/summary/runningSummarizer.js.map +1 -1
- package/lib/summary/summarizer.d.ts +3 -2
- package/lib/summary/summarizer.d.ts.map +1 -1
- package/lib/summary/summarizer.js +3 -3
- package/lib/summary/summarizer.js.map +1 -1
- package/lib/summary/summarizerClientElection.d.ts +2 -2
- package/lib/summary/summarizerClientElection.d.ts.map +1 -1
- package/lib/summary/summarizerClientElection.js.map +1 -1
- package/lib/summary/summarizerHeuristics.d.ts +1 -1
- package/lib/summary/summarizerHeuristics.d.ts.map +1 -1
- package/lib/summary/summarizerHeuristics.js +1 -1
- package/lib/summary/summarizerHeuristics.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.d.ts +3 -2
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.js +5 -5
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.js +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +3 -3
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/lib/summary/summarizerTypes.d.ts +5 -3
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryCollection.d.ts +2 -2
- package/lib/summary/summaryCollection.d.ts.map +1 -1
- package/lib/summary/summaryCollection.js +1 -1
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryFormat.d.ts +6 -17
- package/lib/summary/summaryFormat.d.ts.map +1 -1
- package/lib/summary/summaryFormat.js +3 -3
- package/lib/summary/summaryFormat.js.map +1 -1
- package/lib/summary/summaryGenerator.d.ts +4 -3
- package/lib/summary/summaryGenerator.d.ts.map +1 -1
- package/lib/summary/summaryGenerator.js +4 -4
- package/lib/summary/summaryGenerator.js.map +1 -1
- package/lib/summary/summaryManager.d.ts +1 -1
- package/lib/summary/summaryManager.d.ts.map +1 -1
- package/lib/summary/summaryManager.js +9 -8
- package/lib/summary/summaryManager.js.map +1 -1
- package/package.json +57 -65
- package/src/batchTracker.ts +4 -3
- package/src/blobManager.ts +100 -77
- package/src/channelCollection.ts +180 -165
- package/src/connectionTelemetry.ts +12 -12
- package/src/containerHandleContext.ts +3 -2
- package/src/containerRuntime.ts +481 -277
- package/src/dataStore.ts +9 -4
- package/src/dataStoreContext.ts +195 -93
- package/src/dataStoreContexts.ts +5 -2
- package/src/dataStoreRegistry.ts +3 -2
- package/src/deltaManagerSummarizerProxy.ts +1 -1
- package/src/deltaScheduler.ts +2 -1
- package/src/error.ts +2 -2
- package/src/gc/garbageCollection.ts +21 -20
- package/src/gc/gcConfigs.ts +15 -18
- package/src/gc/gcDefinitions.ts +6 -8
- package/src/gc/gcHelpers.ts +22 -5
- package/src/gc/gcSummaryStateTracker.ts +7 -5
- package/src/gc/gcTelemetry.ts +13 -7
- package/src/gc/gcUnreferencedStateTracker.ts +3 -2
- package/src/gc/index.ts +1 -0
- package/src/index.ts +22 -1
- package/src/messageTypes.ts +20 -6
- package/src/opLifecycle/README.md +89 -0
- package/src/opLifecycle/batchManager.ts +1 -0
- package/src/opLifecycle/definitions.ts +3 -21
- package/src/opLifecycle/index.ts +3 -9
- package/src/opLifecycle/opCompressor.ts +6 -5
- package/src/opLifecycle/opDecompressor.ts +90 -100
- package/src/opLifecycle/opGroupingManager.ts +12 -14
- package/src/opLifecycle/opSplitter.ts +76 -48
- package/src/opLifecycle/outbox.ts +30 -38
- package/src/opLifecycle/remoteMessageProcessor.ts +43 -55
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +6 -6
- package/src/scheduleManager.ts +10 -8
- package/src/storageServiceWithAttachBlobs.ts +2 -2
- package/src/summary/documentSchema.ts +631 -0
- package/src/summary/index.ts +10 -1
- package/src/summary/orderedClientElection.ts +7 -7
- package/src/summary/runWhileConnectedCoordinator.ts +3 -2
- package/src/summary/runningSummarizer.ts +22 -20
- package/src/summary/summarizer.ts +17 -15
- package/src/summary/summarizerClientElection.ts +3 -2
- package/src/summary/summarizerHeuristics.ts +4 -2
- package/src/summary/summarizerNode/summarizerNode.ts +20 -18
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +3 -2
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +16 -8
- package/src/summary/summarizerTypes.ts +7 -3
- package/src/summary/summaryCollection.ts +3 -3
- package/src/summary/summaryFormat.ts +14 -26
- package/src/summary/summaryGenerator.ts +12 -15
- package/src/summary/summaryManager.ts +16 -13
- package/api-extractor-cjs.json +0 -8
- package/dist/container-runtime-alpha.d.ts +0 -1753
- package/dist/container-runtime-beta.d.ts +0 -268
- package/dist/container-runtime-public.d.ts +0 -268
- package/dist/container-runtime-untrimmed.d.ts +0 -1893
- package/lib/container-runtime-alpha.d.ts +0 -1753
- package/lib/container-runtime-beta.d.ts +0 -268
- package/lib/container-runtime-public.d.ts +0 -268
- package/lib/container-runtime-untrimmed.d.ts +0 -1893
- package/lib/test/batchTracker.spec.js +0 -88
- package/lib/test/batchTracker.spec.js.map +0 -1
- package/lib/test/blobManager.spec.js +0 -835
- package/lib/test/blobManager.spec.js.map +0 -1
- package/lib/test/channelCollection.spec.js +0 -141
- package/lib/test/channelCollection.spec.js.map +0 -1
- package/lib/test/containerRuntime.spec.js +0 -1748
- package/lib/test/containerRuntime.spec.js.map +0 -1
- package/lib/test/dataStoreContext.spec.js +0 -801
- package/lib/test/dataStoreContext.spec.js.map +0 -1
- package/lib/test/dataStoreCreation.spec.js +0 -312
- package/lib/test/dataStoreCreation.spec.js.map +0 -1
- package/lib/test/dataStoreRegistry.spec.js +0 -26
- package/lib/test/dataStoreRegistry.spec.js.map +0 -1
- package/lib/test/fuzz/fuzzUtils.js +0 -66
- package/lib/test/fuzz/fuzzUtils.js.map +0 -1
- package/lib/test/fuzz/summarizer.fuzz.spec.js +0 -31
- package/lib/test/fuzz/summarizer.fuzz.spec.js.map +0 -1
- package/lib/test/fuzz/summarizerFuzzMocks.js +0 -162
- package/lib/test/fuzz/summarizerFuzzMocks.js.map +0 -1
- package/lib/test/fuzz/summarizerFuzzSuite.js +0 -106
- package/lib/test/fuzz/summarizerFuzzSuite.js.map +0 -1
- package/lib/test/gc/garbageCollection.spec.js +0 -1465
- package/lib/test/gc/garbageCollection.spec.js.map +0 -1
- package/lib/test/gc/gcConfigs.spec.js +0 -690
- package/lib/test/gc/gcConfigs.spec.js.map +0 -1
- package/lib/test/gc/gcHelpers.spec.js +0 -110
- package/lib/test/gc/gcHelpers.spec.js.map +0 -1
- package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +0 -68
- package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +0 -1
- package/lib/test/gc/gcStats.spec.js +0 -391
- package/lib/test/gc/gcStats.spec.js.map +0 -1
- package/lib/test/gc/gcSummaryStateTracker.spec.js +0 -228
- package/lib/test/gc/gcSummaryStateTracker.spec.js.map +0 -1
- package/lib/test/gc/gcTelemetry.spec.js +0 -530
- package/lib/test/gc/gcTelemetry.spec.js.map +0 -1
- package/lib/test/gc/gcUnitTestHelpers.js +0 -29
- package/lib/test/gc/gcUnitTestHelpers.js.map +0 -1
- package/lib/test/gc/gcUnreferencedStateTracker.spec.js +0 -192
- package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +0 -1
- package/lib/test/getPendingBlobs.spec.js +0 -193
- package/lib/test/getPendingBlobs.spec.js.map +0 -1
- package/lib/test/hardwareStats.spec.js +0 -93
- package/lib/test/hardwareStats.spec.js.map +0 -1
- package/lib/test/index.js +0 -6
- package/lib/test/index.js.map +0 -1
- package/lib/test/opLifecycle/OpGroupingManager.spec.js +0 -225
- package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +0 -1
- package/lib/test/opLifecycle/batchManager.spec.js +0 -189
- package/lib/test/opLifecycle/batchManager.spec.js.map +0 -1
- package/lib/test/opLifecycle/opCompressor.spec.js +0 -74
- package/lib/test/opLifecycle/opCompressor.spec.js.map +0 -1
- package/lib/test/opLifecycle/opDecompressor.spec.js +0 -218
- package/lib/test/opLifecycle/opDecompressor.spec.js.map +0 -1
- package/lib/test/opLifecycle/opSplitter.spec.js +0 -272
- package/lib/test/opLifecycle/opSplitter.spec.js.map +0 -1
- package/lib/test/opLifecycle/outbox.spec.js +0 -675
- package/lib/test/opLifecycle/outbox.spec.js.map +0 -1
- package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +0 -196
- package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +0 -1
- package/lib/test/pendingStateManager.spec.js +0 -329
- package/lib/test/pendingStateManager.spec.js.map +0 -1
- package/lib/test/scheduleManager.spec.js +0 -270
- package/lib/test/scheduleManager.spec.js.map +0 -1
- package/lib/test/summarizerNode.spec.js +0 -326
- package/lib/test/summarizerNode.spec.js.map +0 -1
- package/lib/test/summarizerNodeWithGc.spec.js +0 -318
- package/lib/test/summarizerNodeWithGc.spec.js.map +0 -1
- package/lib/test/summary/orderedClientElection.spec.js +0 -535
- package/lib/test/summary/orderedClientElection.spec.js.map +0 -1
- package/lib/test/summary/runningSummarizer.spec.js +0 -1349
- package/lib/test/summary/runningSummarizer.spec.js.map +0 -1
- package/lib/test/summary/summarizer.spec.js +0 -29
- package/lib/test/summary/summarizer.spec.js.map +0 -1
- package/lib/test/summary/summarizerClientElection.spec.js +0 -436
- package/lib/test/summary/summarizerClientElection.spec.js.map +0 -1
- package/lib/test/summary/summarizerHeuristics.spec.js +0 -289
- package/lib/test/summary/summarizerHeuristics.spec.js.map +0 -1
- package/lib/test/summary/summaryCollection.spec.js +0 -200
- package/lib/test/summary/summaryCollection.spec.js.map +0 -1
- package/lib/test/summary/summaryManager.spec.js +0 -430
- package/lib/test/summary/summaryManager.spec.js.map +0 -1
- package/lib/test/summary/testQuorumClients.js +0 -34
- package/lib/test/summary/testQuorumClients.js.map +0 -1
- package/lib/test/throttler.spec.js +0 -175
- package/lib/test/throttler.spec.js.map +0 -1
- package/lib/test/types/validateContainerRuntimePrevious.generated.js +0 -180
- package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +0 -1
- /package/{dist → lib}/tsdoc-metadata.json +0 -0
package/dist/dataStoreContext.js
CHANGED
|
@@ -5,15 +5,15 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.LocalDetachedFluidDataStoreContext = exports.LocalFluidDataStoreContext = exports.LocalFluidDataStoreContextBase = exports.RemoteFluidDataStoreContext = exports.FluidDataStoreContext = exports.createAttributesBlob = void 0;
|
|
8
|
-
const container_definitions_1 = require("@fluidframework/container-definitions");
|
|
9
8
|
const client_utils_1 = require("@fluid-internal/client-utils");
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
9
|
+
const container_definitions_1 = require("@fluidframework/container-definitions");
|
|
10
|
+
const internal_1 = require("@fluidframework/core-utils/internal");
|
|
11
|
+
const internal_2 = require("@fluidframework/driver-utils/internal");
|
|
12
|
+
const internal_3 = require("@fluidframework/runtime-definitions/internal");
|
|
13
|
+
const internal_4 = require("@fluidframework/runtime-utils/internal");
|
|
14
|
+
const internal_5 = require("@fluidframework/telemetry-utils/internal");
|
|
15
|
+
const index_js_1 = require("./gc/index.js");
|
|
16
|
+
const index_js_2 = require("./summary/index.js");
|
|
17
17
|
function createAttributes(pkg, isRootDataStore) {
|
|
18
18
|
const stringifiedPkg = JSON.stringify(pkg);
|
|
19
19
|
return {
|
|
@@ -24,15 +24,16 @@ function createAttributes(pkg, isRootDataStore) {
|
|
|
24
24
|
}
|
|
25
25
|
function createAttributesBlob(pkg, isRootDataStore) {
|
|
26
26
|
const attributes = createAttributes(pkg, isRootDataStore);
|
|
27
|
-
return new
|
|
27
|
+
return new internal_2.BlobTreeEntry(index_js_2.dataStoreAttributesBlobName, JSON.stringify(attributes));
|
|
28
28
|
}
|
|
29
29
|
exports.createAttributesBlob = createAttributesBlob;
|
|
30
30
|
/**
|
|
31
31
|
* Represents the context for the store. This context is passed to the store runtime.
|
|
32
|
+
* @internal
|
|
32
33
|
*/
|
|
33
34
|
class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
34
35
|
get packagePath() {
|
|
35
|
-
(0,
|
|
36
|
+
(0, internal_1.assert)(this.pkg !== undefined, 0x139 /* "Undefined package path" */);
|
|
36
37
|
return this.pkg;
|
|
37
38
|
}
|
|
38
39
|
get options() {
|
|
@@ -81,7 +82,6 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
81
82
|
return this._attachState;
|
|
82
83
|
}
|
|
83
84
|
get IFluidDataStoreRegistry() {
|
|
84
|
-
(0, core_utils_1.assert)(this.channel !== undefined, 0x8f3 /* This should be called after the channel is created, when the registry is populated */);
|
|
85
85
|
return this.registry;
|
|
86
86
|
}
|
|
87
87
|
/**
|
|
@@ -90,8 +90,18 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
90
90
|
* 2. is root as part of the base snapshot that the datastore loaded from
|
|
91
91
|
* @returns whether a datastore is root
|
|
92
92
|
*/
|
|
93
|
-
async isRoot() {
|
|
94
|
-
|
|
93
|
+
async isRoot(aliasedDataStores) {
|
|
94
|
+
if (this.isInMemoryRoot()) {
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
// This if is a performance optimization.
|
|
98
|
+
// We know that if the base snapshot is omitted, then the isRootDataStore flag is not set.
|
|
99
|
+
// That means we can skip the expensive call to getInitialSnapshotDetails for virtualized datastores,
|
|
100
|
+
// and get the information from the alias map directly.
|
|
101
|
+
if (aliasedDataStores !== undefined && this.baseSnapshot?.omitted === true) {
|
|
102
|
+
return aliasedDataStores.has(this.id);
|
|
103
|
+
}
|
|
104
|
+
return (await this.getInitialSnapshotDetails()).isRootDataStore;
|
|
95
105
|
}
|
|
96
106
|
/**
|
|
97
107
|
* There are 3 states where isInMemoryRoot needs to be true
|
|
@@ -129,18 +139,18 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
129
139
|
this.loadingGroupId = props.loadingGroupId;
|
|
130
140
|
// URIs use slashes as delimiters. Handles use URIs.
|
|
131
141
|
// Thus having slashes in types almost guarantees trouble down the road!
|
|
132
|
-
(0,
|
|
142
|
+
(0, internal_1.assert)(!this.id.includes("/"), 0x13a /* Data store ID contains slash */);
|
|
133
143
|
this._attachState =
|
|
134
144
|
this.parentContext.attachState !== container_definitions_1.AttachState.Detached && this.existing
|
|
135
145
|
? this.parentContext.attachState
|
|
136
146
|
: container_definitions_1.AttachState.Detached;
|
|
137
147
|
const thisSummarizeInternal = async (fullTree, trackState, telemetryContext) => this.summarizeInternal(fullTree, trackState, telemetryContext);
|
|
138
148
|
this.summarizerNode = props.createSummarizerNodeFn(thisSummarizeInternal, async (fullGC) => this.getGCDataInternal(fullGC));
|
|
139
|
-
this.mc = (0,
|
|
149
|
+
this.mc = (0, internal_5.createChildMonitoringContext)({
|
|
140
150
|
logger: this.logger,
|
|
141
151
|
namespace: "FluidDataStoreContext",
|
|
142
152
|
properties: {
|
|
143
|
-
all: (0,
|
|
153
|
+
all: (0, internal_5.tagCodeArtifacts)({
|
|
144
154
|
fluidDataStoreId: this.id,
|
|
145
155
|
// The package name is a getter because `this.pkg` may not be initialized during construction.
|
|
146
156
|
// For data stores loaded from summary, it is initialized during data store realization.
|
|
@@ -148,7 +158,7 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
148
158
|
}),
|
|
149
159
|
},
|
|
150
160
|
});
|
|
151
|
-
this.thresholdOpsCounter = new
|
|
161
|
+
this.thresholdOpsCounter = new internal_5.ThresholdCounter(FluidDataStoreContext.pendingOpsCountThreshold, this.mc.logger);
|
|
152
162
|
this.gcThrowOnTombstoneUsage = this.parentContext.gcThrowOnTombstoneUsage;
|
|
153
163
|
this.gcTombstoneEnforcementAllowed = this.parentContext.gcTombstoneEnforcementAllowed;
|
|
154
164
|
// By default, a data store can log maximum 10 local changes telemetry in summarizer.
|
|
@@ -185,17 +195,17 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
185
195
|
this._tombstoned = tombstone;
|
|
186
196
|
}
|
|
187
197
|
rejectDeferredRealize(reason, failedPkgPath, fullPackageName) {
|
|
188
|
-
throw new
|
|
198
|
+
throw new internal_5.LoggingError(reason, (0, internal_5.tagCodeArtifacts)({
|
|
189
199
|
failedPkgPath,
|
|
190
200
|
packagePath: fullPackageName?.join("/"),
|
|
191
201
|
}));
|
|
192
202
|
}
|
|
193
203
|
async realize() {
|
|
194
|
-
(0,
|
|
204
|
+
(0, internal_1.assert)(!this.detachedRuntimeCreation, 0x13d /* "Detached runtime creation on realize()" */);
|
|
195
205
|
if (!this.channelP) {
|
|
196
206
|
this.channelP = this.realizeCore(this.existing).catch((error) => {
|
|
197
|
-
const errorWrapped =
|
|
198
|
-
errorWrapped.addTelemetryProperties((0,
|
|
207
|
+
const errorWrapped = internal_5.DataProcessingError.wrapIfUnrecognized(error, "realizeFluidDataStoreContext");
|
|
208
|
+
errorWrapped.addTelemetryProperties((0, internal_5.tagCodeArtifacts)({
|
|
199
209
|
fullPackageName: this.pkg?.join("/"),
|
|
200
210
|
fluidDataStoreId: this.id,
|
|
201
211
|
}));
|
|
@@ -228,7 +238,7 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
228
238
|
if (factory === undefined) {
|
|
229
239
|
this.rejectDeferredRealize("Can't find factory for package", lastPkg, packages);
|
|
230
240
|
}
|
|
231
|
-
(0,
|
|
241
|
+
(0, internal_1.assert)(this.registry === undefined, 0x157 /* "datastore registry already attached" */);
|
|
232
242
|
this.registry = registry;
|
|
233
243
|
return factory;
|
|
234
244
|
}
|
|
@@ -239,10 +249,10 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
239
249
|
// that it is set here, before bindRuntime is called.
|
|
240
250
|
this._baseSnapshot = details.snapshot;
|
|
241
251
|
this.baseSnapshotSequenceNumber = details.sequenceNumber;
|
|
242
|
-
(0,
|
|
252
|
+
(0, internal_1.assert)(this.pkg === details.pkg, 0x13e /* "Unexpected package path" */);
|
|
243
253
|
const factory = await this.factoryFromPackagePath();
|
|
244
254
|
const channel = await factory.instantiateDataStore(this, existing);
|
|
245
|
-
(0,
|
|
255
|
+
(0, internal_1.assert)(channel !== undefined, 0x140 /* "undefined channel on datastore context" */);
|
|
246
256
|
await this.bindRuntime(channel, existing);
|
|
247
257
|
// This data store may have been disposed before the channel is created during realization. If so,
|
|
248
258
|
// dispose the channel now.
|
|
@@ -264,25 +274,25 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
264
274
|
if (!this.loaded) {
|
|
265
275
|
return;
|
|
266
276
|
}
|
|
267
|
-
(0,
|
|
277
|
+
(0, internal_1.assert)(this.connected === connected, 0x141 /* "Unexpected connected state" */);
|
|
268
278
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
269
279
|
this.channel.setConnectionState(connected, clientId);
|
|
270
280
|
}
|
|
271
281
|
process(message, local, localOpMetadata) {
|
|
272
|
-
const safeTelemetryProps = (0,
|
|
282
|
+
const safeTelemetryProps = (0, internal_5.extractSafePropertiesFromMessage)(message);
|
|
273
283
|
// On op process, tombstone error is logged in garbage collector. So, set "checkTombstone" to false when calling
|
|
274
284
|
// "verifyNotClosed" which logs tombstone errors. Throw error if tombstoned and throwing on load is configured.
|
|
275
285
|
this.verifyNotClosed("process", false /* checkTombstone */, safeTelemetryProps);
|
|
276
286
|
if (this.tombstoned && this.gcThrowOnTombstoneUsage) {
|
|
277
|
-
throw new
|
|
287
|
+
throw new internal_5.DataCorruptionError("Context is tombstoned! Call site [process]", safeTelemetryProps);
|
|
278
288
|
}
|
|
279
289
|
this.summarizerNode.recordChange(message);
|
|
280
290
|
if (this.loaded) {
|
|
281
291
|
return this.channel?.process(message, local, localOpMetadata);
|
|
282
292
|
}
|
|
283
293
|
else {
|
|
284
|
-
(0,
|
|
285
|
-
(0,
|
|
294
|
+
(0, internal_1.assert)(!local, 0x142 /* "local store channel is not loaded" */);
|
|
295
|
+
(0, internal_1.assert)(this.pending !== undefined, 0x23d /* "pending is undefined" */);
|
|
286
296
|
this.pending.push(message);
|
|
287
297
|
this.thresholdOpsCounter.sendIfMultiple("StorePendingOps", this.pending.length);
|
|
288
298
|
}
|
|
@@ -315,13 +325,13 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
315
325
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
316
326
|
const summarizeResult = await this.channel.summarize(fullTree, trackState, telemetryContext);
|
|
317
327
|
// Wrap dds summaries in .channels subtree.
|
|
318
|
-
(0,
|
|
319
|
-
const pathPartsForChildren = [
|
|
328
|
+
(0, index_js_2.wrapSummaryInChannelsTree)(summarizeResult);
|
|
329
|
+
const pathPartsForChildren = [internal_3.channelsTreeName];
|
|
320
330
|
// Add data store's attributes to the summary.
|
|
321
331
|
const { pkg } = await this.getInitialSnapshotDetails();
|
|
322
332
|
const isRoot = await this.isRoot();
|
|
323
333
|
const attributes = createAttributes(pkg, isRoot);
|
|
324
|
-
(0,
|
|
334
|
+
(0, internal_4.addBlobToSummary)(summarizeResult, index_js_2.dataStoreAttributesBlobName, JSON.stringify(attributes));
|
|
325
335
|
// If we are not referenced, mark the summary tree as unreferenced. Also, update unreferenced blob
|
|
326
336
|
// size in the summary stats with the blobs size of this data store.
|
|
327
337
|
if (!this.summarizerNode.isReferenced()) {
|
|
@@ -356,7 +366,7 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
356
366
|
*/
|
|
357
367
|
async getGCDataInternal(fullGC = false) {
|
|
358
368
|
await this.realize();
|
|
359
|
-
(0,
|
|
369
|
+
(0, internal_1.assert)(this.channel !== undefined, 0x143 /* "Channel should not be undefined when running GC" */);
|
|
360
370
|
return this.channel.getGCData(fullGC);
|
|
361
371
|
}
|
|
362
372
|
/**
|
|
@@ -403,7 +413,7 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
403
413
|
*/
|
|
404
414
|
addedGCOutboundReference(srcHandle, outboundHandle) {
|
|
405
415
|
// By default, skip this call since the ContainerRuntime will detect the outbound route directly.
|
|
406
|
-
if (this.mc.config.getBoolean(
|
|
416
|
+
if (this.mc.config.getBoolean(index_js_1.detectOutboundRoutesViaDDSKey) === true) {
|
|
407
417
|
// Note: The ContainerRuntime code will check this same setting to avoid double counting.
|
|
408
418
|
this.parentContext.addedGCOutboundReference?.(srcHandle, outboundHandle);
|
|
409
419
|
}
|
|
@@ -427,8 +437,8 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
427
437
|
* 2. When the data store is realized. This updates the channel's used routes as per last GC run.
|
|
428
438
|
*/
|
|
429
439
|
updateChannelUsedRoutes() {
|
|
430
|
-
(0,
|
|
431
|
-
(0,
|
|
440
|
+
(0, internal_1.assert)(this.loaded, 0x144 /* "Channel should be loaded when updating used routes" */);
|
|
441
|
+
(0, internal_1.assert)(this.channel !== undefined, 0x145 /* "Channel should be present when data store is loaded" */);
|
|
432
442
|
// If there is no lastUsedRoutes, GC has not run up until this point.
|
|
433
443
|
if (this.lastUsedRoutes === undefined) {
|
|
434
444
|
return;
|
|
@@ -448,7 +458,7 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
448
458
|
}
|
|
449
459
|
submitMessage(type, content, localOpMetadata) {
|
|
450
460
|
this.verifyNotClosed("submitMessage");
|
|
451
|
-
(0,
|
|
461
|
+
(0, internal_1.assert)(!!this.channel, 0x146 /* "Channel must exist when submitting message" */);
|
|
452
462
|
// Summarizer clients should not submit messages.
|
|
453
463
|
this.identifyLocalChangeInSummarizer("DataStoreMessageSubmittedInSummarizer", type);
|
|
454
464
|
this.parentContext.submitMessage(type, content, localOpMetadata);
|
|
@@ -475,12 +485,12 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
475
485
|
/**
|
|
476
486
|
* Submits the signal to be sent to other clients.
|
|
477
487
|
* @param type - Type of the signal.
|
|
478
|
-
* @param content - Content of the signal.
|
|
488
|
+
* @param content - Content of the signal. Should be a JSON serializable object or primitive.
|
|
479
489
|
* @param targetClientId - When specified, the signal is only sent to the provided client id.
|
|
480
490
|
*/
|
|
481
491
|
submitSignal(type, content, targetClientId) {
|
|
482
492
|
this.verifyNotClosed("submitSignal");
|
|
483
|
-
(0,
|
|
493
|
+
(0, internal_1.assert)(!!this.channel, 0x147 /* "Channel must exist on submitting signal" */);
|
|
484
494
|
return this.parentContext.submitSignal(type, content, targetClientId);
|
|
485
495
|
}
|
|
486
496
|
/**
|
|
@@ -488,43 +498,32 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
488
498
|
* globally visible now.
|
|
489
499
|
*/
|
|
490
500
|
makeLocallyVisible() {
|
|
491
|
-
(0,
|
|
501
|
+
(0, internal_1.assert)(this.channel !== undefined, 0x2cf /* "undefined channel on datastore context" */);
|
|
492
502
|
this.makeLocallyVisibleFn();
|
|
493
503
|
}
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
// Apply all pending ops
|
|
504
|
-
for (const op of pending) {
|
|
505
|
-
// Only process ops whose seq number is greater than snapshot sequence number from which it loaded.
|
|
506
|
-
const seqNumber = this.baseSnapshotSequenceNumber ?? -1;
|
|
507
|
-
if (op.sequenceNumber > seqNumber) {
|
|
508
|
-
channel.process(op, false, undefined /* localOpMetadata */);
|
|
509
|
-
}
|
|
504
|
+
processPendingOps(channel) {
|
|
505
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
506
|
+
const pending = this.pending;
|
|
507
|
+
// Apply all pending ops
|
|
508
|
+
for (const op of pending) {
|
|
509
|
+
// Only process ops whose seq number is greater than snapshot sequence number from which it loaded.
|
|
510
|
+
const seqNumber = this.baseSnapshotSequenceNumber ?? -1;
|
|
511
|
+
if (op.sequenceNumber > seqNumber) {
|
|
512
|
+
channel.process(op, false, undefined /* localOpMetadata */);
|
|
510
513
|
}
|
|
511
|
-
this.thresholdOpsCounter.send("ProcessPendingOps", pending.length);
|
|
512
|
-
}
|
|
513
|
-
else {
|
|
514
|
-
(0, core_utils_1.assert)(this.pending?.length === 0, 0x8f4 /* no pending ops */);
|
|
515
|
-
// Execute data store's entry point to make sure that for a local (aka detached from container) data store, the
|
|
516
|
-
// entryPoint initialization function is called before the data store gets attached and potentially connected to
|
|
517
|
-
// the delta stream, so it gets a chance to do things while the data store is still "purely local".
|
|
518
|
-
// This preserves the behavior from before we introduced entryPoints, where the instantiateDataStore method
|
|
519
|
-
// of data store factories tends to construct the data object (at least kick off an async method that returns
|
|
520
|
-
// it); that code moved to the entryPoint initialization function, so we want to ensure it still executes
|
|
521
|
-
// before the data store is attached.
|
|
522
|
-
await channel.entryPoint.get();
|
|
523
514
|
}
|
|
524
515
|
this.pending = undefined;
|
|
516
|
+
this.thresholdOpsCounter.send("ProcessPendingOps", pending.length);
|
|
517
|
+
}
|
|
518
|
+
completeBindingRuntime(channel) {
|
|
525
519
|
// And now mark the runtime active
|
|
526
520
|
this.loaded = true;
|
|
527
521
|
this.channel = channel;
|
|
522
|
+
// Channel does not know when it's "live" (as in - starts to receive events in the system)
|
|
523
|
+
// It may read current state of the system when channel was created, but it was not getting any updates
|
|
524
|
+
// through creation process and could have missed events. So update it on current state.
|
|
525
|
+
// Once this.loaded is set (above), it will stat receiving events.
|
|
526
|
+
channel.setConnectionState(this.connected, this.clientId);
|
|
528
527
|
// Freeze the package path to ensure that someone doesn't modify it when it is
|
|
529
528
|
// returned in packagePath().
|
|
530
529
|
Object.freeze(this.pkg);
|
|
@@ -537,6 +536,25 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
537
536
|
*/
|
|
538
537
|
this.updateChannelUsedRoutes();
|
|
539
538
|
}
|
|
539
|
+
async bindRuntime(channel, existing) {
|
|
540
|
+
if (this.channel) {
|
|
541
|
+
throw new Error("Runtime already bound");
|
|
542
|
+
}
|
|
543
|
+
(0, internal_1.assert)(!this.detachedRuntimeCreation, 0x148 /* "Detached runtime creation on runtime bind" */);
|
|
544
|
+
(0, internal_1.assert)(this.pkg !== undefined, 0x14a /* "Undefined package path" */);
|
|
545
|
+
if (!existing) {
|
|
546
|
+
// Execute data store's entry point to make sure that for a local (aka detached from container) data store, the
|
|
547
|
+
// entryPoint initialization function is called before the data store gets attached and potentially connected to
|
|
548
|
+
// the delta stream, so it gets a chance to do things while the data store is still "purely local".
|
|
549
|
+
// This preserves the behavior from before we introduced entryPoints, where the instantiateDataStore method
|
|
550
|
+
// of data store factories tends to construct the data object (at least kick off an async method that returns
|
|
551
|
+
// it); that code moved to the entryPoint initialization function, so we want to ensure it still executes
|
|
552
|
+
// before the data store is attached.
|
|
553
|
+
await channel.entryPoint.get();
|
|
554
|
+
}
|
|
555
|
+
this.processPendingOps(channel);
|
|
556
|
+
this.completeBindingRuntime(channel);
|
|
557
|
+
}
|
|
540
558
|
async getAbsoluteUrl(relativeUrl) {
|
|
541
559
|
if (this.attachState !== container_definitions_1.AttachState.Attached) {
|
|
542
560
|
return undefined;
|
|
@@ -558,7 +576,7 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
558
576
|
return {};
|
|
559
577
|
}
|
|
560
578
|
reSubmit(type, contents, localOpMetadata) {
|
|
561
|
-
(0,
|
|
579
|
+
(0, internal_1.assert)(!!this.channel, 0x14b /* "Channel must exist when resubmitting ops" */);
|
|
562
580
|
this.channel.reSubmit(type, contents, localOpMetadata);
|
|
563
581
|
}
|
|
564
582
|
rollback(type, contents, localOpMetadata) {
|
|
@@ -574,13 +592,13 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
574
592
|
if (!this.channel) {
|
|
575
593
|
await this.realize();
|
|
576
594
|
}
|
|
577
|
-
(0,
|
|
595
|
+
(0, internal_1.assert)(!!this.channel, 0x14c /* "Channel must exist when rebasing ops" */);
|
|
578
596
|
return this.channel.applyStashedOp(contents);
|
|
579
597
|
}
|
|
580
598
|
verifyNotClosed(callSite, checkTombstone = true, safeTelemetryProps = {}) {
|
|
581
599
|
if (this.deleted) {
|
|
582
600
|
const messageString = `Context is deleted! Call site [${callSite}]`;
|
|
583
|
-
const error = new
|
|
601
|
+
const error = new internal_5.DataCorruptionError(messageString, safeTelemetryProps);
|
|
584
602
|
this.mc.logger.sendErrorEvent({
|
|
585
603
|
eventName: "GC_Deleted_DataStore_Changed",
|
|
586
604
|
callSite,
|
|
@@ -592,8 +610,8 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
592
610
|
}
|
|
593
611
|
if (checkTombstone && this.tombstoned) {
|
|
594
612
|
const messageString = `Context is tombstoned! Call site [${callSite}]`;
|
|
595
|
-
const error = new
|
|
596
|
-
(0,
|
|
613
|
+
const error = new internal_5.DataCorruptionError(messageString, safeTelemetryProps);
|
|
614
|
+
(0, index_js_1.sendGCUnexpectedUsageEvent)(this.mc, {
|
|
597
615
|
eventName: "GC_Tombstone_DataStore_Changed",
|
|
598
616
|
category: this.gcThrowOnTombstoneUsage ? "error" : "generic",
|
|
599
617
|
gcTombstoneEnforcementAllowed: this.gcTombstoneEnforcementAllowed,
|
|
@@ -610,7 +628,7 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
610
628
|
* other clients that are up-to-date till seq# 100 may not have them yet.
|
|
611
629
|
*/
|
|
612
630
|
identifyLocalChangeInSummarizer(eventName, type) {
|
|
613
|
-
if (this.clientDetails.type !==
|
|
631
|
+
if (this.clientDetails.type !== index_js_2.summarizerClientType ||
|
|
614
632
|
this.localChangesTelemetryCount <= 0) {
|
|
615
633
|
return;
|
|
616
634
|
}
|
|
@@ -621,7 +639,7 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
621
639
|
eventName,
|
|
622
640
|
type,
|
|
623
641
|
isSummaryInProgress: this.summarizerNode.isSummaryInProgress?.(),
|
|
624
|
-
stack: (0,
|
|
642
|
+
stack: (0, internal_5.generateStack)(),
|
|
625
643
|
});
|
|
626
644
|
this.localChangesTelemetryCount--;
|
|
627
645
|
}
|
|
@@ -637,16 +655,17 @@ class FluidDataStoreContext extends client_utils_1.TypedEventEmitter {
|
|
|
637
655
|
}
|
|
638
656
|
exports.FluidDataStoreContext = FluidDataStoreContext;
|
|
639
657
|
FluidDataStoreContext.pendingOpsCountThreshold = 1000;
|
|
658
|
+
/** @internal */
|
|
640
659
|
class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
641
660
|
constructor(props) {
|
|
642
661
|
super(props, true /* existing */, false /* isLocalDataStore */, () => {
|
|
643
662
|
throw new Error("Already attached");
|
|
644
663
|
});
|
|
645
|
-
this.initialSnapshotDetailsP = new
|
|
664
|
+
this.initialSnapshotDetailsP = new internal_1.LazyPromise(async () => {
|
|
646
665
|
// Sequence number of the snapshot.
|
|
647
666
|
let sequenceNumber;
|
|
648
667
|
if (this.snapshotFetchRequired) {
|
|
649
|
-
(0,
|
|
668
|
+
(0, internal_1.assert)(this.loadingGroupId !== undefined, 0x8f5 /* groupId should be present to fetch snapshot */);
|
|
650
669
|
const snapshot = await this.runtime.getSnapshotForLoadingGroupId([this.loadingGroupId], [this.id]);
|
|
651
670
|
this._baseSnapshot = snapshot.snapshotTree;
|
|
652
671
|
sequenceNumber = snapshot.sequenceNumber;
|
|
@@ -654,13 +673,13 @@ class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
|
654
673
|
}
|
|
655
674
|
let tree = this.baseSnapshot;
|
|
656
675
|
let isRootDataStore = true;
|
|
657
|
-
if (!!tree && tree.blobs[
|
|
676
|
+
if (!!tree && tree.blobs[index_js_2.dataStoreAttributesBlobName] !== undefined) {
|
|
658
677
|
// Need to get through snapshot and use that to populate extraBlobs
|
|
659
|
-
const attributes = await (0,
|
|
678
|
+
const attributes = await (0, internal_2.readAndParse)(this.storage, tree.blobs[index_js_2.dataStoreAttributesBlobName]);
|
|
660
679
|
let pkgFromSnapshot;
|
|
661
680
|
// Use the snapshotFormatVersion to determine how the pkg is encoded in the snapshot.
|
|
662
681
|
// For snapshotFormatVersion = "0.1" (1) or above, pkg is jsonified, otherwise it is just a string.
|
|
663
|
-
const formatVersion = (0,
|
|
682
|
+
const formatVersion = (0, index_js_2.getAttributesFormatVersion)(attributes);
|
|
664
683
|
if (formatVersion < 1) {
|
|
665
684
|
pkgFromSnapshot =
|
|
666
685
|
attributes.pkg.startsWith('["') && attributes.pkg.endsWith('"]')
|
|
@@ -677,12 +696,12 @@ class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
|
677
696
|
* roots in the document but they won't break.
|
|
678
697
|
*/
|
|
679
698
|
isRootDataStore = attributes.isRootDataStore ?? true;
|
|
680
|
-
if ((0,
|
|
681
|
-
tree = tree.trees[
|
|
682
|
-
(0,
|
|
699
|
+
if ((0, index_js_2.hasIsolatedChannels)(attributes)) {
|
|
700
|
+
tree = tree.trees[internal_3.channelsTreeName];
|
|
701
|
+
(0, internal_1.assert)(tree !== undefined, 0x1fe /* "isolated channels subtree should exist in remote datastore snapshot" */);
|
|
683
702
|
}
|
|
684
703
|
}
|
|
685
|
-
(0,
|
|
704
|
+
(0, internal_1.assert)(this.pkg !== undefined, 0x8f6 /* The datastore context package should be defined */);
|
|
686
705
|
return {
|
|
687
706
|
pkg: this.pkg,
|
|
688
707
|
isRootDataStore,
|
|
@@ -697,6 +716,17 @@ class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
|
697
716
|
this.summarizerNode.updateBaseSummaryState(props.snapshotTree);
|
|
698
717
|
}
|
|
699
718
|
}
|
|
719
|
+
/*
|
|
720
|
+
This API should not be called for RemoteFluidDataStoreContext. But here is one scenario where it's not the case:
|
|
721
|
+
The scenario (hit by stashedOps.spec.ts, "resends attach op" UT is the following (as far as I understand):
|
|
722
|
+
1. data store is being attached in attached container
|
|
723
|
+
2. container state is serialized (stashed ops feature)
|
|
724
|
+
3. new container instance is rehydrated (from stashed ops)
|
|
725
|
+
- As result, we create RemoteFluidDataStoreContext for this data store that is actually in "attaching" state (as of # 2).
|
|
726
|
+
But its state is set to attached when loading container from stashed ops
|
|
727
|
+
4. attach op for this data store is processed - setAttachState() is called.
|
|
728
|
+
*/
|
|
729
|
+
setAttachState(attachState) { }
|
|
700
730
|
async getInitialSnapshotDetails() {
|
|
701
731
|
return this.initialSnapshotDetailsP;
|
|
702
732
|
}
|
|
@@ -710,21 +740,22 @@ class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
|
710
740
|
exports.RemoteFluidDataStoreContext = RemoteFluidDataStoreContext;
|
|
711
741
|
/**
|
|
712
742
|
* Base class for detached & attached context classes
|
|
743
|
+
* @internal
|
|
713
744
|
*/
|
|
714
745
|
class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
715
746
|
constructor(props) {
|
|
716
|
-
super(props, props.snapshotTree !== undefined
|
|
717
|
-
this.initialSnapshotDetailsP = new
|
|
747
|
+
super(props, props.snapshotTree !== undefined /* existing */, true /* isLocalDataStore */, props.makeLocallyVisibleFn);
|
|
748
|
+
this.initialSnapshotDetailsP = new internal_1.LazyPromise(async () => {
|
|
718
749
|
let snapshot = this.snapshotTree;
|
|
719
750
|
let attributes;
|
|
720
751
|
let isRootDataStore = false;
|
|
721
752
|
if (snapshot !== undefined) {
|
|
722
753
|
// Get the dataStore attributes.
|
|
723
754
|
// Note: storage can be undefined in special case while detached.
|
|
724
|
-
attributes = await (0,
|
|
725
|
-
if ((0,
|
|
726
|
-
snapshot = snapshot.trees[
|
|
727
|
-
(0,
|
|
755
|
+
attributes = await (0, index_js_2.getFluidDataStoreAttributes)(this.storage, snapshot);
|
|
756
|
+
if ((0, index_js_2.hasIsolatedChannels)(attributes)) {
|
|
757
|
+
snapshot = snapshot.trees[internal_3.channelsTreeName];
|
|
758
|
+
(0, internal_1.assert)(snapshot !== undefined, 0x1ff /* "isolated channels subtree should exist in local datastore snapshot" */);
|
|
728
759
|
}
|
|
729
760
|
if (this.pkg === undefined) {
|
|
730
761
|
this.pkg = JSON.parse(attributes.pkg);
|
|
@@ -737,7 +768,7 @@ class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
|
737
768
|
}
|
|
738
769
|
}
|
|
739
770
|
}
|
|
740
|
-
(0,
|
|
771
|
+
(0, internal_1.assert)(this.pkg !== undefined, 0x152 /* "pkg should be available in local data store" */);
|
|
741
772
|
return {
|
|
742
773
|
pkg: this.pkg,
|
|
743
774
|
isRootDataStore,
|
|
@@ -747,40 +778,63 @@ class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
|
747
778
|
// Summarizer client should not create local data stores.
|
|
748
779
|
this.identifyLocalChangeInSummarizer("DataStoreCreatedInSummarizer");
|
|
749
780
|
this.snapshotTree = props.snapshotTree;
|
|
750
|
-
if (props.isRootDataStore === true) {
|
|
751
|
-
this.setInMemoryRoot();
|
|
752
|
-
}
|
|
753
781
|
this.createProps = props.createProps;
|
|
754
|
-
this.attachListeners();
|
|
755
782
|
}
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
(0,
|
|
783
|
+
setAttachState(attachState) {
|
|
784
|
+
switch (attachState) {
|
|
785
|
+
case container_definitions_1.AttachState.Attaching:
|
|
786
|
+
(0, internal_1.assert)(this.attachState === container_definitions_1.AttachState.Detached, 0x14d /* "Should move from detached to attaching" */);
|
|
760
787
|
this._attachState = container_definitions_1.AttachState.Attaching;
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
this.
|
|
765
|
-
|
|
788
|
+
if (this.channel?.setAttachState) {
|
|
789
|
+
this.channel.setAttachState(attachState);
|
|
790
|
+
}
|
|
791
|
+
else if (this.channel) {
|
|
792
|
+
// back-compat! To be removed in the future
|
|
793
|
+
// Added in "2.0.0-rc.2.0.0" timeframe.
|
|
794
|
+
this.emit("attaching");
|
|
795
|
+
}
|
|
796
|
+
break;
|
|
797
|
+
case container_definitions_1.AttachState.Attached:
|
|
798
|
+
// We can get called into here twice, as result of both container and data store being attached, if
|
|
799
|
+
// those processes overlapped, for example, in a flow like that one:
|
|
800
|
+
// 1. Container attach started
|
|
801
|
+
// 2. data store attachment started
|
|
802
|
+
// 3. container attached
|
|
803
|
+
// 4. data store attached.
|
|
804
|
+
if (this.attachState !== container_definitions_1.AttachState.Attached) {
|
|
805
|
+
(0, internal_1.assert)(this.attachState === container_definitions_1.AttachState.Attaching, 0x14e /* "Should move from attaching to attached" */);
|
|
806
|
+
this._attachState = container_definitions_1.AttachState.Attached;
|
|
807
|
+
this.channel?.setAttachState?.(attachState);
|
|
808
|
+
if (this.channel?.setAttachState) {
|
|
809
|
+
this.channel.setAttachState(attachState);
|
|
810
|
+
}
|
|
811
|
+
else if (this.channel) {
|
|
812
|
+
// back-compat! To be removed in the future
|
|
813
|
+
// Added in "2.0.0-rc.2.0.0" timeframe.
|
|
814
|
+
this.emit("attached");
|
|
815
|
+
}
|
|
816
|
+
}
|
|
817
|
+
break;
|
|
818
|
+
default:
|
|
819
|
+
(0, internal_1.unreachableCase)(attachState, "unreached");
|
|
766
820
|
}
|
|
767
821
|
}
|
|
768
822
|
/**
|
|
769
823
|
* @see FluidDataStoreContext.getAttachData
|
|
770
824
|
*/
|
|
771
825
|
getAttachData(includeGCData, telemetryContext) {
|
|
772
|
-
(0,
|
|
773
|
-
(0,
|
|
826
|
+
(0, internal_1.assert)(this.channel !== undefined, 0x14f /* "There should be a channel when generating attach message" */);
|
|
827
|
+
(0, internal_1.assert)(this.pkg !== undefined, 0x150 /* "pkg should be available in local data store context" */);
|
|
774
828
|
const attachSummary = this.channel.getAttachSummary(telemetryContext);
|
|
775
829
|
// Wrap dds summaries in .channels subtree.
|
|
776
|
-
(0,
|
|
830
|
+
(0, index_js_2.wrapSummaryInChannelsTree)(attachSummary);
|
|
777
831
|
// Add data store's attributes to the summary.
|
|
778
832
|
const attributes = createAttributes(this.pkg, this.isInMemoryRoot());
|
|
779
|
-
(0,
|
|
833
|
+
(0, internal_4.addBlobToSummary)(attachSummary, index_js_2.dataStoreAttributesBlobName, JSON.stringify(attributes));
|
|
780
834
|
if (includeGCData) {
|
|
781
835
|
const gcData = this.channel.getAttachGCData?.(telemetryContext);
|
|
782
836
|
if (gcData !== undefined) {
|
|
783
|
-
(0,
|
|
837
|
+
(0, internal_4.addBlobToSummary)(attachSummary, internal_3.gcDataBlobKey, JSON.stringify(gcData));
|
|
784
838
|
}
|
|
785
839
|
}
|
|
786
840
|
// Add loadingGroupId to the summary
|
|
@@ -804,7 +858,7 @@ class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
|
804
858
|
*/
|
|
805
859
|
delete() {
|
|
806
860
|
// TODO: GC:Validation - potentially prevent this from happening or asserting. Maybe throw here.
|
|
807
|
-
(0,
|
|
861
|
+
(0, index_js_1.sendGCUnexpectedUsageEvent)(this.mc, {
|
|
808
862
|
eventName: "GC_Deleted_DataStore_Unexpected_Delete",
|
|
809
863
|
message: "Unexpected deletion of a local data store context",
|
|
810
864
|
category: "error",
|
|
@@ -819,6 +873,7 @@ exports.LocalFluidDataStoreContextBase = LocalFluidDataStoreContextBase;
|
|
|
819
873
|
* Various workflows (snapshot creation, requests) result in .realize() being called
|
|
820
874
|
* on context, resulting in instantiation and attachment of runtime.
|
|
821
875
|
* Runtime is created using data store factory that is associated with this context.
|
|
876
|
+
* @internal
|
|
822
877
|
*/
|
|
823
878
|
class LocalFluidDataStoreContext extends LocalFluidDataStoreContextBase {
|
|
824
879
|
constructor(props) {
|
|
@@ -839,16 +894,16 @@ class LocalDetachedFluidDataStoreContext extends LocalFluidDataStoreContextBase
|
|
|
839
894
|
this.channelToDataStoreFn = props.channelToDataStoreFn;
|
|
840
895
|
}
|
|
841
896
|
async attachRuntime(registry, dataStoreChannel) {
|
|
842
|
-
(0,
|
|
897
|
+
(0, internal_1.assert)(this.detachedRuntimeCreation, 0x154 /* "runtime creation is already attached" */);
|
|
843
898
|
this.detachedRuntimeCreation = false;
|
|
844
|
-
(0,
|
|
899
|
+
(0, internal_1.assert)(this.channelP === undefined, 0x155 /* "channel deferral is already set" */);
|
|
845
900
|
this.channelP = Promise.resolve()
|
|
846
901
|
.then(async () => {
|
|
847
902
|
const factory = registry.IFluidDataStoreFactory;
|
|
848
903
|
const factory2 = await this.factoryFromPackagePath();
|
|
849
|
-
(0,
|
|
904
|
+
(0, internal_1.assert)(factory2 === factory, 0x156 /* "Unexpected factory for package path" */);
|
|
850
905
|
await super.bindRuntime(dataStoreChannel, false /* existing */);
|
|
851
|
-
(0,
|
|
906
|
+
(0, internal_1.assert)(!(await this.isRoot()), 0x8f7 /* there are no more createRootDataStore() kind of APIs! */);
|
|
852
907
|
return dataStoreChannel;
|
|
853
908
|
})
|
|
854
909
|
.catch((error) => {
|