@fluidframework/container-runtime 2.0.0-rc.1.0.6 → 2.0.0-rc.2.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/{.eslintrc.js → .eslintrc.cjs} +5 -5
- package/{.mocharc.js → .mocharc.cjs} +1 -1
- package/CHANGELOG.md +54 -0
- package/README.md +45 -0
- package/{api-extractor-esm.json → api-extractor-cjs.json} +5 -1
- package/api-extractor-lint.json +1 -1
- package/api-extractor.json +1 -1
- package/api-report/container-runtime.api.md +63 -29
- package/dist/batchTracker.d.ts +1 -2
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager.js.map +1 -1
- package/{lib/dataStores.d.mts → dist/channelCollection.d.ts} +94 -27
- package/dist/channelCollection.d.ts.map +1 -0
- package/dist/{dataStores.js → channelCollection.js} +359 -84
- package/dist/channelCollection.js.map +1 -0
- package/dist/connectionTelemetry.d.ts +11 -1
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +42 -4
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/container-runtime-alpha.d.ts +93 -39
- package/dist/container-runtime-beta.d.ts +27 -9
- package/dist/container-runtime-public.d.ts +27 -9
- package/dist/container-runtime-untrimmed.d.ts +118 -39
- package/dist/containerHandleContext.d.ts +1 -1
- package/dist/containerHandleContext.d.ts.map +1 -1
- package/dist/containerHandleContext.js.map +1 -1
- package/dist/containerRuntime.d.ts +74 -54
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +534 -410
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.d.ts +2 -3
- package/dist/dataStore.d.ts.map +1 -1
- package/dist/dataStore.js +12 -11
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +34 -29
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +157 -133
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts +1 -1
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/deltaManagerSummarizerProxy.d.ts +29 -4
- package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
- package/dist/deltaManagerSummarizerProxy.js +91 -5
- package/dist/deltaManagerSummarizerProxy.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts +5 -4
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +64 -53
- 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 +21 -21
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +10 -3
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcHelpers.d.ts +2 -2
- package/dist/gc/gcHelpers.d.ts.map +1 -1
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcReferenceGraphAlgorithm.d.ts +1 -1
- package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -1
- package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts +4 -4
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js +5 -5
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts +6 -7
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +17 -17
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.d.ts +1 -1
- package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.js +10 -10
- package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
- package/dist/gc/index.d.ts +8 -8
- package/dist/gc/index.d.ts.map +1 -1
- package/dist/gc/index.js +39 -39
- package/dist/gc/index.js.map +1 -1
- package/dist/index.d.ts +8 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -40
- package/dist/index.js.map +1 -1
- package/dist/messageTypes.d.ts +4 -4
- package/dist/messageTypes.d.ts.map +1 -1
- package/dist/messageTypes.js.map +1 -1
- package/dist/opLifecycle/batchManager.d.ts +2 -2
- package/dist/opLifecycle/batchManager.d.ts.map +1 -1
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/definitions.d.ts +2 -2
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -1
- package/dist/opLifecycle/index.d.ts +8 -8
- package/dist/opLifecycle/index.d.ts.map +1 -1
- package/dist/opLifecycle/index.js +18 -18
- package/dist/opLifecycle/index.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts +1 -1
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +4 -4
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +3 -3
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js +1 -10
- 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 +5 -5
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +7 -7
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +20 -12
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts +4 -4
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js +2 -2
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/dist/package.json +3 -0
- 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 +2 -1
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +18 -10
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/scheduleManager.d.ts +1 -2
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js +5 -5
- package/dist/scheduleManager.js.map +1 -1
- package/dist/summary/index.d.ts +12 -12
- package/dist/summary/index.d.ts.map +1 -1
- package/dist/summary/index.js +43 -43
- package/dist/summary/index.js.map +1 -1
- package/dist/summary/orderedClientElection.js +8 -8
- 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.map +1 -1
- package/dist/summary/runningSummarizer.d.ts +11 -10
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +114 -81
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.d.ts +4 -4
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +6 -6
- 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 +3 -3
- package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
- package/dist/summary/summarizerHeuristics.js.map +1 -1
- package/dist/summary/summarizerNode/index.d.ts +3 -3
- package/dist/summary/summarizerNode/index.d.ts.map +1 -1
- package/dist/summary/summarizerNode/index.js +4 -4
- package/dist/summary/summarizerNode/index.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.d.ts +17 -7
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js +45 -57
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +10 -19
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.js +1 -21
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +5 -6
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +16 -16
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +10 -21
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +15 -2
- package/dist/summary/summaryFormat.d.ts.map +1 -1
- package/dist/summary/summaryFormat.js.map +1 -1
- package/dist/summary/summaryGenerator.d.ts +6 -5
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +10 -1
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryManager.d.ts +5 -6
- package/dist/summary/summaryManager.d.ts.map +1 -1
- package/dist/summary/summaryManager.js +4 -5
- package/dist/summary/summaryManager.js.map +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/lib/{batchTracker.d.mts → batchTracker.d.ts} +2 -3
- package/lib/batchTracker.d.ts.map +1 -0
- package/lib/{batchTracker.mjs → batchTracker.js} +1 -1
- package/lib/batchTracker.js.map +1 -0
- package/lib/{blobManager.d.mts → blobManager.d.ts} +1 -1
- package/lib/blobManager.d.ts.map +1 -0
- package/lib/{blobManager.mjs → blobManager.js} +1 -1
- package/lib/blobManager.js.map +1 -0
- package/{dist/dataStores.d.ts → lib/channelCollection.d.ts} +94 -27
- package/lib/channelCollection.d.ts.map +1 -0
- package/lib/{dataStores.mjs → channelCollection.js} +345 -73
- package/lib/channelCollection.js.map +1 -0
- package/lib/{connectionTelemetry.d.mts → connectionTelemetry.d.ts} +12 -2
- package/lib/connectionTelemetry.d.ts.map +1 -0
- package/lib/{connectionTelemetry.mjs → connectionTelemetry.js} +43 -5
- package/lib/connectionTelemetry.js.map +1 -0
- package/lib/{container-runtime-alpha.d.mts → container-runtime-alpha.d.ts} +93 -39
- package/lib/{container-runtime-public.d.mts → container-runtime-beta.d.ts} +27 -9
- package/lib/{container-runtime-beta.d.mts → container-runtime-public.d.ts} +27 -9
- package/lib/{container-runtime-untrimmed.d.mts → container-runtime-untrimmed.d.ts} +118 -39
- package/lib/{containerHandleContext.d.mts → containerHandleContext.d.ts} +2 -2
- package/lib/containerHandleContext.d.ts.map +1 -0
- package/lib/{containerHandleContext.mjs → containerHandleContext.js} +1 -1
- package/lib/containerHandleContext.js.map +1 -0
- package/lib/{containerRuntime.d.mts → containerRuntime.d.ts} +79 -55
- package/lib/containerRuntime.d.ts.map +1 -0
- package/lib/{containerRuntime.mjs → containerRuntime.js} +453 -331
- package/lib/containerRuntime.js.map +1 -0
- package/lib/{dataStore.d.mts → dataStore.d.ts} +3 -4
- package/lib/dataStore.d.ts.map +1 -0
- package/lib/{dataStore.mjs → dataStore.js} +13 -12
- package/lib/dataStore.js.map +1 -0
- package/lib/{dataStoreContext.d.mts → dataStoreContext.d.ts} +35 -30
- package/lib/dataStoreContext.d.ts.map +1 -0
- package/lib/{dataStoreContext.mjs → dataStoreContext.js} +146 -122
- package/lib/dataStoreContext.js.map +1 -0
- package/lib/{dataStoreContexts.d.mts → dataStoreContexts.d.ts} +2 -2
- package/lib/dataStoreContexts.d.ts.map +1 -0
- package/lib/{dataStoreContexts.mjs → dataStoreContexts.js} +1 -1
- package/lib/dataStoreContexts.js.map +1 -0
- package/lib/{dataStoreRegistry.d.mts → dataStoreRegistry.d.ts} +1 -1
- package/lib/dataStoreRegistry.d.ts.map +1 -0
- package/lib/{dataStoreRegistry.mjs → dataStoreRegistry.js} +5 -1
- package/lib/dataStoreRegistry.js.map +1 -0
- package/{dist/deltaManagerProxyBase.d.ts → lib/deltaManagerSummarizerProxy.d.ts} +16 -7
- package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -0
- package/lib/deltaManagerSummarizerProxy.js +124 -0
- package/lib/deltaManagerSummarizerProxy.js.map +1 -0
- package/lib/{deltaScheduler.d.mts → deltaScheduler.d.ts} +1 -1
- package/lib/deltaScheduler.d.ts.map +1 -0
- package/lib/{deltaScheduler.mjs → deltaScheduler.js} +1 -1
- package/lib/deltaScheduler.js.map +1 -0
- package/lib/{error.d.mts → error.d.ts} +1 -1
- package/lib/error.d.ts.map +1 -0
- package/lib/{error.mjs → error.js} +1 -1
- package/lib/error.js.map +1 -0
- package/lib/gc/{garbageCollection.d.mts → garbageCollection.d.ts} +6 -5
- package/lib/gc/garbageCollection.d.ts.map +1 -0
- package/lib/gc/{garbageCollection.mjs → garbageCollection.js} +25 -14
- package/lib/gc/garbageCollection.js.map +1 -0
- package/lib/gc/{gcConfigs.d.mts → gcConfigs.d.ts} +3 -3
- package/lib/gc/gcConfigs.d.ts.map +1 -0
- package/lib/gc/{gcConfigs.mjs → gcConfigs.js} +3 -3
- package/lib/gc/gcConfigs.js.map +1 -0
- package/lib/gc/{gcDefinitions.d.mts → gcDefinitions.d.ts} +11 -4
- package/lib/gc/gcDefinitions.d.ts.map +1 -0
- package/lib/gc/{gcDefinitions.mjs → gcDefinitions.js} +1 -1
- package/lib/gc/gcDefinitions.js.map +1 -0
- package/lib/gc/{gcHelpers.d.mts → gcHelpers.d.ts} +3 -3
- package/lib/gc/{gcHelpers.d.mts.map → gcHelpers.d.ts.map} +1 -1
- package/lib/gc/{gcHelpers.mjs → gcHelpers.js} +1 -1
- package/lib/gc/gcHelpers.js.map +1 -0
- package/lib/gc/{gcReferenceGraphAlgorithm.d.mts → gcReferenceGraphAlgorithm.d.ts} +2 -2
- package/lib/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
- package/lib/gc/{gcReferenceGraphAlgorithm.mjs → gcReferenceGraphAlgorithm.js} +1 -1
- package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -0
- package/lib/gc/{gcSummaryDefinitions.d.mts → gcSummaryDefinitions.d.ts} +1 -1
- package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -0
- package/lib/gc/{gcSummaryDefinitions.mjs → gcSummaryDefinitions.js} +1 -1
- package/lib/gc/gcSummaryDefinitions.js.map +1 -0
- package/lib/gc/{gcSummaryStateTracker.d.mts → gcSummaryStateTracker.d.ts} +5 -5
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
- package/lib/gc/{gcSummaryStateTracker.mjs → gcSummaryStateTracker.js} +4 -4
- package/lib/gc/gcSummaryStateTracker.js.map +1 -0
- package/lib/gc/{gcTelemetry.d.mts → gcTelemetry.d.ts} +7 -8
- package/lib/gc/gcTelemetry.d.ts.map +1 -0
- package/lib/gc/{gcTelemetry.mjs → gcTelemetry.js} +2 -2
- package/lib/gc/gcTelemetry.js.map +1 -0
- package/lib/gc/{gcUnreferencedStateTracker.d.mts → gcUnreferencedStateTracker.d.ts} +2 -2
- package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
- package/lib/gc/{gcUnreferencedStateTracker.mjs → gcUnreferencedStateTracker.js} +2 -2
- package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
- package/lib/gc/{index.d.mts → index.d.ts} +9 -9
- package/lib/gc/index.d.ts.map +1 -0
- package/lib/gc/{index.mjs → index.js} +8 -8
- package/lib/gc/index.js.map +1 -0
- package/lib/{index.d.mts → index.d.ts} +9 -21
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +12 -0
- package/lib/index.js.map +1 -0
- package/lib/{messageTypes.d.mts → messageTypes.d.ts} +5 -5
- package/lib/messageTypes.d.ts.map +1 -0
- package/lib/{messageTypes.mjs → messageTypes.js} +1 -1
- package/lib/messageTypes.js.map +1 -0
- package/lib/{metadata.d.mts → metadata.d.ts} +1 -1
- package/lib/metadata.d.ts.map +1 -0
- package/lib/{metadata.mjs → metadata.js} +1 -1
- package/lib/metadata.js.map +1 -0
- package/lib/opLifecycle/{batchManager.d.mts → batchManager.d.ts} +3 -3
- package/lib/opLifecycle/batchManager.d.ts.map +1 -0
- package/lib/opLifecycle/{batchManager.mjs → batchManager.js} +1 -1
- package/lib/opLifecycle/batchManager.js.map +1 -0
- package/lib/opLifecycle/{definitions.d.mts → definitions.d.ts} +3 -3
- package/lib/opLifecycle/definitions.d.ts.map +1 -0
- package/lib/opLifecycle/{definitions.mjs → definitions.js} +1 -1
- package/lib/opLifecycle/definitions.js.map +1 -0
- package/lib/opLifecycle/index.d.ts +13 -0
- package/lib/opLifecycle/index.d.ts.map +1 -0
- package/lib/opLifecycle/index.js +12 -0
- package/lib/opLifecycle/index.js.map +1 -0
- package/lib/opLifecycle/{opCompressor.d.mts → opCompressor.d.ts} +2 -2
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -0
- package/lib/opLifecycle/{opCompressor.mjs → opCompressor.js} +3 -3
- package/lib/opLifecycle/opCompressor.js.map +1 -0
- package/lib/opLifecycle/{opDecompressor.d.mts → opDecompressor.d.ts} +2 -2
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -0
- package/lib/opLifecycle/{opDecompressor.mjs → opDecompressor.js} +2 -2
- package/lib/opLifecycle/opDecompressor.js.map +1 -0
- package/lib/opLifecycle/{opGroupingManager.d.mts → opGroupingManager.d.ts} +2 -2
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -0
- package/lib/opLifecycle/{opGroupingManager.mjs → opGroupingManager.js} +2 -11
- package/lib/opLifecycle/opGroupingManager.js.map +1 -0
- package/lib/opLifecycle/{opSplitter.d.mts → opSplitter.d.ts} +2 -2
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -0
- package/lib/opLifecycle/{opSplitter.mjs → opSplitter.js} +3 -3
- package/lib/opLifecycle/opSplitter.js.map +1 -0
- package/lib/opLifecycle/{outbox.d.mts → outbox.d.ts} +8 -8
- package/lib/opLifecycle/outbox.d.ts.map +1 -0
- package/lib/opLifecycle/{outbox.mjs → outbox.js} +12 -4
- package/lib/opLifecycle/outbox.js.map +1 -0
- package/lib/opLifecycle/{remoteMessageProcessor.d.mts → remoteMessageProcessor.d.ts} +5 -5
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
- package/lib/opLifecycle/{remoteMessageProcessor.mjs → remoteMessageProcessor.js} +2 -2
- package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -0
- package/lib/{opProperties.d.mts → opProperties.d.ts} +1 -1
- package/lib/opProperties.d.ts.map +1 -0
- package/lib/{opProperties.mjs → opProperties.js} +1 -1
- package/lib/opProperties.js.map +1 -0
- package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
- package/lib/packageVersion.d.ts.map +1 -0
- package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
- package/lib/packageVersion.js.map +1 -0
- package/lib/{pendingStateManager.d.mts → pendingStateManager.d.ts} +3 -2
- package/lib/pendingStateManager.d.ts.map +1 -0
- package/lib/{pendingStateManager.mjs → pendingStateManager.js} +18 -10
- package/lib/pendingStateManager.js.map +1 -0
- package/lib/{scheduleManager.d.mts → scheduleManager.d.ts} +6 -3
- package/lib/scheduleManager.d.ts.map +1 -0
- package/lib/{scheduleManager.mjs → scheduleManager.js} +3 -3
- package/lib/scheduleManager.js.map +1 -0
- package/lib/{storageServiceWithAttachBlobs.d.mts → storageServiceWithAttachBlobs.d.ts} +1 -1
- package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -0
- package/lib/{storageServiceWithAttachBlobs.mjs → storageServiceWithAttachBlobs.js} +1 -1
- package/lib/storageServiceWithAttachBlobs.js.map +1 -0
- package/lib/summary/{index.d.mts → index.d.ts} +13 -13
- package/lib/summary/index.d.ts.map +1 -0
- package/lib/summary/{index.mjs → index.js} +12 -12
- package/lib/summary/index.js.map +1 -0
- package/lib/summary/{orderedClientElection.d.mts → orderedClientElection.d.ts} +5 -1
- package/lib/summary/orderedClientElection.d.ts.map +1 -0
- package/lib/summary/{orderedClientElection.mjs → orderedClientElection.js} +2 -2
- package/lib/summary/orderedClientElection.js.map +1 -0
- package/lib/summary/{runWhileConnectedCoordinator.d.mts → runWhileConnectedCoordinator.d.ts} +2 -2
- package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
- package/lib/summary/{runWhileConnectedCoordinator.mjs → runWhileConnectedCoordinator.js} +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
- package/lib/summary/{runningSummarizer.d.mts → runningSummarizer.d.ts} +12 -11
- package/lib/summary/runningSummarizer.d.ts.map +1 -0
- package/lib/summary/{runningSummarizer.mjs → runningSummarizer.js} +108 -75
- package/lib/summary/runningSummarizer.js.map +1 -0
- package/lib/summary/{summarizer.d.mts → summarizer.d.ts} +5 -5
- package/lib/summary/summarizer.d.ts.map +1 -0
- package/lib/summary/{summarizer.mjs → summarizer.js} +4 -4
- package/lib/summary/summarizer.js.map +1 -0
- package/lib/summary/{summarizerClientElection.d.mts → summarizerClientElection.d.ts} +3 -3
- package/lib/summary/summarizerClientElection.d.ts.map +1 -0
- package/lib/summary/{summarizerClientElection.mjs → summarizerClientElection.js} +1 -1
- package/lib/summary/summarizerClientElection.js.map +1 -0
- package/lib/summary/{summarizerHeuristics.d.mts → summarizerHeuristics.d.ts} +4 -4
- package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
- package/lib/summary/{summarizerHeuristics.mjs → summarizerHeuristics.js} +1 -1
- package/lib/summary/summarizerHeuristics.js.map +1 -0
- package/lib/summary/summarizerNode/{index.d.mts → index.d.ts} +4 -4
- package/lib/summary/summarizerNode/index.d.ts.map +1 -0
- package/lib/summary/summarizerNode/index.js +7 -0
- package/lib/summary/summarizerNode/index.js.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNode.d.mts → summarizerNode.d.ts} +18 -8
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNode.mjs → summarizerNode.js} +41 -53
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeUtils.d.mts → summarizerNodeUtils.d.ts} +11 -20
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeUtils.mjs → summarizerNodeUtils.js} +1 -20
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeWithGc.d.mts → summarizerNodeWithGc.d.ts} +6 -7
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeWithGc.mjs → summarizerNodeWithGc.js} +12 -12
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
- package/lib/summary/{summarizerTypes.d.mts → summarizerTypes.d.ts} +11 -22
- package/lib/summary/summarizerTypes.d.ts.map +1 -0
- package/lib/summary/{summarizerTypes.mjs → summarizerTypes.js} +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -0
- package/lib/summary/{summaryCollection.d.mts → summaryCollection.d.ts} +1 -1
- package/lib/summary/summaryCollection.d.ts.map +1 -0
- package/lib/summary/{summaryCollection.mjs → summaryCollection.js} +1 -1
- package/lib/summary/summaryCollection.js.map +1 -0
- package/lib/summary/{summaryFormat.d.mts → summaryFormat.d.ts} +16 -3
- package/lib/summary/summaryFormat.d.ts.map +1 -0
- package/lib/summary/{summaryFormat.mjs → summaryFormat.js} +1 -1
- package/lib/summary/summaryFormat.js.map +1 -0
- package/lib/summary/{summaryGenerator.d.mts → summaryGenerator.d.ts} +7 -6
- package/lib/summary/summaryGenerator.d.ts.map +1 -0
- package/lib/summary/{summaryGenerator.mjs → summaryGenerator.js} +11 -2
- package/lib/summary/summaryGenerator.js.map +1 -0
- package/lib/summary/{summaryManager.d.mts → summaryManager.d.ts} +6 -7
- package/lib/summary/summaryManager.d.ts.map +1 -0
- package/lib/summary/{summaryManager.mjs → summaryManager.js} +4 -5
- package/lib/summary/summaryManager.js.map +1 -0
- package/lib/test/batchTracker.spec.js +88 -0
- package/lib/test/batchTracker.spec.js.map +1 -0
- package/lib/test/blobManager.spec.js +835 -0
- package/lib/test/blobManager.spec.js.map +1 -0
- package/lib/test/channelCollection.spec.js +141 -0
- package/lib/test/channelCollection.spec.js.map +1 -0
- package/lib/test/containerRuntime.spec.js +1748 -0
- package/lib/test/containerRuntime.spec.js.map +1 -0
- package/lib/test/dataStoreContext.spec.js +801 -0
- package/lib/test/dataStoreContext.spec.js.map +1 -0
- package/lib/test/dataStoreCreation.spec.js +312 -0
- package/lib/test/dataStoreCreation.spec.js.map +1 -0
- package/lib/test/dataStoreRegistry.spec.js +26 -0
- package/lib/test/dataStoreRegistry.spec.js.map +1 -0
- package/lib/test/fuzz/fuzzUtils.js +66 -0
- package/lib/test/fuzz/fuzzUtils.js.map +1 -0
- package/lib/test/fuzz/summarizer.fuzz.spec.js +31 -0
- package/lib/test/fuzz/summarizer.fuzz.spec.js.map +1 -0
- package/lib/test/fuzz/summarizerFuzzMocks.js +162 -0
- package/lib/test/fuzz/summarizerFuzzMocks.js.map +1 -0
- package/lib/test/fuzz/summarizerFuzzSuite.js +106 -0
- package/lib/test/fuzz/summarizerFuzzSuite.js.map +1 -0
- package/lib/test/gc/garbageCollection.spec.js +1465 -0
- package/lib/test/gc/garbageCollection.spec.js.map +1 -0
- package/lib/test/gc/gcConfigs.spec.js +690 -0
- package/lib/test/gc/gcConfigs.spec.js.map +1 -0
- package/lib/test/gc/gcHelpers.spec.js +110 -0
- package/lib/test/gc/gcHelpers.spec.js.map +1 -0
- package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +68 -0
- package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +1 -0
- package/lib/test/gc/gcStats.spec.js +391 -0
- package/lib/test/gc/gcStats.spec.js.map +1 -0
- package/lib/test/gc/gcSummaryStateTracker.spec.js +228 -0
- package/lib/test/gc/gcSummaryStateTracker.spec.js.map +1 -0
- package/lib/test/gc/gcTelemetry.spec.js +530 -0
- package/lib/test/gc/gcTelemetry.spec.js.map +1 -0
- package/lib/test/gc/gcUnitTestHelpers.js +29 -0
- package/lib/test/gc/gcUnitTestHelpers.js.map +1 -0
- package/lib/test/gc/gcUnreferencedStateTracker.spec.js +192 -0
- package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +1 -0
- package/lib/test/getPendingBlobs.spec.js +193 -0
- package/lib/test/getPendingBlobs.spec.js.map +1 -0
- package/lib/test/hardwareStats.spec.js +93 -0
- package/lib/test/hardwareStats.spec.js.map +1 -0
- package/lib/test/index.js +6 -0
- package/lib/test/index.js.map +1 -0
- package/lib/test/opLifecycle/OpGroupingManager.spec.js +225 -0
- package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +1 -0
- package/lib/test/opLifecycle/batchManager.spec.js +189 -0
- package/lib/test/opLifecycle/batchManager.spec.js.map +1 -0
- package/lib/test/opLifecycle/opCompressor.spec.js +74 -0
- package/lib/test/opLifecycle/opCompressor.spec.js.map +1 -0
- package/lib/test/opLifecycle/opDecompressor.spec.js +218 -0
- package/lib/test/opLifecycle/opDecompressor.spec.js.map +1 -0
- package/lib/test/opLifecycle/opSplitter.spec.js +272 -0
- package/lib/test/opLifecycle/opSplitter.spec.js.map +1 -0
- package/lib/test/opLifecycle/outbox.spec.js +675 -0
- package/lib/test/opLifecycle/outbox.spec.js.map +1 -0
- package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +196 -0
- package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +1 -0
- package/lib/test/pendingStateManager.spec.js +329 -0
- package/lib/test/pendingStateManager.spec.js.map +1 -0
- package/lib/test/scheduleManager.spec.js +270 -0
- package/lib/test/scheduleManager.spec.js.map +1 -0
- package/lib/test/summarizerNode.spec.js +326 -0
- package/lib/test/summarizerNode.spec.js.map +1 -0
- package/lib/test/summarizerNodeWithGc.spec.js +318 -0
- package/lib/test/summarizerNodeWithGc.spec.js.map +1 -0
- package/lib/test/summary/orderedClientElection.spec.js +535 -0
- package/lib/test/summary/orderedClientElection.spec.js.map +1 -0
- package/lib/test/summary/runningSummarizer.spec.js +1349 -0
- package/lib/test/summary/runningSummarizer.spec.js.map +1 -0
- package/lib/test/summary/summarizer.spec.js +29 -0
- package/lib/test/summary/summarizer.spec.js.map +1 -0
- package/lib/test/summary/summarizerClientElection.spec.js +436 -0
- package/lib/test/summary/summarizerClientElection.spec.js.map +1 -0
- package/lib/test/summary/summarizerHeuristics.spec.js +289 -0
- package/lib/test/summary/summarizerHeuristics.spec.js.map +1 -0
- package/lib/test/summary/summaryCollection.spec.js +200 -0
- package/lib/test/summary/summaryCollection.spec.js.map +1 -0
- package/lib/test/summary/summaryManager.spec.js +430 -0
- package/lib/test/summary/summaryManager.spec.js.map +1 -0
- package/lib/test/summary/testQuorumClients.js +34 -0
- package/lib/test/summary/testQuorumClients.js.map +1 -0
- package/lib/test/throttler.spec.js +175 -0
- package/lib/test/throttler.spec.js.map +1 -0
- package/lib/test/types/validateContainerRuntimePrevious.generated.js +180 -0
- package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +1 -0
- package/lib/{throttler.d.mts → throttler.d.ts} +1 -1
- package/lib/throttler.d.ts.map +1 -0
- package/lib/{throttler.mjs → throttler.js} +1 -1
- package/lib/throttler.js.map +1 -0
- package/package.json +99 -88
- package/src/batchTracker.ts +1 -1
- package/src/blobManager.ts +1 -1
- package/src/{dataStores.ts → channelCollection.ts} +467 -88
- package/src/connectionTelemetry.ts +42 -3
- package/src/containerHandleContext.ts +1 -1
- package/src/containerRuntime.ts +649 -462
- package/src/dataStore.ts +13 -15
- package/src/dataStoreContext.ts +203 -173
- package/src/dataStoreContexts.ts +1 -1
- package/src/deltaManagerSummarizerProxy.ts +132 -7
- package/src/gc/garbageCollection.ts +29 -16
- package/src/gc/gcConfigs.ts +3 -3
- package/src/gc/gcDefinitions.ts +10 -3
- package/src/gc/gcHelpers.ts +2 -2
- package/src/gc/gcReferenceGraphAlgorithm.ts +1 -1
- package/src/gc/gcSummaryStateTracker.ts +5 -6
- package/src/gc/gcTelemetry.ts +6 -6
- package/src/gc/gcUnreferencedStateTracker.ts +1 -1
- package/src/gc/index.ts +8 -8
- package/src/index.ts +16 -27
- package/src/messageTypes.ts +4 -4
- package/src/opLifecycle/README.md +2 -4
- package/src/opLifecycle/batchManager.ts +2 -2
- package/src/opLifecycle/definitions.ts +2 -2
- package/src/opLifecycle/index.ts +8 -8
- package/src/opLifecycle/opCompressor.ts +3 -3
- package/src/opLifecycle/opDecompressor.ts +3 -3
- package/src/opLifecycle/opGroupingManager.ts +3 -12
- package/src/opLifecycle/opSplitter.ts +3 -3
- package/src/opLifecycle/outbox.ts +29 -9
- package/src/opLifecycle/remoteMessageProcessor.ts +4 -4
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +19 -13
- package/src/scheduleManager.ts +4 -4
- package/src/summary/index.ts +13 -12
- package/src/summary/orderedClientElection.ts +1 -1
- package/src/summary/runWhileConnectedCoordinator.ts +1 -1
- package/src/summary/runningSummarizer.ts +141 -93
- package/src/summary/summarizer.ts +7 -7
- package/src/summary/summarizerClientElection.ts +2 -2
- package/src/summary/summarizerHeuristics.ts +3 -3
- package/src/summary/summarizerNode/index.ts +6 -3
- package/src/summary/summarizerNode/summarizerNode.ts +54 -69
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +16 -34
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +11 -17
- package/src/summary/summarizerTypes.ts +12 -24
- package/src/summary/summaryFormat.ts +16 -2
- package/src/summary/summaryGenerator.ts +16 -4
- package/src/summary/summaryManager.ts +6 -7
- package/tsconfig.cjs.json +7 -0
- package/tsconfig.json +2 -5
- package/dist/dataStores.d.ts.map +0 -1
- package/dist/dataStores.js.map +0 -1
- package/dist/deltaManagerProxyBase.d.ts.map +0 -1
- package/dist/deltaManagerProxyBase.js +0 -77
- package/dist/deltaManagerProxyBase.js.map +0 -1
- package/lib/batchTracker.d.mts.map +0 -1
- package/lib/batchTracker.mjs.map +0 -1
- package/lib/blobManager.d.mts.map +0 -1
- package/lib/blobManager.mjs.map +0 -1
- package/lib/connectionTelemetry.d.mts.map +0 -1
- package/lib/connectionTelemetry.mjs.map +0 -1
- package/lib/containerHandleContext.d.mts.map +0 -1
- package/lib/containerHandleContext.mjs.map +0 -1
- package/lib/containerRuntime.d.mts.map +0 -1
- package/lib/containerRuntime.mjs.map +0 -1
- package/lib/dataStore.d.mts.map +0 -1
- package/lib/dataStore.mjs.map +0 -1
- package/lib/dataStoreContext.d.mts.map +0 -1
- package/lib/dataStoreContext.mjs.map +0 -1
- package/lib/dataStoreContexts.d.mts.map +0 -1
- package/lib/dataStoreContexts.mjs.map +0 -1
- package/lib/dataStoreRegistry.d.mts.map +0 -1
- package/lib/dataStoreRegistry.mjs.map +0 -1
- package/lib/dataStores.d.mts.map +0 -1
- package/lib/dataStores.mjs.map +0 -1
- package/lib/deltaManagerProxyBase.d.mts +0 -35
- package/lib/deltaManagerProxyBase.d.mts.map +0 -1
- package/lib/deltaManagerProxyBase.mjs +0 -73
- package/lib/deltaManagerProxyBase.mjs.map +0 -1
- package/lib/deltaManagerSummarizerProxy.d.mts +0 -19
- package/lib/deltaManagerSummarizerProxy.d.mts.map +0 -1
- package/lib/deltaManagerSummarizerProxy.mjs +0 -38
- package/lib/deltaManagerSummarizerProxy.mjs.map +0 -1
- package/lib/deltaScheduler.d.mts.map +0 -1
- package/lib/deltaScheduler.mjs.map +0 -1
- package/lib/error.d.mts.map +0 -1
- package/lib/error.mjs.map +0 -1
- package/lib/gc/garbageCollection.d.mts.map +0 -1
- package/lib/gc/garbageCollection.mjs.map +0 -1
- package/lib/gc/gcConfigs.d.mts.map +0 -1
- package/lib/gc/gcConfigs.mjs.map +0 -1
- package/lib/gc/gcDefinitions.d.mts.map +0 -1
- package/lib/gc/gcDefinitions.mjs.map +0 -1
- package/lib/gc/gcHelpers.mjs.map +0 -1
- package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +0 -1
- package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +0 -1
- package/lib/gc/gcSummaryDefinitions.d.mts.map +0 -1
- package/lib/gc/gcSummaryDefinitions.mjs.map +0 -1
- package/lib/gc/gcSummaryStateTracker.d.mts.map +0 -1
- package/lib/gc/gcSummaryStateTracker.mjs.map +0 -1
- package/lib/gc/gcTelemetry.d.mts.map +0 -1
- package/lib/gc/gcTelemetry.mjs.map +0 -1
- package/lib/gc/gcUnreferencedStateTracker.d.mts.map +0 -1
- package/lib/gc/gcUnreferencedStateTracker.mjs.map +0 -1
- package/lib/gc/index.d.mts.map +0 -1
- package/lib/gc/index.mjs.map +0 -1
- package/lib/index.d.mts.map +0 -1
- package/lib/index.mjs +0 -24
- package/lib/index.mjs.map +0 -1
- package/lib/messageTypes.d.mts.map +0 -1
- package/lib/messageTypes.mjs.map +0 -1
- package/lib/metadata.d.mts.map +0 -1
- package/lib/metadata.mjs.map +0 -1
- package/lib/opLifecycle/batchManager.d.mts.map +0 -1
- package/lib/opLifecycle/batchManager.mjs.map +0 -1
- package/lib/opLifecycle/definitions.d.mts.map +0 -1
- package/lib/opLifecycle/definitions.mjs.map +0 -1
- package/lib/opLifecycle/index.d.mts +0 -13
- package/lib/opLifecycle/index.d.mts.map +0 -1
- package/lib/opLifecycle/index.mjs +0 -12
- package/lib/opLifecycle/index.mjs.map +0 -1
- package/lib/opLifecycle/opCompressor.d.mts.map +0 -1
- package/lib/opLifecycle/opCompressor.mjs.map +0 -1
- package/lib/opLifecycle/opDecompressor.d.mts.map +0 -1
- package/lib/opLifecycle/opDecompressor.mjs.map +0 -1
- package/lib/opLifecycle/opGroupingManager.d.mts.map +0 -1
- package/lib/opLifecycle/opGroupingManager.mjs.map +0 -1
- package/lib/opLifecycle/opSplitter.d.mts.map +0 -1
- package/lib/opLifecycle/opSplitter.mjs.map +0 -1
- package/lib/opLifecycle/outbox.d.mts.map +0 -1
- package/lib/opLifecycle/outbox.mjs.map +0 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +0 -1
- package/lib/opLifecycle/remoteMessageProcessor.mjs.map +0 -1
- package/lib/opProperties.d.mts.map +0 -1
- package/lib/opProperties.mjs.map +0 -1
- package/lib/packageVersion.d.mts.map +0 -1
- package/lib/packageVersion.mjs.map +0 -1
- package/lib/pendingStateManager.d.mts.map +0 -1
- package/lib/pendingStateManager.mjs.map +0 -1
- package/lib/scheduleManager.d.mts.map +0 -1
- package/lib/scheduleManager.mjs.map +0 -1
- package/lib/storageServiceWithAttachBlobs.d.mts.map +0 -1
- package/lib/storageServiceWithAttachBlobs.mjs.map +0 -1
- package/lib/summary/index.d.mts.map +0 -1
- package/lib/summary/index.mjs.map +0 -1
- package/lib/summary/orderedClientElection.d.mts.map +0 -1
- package/lib/summary/orderedClientElection.mjs.map +0 -1
- package/lib/summary/runWhileConnectedCoordinator.d.mts.map +0 -1
- package/lib/summary/runWhileConnectedCoordinator.mjs.map +0 -1
- package/lib/summary/runningSummarizer.d.mts.map +0 -1
- package/lib/summary/runningSummarizer.mjs.map +0 -1
- package/lib/summary/summarizer.d.mts.map +0 -1
- package/lib/summary/summarizer.mjs.map +0 -1
- package/lib/summary/summarizerClientElection.d.mts.map +0 -1
- package/lib/summary/summarizerClientElection.mjs.map +0 -1
- package/lib/summary/summarizerHeuristics.d.mts.map +0 -1
- package/lib/summary/summarizerHeuristics.mjs.map +0 -1
- package/lib/summary/summarizerNode/index.d.mts.map +0 -1
- package/lib/summary/summarizerNode/index.mjs +0 -7
- package/lib/summary/summarizerNode/index.mjs.map +0 -1
- package/lib/summary/summarizerNode/summarizerNode.d.mts.map +0 -1
- package/lib/summary/summarizerNode/summarizerNode.mjs.map +0 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +0 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +0 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +0 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +0 -1
- package/lib/summary/summarizerTypes.d.mts.map +0 -1
- package/lib/summary/summarizerTypes.mjs.map +0 -1
- package/lib/summary/summaryCollection.d.mts.map +0 -1
- package/lib/summary/summaryCollection.mjs.map +0 -1
- package/lib/summary/summaryFormat.d.mts.map +0 -1
- package/lib/summary/summaryFormat.mjs.map +0 -1
- package/lib/summary/summaryGenerator.d.mts.map +0 -1
- package/lib/summary/summaryGenerator.mjs.map +0 -1
- package/lib/summary/summaryManager.d.mts.map +0 -1
- package/lib/summary/summaryManager.mjs.map +0 -1
- package/lib/throttler.d.mts.map +0 -1
- package/lib/throttler.mjs.map +0 -1
- package/src/deltaManagerProxyBase.ts +0 -111
package/src/dataStoreContext.ts
CHANGED
|
@@ -9,18 +9,14 @@ import {
|
|
|
9
9
|
IRequest,
|
|
10
10
|
IResponse,
|
|
11
11
|
IFluidHandle,
|
|
12
|
-
|
|
12
|
+
ITelemetryBaseProperties,
|
|
13
13
|
} from "@fluidframework/core-interfaces";
|
|
14
|
-
import {
|
|
15
|
-
IAudience,
|
|
16
|
-
IDeltaManager,
|
|
17
|
-
AttachState,
|
|
18
|
-
ILoaderOptions,
|
|
19
|
-
} from "@fluidframework/container-definitions";
|
|
14
|
+
import { IAudience, IDeltaManager, AttachState } from "@fluidframework/container-definitions";
|
|
20
15
|
import { TypedEventEmitter } from "@fluid-internal/client-utils";
|
|
21
|
-
import { assert,
|
|
16
|
+
import { assert, LazyPromise } from "@fluidframework/core-utils";
|
|
22
17
|
import { IDocumentStorageService } from "@fluidframework/driver-definitions";
|
|
23
18
|
import { BlobTreeEntry, readAndParse } from "@fluidframework/driver-utils";
|
|
19
|
+
import type { IIdCompressor } from "@fluidframework/id-compressor";
|
|
24
20
|
import {
|
|
25
21
|
IClientDetails,
|
|
26
22
|
IDocumentMessage,
|
|
@@ -29,7 +25,6 @@ import {
|
|
|
29
25
|
ISnapshotTree,
|
|
30
26
|
ITreeEntry,
|
|
31
27
|
} from "@fluidframework/protocol-definitions";
|
|
32
|
-
import { IContainerRuntime } from "@fluidframework/container-runtime-definitions";
|
|
33
28
|
import {
|
|
34
29
|
channelsTreeName,
|
|
35
30
|
CreateChildSummarizerNodeFn,
|
|
@@ -37,6 +32,8 @@ import {
|
|
|
37
32
|
FluidDataStoreRegistryEntry,
|
|
38
33
|
IFluidDataStoreChannel,
|
|
39
34
|
IFluidDataStoreContext,
|
|
35
|
+
IFluidParentContext,
|
|
36
|
+
IContainerRuntimeBase,
|
|
40
37
|
IFluidDataStoreContextDetached,
|
|
41
38
|
IFluidDataStoreContextEvents,
|
|
42
39
|
IFluidDataStoreRegistry,
|
|
@@ -49,10 +46,9 @@ import {
|
|
|
49
46
|
ISummarizerNodeWithGC,
|
|
50
47
|
SummarizeInternalFn,
|
|
51
48
|
ITelemetryContext,
|
|
52
|
-
IIdCompressor,
|
|
53
|
-
IIdCompressorCore,
|
|
54
|
-
VisibilityState,
|
|
55
49
|
ISummaryTreeWithStats,
|
|
50
|
+
IDataStore,
|
|
51
|
+
gcDataBlobKey,
|
|
56
52
|
} from "@fluidframework/runtime-definitions";
|
|
57
53
|
import { addBlobToSummary } from "@fluidframework/runtime-utils";
|
|
58
54
|
import {
|
|
@@ -61,7 +57,6 @@ import {
|
|
|
61
57
|
DataProcessingError,
|
|
62
58
|
extractSafePropertiesFromMessage,
|
|
63
59
|
generateStack,
|
|
64
|
-
ITelemetryLoggerExt,
|
|
65
60
|
LoggingError,
|
|
66
61
|
MonitoringContext,
|
|
67
62
|
tagCodeArtifacts,
|
|
@@ -76,9 +71,8 @@ import {
|
|
|
76
71
|
getAttributesFormatVersion,
|
|
77
72
|
getFluidDataStoreAttributes,
|
|
78
73
|
summarizerClientType,
|
|
79
|
-
} from "./summary";
|
|
80
|
-
import {
|
|
81
|
-
import { detectOutboundRoutesViaDDSKey, sendGCUnexpectedUsageEvent } from "./gc";
|
|
74
|
+
} from "./summary/index.js";
|
|
75
|
+
import { detectOutboundRoutesViaDDSKey, sendGCUnexpectedUsageEvent } from "./gc/index.js";
|
|
82
76
|
|
|
83
77
|
function createAttributes(
|
|
84
78
|
pkg: readonly string[],
|
|
@@ -100,21 +94,18 @@ interface ISnapshotDetails {
|
|
|
100
94
|
pkg: readonly string[];
|
|
101
95
|
isRootDataStore: boolean;
|
|
102
96
|
snapshot?: ISnapshotTree;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
interface FluidDataStoreMessage {
|
|
106
|
-
content: any;
|
|
107
|
-
type: string;
|
|
97
|
+
sequenceNumber?: number;
|
|
108
98
|
}
|
|
109
99
|
|
|
110
100
|
/** Properties necessary for creating a FluidDataStoreContext */
|
|
111
101
|
export interface IFluidDataStoreContextProps {
|
|
112
102
|
readonly id: string;
|
|
113
|
-
readonly
|
|
103
|
+
readonly parentContext: IFluidParentContext;
|
|
114
104
|
readonly storage: IDocumentStorageService;
|
|
115
105
|
readonly scope: FluidObject;
|
|
116
106
|
readonly createSummarizerNodeFn: CreateChildSummarizerNodeFn;
|
|
117
107
|
readonly pkg?: Readonly<string[]>;
|
|
108
|
+
readonly loadingGroupId?: string;
|
|
118
109
|
}
|
|
119
110
|
|
|
120
111
|
/** Properties necessary for creating a local FluidDataStoreContext */
|
|
@@ -129,6 +120,11 @@ export interface ILocalFluidDataStoreContextProps extends IFluidDataStoreContext
|
|
|
129
120
|
readonly createProps?: any;
|
|
130
121
|
}
|
|
131
122
|
|
|
123
|
+
/** Properties necessary for creating a local FluidDataStoreContext */
|
|
124
|
+
export interface ILocalDetachedFluidDataStoreContextProps extends ILocalFluidDataStoreContextProps {
|
|
125
|
+
readonly channelToDataStoreFn: (channel: IFluidDataStoreChannel) => IDataStore;
|
|
126
|
+
}
|
|
127
|
+
|
|
132
128
|
/** Properties necessary for creating a remote FluidDataStoreContext */
|
|
133
129
|
export interface IRemoteFluidDataStoreContextProps extends IFluidDataStoreContextProps {
|
|
134
130
|
readonly snapshotTree: ISnapshotTree | undefined;
|
|
@@ -139,47 +135,47 @@ export interface IRemoteFluidDataStoreContextProps extends IFluidDataStoreContex
|
|
|
139
135
|
*/
|
|
140
136
|
export abstract class FluidDataStoreContext
|
|
141
137
|
extends TypedEventEmitter<IFluidDataStoreContextEvents>
|
|
142
|
-
implements IFluidDataStoreContext, IDisposable
|
|
138
|
+
implements IFluidDataStoreContext, IFluidParentContext, IDisposable
|
|
143
139
|
{
|
|
144
140
|
public get packagePath(): readonly string[] {
|
|
145
141
|
assert(this.pkg !== undefined, 0x139 /* "Undefined package path" */);
|
|
146
142
|
return this.pkg;
|
|
147
143
|
}
|
|
148
144
|
|
|
149
|
-
public get options():
|
|
150
|
-
return this.
|
|
145
|
+
public get options(): Record<string | number, any> {
|
|
146
|
+
return this.parentContext.options;
|
|
151
147
|
}
|
|
152
148
|
|
|
153
149
|
public get clientId(): string | undefined {
|
|
154
|
-
return this.
|
|
150
|
+
return this.parentContext.clientId;
|
|
155
151
|
}
|
|
156
152
|
|
|
157
153
|
public get clientDetails(): IClientDetails {
|
|
158
|
-
return this.
|
|
154
|
+
return this.parentContext.clientDetails;
|
|
159
155
|
}
|
|
160
156
|
|
|
161
|
-
public get logger()
|
|
162
|
-
return this.
|
|
157
|
+
public get logger() {
|
|
158
|
+
return this.parentContext.logger;
|
|
163
159
|
}
|
|
164
160
|
|
|
165
161
|
public get deltaManager(): IDeltaManager<ISequencedDocumentMessage, IDocumentMessage> {
|
|
166
|
-
return this.
|
|
162
|
+
return this.parentContext.deltaManager;
|
|
167
163
|
}
|
|
168
164
|
|
|
169
165
|
public get connected(): boolean {
|
|
170
|
-
return this.
|
|
166
|
+
return this.parentContext.connected;
|
|
171
167
|
}
|
|
172
168
|
|
|
173
169
|
public get IFluidHandleContext() {
|
|
174
|
-
return this.
|
|
170
|
+
return this.parentContext.IFluidHandleContext;
|
|
175
171
|
}
|
|
176
172
|
|
|
177
|
-
public get containerRuntime():
|
|
173
|
+
public get containerRuntime(): IContainerRuntimeBase {
|
|
178
174
|
return this._containerRuntime;
|
|
179
175
|
}
|
|
180
176
|
|
|
181
177
|
public ensureNoDataModelChanges<T>(callback: () => T): T {
|
|
182
|
-
return this.
|
|
178
|
+
return this.parentContext.ensureNoDataModelChanges(callback);
|
|
183
179
|
}
|
|
184
180
|
|
|
185
181
|
public get isLoaded(): boolean {
|
|
@@ -190,8 +186,8 @@ export abstract class FluidDataStoreContext
|
|
|
190
186
|
return this._baseSnapshot;
|
|
191
187
|
}
|
|
192
188
|
|
|
193
|
-
public get idCompressor():
|
|
194
|
-
return this.
|
|
189
|
+
public get idCompressor(): IIdCompressor | undefined {
|
|
190
|
+
return this.parentContext.idCompressor;
|
|
195
191
|
}
|
|
196
192
|
|
|
197
193
|
private _disposed = false;
|
|
@@ -208,7 +204,8 @@ export abstract class FluidDataStoreContext
|
|
|
208
204
|
return this._tombstoned;
|
|
209
205
|
}
|
|
210
206
|
/** If true, throw an error when a tombstone data store is used. */
|
|
211
|
-
|
|
207
|
+
public readonly gcThrowOnTombstoneUsage: boolean;
|
|
208
|
+
public readonly gcTombstoneEnforcementAllowed: boolean;
|
|
212
209
|
|
|
213
210
|
/** If true, this means that this data store context and its children have been removed from the runtime */
|
|
214
211
|
private deleted: boolean = false;
|
|
@@ -218,9 +215,15 @@ export abstract class FluidDataStoreContext
|
|
|
218
215
|
}
|
|
219
216
|
|
|
220
217
|
public get IFluidDataStoreRegistry(): IFluidDataStoreRegistry | undefined {
|
|
218
|
+
assert(
|
|
219
|
+
this.channel !== undefined,
|
|
220
|
+
0x8f3 /* This should be called after the channel is created, when the registry is populated */,
|
|
221
|
+
);
|
|
221
222
|
return this.registry;
|
|
222
223
|
}
|
|
223
224
|
|
|
225
|
+
private baseSnapshotSequenceNumber: number | undefined;
|
|
226
|
+
|
|
224
227
|
/**
|
|
225
228
|
* A datastore is considered as root if it
|
|
226
229
|
* 1. is root in memory - see isInMemoryRoot
|
|
@@ -248,8 +251,8 @@ export abstract class FluidDataStoreContext
|
|
|
248
251
|
protected channel: IFluidDataStoreChannel | undefined;
|
|
249
252
|
private loaded = false;
|
|
250
253
|
protected pending: ISequencedDocumentMessage[] | undefined = [];
|
|
251
|
-
protected
|
|
252
|
-
|
|
254
|
+
protected channelP: Promise<IFluidDataStoreChannel> | undefined;
|
|
255
|
+
protected _baseSnapshot: ISnapshotTree | undefined;
|
|
253
256
|
protected _attachState: AttachState;
|
|
254
257
|
private _isInMemoryRoot: boolean = false;
|
|
255
258
|
protected readonly summarizerNode: ISummarizerNodeWithGC;
|
|
@@ -269,9 +272,12 @@ export abstract class FluidDataStoreContext
|
|
|
269
272
|
private lastUsedRoutes: string[] | undefined;
|
|
270
273
|
|
|
271
274
|
public readonly id: string;
|
|
272
|
-
private readonly _containerRuntime:
|
|
275
|
+
private readonly _containerRuntime: IContainerRuntimeBase;
|
|
276
|
+
private readonly parentContext: IFluidParentContext;
|
|
273
277
|
public readonly storage: IDocumentStorageService;
|
|
274
278
|
public readonly scope: FluidObject;
|
|
279
|
+
// Represents the group to which the data store belongs too.
|
|
280
|
+
public readonly loadingGroupId: string | undefined;
|
|
275
281
|
protected pkg?: readonly string[];
|
|
276
282
|
|
|
277
283
|
constructor(
|
|
@@ -282,19 +288,21 @@ export abstract class FluidDataStoreContext
|
|
|
282
288
|
) {
|
|
283
289
|
super();
|
|
284
290
|
|
|
285
|
-
this._containerRuntime = props.
|
|
291
|
+
this._containerRuntime = props.parentContext.containerRuntime;
|
|
292
|
+
this.parentContext = props.parentContext;
|
|
286
293
|
this.id = props.id;
|
|
287
294
|
this.storage = props.storage;
|
|
288
295
|
this.scope = props.scope;
|
|
289
296
|
this.pkg = props.pkg;
|
|
297
|
+
this.loadingGroupId = props.loadingGroupId;
|
|
290
298
|
|
|
291
299
|
// URIs use slashes as delimiters. Handles use URIs.
|
|
292
300
|
// Thus having slashes in types almost guarantees trouble down the road!
|
|
293
301
|
assert(!this.id.includes("/"), 0x13a /* Data store ID contains slash */);
|
|
294
302
|
|
|
295
303
|
this._attachState =
|
|
296
|
-
this.
|
|
297
|
-
? this.
|
|
304
|
+
this.parentContext.attachState !== AttachState.Detached && this.existing
|
|
305
|
+
? this.parentContext.attachState
|
|
298
306
|
: AttachState.Detached;
|
|
299
307
|
|
|
300
308
|
const thisSummarizeInternal = async (
|
|
@@ -325,7 +333,8 @@ export abstract class FluidDataStoreContext
|
|
|
325
333
|
this.mc.logger,
|
|
326
334
|
);
|
|
327
335
|
|
|
328
|
-
this.
|
|
336
|
+
this.gcThrowOnTombstoneUsage = this.parentContext.gcThrowOnTombstoneUsage;
|
|
337
|
+
this.gcTombstoneEnforcementAllowed = this.parentContext.gcTombstoneEnforcementAllowed;
|
|
329
338
|
|
|
330
339
|
// By default, a data store can log maximum 10 local changes telemetry in summarizer.
|
|
331
340
|
this.localChangesTelemetryCount =
|
|
@@ -339,9 +348,9 @@ export abstract class FluidDataStoreContext
|
|
|
339
348
|
this._disposed = true;
|
|
340
349
|
|
|
341
350
|
// Dispose any pending runtime after it gets fulfilled
|
|
342
|
-
// Errors are logged where this.
|
|
343
|
-
if (this.
|
|
344
|
-
this.
|
|
351
|
+
// Errors are logged where this.channelP is consumed/generated (realizeCore(), bindRuntime())
|
|
352
|
+
if (this.channelP) {
|
|
353
|
+
this.channelP
|
|
345
354
|
.then((runtime) => {
|
|
346
355
|
runtime.dispose();
|
|
347
356
|
})
|
|
@@ -382,9 +391,8 @@ export abstract class FluidDataStoreContext
|
|
|
382
391
|
|
|
383
392
|
public async realize(): Promise<IFluidDataStoreChannel> {
|
|
384
393
|
assert(!this.detachedRuntimeCreation, 0x13d /* "Detached runtime creation on realize()" */);
|
|
385
|
-
if (!this.
|
|
386
|
-
this.
|
|
387
|
-
this.realizeCore(this.existing).catch((error) => {
|
|
394
|
+
if (!this.channelP) {
|
|
395
|
+
this.channelP = this.realizeCore(this.existing).catch((error) => {
|
|
388
396
|
const errorWrapped = DataProcessingError.wrapIfUnrecognized(
|
|
389
397
|
error,
|
|
390
398
|
"realizeFluidDataStoreContext",
|
|
@@ -395,22 +403,22 @@ export abstract class FluidDataStoreContext
|
|
|
395
403
|
fluidDataStoreId: this.id,
|
|
396
404
|
}),
|
|
397
405
|
);
|
|
398
|
-
this.channelDeferred?.reject(errorWrapped);
|
|
399
406
|
this.mc.logger.sendErrorEvent({ eventName: "RealizeError" }, errorWrapped);
|
|
407
|
+
throw errorWrapped;
|
|
400
408
|
});
|
|
401
409
|
}
|
|
402
|
-
return this.
|
|
410
|
+
return this.channelP;
|
|
403
411
|
}
|
|
404
412
|
|
|
405
|
-
protected async factoryFromPackagePath(
|
|
406
|
-
|
|
413
|
+
protected async factoryFromPackagePath() {
|
|
414
|
+
const packages = this.pkg;
|
|
407
415
|
if (packages === undefined) {
|
|
408
416
|
this.rejectDeferredRealize("packages is undefined");
|
|
409
417
|
}
|
|
410
418
|
|
|
411
419
|
let entry: FluidDataStoreRegistryEntry | undefined;
|
|
412
420
|
let registry: IFluidDataStoreRegistry | undefined =
|
|
413
|
-
this.
|
|
421
|
+
this.parentContext.IFluidDataStoreRegistry;
|
|
414
422
|
let lastPkg: string | undefined;
|
|
415
423
|
for (const pkg of packages) {
|
|
416
424
|
if (!registry) {
|
|
@@ -432,33 +440,33 @@ export abstract class FluidDataStoreContext
|
|
|
432
440
|
this.rejectDeferredRealize("Can't find factory for package", lastPkg, packages);
|
|
433
441
|
}
|
|
434
442
|
|
|
435
|
-
|
|
443
|
+
assert(this.registry === undefined, 0x157 /* "datastore registry already attached" */);
|
|
444
|
+
this.registry = registry;
|
|
445
|
+
|
|
446
|
+
return factory;
|
|
436
447
|
}
|
|
437
448
|
|
|
438
|
-
private async realizeCore(existing: boolean)
|
|
449
|
+
private async realizeCore(existing: boolean) {
|
|
439
450
|
const details = await this.getInitialSnapshotDetails();
|
|
440
451
|
// Base snapshot is the baseline where pending ops are applied to.
|
|
441
452
|
// It is important that this be in sync with the pending ops, and also
|
|
442
453
|
// that it is set here, before bindRuntime is called.
|
|
443
454
|
this._baseSnapshot = details.snapshot;
|
|
444
|
-
|
|
455
|
+
this.baseSnapshotSequenceNumber = details.sequenceNumber;
|
|
456
|
+
assert(this.pkg === details.pkg, 0x13e /* "Unexpected package path" */);
|
|
445
457
|
|
|
446
|
-
const
|
|
447
|
-
|
|
448
|
-
assert(
|
|
449
|
-
this.registry === undefined,
|
|
450
|
-
0x13f /* "datastore context registry is already set" */,
|
|
451
|
-
);
|
|
452
|
-
this.registry = registry;
|
|
458
|
+
const factory = await this.factoryFromPackagePath();
|
|
453
459
|
|
|
454
460
|
const channel = await factory.instantiateDataStore(this, existing);
|
|
455
461
|
assert(channel !== undefined, 0x140 /* "undefined channel on datastore context" */);
|
|
456
|
-
this.bindRuntime(channel);
|
|
462
|
+
await this.bindRuntime(channel, existing);
|
|
457
463
|
// This data store may have been disposed before the channel is created during realization. If so,
|
|
458
464
|
// dispose the channel now.
|
|
459
465
|
if (this.disposed) {
|
|
460
466
|
channel.dispose();
|
|
461
467
|
}
|
|
468
|
+
|
|
469
|
+
return channel;
|
|
462
470
|
}
|
|
463
471
|
|
|
464
472
|
/**
|
|
@@ -483,28 +491,21 @@ export abstract class FluidDataStoreContext
|
|
|
483
491
|
}
|
|
484
492
|
|
|
485
493
|
public process(
|
|
486
|
-
|
|
494
|
+
message: ISequencedDocumentMessage,
|
|
487
495
|
local: boolean,
|
|
488
496
|
localOpMetadata: unknown,
|
|
489
497
|
): void {
|
|
490
|
-
const safeTelemetryProps = extractSafePropertiesFromMessage(
|
|
498
|
+
const safeTelemetryProps = extractSafePropertiesFromMessage(message);
|
|
491
499
|
// On op process, tombstone error is logged in garbage collector. So, set "checkTombstone" to false when calling
|
|
492
500
|
// "verifyNotClosed" which logs tombstone errors. Throw error if tombstoned and throwing on load is configured.
|
|
493
501
|
this.verifyNotClosed("process", false /* checkTombstone */, safeTelemetryProps);
|
|
494
|
-
if (this.tombstoned && this.
|
|
502
|
+
if (this.tombstoned && this.gcThrowOnTombstoneUsage) {
|
|
495
503
|
throw new DataCorruptionError(
|
|
496
504
|
"Context is tombstoned! Call site [process]",
|
|
497
505
|
safeTelemetryProps,
|
|
498
506
|
);
|
|
499
507
|
}
|
|
500
508
|
|
|
501
|
-
const innerContents = messageArg.contents as FluidDataStoreMessage;
|
|
502
|
-
const message = {
|
|
503
|
-
...messageArg,
|
|
504
|
-
type: innerContents.type,
|
|
505
|
-
contents: innerContents.content,
|
|
506
|
-
};
|
|
507
|
-
|
|
508
509
|
this.summarizerNode.recordChange(message);
|
|
509
510
|
|
|
510
511
|
if (this.loaded) {
|
|
@@ -529,11 +530,11 @@ export abstract class FluidDataStoreContext
|
|
|
529
530
|
}
|
|
530
531
|
|
|
531
532
|
public getQuorum(): IQuorumClients {
|
|
532
|
-
return this.
|
|
533
|
+
return this.parentContext.getQuorum();
|
|
533
534
|
}
|
|
534
535
|
|
|
535
536
|
public getAudience(): IAudience {
|
|
536
|
-
return this.
|
|
537
|
+
return this.parentContext.getAudience();
|
|
537
538
|
}
|
|
538
539
|
|
|
539
540
|
/**
|
|
@@ -581,6 +582,11 @@ export abstract class FluidDataStoreContext
|
|
|
581
582
|
summarizeResult.stats.unreferencedBlobSize = summarizeResult.stats.totalBlobSize;
|
|
582
583
|
}
|
|
583
584
|
|
|
585
|
+
// Add loadingGroupId to the summary
|
|
586
|
+
if (this.loadingGroupId !== undefined) {
|
|
587
|
+
summarizeResult.summary.groupId = this.loadingGroupId;
|
|
588
|
+
}
|
|
589
|
+
|
|
584
590
|
return {
|
|
585
591
|
...summarizeResult,
|
|
586
592
|
id: this.id,
|
|
@@ -664,7 +670,7 @@ export abstract class FluidDataStoreContext
|
|
|
664
670
|
// By default, skip this call since the ContainerRuntime will detect the outbound route directly.
|
|
665
671
|
if (this.mc.config.getBoolean(detectOutboundRoutesViaDDSKey) === true) {
|
|
666
672
|
// Note: The ContainerRuntime code will check this same setting to avoid double counting.
|
|
667
|
-
this.
|
|
673
|
+
this.parentContext.addedGCOutboundReference?.(srcHandle, outboundHandle);
|
|
668
674
|
}
|
|
669
675
|
}
|
|
670
676
|
|
|
@@ -678,7 +684,7 @@ export abstract class FluidDataStoreContext
|
|
|
678
684
|
* @param toPath - The absolute path of the outbound node that is referenced.
|
|
679
685
|
*/
|
|
680
686
|
public addedGCOutboundRoute(fromPath: string, toPath: string) {
|
|
681
|
-
this.
|
|
687
|
+
this.parentContext.addedGCOutboundReference?.(
|
|
682
688
|
{ absolutePath: fromPath },
|
|
683
689
|
{ absolutePath: toPath },
|
|
684
690
|
);
|
|
@@ -720,15 +726,10 @@ export abstract class FluidDataStoreContext
|
|
|
720
726
|
public submitMessage(type: string, content: any, localOpMetadata: unknown): void {
|
|
721
727
|
this.verifyNotClosed("submitMessage");
|
|
722
728
|
assert(!!this.channel, 0x146 /* "Channel must exist when submitting message" */);
|
|
723
|
-
const fluidDataStoreContent: FluidDataStoreMessage = {
|
|
724
|
-
content,
|
|
725
|
-
type,
|
|
726
|
-
};
|
|
727
|
-
|
|
728
729
|
// Summarizer clients should not submit messages.
|
|
729
730
|
this.identifyLocalChangeInSummarizer("DataStoreMessageSubmittedInSummarizer", type);
|
|
730
731
|
|
|
731
|
-
this.
|
|
732
|
+
this.parentContext.submitMessage(type, content, localOpMetadata);
|
|
732
733
|
}
|
|
733
734
|
|
|
734
735
|
/**
|
|
@@ -765,7 +766,7 @@ export abstract class FluidDataStoreContext
|
|
|
765
766
|
this.verifyNotClosed("submitSignal");
|
|
766
767
|
|
|
767
768
|
assert(!!this.channel, 0x147 /* "Channel must exist on submitting signal" */);
|
|
768
|
-
return this.
|
|
769
|
+
return this.parentContext.submitSignal(type, content, targetClientId);
|
|
769
770
|
}
|
|
770
771
|
|
|
771
772
|
/**
|
|
@@ -774,72 +775,71 @@ export abstract class FluidDataStoreContext
|
|
|
774
775
|
*/
|
|
775
776
|
public makeLocallyVisible() {
|
|
776
777
|
assert(this.channel !== undefined, 0x2cf /* "undefined channel on datastore context" */);
|
|
777
|
-
assert(
|
|
778
|
-
this.channel.visibilityState === VisibilityState.LocallyVisible,
|
|
779
|
-
0x590 /* Channel must be locally visible */,
|
|
780
|
-
);
|
|
781
778
|
this.makeLocallyVisibleFn();
|
|
782
779
|
}
|
|
783
780
|
|
|
784
|
-
protected bindRuntime(channel: IFluidDataStoreChannel) {
|
|
781
|
+
protected async bindRuntime(channel: IFluidDataStoreChannel, existing: boolean) {
|
|
785
782
|
if (this.channel) {
|
|
786
783
|
throw new Error("Runtime already bound");
|
|
787
784
|
}
|
|
788
785
|
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
assert(this.channelDeferred !== undefined, 0x149 /* "Undefined channel deferral" */);
|
|
795
|
-
assert(this.pkg !== undefined, 0x14a /* "Undefined package path" */);
|
|
786
|
+
assert(
|
|
787
|
+
!this.detachedRuntimeCreation,
|
|
788
|
+
0x148 /* "Detached runtime creation on runtime bind" */,
|
|
789
|
+
);
|
|
790
|
+
assert(this.pkg !== undefined, 0x14a /* "Undefined package path" */);
|
|
796
791
|
|
|
792
|
+
if (existing) {
|
|
797
793
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
798
794
|
const pending = this.pending!;
|
|
799
795
|
|
|
800
796
|
// Apply all pending ops
|
|
801
797
|
for (const op of pending) {
|
|
802
|
-
|
|
798
|
+
// Only process ops whose seq number is greater than snapshot sequence number from which it loaded.
|
|
799
|
+
const seqNumber = this.baseSnapshotSequenceNumber ?? -1;
|
|
800
|
+
if (op.sequenceNumber > seqNumber) {
|
|
801
|
+
channel.process(op, false, undefined /* localOpMetadata */);
|
|
802
|
+
}
|
|
803
803
|
}
|
|
804
804
|
|
|
805
805
|
this.thresholdOpsCounter.send("ProcessPendingOps", pending.length);
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
806
|
+
} else {
|
|
807
|
+
assert(this.pending?.length === 0, 0x8f4 /* no pending ops */);
|
|
808
|
+
|
|
809
|
+
// Execute data store's entry point to make sure that for a local (aka detached from container) data store, the
|
|
810
|
+
// entryPoint initialization function is called before the data store gets attached and potentially connected to
|
|
811
|
+
// the delta stream, so it gets a chance to do things while the data store is still "purely local".
|
|
812
|
+
// This preserves the behavior from before we introduced entryPoints, where the instantiateDataStore method
|
|
813
|
+
// of data store factories tends to construct the data object (at least kick off an async method that returns
|
|
814
|
+
// it); that code moved to the entryPoint initialization function, so we want to ensure it still executes
|
|
815
|
+
// before the data store is attached.
|
|
816
|
+
await channel.entryPoint.get();
|
|
817
|
+
}
|
|
818
|
+
this.pending = undefined;
|
|
811
819
|
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
820
|
+
// And now mark the runtime active
|
|
821
|
+
this.loaded = true;
|
|
822
|
+
this.channel = channel;
|
|
815
823
|
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
* per the last time GC was run.
|
|
820
|
-
* Also, this data store may have been realized during summarize. In that case, the child contexts need to
|
|
821
|
-
* have their used routes updated to determine if its needs to summarize again and to add it to the summary.
|
|
822
|
-
*/
|
|
823
|
-
this.updateChannelUsedRoutes();
|
|
824
|
+
// Freeze the package path to ensure that someone doesn't modify it when it is
|
|
825
|
+
// returned in packagePath().
|
|
826
|
+
Object.freeze(this.pkg);
|
|
824
827
|
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
error,
|
|
834
|
-
);
|
|
835
|
-
}
|
|
828
|
+
/**
|
|
829
|
+
* Update the used routes of the channel. If GC has run before this data store was realized, we will have
|
|
830
|
+
* the used routes saved. So, this will ensure that all the child contexts have up-to-date used routes as
|
|
831
|
+
* per the last time GC was run.
|
|
832
|
+
* Also, this data store may have been realized during summarize. In that case, the child contexts need to
|
|
833
|
+
* have their used routes updated to determine if its needs to summarize again and to add it to the summary.
|
|
834
|
+
*/
|
|
835
|
+
this.updateChannelUsedRoutes();
|
|
836
836
|
}
|
|
837
837
|
|
|
838
838
|
public async getAbsoluteUrl(relativeUrl: string): Promise<string | undefined> {
|
|
839
839
|
if (this.attachState !== AttachState.Attached) {
|
|
840
840
|
return undefined;
|
|
841
841
|
}
|
|
842
|
-
return this.
|
|
842
|
+
return this.parentContext.getAbsoluteUrl(relativeUrl);
|
|
843
843
|
}
|
|
844
844
|
|
|
845
845
|
/**
|
|
@@ -854,7 +854,6 @@ export abstract class FluidDataStoreContext
|
|
|
854
854
|
): {
|
|
855
855
|
attachSummary: ISummaryTreeWithStats;
|
|
856
856
|
type: string;
|
|
857
|
-
gcData?: IGarbageCollectionData;
|
|
858
857
|
};
|
|
859
858
|
|
|
860
859
|
public abstract getInitialSnapshotDetails(): Promise<ISnapshotDetails>;
|
|
@@ -875,21 +874,19 @@ export abstract class FluidDataStoreContext
|
|
|
875
874
|
return {};
|
|
876
875
|
}
|
|
877
876
|
|
|
878
|
-
public reSubmit(contents: any, localOpMetadata: unknown) {
|
|
877
|
+
public reSubmit(type: string, contents: any, localOpMetadata: unknown) {
|
|
879
878
|
assert(!!this.channel, 0x14b /* "Channel must exist when resubmitting ops" */);
|
|
880
|
-
|
|
881
|
-
this.channel.reSubmit(innerContents.type, innerContents.content, localOpMetadata);
|
|
879
|
+
this.channel.reSubmit(type, contents, localOpMetadata);
|
|
882
880
|
}
|
|
883
881
|
|
|
884
|
-
public rollback(contents: any, localOpMetadata: unknown) {
|
|
882
|
+
public rollback(type: string, contents: any, localOpMetadata: unknown) {
|
|
885
883
|
if (!this.channel) {
|
|
886
884
|
throw new Error("Channel must exist when rolling back ops");
|
|
887
885
|
}
|
|
888
886
|
if (!this.channel.rollback) {
|
|
889
887
|
throw new Error("Channel doesn't support rollback");
|
|
890
888
|
}
|
|
891
|
-
|
|
892
|
-
this.channel.rollback(innerContents.type, innerContents.content, localOpMetadata);
|
|
889
|
+
this.channel.rollback(type, contents, localOpMetadata);
|
|
893
890
|
}
|
|
894
891
|
|
|
895
892
|
public async applyStashedOp(contents: any): Promise<unknown> {
|
|
@@ -903,7 +900,7 @@ export abstract class FluidDataStoreContext
|
|
|
903
900
|
private verifyNotClosed(
|
|
904
901
|
callSite: string,
|
|
905
902
|
checkTombstone = true,
|
|
906
|
-
safeTelemetryProps:
|
|
903
|
+
safeTelemetryProps: ITelemetryBaseProperties = {},
|
|
907
904
|
) {
|
|
908
905
|
if (this.deleted) {
|
|
909
906
|
const messageString = `Context is deleted! Call site [${callSite}]`;
|
|
@@ -931,15 +928,14 @@ export abstract class FluidDataStoreContext
|
|
|
931
928
|
this.mc,
|
|
932
929
|
{
|
|
933
930
|
eventName: "GC_Tombstone_DataStore_Changed",
|
|
934
|
-
category: this.
|
|
935
|
-
gcTombstoneEnforcementAllowed:
|
|
936
|
-
this._containerRuntime.gcTombstoneEnforcementAllowed,
|
|
931
|
+
category: this.gcThrowOnTombstoneUsage ? "error" : "generic",
|
|
932
|
+
gcTombstoneEnforcementAllowed: this.gcTombstoneEnforcementAllowed,
|
|
937
933
|
callSite,
|
|
938
934
|
},
|
|
939
935
|
this.pkg,
|
|
940
936
|
error,
|
|
941
937
|
);
|
|
942
|
-
if (this.
|
|
938
|
+
if (this.gcThrowOnTombstoneUsage) {
|
|
943
939
|
throw error;
|
|
944
940
|
}
|
|
945
941
|
}
|
|
@@ -979,37 +975,58 @@ export abstract class FluidDataStoreContext
|
|
|
979
975
|
summarizeInternal,
|
|
980
976
|
id,
|
|
981
977
|
createParam,
|
|
982
|
-
|
|
983
|
-
{ throwOnFailure: true },
|
|
978
|
+
undefined /* config */,
|
|
984
979
|
getGCDataFn,
|
|
985
980
|
);
|
|
986
981
|
}
|
|
987
982
|
|
|
983
|
+
public deleteChildSummarizerNode(id: string) {
|
|
984
|
+
this.summarizerNode.deleteChild(id);
|
|
985
|
+
}
|
|
986
|
+
|
|
988
987
|
public async uploadBlob(
|
|
989
988
|
blob: ArrayBufferLike,
|
|
990
989
|
signal?: AbortSignal,
|
|
991
990
|
): Promise<IFluidHandle<ArrayBufferLike>> {
|
|
992
|
-
return this.
|
|
991
|
+
return this.parentContext.uploadBlob(blob, signal);
|
|
993
992
|
}
|
|
994
993
|
}
|
|
995
994
|
|
|
996
995
|
export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
997
|
-
|
|
996
|
+
// Tells whether we need to fetch the snapshot before use. This is to support Data Virtualization.
|
|
997
|
+
private snapshotFetchRequired: boolean;
|
|
998
|
+
private readonly runtime: IContainerRuntimeBase;
|
|
998
999
|
|
|
999
1000
|
constructor(props: IRemoteFluidDataStoreContextProps) {
|
|
1000
1001
|
super(props, true /* existing */, false /* isLocalDataStore */, () => {
|
|
1001
1002
|
throw new Error("Already attached");
|
|
1002
1003
|
});
|
|
1003
1004
|
|
|
1004
|
-
this.
|
|
1005
|
-
|
|
1005
|
+
this._baseSnapshot = props.snapshotTree;
|
|
1006
|
+
this.snapshotFetchRequired = !!props.snapshotTree?.omitted;
|
|
1007
|
+
this.runtime = props.parentContext.containerRuntime;
|
|
1006
1008
|
if (props.snapshotTree !== undefined) {
|
|
1007
1009
|
this.summarizerNode.updateBaseSummaryState(props.snapshotTree);
|
|
1008
1010
|
}
|
|
1009
1011
|
}
|
|
1010
1012
|
|
|
1011
1013
|
private readonly initialSnapshotDetailsP = new LazyPromise<ISnapshotDetails>(async () => {
|
|
1012
|
-
|
|
1014
|
+
// Sequence number of the snapshot.
|
|
1015
|
+
let sequenceNumber: number | undefined;
|
|
1016
|
+
if (this.snapshotFetchRequired) {
|
|
1017
|
+
assert(
|
|
1018
|
+
this.loadingGroupId !== undefined,
|
|
1019
|
+
0x8f5 /* groupId should be present to fetch snapshot */,
|
|
1020
|
+
);
|
|
1021
|
+
const snapshot = await this.runtime.getSnapshotForLoadingGroupId(
|
|
1022
|
+
[this.loadingGroupId],
|
|
1023
|
+
[this.id],
|
|
1024
|
+
);
|
|
1025
|
+
this._baseSnapshot = snapshot.snapshotTree;
|
|
1026
|
+
sequenceNumber = snapshot.sequenceNumber;
|
|
1027
|
+
this.snapshotFetchRequired = false;
|
|
1028
|
+
}
|
|
1029
|
+
let tree = this.baseSnapshot;
|
|
1013
1030
|
let isRootDataStore = true;
|
|
1014
1031
|
|
|
1015
1032
|
if (!!tree && tree.blobs[dataStoreAttributesBlobName] !== undefined) {
|
|
@@ -1049,11 +1066,12 @@ export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
|
1049
1066
|
}
|
|
1050
1067
|
}
|
|
1051
1068
|
|
|
1069
|
+
assert(this.pkg !== undefined, 0x8f6 /* The datastore context package should be defined */);
|
|
1052
1070
|
return {
|
|
1053
|
-
|
|
1054
|
-
pkg: this.pkg!,
|
|
1071
|
+
pkg: this.pkg,
|
|
1055
1072
|
isRootDataStore,
|
|
1056
1073
|
snapshot: tree,
|
|
1074
|
+
sequenceNumber,
|
|
1057
1075
|
};
|
|
1058
1076
|
});
|
|
1059
1077
|
|
|
@@ -1067,7 +1085,6 @@ export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
|
1067
1085
|
public getAttachData(includeGCData: boolean): {
|
|
1068
1086
|
attachSummary: ISummaryTreeWithStats;
|
|
1069
1087
|
type: string;
|
|
1070
|
-
gcData?: IGarbageCollectionData;
|
|
1071
1088
|
} {
|
|
1072
1089
|
throw new Error("Cannot attach remote store");
|
|
1073
1090
|
}
|
|
@@ -1128,7 +1145,6 @@ export class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
|
1128
1145
|
): {
|
|
1129
1146
|
attachSummary: ISummaryTreeWithStats;
|
|
1130
1147
|
type: string;
|
|
1131
|
-
gcData?: IGarbageCollectionData;
|
|
1132
1148
|
} {
|
|
1133
1149
|
assert(
|
|
1134
1150
|
this.channel !== undefined,
|
|
@@ -1147,11 +1163,21 @@ export class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
|
1147
1163
|
// Add data store's attributes to the summary.
|
|
1148
1164
|
const attributes = createAttributes(this.pkg, this.isInMemoryRoot());
|
|
1149
1165
|
addBlobToSummary(attachSummary, dataStoreAttributesBlobName, JSON.stringify(attributes));
|
|
1166
|
+
if (includeGCData) {
|
|
1167
|
+
const gcData = this.channel.getAttachGCData?.(telemetryContext);
|
|
1168
|
+
if (gcData !== undefined) {
|
|
1169
|
+
addBlobToSummary(attachSummary, gcDataBlobKey, JSON.stringify(gcData));
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
1172
|
+
|
|
1173
|
+
// Add loadingGroupId to the summary
|
|
1174
|
+
if (this.loadingGroupId !== undefined) {
|
|
1175
|
+
attachSummary.summary.groupId = this.loadingGroupId;
|
|
1176
|
+
}
|
|
1150
1177
|
|
|
1151
1178
|
return {
|
|
1152
1179
|
attachSummary,
|
|
1153
1180
|
type: this.pkg[this.pkg.length - 1],
|
|
1154
|
-
gcData: includeGCData ? this.channel.getAttachGCData?.(telemetryContext) : undefined,
|
|
1155
1181
|
};
|
|
1156
1182
|
}
|
|
1157
1183
|
|
|
@@ -1239,43 +1265,47 @@ export class LocalDetachedFluidDataStoreContext
|
|
|
1239
1265
|
extends LocalFluidDataStoreContextBase
|
|
1240
1266
|
implements IFluidDataStoreContextDetached
|
|
1241
1267
|
{
|
|
1242
|
-
constructor(props:
|
|
1268
|
+
constructor(props: ILocalDetachedFluidDataStoreContextProps) {
|
|
1243
1269
|
super(props);
|
|
1244
1270
|
this.detachedRuntimeCreation = true;
|
|
1271
|
+
this.channelToDataStoreFn = props.channelToDataStoreFn;
|
|
1245
1272
|
}
|
|
1273
|
+
private readonly channelToDataStoreFn: (channel: IFluidDataStoreChannel) => IDataStore;
|
|
1246
1274
|
|
|
1247
1275
|
public async attachRuntime(
|
|
1248
1276
|
registry: IProvideFluidDataStoreFactory,
|
|
1249
1277
|
dataStoreChannel: IFluidDataStoreChannel,
|
|
1250
|
-
) {
|
|
1278
|
+
): Promise<IDataStore> {
|
|
1251
1279
|
assert(this.detachedRuntimeCreation, 0x154 /* "runtime creation is already attached" */);
|
|
1252
1280
|
this.detachedRuntimeCreation = false;
|
|
1253
1281
|
|
|
1254
|
-
assert(this.
|
|
1255
|
-
this.channelDeferred = new Deferred<IFluidDataStoreChannel>();
|
|
1282
|
+
assert(this.channelP === undefined, 0x155 /* "channel deferral is already set" */);
|
|
1256
1283
|
|
|
1257
|
-
|
|
1284
|
+
this.channelP = Promise.resolve()
|
|
1285
|
+
.then(async () => {
|
|
1286
|
+
const factory = registry.IFluidDataStoreFactory;
|
|
1258
1287
|
|
|
1259
|
-
|
|
1260
|
-
|
|
1288
|
+
const factory2 = await this.factoryFromPackagePath();
|
|
1289
|
+
assert(factory2 === factory, 0x156 /* "Unexpected factory for package path" */);
|
|
1261
1290
|
|
|
1262
|
-
|
|
1263
|
-
this.registry = entry.registry;
|
|
1291
|
+
await super.bindRuntime(dataStoreChannel, false /* existing */);
|
|
1264
1292
|
|
|
1265
|
-
|
|
1293
|
+
assert(
|
|
1294
|
+
!(await this.isRoot()),
|
|
1295
|
+
0x8f7 /* there are no more createRootDataStore() kind of APIs! */,
|
|
1296
|
+
);
|
|
1266
1297
|
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1298
|
+
return dataStoreChannel;
|
|
1299
|
+
})
|
|
1300
|
+
.catch((error) => {
|
|
1301
|
+
this.mc.logger.sendErrorEvent({ eventName: "AttachRuntimeError" }, error);
|
|
1302
|
+
// The following two lines result in same exception thrown.
|
|
1303
|
+
// But we need to ensure that this.channelDeferred.promise is "observed", as otherwise
|
|
1304
|
+
// out UT reports unhandled exception
|
|
1305
|
+
throw error;
|
|
1306
|
+
});
|
|
1275
1307
|
|
|
1276
|
-
|
|
1277
|
-
dataStoreChannel.makeVisibleAndAttachGraph();
|
|
1278
|
-
}
|
|
1308
|
+
return this.channelToDataStoreFn(await this.channelP);
|
|
1279
1309
|
}
|
|
1280
1310
|
|
|
1281
1311
|
public async getInitialSnapshotDetails(): Promise<ISnapshotDetails> {
|