@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
|
@@ -8,28 +8,32 @@ import {
|
|
|
8
8
|
IDisposable,
|
|
9
9
|
IFluidHandle,
|
|
10
10
|
IRequest,
|
|
11
|
+
FluidObject,
|
|
12
|
+
IResponse,
|
|
11
13
|
} from "@fluidframework/core-interfaces";
|
|
12
14
|
import { FluidObjectHandle } from "@fluidframework/datastore";
|
|
13
15
|
import { ISequencedDocumentMessage, ISnapshotTree } from "@fluidframework/protocol-definitions";
|
|
14
16
|
import {
|
|
15
17
|
AliasResult,
|
|
16
18
|
channelsTreeName,
|
|
17
|
-
CreateChildSummarizerNodeFn,
|
|
18
|
-
CreateChildSummarizerNodeParam,
|
|
19
19
|
CreateSummarizerNodeSource,
|
|
20
|
-
gcDataBlobKey,
|
|
21
20
|
IAttachMessage,
|
|
22
21
|
IEnvelope,
|
|
22
|
+
IFluidDataStoreChannel,
|
|
23
23
|
IFluidDataStoreContextDetached,
|
|
24
24
|
IGarbageCollectionData,
|
|
25
25
|
IInboundSignalMessage,
|
|
26
|
+
IFluidParentContext,
|
|
26
27
|
InboundAttachMessage,
|
|
27
28
|
ISummarizeResult,
|
|
28
29
|
ISummaryTreeWithStats,
|
|
29
30
|
ITelemetryContext,
|
|
31
|
+
IFluidDataStoreFactory,
|
|
32
|
+
IFluidDataStoreContext,
|
|
33
|
+
NamedFluidDataStoreRegistryEntries,
|
|
34
|
+
IFluidDataStoreRegistry,
|
|
30
35
|
} from "@fluidframework/runtime-definitions";
|
|
31
36
|
import {
|
|
32
|
-
addBlobToSummary,
|
|
33
37
|
convertSnapshotTreeToSummaryTree,
|
|
34
38
|
convertSummaryTreeToITree,
|
|
35
39
|
create404Response,
|
|
@@ -40,6 +44,8 @@ import {
|
|
|
40
44
|
responseToException,
|
|
41
45
|
SummaryTreeBuilder,
|
|
42
46
|
unpackChildNodesUsedRoutes,
|
|
47
|
+
RequestParser,
|
|
48
|
+
encodeCompactIdToString,
|
|
43
49
|
} from "@fluidframework/runtime-utils";
|
|
44
50
|
import {
|
|
45
51
|
createChildMonitoringContext,
|
|
@@ -49,32 +55,183 @@ import {
|
|
|
49
55
|
LoggingError,
|
|
50
56
|
MonitoringContext,
|
|
51
57
|
tagCodeArtifacts,
|
|
58
|
+
createChildLogger,
|
|
52
59
|
} from "@fluidframework/telemetry-utils";
|
|
53
60
|
import { AttachState } from "@fluidframework/container-definitions";
|
|
54
61
|
import { buildSnapshotTree } from "@fluidframework/driver-utils";
|
|
55
|
-
import { assert, Lazy } from "@fluidframework/core-utils";
|
|
56
|
-
import {
|
|
57
|
-
import {
|
|
58
|
-
import { ContainerRuntime, defaultRuntimeHeaderData, RuntimeHeaderData } from "./containerRuntime";
|
|
62
|
+
import { assert, Lazy, LazyPromise } from "@fluidframework/core-utils";
|
|
63
|
+
import { DataStoreContexts } from "./dataStoreContexts.js";
|
|
64
|
+
import { defaultRuntimeHeaderData, RuntimeHeaderData } from "./containerRuntime.js";
|
|
59
65
|
import {
|
|
60
66
|
FluidDataStoreContext,
|
|
61
67
|
RemoteFluidDataStoreContext,
|
|
62
68
|
LocalFluidDataStoreContext,
|
|
63
69
|
createAttributesBlob,
|
|
64
70
|
LocalDetachedFluidDataStoreContext,
|
|
65
|
-
} from "./dataStoreContext";
|
|
66
|
-
import { StorageServiceWithAttachBlobs } from "./storageServiceWithAttachBlobs";
|
|
67
|
-
import {
|
|
68
|
-
|
|
69
|
-
|
|
71
|
+
} from "./dataStoreContext.js";
|
|
72
|
+
import { StorageServiceWithAttachBlobs } from "./storageServiceWithAttachBlobs.js";
|
|
73
|
+
import {
|
|
74
|
+
IDataStoreAliasMessage,
|
|
75
|
+
channelToDataStore,
|
|
76
|
+
isDataStoreAliasMessage,
|
|
77
|
+
} from "./dataStore.js";
|
|
78
|
+
import {
|
|
79
|
+
GCNodeType,
|
|
80
|
+
detectOutboundRoutesViaDDSKey,
|
|
81
|
+
trimLeadingAndTrailingSlashes,
|
|
82
|
+
} from "./gc/index.js";
|
|
83
|
+
import {
|
|
84
|
+
IContainerRuntimeMetadata,
|
|
85
|
+
nonDataStorePaths,
|
|
86
|
+
rootHasIsolatedChannels,
|
|
87
|
+
} from "./summary/index.js";
|
|
88
|
+
import { ContainerMessageType, LocalContainerRuntimeMessage } from "./messageTypes.js";
|
|
89
|
+
import { FluidDataStoreRegistry } from "./dataStoreRegistry.js";
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Accepted header keys for requests coming to the runtime.
|
|
93
|
+
* @internal
|
|
94
|
+
*/
|
|
95
|
+
export enum RuntimeHeaders {
|
|
96
|
+
/** True to wait for a data store to be created and loaded before returning it. */
|
|
97
|
+
wait = "wait",
|
|
98
|
+
/** True if the request is coming from an IFluidHandle. */
|
|
99
|
+
viaHandle = "viaHandle",
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** True if a tombstoned object should be returned without erroring
|
|
103
|
+
* @alpha
|
|
104
|
+
*/
|
|
105
|
+
export const AllowTombstoneRequestHeaderKey = "allowTombstone"; // Belongs in the enum above, but avoiding the breaking change
|
|
106
|
+
/**
|
|
107
|
+
* [IRRELEVANT IF throwOnInactiveLoad OPTION NOT SET] True if an inactive object should be returned without erroring
|
|
108
|
+
* @internal
|
|
109
|
+
*/
|
|
110
|
+
export const AllowInactiveRequestHeaderKey = "allowInactive"; // Belongs in the enum above, but avoiding the breaking change
|
|
70
111
|
|
|
71
112
|
type PendingAliasResolve = (success: boolean) => void;
|
|
72
113
|
|
|
114
|
+
interface FluidDataStoreMessage {
|
|
115
|
+
content: any;
|
|
116
|
+
type: string;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Creates a shallow wrapper of {@link IFluidParentContext}. The wrapper can then have its methods overwritten as needed
|
|
121
|
+
*/
|
|
122
|
+
export function wrapContext(context: IFluidParentContext): IFluidParentContext {
|
|
123
|
+
return {
|
|
124
|
+
get IFluidDataStoreRegistry() {
|
|
125
|
+
return context.IFluidDataStoreRegistry;
|
|
126
|
+
},
|
|
127
|
+
IFluidHandleContext: context.IFluidHandleContext,
|
|
128
|
+
options: context.options,
|
|
129
|
+
get clientId() {
|
|
130
|
+
return context.clientId;
|
|
131
|
+
},
|
|
132
|
+
get connected() {
|
|
133
|
+
return context.connected;
|
|
134
|
+
},
|
|
135
|
+
deltaManager: context.deltaManager,
|
|
136
|
+
storage: context.storage,
|
|
137
|
+
logger: context.logger,
|
|
138
|
+
get clientDetails() {
|
|
139
|
+
return context.clientDetails;
|
|
140
|
+
},
|
|
141
|
+
get idCompressor() {
|
|
142
|
+
return context.idCompressor;
|
|
143
|
+
},
|
|
144
|
+
loadingGroupId: context.loadingGroupId,
|
|
145
|
+
get attachState() {
|
|
146
|
+
return context.attachState;
|
|
147
|
+
},
|
|
148
|
+
containerRuntime: context.containerRuntime,
|
|
149
|
+
scope: context.scope,
|
|
150
|
+
gcThrowOnTombstoneUsage: context.gcThrowOnTombstoneUsage,
|
|
151
|
+
gcTombstoneEnforcementAllowed: context.gcTombstoneEnforcementAllowed,
|
|
152
|
+
getAbsoluteUrl: async (...args) => {
|
|
153
|
+
return context.getAbsoluteUrl(...args);
|
|
154
|
+
},
|
|
155
|
+
getQuorum: (...args) => {
|
|
156
|
+
return context.getQuorum(...args);
|
|
157
|
+
},
|
|
158
|
+
getAudience: (...args) => {
|
|
159
|
+
return context.getAudience(...args);
|
|
160
|
+
},
|
|
161
|
+
ensureNoDataModelChanges: (...args) => {
|
|
162
|
+
return context.ensureNoDataModelChanges(...args);
|
|
163
|
+
},
|
|
164
|
+
submitMessage: (...args) => {
|
|
165
|
+
return context.submitMessage(...args);
|
|
166
|
+
},
|
|
167
|
+
submitSignal: (...args) => {
|
|
168
|
+
return context.submitSignal(...args);
|
|
169
|
+
},
|
|
170
|
+
makeLocallyVisible: (...args) => {
|
|
171
|
+
return context.makeLocallyVisible(...args);
|
|
172
|
+
},
|
|
173
|
+
uploadBlob: async (...args) => {
|
|
174
|
+
return context.uploadBlob(...args);
|
|
175
|
+
},
|
|
176
|
+
addedGCOutboundReference: (...args) => {
|
|
177
|
+
return context.addedGCOutboundReference?.(...args);
|
|
178
|
+
},
|
|
179
|
+
getCreateChildSummarizerNodeFn: (...args) => {
|
|
180
|
+
return context.getCreateChildSummarizerNodeFn?.(...args);
|
|
181
|
+
},
|
|
182
|
+
deleteChildSummarizerNode: (...args) => {
|
|
183
|
+
return context.deleteChildSummarizerNode?.(...args);
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Creates a wrapper of a {@link IFluidParentContext} to be provided to the inner datastore channels.
|
|
190
|
+
* The wrapper will have the submit methods overwritten with the appropriate id as the destination address.
|
|
191
|
+
*
|
|
192
|
+
* @param id - the id of the channel
|
|
193
|
+
* @param parentContext - the {@link IFluidParentContext} to wrap
|
|
194
|
+
* @returns A wrapped {@link IFluidParentContext}
|
|
195
|
+
*/
|
|
196
|
+
export function wrapContextForInnerChannel(
|
|
197
|
+
id: string,
|
|
198
|
+
parentContext: IFluidParentContext,
|
|
199
|
+
): IFluidParentContext {
|
|
200
|
+
const context = wrapContext(parentContext);
|
|
201
|
+
|
|
202
|
+
context.submitMessage = (type: string, content: any, localOpMetadata: unknown) => {
|
|
203
|
+
const fluidDataStoreContent: FluidDataStoreMessage = {
|
|
204
|
+
content,
|
|
205
|
+
type,
|
|
206
|
+
};
|
|
207
|
+
const envelope: IEnvelope = {
|
|
208
|
+
address: id,
|
|
209
|
+
contents: fluidDataStoreContent,
|
|
210
|
+
};
|
|
211
|
+
parentContext.submitMessage(
|
|
212
|
+
ContainerMessageType.FluidDataStoreOp,
|
|
213
|
+
envelope,
|
|
214
|
+
localOpMetadata,
|
|
215
|
+
);
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
context.submitSignal = (type: string, contents: any, targetClientId?: string) => {
|
|
219
|
+
const envelope: IEnvelope = {
|
|
220
|
+
address: id,
|
|
221
|
+
contents,
|
|
222
|
+
};
|
|
223
|
+
parentContext.submitSignal(type, envelope, targetClientId);
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
return context;
|
|
227
|
+
}
|
|
228
|
+
|
|
73
229
|
/**
|
|
74
230
|
* This class encapsulates data store handling. Currently it is only used by the container runtime,
|
|
75
231
|
* but eventually could be hosted on any channel once we formalize the channel api boundary.
|
|
232
|
+
* @internal
|
|
76
233
|
*/
|
|
77
|
-
export class
|
|
234
|
+
export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
|
|
78
235
|
// Stores tracked by the Domain
|
|
79
236
|
private readonly pendingAttach = new Map<string, IAttachMessage>();
|
|
80
237
|
// 0.24 back-compat attachingBeforeSummary
|
|
@@ -84,6 +241,8 @@ export class DataStores implements IDisposable {
|
|
|
84
241
|
|
|
85
242
|
private readonly disposeOnce = new Lazy<void>(() => this.contexts.dispose());
|
|
86
243
|
|
|
244
|
+
public readonly entryPoint: IFluidHandle<FluidObject>;
|
|
245
|
+
|
|
87
246
|
public readonly containerLoadStats: {
|
|
88
247
|
// number of dataStores during loadContainer
|
|
89
248
|
readonly containerLoadDataStoreCount: number;
|
|
@@ -102,30 +261,35 @@ export class DataStores implements IDisposable {
|
|
|
102
261
|
Promise<AliasResult>
|
|
103
262
|
>();
|
|
104
263
|
|
|
264
|
+
private readonly contexts: DataStoreContexts;
|
|
265
|
+
|
|
105
266
|
constructor(
|
|
106
267
|
private readonly baseSnapshot: ISnapshotTree | undefined,
|
|
107
|
-
|
|
108
|
-
private readonly submitAttachFn: (attachContent: IAttachMessage) => void,
|
|
109
|
-
private readonly getCreateChildSummarizerNodeFn: (
|
|
110
|
-
id: string,
|
|
111
|
-
createParam: CreateChildSummarizerNodeParam,
|
|
112
|
-
) => CreateChildSummarizerNodeFn,
|
|
113
|
-
private readonly deleteChildSummarizerNodeFn: (id: string) => void,
|
|
268
|
+
public readonly parentContext: IFluidParentContext,
|
|
114
269
|
baseLogger: ITelemetryBaseLogger,
|
|
115
270
|
private readonly gcNodeUpdated: (
|
|
116
271
|
nodePath: string,
|
|
117
|
-
|
|
272
|
+
reason: "Loaded" | "Changed",
|
|
273
|
+
timestampMs?: number,
|
|
118
274
|
packagePath?: readonly string[],
|
|
275
|
+
request?: IRequest,
|
|
276
|
+
headerData?: RuntimeHeaderData,
|
|
119
277
|
) => void,
|
|
120
278
|
private readonly isDataStoreDeleted: (nodePath: string) => boolean,
|
|
121
279
|
private readonly aliasMap: Map<string, string>,
|
|
122
|
-
|
|
280
|
+
provideEntryPoint: (runtime: ChannelCollection) => Promise<FluidObject>,
|
|
123
281
|
) {
|
|
124
282
|
this.mc = createChildMonitoringContext({ logger: baseLogger });
|
|
283
|
+
this.contexts = new DataStoreContexts(baseLogger);
|
|
125
284
|
this.containerRuntimeHandle = new FluidObjectHandle(
|
|
126
|
-
this.
|
|
285
|
+
this.parentContext,
|
|
127
286
|
"/",
|
|
128
|
-
this.
|
|
287
|
+
this.parentContext.IFluidHandleContext,
|
|
288
|
+
);
|
|
289
|
+
this.entryPoint = new FluidObjectHandle<FluidObject>(
|
|
290
|
+
new LazyPromise(async () => provideEntryPoint(this)),
|
|
291
|
+
"",
|
|
292
|
+
this.parentContext.IFluidHandleContext,
|
|
129
293
|
);
|
|
130
294
|
|
|
131
295
|
// Extract stores stored inside the snapshot
|
|
@@ -146,16 +310,17 @@ export class DataStores implements IDisposable {
|
|
|
146
310
|
unreferencedDataStoreCount++;
|
|
147
311
|
}
|
|
148
312
|
// If we have a detached container, then create local data store contexts.
|
|
149
|
-
if (this.
|
|
313
|
+
if (this.parentContext.attachState !== AttachState.Detached) {
|
|
150
314
|
dataStoreContext = new RemoteFluidDataStoreContext({
|
|
151
315
|
id: key,
|
|
152
316
|
snapshotTree: value,
|
|
153
|
-
|
|
154
|
-
storage: this.
|
|
155
|
-
scope: this.
|
|
156
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
317
|
+
parentContext: this.wrapContextForInnerChannel(key),
|
|
318
|
+
storage: this.parentContext.storage,
|
|
319
|
+
scope: this.parentContext.scope,
|
|
320
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(key, {
|
|
157
321
|
type: CreateSummarizerNodeSource.FromSummary,
|
|
158
322
|
}),
|
|
323
|
+
loadingGroupId: value.groupId,
|
|
159
324
|
});
|
|
160
325
|
} else {
|
|
161
326
|
if (typeof value !== "object") {
|
|
@@ -165,10 +330,10 @@ export class DataStores implements IDisposable {
|
|
|
165
330
|
dataStoreContext = new LocalFluidDataStoreContext({
|
|
166
331
|
id: key,
|
|
167
332
|
pkg: undefined,
|
|
168
|
-
|
|
169
|
-
storage: this.
|
|
170
|
-
scope: this.
|
|
171
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
333
|
+
parentContext: this.wrapContextForInnerChannel(key),
|
|
334
|
+
storage: this.parentContext.storage,
|
|
335
|
+
scope: this.parentContext.scope,
|
|
336
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(key, {
|
|
172
337
|
type: CreateSummarizerNodeSource.FromSummary,
|
|
173
338
|
}),
|
|
174
339
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(key),
|
|
@@ -200,7 +365,20 @@ export class DataStores implements IDisposable {
|
|
|
200
365
|
/** For sampling. Only log once per container */
|
|
201
366
|
private shouldSendAttachLog = true;
|
|
202
367
|
|
|
203
|
-
|
|
368
|
+
private wrapContextForInnerChannel(id: string): IFluidParentContext {
|
|
369
|
+
return wrapContextForInnerChannel(id, this.parentContext);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* IFluidDataStoreChannel.makeVisibleAndAttachGraph implementation
|
|
374
|
+
* Not clear when it would be called and what it should do.
|
|
375
|
+
* Currently this API is called by context only for root data stores.
|
|
376
|
+
*/
|
|
377
|
+
public makeVisibleAndAttachGraph() {
|
|
378
|
+
this.parentContext.makeLocallyVisible();
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
private processAttachMessage(message: ISequencedDocumentMessage, local: boolean) {
|
|
204
382
|
const attachMessage = message.contents as InboundAttachMessage;
|
|
205
383
|
|
|
206
384
|
this.dataStoresSinceLastGC.push(attachMessage.id);
|
|
@@ -209,7 +387,7 @@ export class DataStores implements IDisposable {
|
|
|
209
387
|
const foundGCData = processAttachMessageGCData(attachMessage.snapshot, (nodeId, toPath) => {
|
|
210
388
|
// nodeId is the relative path under the node being attached. Always starts with "/", but no trailing "/" after an id
|
|
211
389
|
const fromPath = `/${attachMessage.id}${nodeId === "/" ? "" : nodeId}`;
|
|
212
|
-
this.
|
|
390
|
+
this.parentContext.addedGCOutboundReference?.(
|
|
213
391
|
{ absolutePath: fromPath },
|
|
214
392
|
{ absolutePath: toPath },
|
|
215
393
|
);
|
|
@@ -268,23 +446,27 @@ export class DataStores implements IDisposable {
|
|
|
268
446
|
const remoteFluidDataStoreContext = new RemoteFluidDataStoreContext({
|
|
269
447
|
id: attachMessage.id,
|
|
270
448
|
snapshotTree,
|
|
271
|
-
|
|
272
|
-
storage: new StorageServiceWithAttachBlobs(this.
|
|
273
|
-
scope: this.
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
449
|
+
parentContext: this.wrapContextForInnerChannel(attachMessage.id),
|
|
450
|
+
storage: new StorageServiceWithAttachBlobs(this.parentContext.storage, flatAttachBlobs),
|
|
451
|
+
scope: this.parentContext.scope,
|
|
452
|
+
loadingGroupId: attachMessage.snapshot?.groupId,
|
|
453
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(
|
|
454
|
+
attachMessage.id,
|
|
455
|
+
{
|
|
456
|
+
type: CreateSummarizerNodeSource.FromAttach,
|
|
457
|
+
sequenceNumber: message.sequenceNumber,
|
|
458
|
+
snapshot: attachMessage.snapshot ?? {
|
|
459
|
+
entries: [createAttributesBlob(pkg, true /* isRootDataStore */)],
|
|
460
|
+
},
|
|
279
461
|
},
|
|
280
|
-
|
|
462
|
+
),
|
|
281
463
|
pkg,
|
|
282
464
|
});
|
|
283
465
|
|
|
284
466
|
this.contexts.addBoundOrRemoted(remoteFluidDataStoreContext);
|
|
285
467
|
}
|
|
286
468
|
|
|
287
|
-
|
|
469
|
+
private processAliasMessage(
|
|
288
470
|
message: ISequencedDocumentMessage,
|
|
289
471
|
localOpMetadata: unknown,
|
|
290
472
|
local: boolean,
|
|
@@ -333,9 +515,9 @@ export class DataStores implements IDisposable {
|
|
|
333
515
|
const handle = new FluidObjectHandle(
|
|
334
516
|
context,
|
|
335
517
|
aliasMessage.internalId,
|
|
336
|
-
this.
|
|
518
|
+
this.parentContext.IFluidHandleContext,
|
|
337
519
|
);
|
|
338
|
-
this.
|
|
520
|
+
this.parentContext.addedGCOutboundReference?.(this.containerRuntimeHandle, handle);
|
|
339
521
|
|
|
340
522
|
this.aliasMap.set(aliasMessage.alias, context.id);
|
|
341
523
|
context.setInMemoryRoot();
|
|
@@ -348,13 +530,8 @@ export class DataStores implements IDisposable {
|
|
|
348
530
|
|
|
349
531
|
/** Package up the context's attach summary etc into an IAttachMessage */
|
|
350
532
|
private generateAttachMessage(localContext: LocalFluidDataStoreContext): IAttachMessage {
|
|
351
|
-
const { attachSummary
|
|
352
|
-
|
|
353
|
-
);
|
|
354
|
-
|
|
355
|
-
if (gcData !== undefined) {
|
|
356
|
-
addBlobToSummary(attachSummary, gcDataBlobKey, JSON.stringify(gcData));
|
|
357
|
-
}
|
|
533
|
+
const { attachSummary } = localContext.getAttachData(/* includeGCData: */ true);
|
|
534
|
+
const type = localContext.packagePath[localContext.packagePath.length - 1];
|
|
358
535
|
|
|
359
536
|
// Attach message needs the summary in ITree format. Convert the ISummaryTree into an ITree.
|
|
360
537
|
const snapshot = convertSummaryTreeToITree(attachSummary.summary);
|
|
@@ -380,57 +557,102 @@ export class DataStores implements IDisposable {
|
|
|
380
557
|
* globally visible. Move it to attaching state and send an "attach" op for it.
|
|
381
558
|
* If the container is detached, this data store will be part of the summary that makes the container attached.
|
|
382
559
|
*/
|
|
383
|
-
if (this.
|
|
560
|
+
if (this.parentContext.attachState !== AttachState.Detached) {
|
|
384
561
|
localContext.emit("attaching");
|
|
385
562
|
const message = this.generateAttachMessage(localContext);
|
|
386
563
|
|
|
387
564
|
this.pendingAttach.set(id, message);
|
|
388
|
-
this.
|
|
565
|
+
this.parentContext.submitMessage(ContainerMessageType.Attach, message, undefined);
|
|
389
566
|
this.attachOpFiredForDataStore.add(id);
|
|
390
567
|
}
|
|
391
568
|
|
|
392
569
|
this.contexts.bind(id);
|
|
393
570
|
}
|
|
394
571
|
|
|
572
|
+
/**
|
|
573
|
+
* Generate compact internal DataStore ID.
|
|
574
|
+
*
|
|
575
|
+
* A note about namespace and name collisions:
|
|
576
|
+
* This code assumes that that's the only way to generate internal IDs, and that it's Ok for this namespace to overlap with
|
|
577
|
+
* user-provided alias names namespace.
|
|
578
|
+
* There are two scenarios where it could cause trouble:
|
|
579
|
+
* 1) Old files, where (already removed) CreateRoot*DataStore*() API was used, and thus internal name of data store
|
|
580
|
+
* was provided by user. Such files may experience name collision with future data stores that receive a name generated
|
|
581
|
+
* by this function.
|
|
582
|
+
* 2) Much less likely, but if it happen that internal ID (generated by this function) is exactly the same as alias name
|
|
583
|
+
* that user might use in the future, them ContainerRuntime.getAliasedDataStoreEntryPoint() or
|
|
584
|
+
* ContainerRuntime.getDataStoreFromRequest() could return a data store with internalID matching user request, even though
|
|
585
|
+
* user expected some other data store (that would receive alias later).
|
|
586
|
+
* Please note that above mentioned functions have the implementation they have (allowing #2) due to #1.
|
|
587
|
+
*/
|
|
588
|
+
protected createDataStoreId(): string {
|
|
589
|
+
// We use three non-overlapping namespaces:
|
|
590
|
+
// - detached state: even numbers
|
|
591
|
+
// - attached state: odd numbers
|
|
592
|
+
// - uuids
|
|
593
|
+
// In first two cases we will encode result as strings in more compact form.
|
|
594
|
+
if (this.parentContext.attachState === AttachState.Detached) {
|
|
595
|
+
// container is detached, only one client observes content, no way to hit collisions with other clients.
|
|
596
|
+
return encodeCompactIdToString(2 * this.contexts.size);
|
|
597
|
+
}
|
|
598
|
+
const id = this.parentContext.containerRuntime.generateDocumentUniqueId();
|
|
599
|
+
if (typeof id === "number") {
|
|
600
|
+
return encodeCompactIdToString(2 * id + 1);
|
|
601
|
+
}
|
|
602
|
+
return id;
|
|
603
|
+
}
|
|
604
|
+
|
|
395
605
|
public createDetachedDataStoreCore(
|
|
396
606
|
pkg: Readonly<string[]>,
|
|
397
|
-
|
|
398
|
-
id = uuid(),
|
|
607
|
+
loadingGroupId?: string,
|
|
399
608
|
): IFluidDataStoreContextDetached {
|
|
400
|
-
|
|
609
|
+
const id = this.createDataStoreId();
|
|
401
610
|
|
|
402
611
|
const context = new LocalDetachedFluidDataStoreContext({
|
|
403
612
|
id,
|
|
404
613
|
pkg,
|
|
405
|
-
|
|
406
|
-
storage: this.
|
|
407
|
-
scope: this.
|
|
408
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
614
|
+
parentContext: this.wrapContextForInnerChannel(id),
|
|
615
|
+
storage: this.parentContext.storage,
|
|
616
|
+
scope: this.parentContext.scope,
|
|
617
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(id, {
|
|
409
618
|
type: CreateSummarizerNodeSource.Local,
|
|
410
619
|
}),
|
|
411
620
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
|
|
412
621
|
snapshotTree: undefined,
|
|
413
|
-
isRootDataStore:
|
|
622
|
+
isRootDataStore: false,
|
|
623
|
+
loadingGroupId,
|
|
624
|
+
channelToDataStoreFn: (channel: IFluidDataStoreChannel) =>
|
|
625
|
+
channelToDataStore(
|
|
626
|
+
channel,
|
|
627
|
+
id,
|
|
628
|
+
this,
|
|
629
|
+
createChildLogger({ logger: this.parentContext.logger }),
|
|
630
|
+
),
|
|
414
631
|
});
|
|
415
632
|
this.contexts.addUnbound(context);
|
|
416
633
|
return context;
|
|
417
634
|
}
|
|
418
635
|
|
|
419
|
-
public _createFluidDataStoreContext(
|
|
420
|
-
|
|
636
|
+
public _createFluidDataStoreContext(
|
|
637
|
+
pkg: Readonly<string[]>,
|
|
638
|
+
props?: any,
|
|
639
|
+
loadingGroupId?: string,
|
|
640
|
+
) {
|
|
641
|
+
const id = this.createDataStoreId();
|
|
421
642
|
const context = new LocalFluidDataStoreContext({
|
|
422
643
|
id,
|
|
423
644
|
pkg,
|
|
424
|
-
|
|
425
|
-
storage: this.
|
|
426
|
-
scope: this.
|
|
427
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
645
|
+
parentContext: this.wrapContextForInnerChannel(id),
|
|
646
|
+
storage: this.parentContext.storage,
|
|
647
|
+
scope: this.parentContext.scope,
|
|
648
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(id, {
|
|
428
649
|
type: CreateSummarizerNodeSource.Local,
|
|
429
650
|
}),
|
|
430
651
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
|
|
431
652
|
snapshotTree: undefined,
|
|
432
653
|
isRootDataStore: false,
|
|
433
654
|
createProps: props,
|
|
655
|
+
loadingGroupId,
|
|
434
656
|
});
|
|
435
657
|
this.contexts.addUnbound(context);
|
|
436
658
|
return context;
|
|
@@ -441,7 +663,17 @@ export class DataStores implements IDisposable {
|
|
|
441
663
|
}
|
|
442
664
|
public readonly dispose = () => this.disposeOnce.value;
|
|
443
665
|
|
|
444
|
-
public
|
|
666
|
+
public reSubmit(type: string, content: any, localOpMetadata: unknown) {
|
|
667
|
+
switch (type) {
|
|
668
|
+
case ContainerMessageType.Attach:
|
|
669
|
+
case ContainerMessageType.Alias:
|
|
670
|
+
this.parentContext.submitMessage(type, content, localOpMetadata);
|
|
671
|
+
return;
|
|
672
|
+
default:
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
assert(type === ContainerMessageType.FluidDataStoreOp, 0x8e7 /* type */);
|
|
676
|
+
const envelope = content as IEnvelope;
|
|
445
677
|
const context = this.contexts.get(envelope.address);
|
|
446
678
|
// If the data store has been deleted, log an error and throw an error. If there are local changes for a
|
|
447
679
|
// deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
|
|
@@ -454,10 +686,13 @@ export class DataStores implements IDisposable {
|
|
|
454
686
|
});
|
|
455
687
|
}
|
|
456
688
|
assert(!!context, 0x160 /* "There should be a store context for the op" */);
|
|
457
|
-
|
|
689
|
+
const innerContents = envelope.contents as FluidDataStoreMessage;
|
|
690
|
+
context.reSubmit(innerContents.type, innerContents.content, localOpMetadata);
|
|
458
691
|
}
|
|
459
692
|
|
|
460
|
-
public
|
|
693
|
+
public rollback(type: string, content: any, localOpMetadata: unknown) {
|
|
694
|
+
assert(type === ContainerMessageType.FluidDataStoreOp, 0x8e8 /* type */);
|
|
695
|
+
const envelope = content as IEnvelope;
|
|
461
696
|
const context = this.contexts.get(envelope.address);
|
|
462
697
|
// If the data store has been deleted, log an error and throw an error. If there are local changes for a
|
|
463
698
|
// deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
|
|
@@ -470,10 +705,21 @@ export class DataStores implements IDisposable {
|
|
|
470
705
|
});
|
|
471
706
|
}
|
|
472
707
|
assert(!!context, 0x2e8 /* "There should be a store context for the op" */);
|
|
473
|
-
|
|
708
|
+
const innerContents = envelope.contents as FluidDataStoreMessage;
|
|
709
|
+
context.rollback(innerContents.type, innerContents.content, localOpMetadata);
|
|
474
710
|
}
|
|
475
711
|
|
|
476
|
-
public async applyStashedOp(
|
|
712
|
+
public async applyStashedOp(content: unknown): Promise<unknown> {
|
|
713
|
+
const opContents = content as LocalContainerRuntimeMessage;
|
|
714
|
+
switch (opContents.type) {
|
|
715
|
+
case ContainerMessageType.Attach:
|
|
716
|
+
return this.applyStashedAttachOp(opContents.contents);
|
|
717
|
+
case ContainerMessageType.Alias:
|
|
718
|
+
return;
|
|
719
|
+
default:
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
const envelope = opContents.contents as IEnvelope;
|
|
477
723
|
const context = this.contexts.get(envelope.address);
|
|
478
724
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
479
725
|
// corruption in case the data store that stashed the op is deleted.
|
|
@@ -484,20 +730,39 @@ export class DataStores implements IDisposable {
|
|
|
484
730
|
return context.applyStashedOp(envelope.contents);
|
|
485
731
|
}
|
|
486
732
|
|
|
487
|
-
|
|
733
|
+
private async applyStashedAttachOp(message: IAttachMessage) {
|
|
488
734
|
this.pendingAttach.set(message.id, message);
|
|
489
735
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
490
736
|
this.processAttachMessage({ contents: message } as ISequencedDocumentMessage, false);
|
|
491
737
|
}
|
|
492
738
|
|
|
493
|
-
public
|
|
739
|
+
public process(
|
|
494
740
|
message: ISequencedDocumentMessage,
|
|
495
741
|
local: boolean,
|
|
496
742
|
localMessageMetadata: unknown,
|
|
497
|
-
addedOutboundReference
|
|
743
|
+
addedOutboundReference?: (fromNodePath: string, toNodePath: string) => void,
|
|
498
744
|
) {
|
|
745
|
+
switch (message.type) {
|
|
746
|
+
case ContainerMessageType.Attach:
|
|
747
|
+
this.processAttachMessage(message, local);
|
|
748
|
+
return;
|
|
749
|
+
case ContainerMessageType.Alias:
|
|
750
|
+
this.processAliasMessage(message, localMessageMetadata, local);
|
|
751
|
+
return;
|
|
752
|
+
case ContainerMessageType.FluidDataStoreOp:
|
|
753
|
+
break;
|
|
754
|
+
default:
|
|
755
|
+
assert(false, 0x8e9 /* unreached */);
|
|
756
|
+
}
|
|
757
|
+
|
|
499
758
|
const envelope = message.contents as IEnvelope;
|
|
500
|
-
const
|
|
759
|
+
const innerContents = envelope.contents as FluidDataStoreMessage;
|
|
760
|
+
const transformed = {
|
|
761
|
+
...message,
|
|
762
|
+
type: innerContents.type,
|
|
763
|
+
contents: innerContents.content,
|
|
764
|
+
};
|
|
765
|
+
|
|
501
766
|
const context = this.contexts.get(envelope.address);
|
|
502
767
|
|
|
503
768
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
@@ -534,7 +799,10 @@ export class DataStores implements IDisposable {
|
|
|
534
799
|
|
|
535
800
|
// By default, we use the new behavior of detecting outbound routes here.
|
|
536
801
|
// If this setting is true, then DataStoreContext would be notifying GC instead.
|
|
537
|
-
if (
|
|
802
|
+
if (
|
|
803
|
+
this.mc.config.getBoolean(detectOutboundRoutesViaDDSKey) !== true &&
|
|
804
|
+
addedOutboundReference !== undefined
|
|
805
|
+
) {
|
|
538
806
|
// Notify GC of any outbound references that were added by this op.
|
|
539
807
|
detectOutboundReferences(envelope, addedOutboundReference);
|
|
540
808
|
}
|
|
@@ -543,6 +811,7 @@ export class DataStores implements IDisposable {
|
|
|
543
811
|
// being used.
|
|
544
812
|
this.gcNodeUpdated(
|
|
545
813
|
`/${envelope.address}`,
|
|
814
|
+
"Changed",
|
|
546
815
|
message.timestamp,
|
|
547
816
|
context.isLoaded ? context.packagePath : undefined,
|
|
548
817
|
);
|
|
@@ -636,7 +905,10 @@ export class DataStores implements IDisposable {
|
|
|
636
905
|
return true;
|
|
637
906
|
}
|
|
638
907
|
|
|
639
|
-
public processSignal(
|
|
908
|
+
public processSignal(messageArg: IInboundSignalMessage, local: boolean) {
|
|
909
|
+
const envelope = messageArg.content as IEnvelope;
|
|
910
|
+
const fluidDataStoreId = envelope.address;
|
|
911
|
+
const message = { ...messageArg, content: envelope.contents };
|
|
640
912
|
const context = this.contexts.get(fluidDataStoreId);
|
|
641
913
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
642
914
|
// corruption in case a deleted data store accidentally submitted a signal.
|
|
@@ -672,7 +944,7 @@ export class DataStores implements IDisposable {
|
|
|
672
944
|
fluidDataStoreId,
|
|
673
945
|
}),
|
|
674
946
|
details: JSON.stringify({
|
|
675
|
-
runtimeConnected: this.
|
|
947
|
+
runtimeConnected: this.parentContext.connected,
|
|
676
948
|
connected,
|
|
677
949
|
}),
|
|
678
950
|
},
|
|
@@ -736,7 +1008,7 @@ export class DataStores implements IDisposable {
|
|
|
736
1008
|
/**
|
|
737
1009
|
* Create a summary. Used when attaching or serializing a detached container.
|
|
738
1010
|
*/
|
|
739
|
-
public
|
|
1011
|
+
public getAttachSummary(telemetryContext?: ITelemetryContext): ISummaryTreeWithStats {
|
|
740
1012
|
const builder = new SummaryTreeBuilder();
|
|
741
1013
|
// Attaching graph of some stores can cause other stores to get bound too.
|
|
742
1014
|
// So keep taking summary until no new stores get bound.
|
|
@@ -793,8 +1065,12 @@ export class DataStores implements IDisposable {
|
|
|
793
1065
|
assert(context !== undefined, 0x2b6 /* Missing data store context */);
|
|
794
1066
|
if (await context.isRoot()) {
|
|
795
1067
|
// A root data store is basically a reference from the container runtime to the data store.
|
|
796
|
-
const handle = new FluidObjectHandle(
|
|
797
|
-
|
|
1068
|
+
const handle = new FluidObjectHandle(
|
|
1069
|
+
context,
|
|
1070
|
+
id,
|
|
1071
|
+
this.parentContext.IFluidHandleContext,
|
|
1072
|
+
);
|
|
1073
|
+
this.parentContext.addedGCOutboundReference?.(this.containerRuntimeHandle, handle);
|
|
798
1074
|
}
|
|
799
1075
|
}
|
|
800
1076
|
this.dataStoresSinceLastGC = [];
|
|
@@ -885,7 +1161,7 @@ export class DataStores implements IDisposable {
|
|
|
885
1161
|
// Delete the contexts of unused data stores.
|
|
886
1162
|
this.contexts.delete(dataStoreId);
|
|
887
1163
|
// Delete the summarizer node of the unused data stores.
|
|
888
|
-
this.
|
|
1164
|
+
this.parentContext.deleteChildSummarizerNode?.(dataStoreId);
|
|
889
1165
|
}
|
|
890
1166
|
}
|
|
891
1167
|
|
|
@@ -927,7 +1203,7 @@ export class DataStores implements IDisposable {
|
|
|
927
1203
|
// Delete the contexts of sweep ready data stores.
|
|
928
1204
|
this.contexts.delete(dataStoreId);
|
|
929
1205
|
// Delete the summarizer node of the sweep ready data stores.
|
|
930
|
-
this.
|
|
1206
|
+
this.parentContext.deleteChildSummarizerNode?.(dataStoreId);
|
|
931
1207
|
}
|
|
932
1208
|
return Array.from(sweepReadyDataStoreRoutes);
|
|
933
1209
|
}
|
|
@@ -1001,6 +1277,69 @@ export class DataStores implements IDisposable {
|
|
|
1001
1277
|
}
|
|
1002
1278
|
return GCNodeType.SubDataStore;
|
|
1003
1279
|
}
|
|
1280
|
+
|
|
1281
|
+
public internalId(maybeAlias: string): string {
|
|
1282
|
+
return this.aliases.get(maybeAlias) ?? maybeAlias;
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1285
|
+
public async request(request: IRequest): Promise<IResponse> {
|
|
1286
|
+
const requestParser = RequestParser.create(request);
|
|
1287
|
+
const id = requestParser.pathParts[0];
|
|
1288
|
+
|
|
1289
|
+
// Differentiate between requesting the dataStore directly, or one of its children
|
|
1290
|
+
const requestForChild = !requestParser.isLeaf(1);
|
|
1291
|
+
|
|
1292
|
+
const headerData: RuntimeHeaderData = {};
|
|
1293
|
+
if (typeof request.headers?.[RuntimeHeaders.wait] === "boolean") {
|
|
1294
|
+
headerData.wait = request.headers[RuntimeHeaders.wait];
|
|
1295
|
+
}
|
|
1296
|
+
if (typeof request.headers?.[RuntimeHeaders.viaHandle] === "boolean") {
|
|
1297
|
+
headerData.viaHandle = request.headers[RuntimeHeaders.viaHandle];
|
|
1298
|
+
}
|
|
1299
|
+
if (typeof request.headers?.[AllowTombstoneRequestHeaderKey] === "boolean") {
|
|
1300
|
+
headerData.allowTombstone = request.headers[AllowTombstoneRequestHeaderKey];
|
|
1301
|
+
}
|
|
1302
|
+
if (typeof request.headers?.[AllowInactiveRequestHeaderKey] === "boolean") {
|
|
1303
|
+
headerData.allowInactive = request.headers[AllowInactiveRequestHeaderKey];
|
|
1304
|
+
}
|
|
1305
|
+
|
|
1306
|
+
// We allow Tombstone requests for sub-DataStore objects
|
|
1307
|
+
if (requestForChild) {
|
|
1308
|
+
headerData.allowTombstone = true;
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1311
|
+
await this.waitIfPendingAlias(id);
|
|
1312
|
+
const internalId = this.internalId(id);
|
|
1313
|
+
const dataStoreContext = await this.getDataStore(internalId, headerData);
|
|
1314
|
+
|
|
1315
|
+
// Remove query params, leading and trailing slashes from the url. This is done to make sure the format is
|
|
1316
|
+
// the same as GC nodes id.
|
|
1317
|
+
const urlWithoutQuery = trimLeadingAndTrailingSlashes(request.url.split("?")[0]);
|
|
1318
|
+
// Get the initial snapshot details which contain the data store package path.
|
|
1319
|
+
const details = await dataStoreContext.getInitialSnapshotDetails();
|
|
1320
|
+
|
|
1321
|
+
// Note that this will throw if the data store is inactive or tombstoned and throwing on incorrect usage
|
|
1322
|
+
// is configured.
|
|
1323
|
+
this.gcNodeUpdated(
|
|
1324
|
+
`/${urlWithoutQuery}`,
|
|
1325
|
+
"Loaded",
|
|
1326
|
+
undefined /* timestampMs */,
|
|
1327
|
+
details.pkg,
|
|
1328
|
+
request,
|
|
1329
|
+
headerData,
|
|
1330
|
+
);
|
|
1331
|
+
const dataStore = await dataStoreContext.realize();
|
|
1332
|
+
|
|
1333
|
+
const subRequest = requestParser.createSubRequest(1);
|
|
1334
|
+
// We always expect createSubRequest to include a leading slash, but asserting here to protect against
|
|
1335
|
+
// unintentionally modifying the url if that changes.
|
|
1336
|
+
assert(
|
|
1337
|
+
subRequest.url.startsWith("/"),
|
|
1338
|
+
0x126 /* "Expected createSubRequest url to include a leading slash" */,
|
|
1339
|
+
);
|
|
1340
|
+
|
|
1341
|
+
return dataStore.request(subRequest);
|
|
1342
|
+
}
|
|
1004
1343
|
}
|
|
1005
1344
|
|
|
1006
1345
|
export function getSummaryForDatastores(
|
|
@@ -1032,6 +1371,8 @@ export function getSummaryForDatastores(
|
|
|
1032
1371
|
|
|
1033
1372
|
/**
|
|
1034
1373
|
* Traverse this op's contents and detect any outbound routes that were added by this op.
|
|
1374
|
+
*
|
|
1375
|
+
* @internal
|
|
1035
1376
|
*/
|
|
1036
1377
|
export function detectOutboundReferences(
|
|
1037
1378
|
envelope: IEnvelope,
|
|
@@ -1068,3 +1409,41 @@ export function detectOutboundReferences(
|
|
|
1068
1409
|
const fromPath = ["", envelope.address, ddsAddress].join("/");
|
|
1069
1410
|
outboundPaths.forEach((toPath) => addedOutboundReference(fromPath, toPath));
|
|
1070
1411
|
}
|
|
1412
|
+
|
|
1413
|
+
/** @internal */
|
|
1414
|
+
export class ChannelCollectionFactory implements IFluidDataStoreFactory {
|
|
1415
|
+
public readonly type = "ChannelCollectionChannel";
|
|
1416
|
+
|
|
1417
|
+
public IFluidDataStoreRegistry: IFluidDataStoreRegistry;
|
|
1418
|
+
|
|
1419
|
+
constructor(
|
|
1420
|
+
registryEntries: NamedFluidDataStoreRegistryEntries,
|
|
1421
|
+
// ADO:7302 We need a better type here
|
|
1422
|
+
private readonly provideEntryPoint: (
|
|
1423
|
+
runtime: IFluidDataStoreChannel,
|
|
1424
|
+
) => Promise<FluidObject>,
|
|
1425
|
+
) {
|
|
1426
|
+
this.IFluidDataStoreRegistry = new FluidDataStoreRegistry(registryEntries);
|
|
1427
|
+
}
|
|
1428
|
+
|
|
1429
|
+
public get IFluidDataStoreFactory() {
|
|
1430
|
+
return this;
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
public async instantiateDataStore(
|
|
1434
|
+
context: IFluidDataStoreContext,
|
|
1435
|
+
_existing: boolean,
|
|
1436
|
+
): Promise<IFluidDataStoreChannel> {
|
|
1437
|
+
const runtime = new ChannelCollection(
|
|
1438
|
+
context.baseSnapshot,
|
|
1439
|
+
context, // parentContext
|
|
1440
|
+
context.logger,
|
|
1441
|
+
() => {}, // gcNodeUpdated
|
|
1442
|
+
(_nodePath: string) => false, // isDataStoreDeleted
|
|
1443
|
+
new Map(), // aliasMap
|
|
1444
|
+
this.provideEntryPoint,
|
|
1445
|
+
);
|
|
1446
|
+
|
|
1447
|
+
return runtime;
|
|
1448
|
+
}
|
|
1449
|
+
}
|