@fluidframework/container-runtime 2.0.0-rc.1.0.3 → 2.0.0-rc.2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{.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 +68 -30
- 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/dist/channelCollection.d.ts +223 -0
- package/dist/channelCollection.d.ts.map +1 -0
- package/dist/{dataStores.js → channelCollection.js} +399 -83
- 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 +98 -40
- 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 +123 -40
- 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 +79 -55
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +541 -411
- 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 +71 -30
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +182 -141
- 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 +22 -5
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +134 -75
- 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 +29 -6
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js +5 -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 +12 -5
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js +18 -6
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts +7 -7
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +20 -20
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.d.ts +6 -1
- package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.js +22 -11
- 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 +40 -38
- 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/lib/channelCollection.d.ts +223 -0
- package/lib/channelCollection.d.ts.map +1 -0
- package/lib/{dataStores.mjs → channelCollection.js} +384 -71
- 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} +98 -40
- 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} +123 -40
- 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} +84 -56
- package/lib/containerRuntime.d.ts.map +1 -0
- package/lib/{containerRuntime.mjs → containerRuntime.js} +460 -332
- 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} +72 -31
- package/lib/dataStoreContext.d.ts.map +1 -0
- package/lib/{dataStoreContext.mjs → dataStoreContext.js} +174 -133
- 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} +23 -6
- package/lib/gc/garbageCollection.d.ts.map +1 -0
- package/lib/gc/{garbageCollection.mjs → garbageCollection.js} +103 -44
- 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} +30 -7
- package/lib/gc/gcDefinitions.d.ts.map +1 -0
- package/lib/gc/{gcDefinitions.mjs → gcDefinitions.js} +5 -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} +13 -6
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
- package/lib/gc/{gcSummaryStateTracker.mjs → gcSummaryStateTracker.js} +17 -5
- package/lib/gc/gcSummaryStateTracker.js.map +1 -0
- package/lib/gc/{gcTelemetry.d.mts → gcTelemetry.d.ts} +8 -8
- package/lib/gc/gcTelemetry.d.ts.map +1 -0
- package/lib/gc/{gcTelemetry.mjs → gcTelemetry.js} +5 -5
- package/lib/gc/gcTelemetry.js.map +1 -0
- package/lib/gc/{gcUnreferencedStateTracker.d.mts → gcUnreferencedStateTracker.d.ts} +7 -2
- package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
- package/lib/gc/{gcUnreferencedStateTracker.mjs → gcUnreferencedStateTracker.js} +12 -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} +520 -84
- package/src/connectionTelemetry.ts +42 -3
- package/src/containerHandleContext.ts +1 -1
- package/src/containerRuntime.ts +661 -464
- package/src/dataStore.ts +13 -15
- package/src/dataStoreContext.ts +257 -184
- package/src/dataStoreContexts.ts +1 -1
- package/src/deltaManagerSummarizerProxy.ts +132 -7
- package/src/gc/garbageCollection.ts +121 -46
- package/src/gc/gcConfigs.ts +3 -3
- package/src/gc/gcDefinitions.ts +30 -7
- package/src/gc/gcHelpers.ts +2 -2
- package/src/gc/gcReferenceGraphAlgorithm.ts +1 -1
- package/src/gc/gcSummaryStateTracker.ts +19 -7
- package/src/gc/gcTelemetry.ts +10 -9
- package/src/gc/gcUnreferencedStateTracker.ts +12 -1
- package/src/gc/index.ts +10 -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 +0 -149
- 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 +0 -149
- 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
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.detectOutboundReferences = exports.getSummaryForDatastores = exports.
|
|
7
|
+
exports.ChannelCollectionFactory = exports.detectOutboundReferences = exports.getSummaryForDatastores = exports.ChannelCollection = exports.wrapContextForInnerChannel = exports.wrapContext = exports.AllowInactiveRequestHeaderKey = exports.AllowTombstoneRequestHeaderKey = exports.RuntimeHeaders = void 0;
|
|
8
8
|
const datastore_1 = require("@fluidframework/datastore");
|
|
9
9
|
const runtime_definitions_1 = require("@fluidframework/runtime-definitions");
|
|
10
10
|
const runtime_utils_1 = require("@fluidframework/runtime-utils");
|
|
@@ -12,29 +12,147 @@ const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
|
|
|
12
12
|
const container_definitions_1 = require("@fluidframework/container-definitions");
|
|
13
13
|
const driver_utils_1 = require("@fluidframework/driver-utils");
|
|
14
14
|
const core_utils_1 = require("@fluidframework/core-utils");
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
const
|
|
15
|
+
const dataStoreContexts_js_1 = require("./dataStoreContexts.js");
|
|
16
|
+
const containerRuntime_js_1 = require("./containerRuntime.js");
|
|
17
|
+
const dataStoreContext_js_1 = require("./dataStoreContext.js");
|
|
18
|
+
const storageServiceWithAttachBlobs_js_1 = require("./storageServiceWithAttachBlobs.js");
|
|
19
|
+
const dataStore_js_1 = require("./dataStore.js");
|
|
20
|
+
const index_js_1 = require("./gc/index.js");
|
|
21
|
+
const index_js_2 = require("./summary/index.js");
|
|
22
|
+
const messageTypes_js_1 = require("./messageTypes.js");
|
|
23
|
+
const dataStoreRegistry_js_1 = require("./dataStoreRegistry.js");
|
|
24
|
+
/**
|
|
25
|
+
* Accepted header keys for requests coming to the runtime.
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
var RuntimeHeaders;
|
|
29
|
+
(function (RuntimeHeaders) {
|
|
30
|
+
/** True to wait for a data store to be created and loaded before returning it. */
|
|
31
|
+
RuntimeHeaders["wait"] = "wait";
|
|
32
|
+
/** True if the request is coming from an IFluidHandle. */
|
|
33
|
+
RuntimeHeaders["viaHandle"] = "viaHandle";
|
|
34
|
+
})(RuntimeHeaders || (exports.RuntimeHeaders = RuntimeHeaders = {}));
|
|
35
|
+
/** True if a tombstoned object should be returned without erroring
|
|
36
|
+
* @alpha
|
|
37
|
+
*/
|
|
38
|
+
exports.AllowTombstoneRequestHeaderKey = "allowTombstone"; // Belongs in the enum above, but avoiding the breaking change
|
|
39
|
+
/**
|
|
40
|
+
* [IRRELEVANT IF throwOnInactiveLoad OPTION NOT SET] True if an inactive object should be returned without erroring
|
|
41
|
+
* @internal
|
|
42
|
+
*/
|
|
43
|
+
exports.AllowInactiveRequestHeaderKey = "allowInactive"; // Belongs in the enum above, but avoiding the breaking change
|
|
44
|
+
/**
|
|
45
|
+
* Creates a shallow wrapper of {@link IFluidParentContext}. The wrapper can then have its methods overwritten as needed
|
|
46
|
+
*/
|
|
47
|
+
function wrapContext(context) {
|
|
48
|
+
return {
|
|
49
|
+
get IFluidDataStoreRegistry() {
|
|
50
|
+
return context.IFluidDataStoreRegistry;
|
|
51
|
+
},
|
|
52
|
+
IFluidHandleContext: context.IFluidHandleContext,
|
|
53
|
+
options: context.options,
|
|
54
|
+
get clientId() {
|
|
55
|
+
return context.clientId;
|
|
56
|
+
},
|
|
57
|
+
get connected() {
|
|
58
|
+
return context.connected;
|
|
59
|
+
},
|
|
60
|
+
deltaManager: context.deltaManager,
|
|
61
|
+
storage: context.storage,
|
|
62
|
+
logger: context.logger,
|
|
63
|
+
get clientDetails() {
|
|
64
|
+
return context.clientDetails;
|
|
65
|
+
},
|
|
66
|
+
get idCompressor() {
|
|
67
|
+
return context.idCompressor;
|
|
68
|
+
},
|
|
69
|
+
loadingGroupId: context.loadingGroupId,
|
|
70
|
+
get attachState() {
|
|
71
|
+
return context.attachState;
|
|
72
|
+
},
|
|
73
|
+
containerRuntime: context.containerRuntime,
|
|
74
|
+
scope: context.scope,
|
|
75
|
+
gcThrowOnTombstoneUsage: context.gcThrowOnTombstoneUsage,
|
|
76
|
+
gcTombstoneEnforcementAllowed: context.gcTombstoneEnforcementAllowed,
|
|
77
|
+
getAbsoluteUrl: async (...args) => {
|
|
78
|
+
return context.getAbsoluteUrl(...args);
|
|
79
|
+
},
|
|
80
|
+
getQuorum: (...args) => {
|
|
81
|
+
return context.getQuorum(...args);
|
|
82
|
+
},
|
|
83
|
+
getAudience: (...args) => {
|
|
84
|
+
return context.getAudience(...args);
|
|
85
|
+
},
|
|
86
|
+
ensureNoDataModelChanges: (...args) => {
|
|
87
|
+
return context.ensureNoDataModelChanges(...args);
|
|
88
|
+
},
|
|
89
|
+
submitMessage: (...args) => {
|
|
90
|
+
return context.submitMessage(...args);
|
|
91
|
+
},
|
|
92
|
+
submitSignal: (...args) => {
|
|
93
|
+
return context.submitSignal(...args);
|
|
94
|
+
},
|
|
95
|
+
makeLocallyVisible: (...args) => {
|
|
96
|
+
return context.makeLocallyVisible(...args);
|
|
97
|
+
},
|
|
98
|
+
uploadBlob: async (...args) => {
|
|
99
|
+
return context.uploadBlob(...args);
|
|
100
|
+
},
|
|
101
|
+
addedGCOutboundReference: (...args) => {
|
|
102
|
+
return context.addedGCOutboundReference?.(...args);
|
|
103
|
+
},
|
|
104
|
+
getCreateChildSummarizerNodeFn: (...args) => {
|
|
105
|
+
return context.getCreateChildSummarizerNodeFn?.(...args);
|
|
106
|
+
},
|
|
107
|
+
deleteChildSummarizerNode: (...args) => {
|
|
108
|
+
return context.deleteChildSummarizerNode?.(...args);
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
exports.wrapContext = wrapContext;
|
|
113
|
+
/**
|
|
114
|
+
* Creates a wrapper of a {@link IFluidParentContext} to be provided to the inner datastore channels.
|
|
115
|
+
* The wrapper will have the submit methods overwritten with the appropriate id as the destination address.
|
|
116
|
+
*
|
|
117
|
+
* @param id - the id of the channel
|
|
118
|
+
* @param parentContext - the {@link IFluidParentContext} to wrap
|
|
119
|
+
* @returns A wrapped {@link IFluidParentContext}
|
|
120
|
+
*/
|
|
121
|
+
function wrapContextForInnerChannel(id, parentContext) {
|
|
122
|
+
const context = wrapContext(parentContext);
|
|
123
|
+
context.submitMessage = (type, content, localOpMetadata) => {
|
|
124
|
+
const fluidDataStoreContent = {
|
|
125
|
+
content,
|
|
126
|
+
type,
|
|
127
|
+
};
|
|
128
|
+
const envelope = {
|
|
129
|
+
address: id,
|
|
130
|
+
contents: fluidDataStoreContent,
|
|
131
|
+
};
|
|
132
|
+
parentContext.submitMessage(messageTypes_js_1.ContainerMessageType.FluidDataStoreOp, envelope, localOpMetadata);
|
|
133
|
+
};
|
|
134
|
+
context.submitSignal = (type, contents, targetClientId) => {
|
|
135
|
+
const envelope = {
|
|
136
|
+
address: id,
|
|
137
|
+
contents,
|
|
138
|
+
};
|
|
139
|
+
parentContext.submitSignal(type, envelope, targetClientId);
|
|
140
|
+
};
|
|
141
|
+
return context;
|
|
142
|
+
}
|
|
143
|
+
exports.wrapContextForInnerChannel = wrapContextForInnerChannel;
|
|
23
144
|
/**
|
|
24
145
|
* This class encapsulates data store handling. Currently it is only used by the container runtime,
|
|
25
146
|
* but eventually could be hosted on any channel once we formalize the channel api boundary.
|
|
147
|
+
* @internal
|
|
26
148
|
*/
|
|
27
|
-
class
|
|
28
|
-
constructor(baseSnapshot,
|
|
149
|
+
class ChannelCollection {
|
|
150
|
+
constructor(baseSnapshot, parentContext, baseLogger, gcNodeUpdated, isDataStoreDeleted, aliasMap, provideEntryPoint) {
|
|
29
151
|
this.baseSnapshot = baseSnapshot;
|
|
30
|
-
this.
|
|
31
|
-
this.submitAttachFn = submitAttachFn;
|
|
32
|
-
this.getCreateChildSummarizerNodeFn = getCreateChildSummarizerNodeFn;
|
|
33
|
-
this.deleteChildSummarizerNodeFn = deleteChildSummarizerNodeFn;
|
|
152
|
+
this.parentContext = parentContext;
|
|
34
153
|
this.gcNodeUpdated = gcNodeUpdated;
|
|
35
154
|
this.isDataStoreDeleted = isDataStoreDeleted;
|
|
36
155
|
this.aliasMap = aliasMap;
|
|
37
|
-
this.contexts = contexts;
|
|
38
156
|
// Stores tracked by the Domain
|
|
39
157
|
this.pendingAttach = new Map();
|
|
40
158
|
// 0.24 back-compat attachingBeforeSummary
|
|
@@ -44,9 +162,13 @@ class DataStores {
|
|
|
44
162
|
// root data stores that are added.
|
|
45
163
|
this.dataStoresSinceLastGC = [];
|
|
46
164
|
this.pendingAliasMap = new Map();
|
|
165
|
+
/** For sampling. Only log once per container */
|
|
166
|
+
this.shouldSendAttachLog = true;
|
|
47
167
|
this.dispose = () => this.disposeOnce.value;
|
|
48
168
|
this.mc = (0, telemetry_utils_1.createChildMonitoringContext)({ logger: baseLogger });
|
|
49
|
-
this.
|
|
169
|
+
this.contexts = new dataStoreContexts_js_1.DataStoreContexts(baseLogger);
|
|
170
|
+
this.containerRuntimeHandle = new datastore_1.FluidObjectHandle(this.parentContext, "/", this.parentContext.IFluidHandleContext);
|
|
171
|
+
this.entryPoint = new datastore_1.FluidObjectHandle(new core_utils_1.LazyPromise(async () => provideEntryPoint(this)), "", this.parentContext.IFluidHandleContext);
|
|
50
172
|
// Extract stores stored inside the snapshot
|
|
51
173
|
const fluidDataStores = new Map();
|
|
52
174
|
if (baseSnapshot) {
|
|
@@ -63,16 +185,17 @@ class DataStores {
|
|
|
63
185
|
unreferencedDataStoreCount++;
|
|
64
186
|
}
|
|
65
187
|
// If we have a detached container, then create local data store contexts.
|
|
66
|
-
if (this.
|
|
67
|
-
dataStoreContext = new
|
|
188
|
+
if (this.parentContext.attachState !== container_definitions_1.AttachState.Detached) {
|
|
189
|
+
dataStoreContext = new dataStoreContext_js_1.RemoteFluidDataStoreContext({
|
|
68
190
|
id: key,
|
|
69
191
|
snapshotTree: value,
|
|
70
|
-
|
|
71
|
-
storage: this.
|
|
72
|
-
scope: this.
|
|
73
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
192
|
+
parentContext: this.wrapContextForInnerChannel(key),
|
|
193
|
+
storage: this.parentContext.storage,
|
|
194
|
+
scope: this.parentContext.scope,
|
|
195
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(key, {
|
|
74
196
|
type: runtime_definitions_1.CreateSummarizerNodeSource.FromSummary,
|
|
75
197
|
}),
|
|
198
|
+
loadingGroupId: value.groupId,
|
|
76
199
|
});
|
|
77
200
|
}
|
|
78
201
|
else {
|
|
@@ -80,13 +203,13 @@ class DataStores {
|
|
|
80
203
|
throw new telemetry_utils_1.LoggingError("Snapshot should be there to load from!!");
|
|
81
204
|
}
|
|
82
205
|
const snapshotTree = value;
|
|
83
|
-
dataStoreContext = new
|
|
206
|
+
dataStoreContext = new dataStoreContext_js_1.LocalFluidDataStoreContext({
|
|
84
207
|
id: key,
|
|
85
208
|
pkg: undefined,
|
|
86
|
-
|
|
87
|
-
storage: this.
|
|
88
|
-
scope: this.
|
|
89
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
209
|
+
parentContext: this.wrapContextForInnerChannel(key),
|
|
210
|
+
storage: this.parentContext.storage,
|
|
211
|
+
scope: this.parentContext.scope,
|
|
212
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(key, {
|
|
90
213
|
type: runtime_definitions_1.CreateSummarizerNodeSource.FromSummary,
|
|
91
214
|
}),
|
|
92
215
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(key),
|
|
@@ -111,9 +234,41 @@ class DataStores {
|
|
|
111
234
|
const pendingAliasPromise = this.pendingAliases.get(maybeAlias);
|
|
112
235
|
return pendingAliasPromise ?? "Success";
|
|
113
236
|
}
|
|
237
|
+
wrapContextForInnerChannel(id) {
|
|
238
|
+
return wrapContextForInnerChannel(id, this.parentContext);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* IFluidDataStoreChannel.makeVisibleAndAttachGraph implementation
|
|
242
|
+
* Not clear when it would be called and what it should do.
|
|
243
|
+
* Currently this API is called by context only for root data stores.
|
|
244
|
+
*/
|
|
245
|
+
makeVisibleAndAttachGraph() {
|
|
246
|
+
this.parentContext.makeLocallyVisible();
|
|
247
|
+
}
|
|
114
248
|
processAttachMessage(message, local) {
|
|
115
249
|
const attachMessage = message.contents;
|
|
116
250
|
this.dataStoresSinceLastGC.push(attachMessage.id);
|
|
251
|
+
// We need to process the GC Data for both local and remote attach messages
|
|
252
|
+
const foundGCData = (0, runtime_utils_1.processAttachMessageGCData)(attachMessage.snapshot, (nodeId, toPath) => {
|
|
253
|
+
// nodeId is the relative path under the node being attached. Always starts with "/", but no trailing "/" after an id
|
|
254
|
+
const fromPath = `/${attachMessage.id}${nodeId === "/" ? "" : nodeId}`;
|
|
255
|
+
this.parentContext.addedGCOutboundReference?.({ absolutePath: fromPath }, { absolutePath: toPath });
|
|
256
|
+
});
|
|
257
|
+
// Only log once per container to avoid noise/cost.
|
|
258
|
+
// Allows longitudinal tracking of various state (e.g. foundGCData), and some sampled details
|
|
259
|
+
if (this.shouldSendAttachLog) {
|
|
260
|
+
this.shouldSendAttachLog = false;
|
|
261
|
+
this.mc.logger.sendTelemetryEvent({
|
|
262
|
+
eventName: "dataStoreAttachMessage_sampled",
|
|
263
|
+
...(0, telemetry_utils_1.tagCodeArtifacts)({ id: attachMessage.id, pkg: attachMessage.type }),
|
|
264
|
+
details: {
|
|
265
|
+
local,
|
|
266
|
+
snapshot: !!attachMessage.snapshot,
|
|
267
|
+
foundGCData,
|
|
268
|
+
},
|
|
269
|
+
...(0, telemetry_utils_1.extractSafePropertiesFromMessage)(message),
|
|
270
|
+
});
|
|
271
|
+
}
|
|
117
272
|
// The local object has already been attached
|
|
118
273
|
if (local) {
|
|
119
274
|
(0, core_utils_1.assert)(this.pendingAttach.has(attachMessage.id), 0x15e /* "Local object does not have matching attach message id" */);
|
|
@@ -140,17 +295,18 @@ class DataStores {
|
|
|
140
295
|
// Include the type of attach message which is the pkg of the store to be
|
|
141
296
|
// used by RemoteFluidDataStoreContext in case it is not in the snapshot.
|
|
142
297
|
const pkg = [attachMessage.type];
|
|
143
|
-
const remoteFluidDataStoreContext = new
|
|
298
|
+
const remoteFluidDataStoreContext = new dataStoreContext_js_1.RemoteFluidDataStoreContext({
|
|
144
299
|
id: attachMessage.id,
|
|
145
300
|
snapshotTree,
|
|
146
|
-
|
|
147
|
-
storage: new
|
|
148
|
-
scope: this.
|
|
149
|
-
|
|
301
|
+
parentContext: this.wrapContextForInnerChannel(attachMessage.id),
|
|
302
|
+
storage: new storageServiceWithAttachBlobs_js_1.StorageServiceWithAttachBlobs(this.parentContext.storage, flatAttachBlobs),
|
|
303
|
+
scope: this.parentContext.scope,
|
|
304
|
+
loadingGroupId: attachMessage.snapshot?.groupId,
|
|
305
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(attachMessage.id, {
|
|
150
306
|
type: runtime_definitions_1.CreateSummarizerNodeSource.FromAttach,
|
|
151
307
|
sequenceNumber: message.sequenceNumber,
|
|
152
308
|
snapshot: attachMessage.snapshot ?? {
|
|
153
|
-
entries: [(0,
|
|
309
|
+
entries: [(0, dataStoreContext_js_1.createAttributesBlob)(pkg, true /* isRootDataStore */)],
|
|
154
310
|
},
|
|
155
311
|
}),
|
|
156
312
|
pkg,
|
|
@@ -159,7 +315,7 @@ class DataStores {
|
|
|
159
315
|
}
|
|
160
316
|
processAliasMessage(message, localOpMetadata, local) {
|
|
161
317
|
const aliasMessage = message.contents;
|
|
162
|
-
if (!(0,
|
|
318
|
+
if (!(0, dataStore_js_1.isDataStoreAliasMessage)(aliasMessage)) {
|
|
163
319
|
throw new telemetry_utils_1.DataCorruptionError("malformedDataStoreAliasMessage", {
|
|
164
320
|
...(0, telemetry_utils_1.extractSafePropertiesFromMessage)(message),
|
|
165
321
|
});
|
|
@@ -187,8 +343,8 @@ class DataStores {
|
|
|
187
343
|
});
|
|
188
344
|
return false;
|
|
189
345
|
}
|
|
190
|
-
const handle = new datastore_1.FluidObjectHandle(context, aliasMessage.internalId, this.
|
|
191
|
-
this.
|
|
346
|
+
const handle = new datastore_1.FluidObjectHandle(context, aliasMessage.internalId, this.parentContext.IFluidHandleContext);
|
|
347
|
+
this.parentContext.addedGCOutboundReference?.(this.containerRuntimeHandle, handle);
|
|
192
348
|
this.aliasMap.set(aliasMessage.alias, context.id);
|
|
193
349
|
context.setInMemoryRoot();
|
|
194
350
|
return true;
|
|
@@ -196,9 +352,21 @@ class DataStores {
|
|
|
196
352
|
alreadyProcessed(id) {
|
|
197
353
|
return this.aliasMap.get(id) !== undefined || this.contexts.get(id) !== undefined;
|
|
198
354
|
}
|
|
355
|
+
/** Package up the context's attach summary etc into an IAttachMessage */
|
|
356
|
+
generateAttachMessage(localContext) {
|
|
357
|
+
const { attachSummary } = localContext.getAttachData(/* includeGCData: */ true);
|
|
358
|
+
const type = localContext.packagePath[localContext.packagePath.length - 1];
|
|
359
|
+
// Attach message needs the summary in ITree format. Convert the ISummaryTree into an ITree.
|
|
360
|
+
const snapshot = (0, runtime_utils_1.convertSummaryTreeToITree)(attachSummary.summary);
|
|
361
|
+
return {
|
|
362
|
+
id: localContext.id,
|
|
363
|
+
snapshot,
|
|
364
|
+
type,
|
|
365
|
+
};
|
|
366
|
+
}
|
|
199
367
|
/**
|
|
200
|
-
* Make the data
|
|
201
|
-
* bound list. This data store can now be reached from the root.
|
|
368
|
+
* Make the data store locally visible in the container graph by moving the data store context from unbound to
|
|
369
|
+
* bound list and submitting the attach message. This data store can now be reached from the root.
|
|
202
370
|
* @param id - The id of the data store context to make visible.
|
|
203
371
|
*/
|
|
204
372
|
makeDataStoreLocallyVisible(id) {
|
|
@@ -209,48 +377,83 @@ class DataStores {
|
|
|
209
377
|
* globally visible. Move it to attaching state and send an "attach" op for it.
|
|
210
378
|
* If the container is detached, this data store will be part of the summary that makes the container attached.
|
|
211
379
|
*/
|
|
212
|
-
if (this.
|
|
380
|
+
if (this.parentContext.attachState !== container_definitions_1.AttachState.Detached) {
|
|
213
381
|
localContext.emit("attaching");
|
|
214
|
-
const message =
|
|
382
|
+
const message = this.generateAttachMessage(localContext);
|
|
215
383
|
this.pendingAttach.set(id, message);
|
|
216
|
-
this.
|
|
384
|
+
this.parentContext.submitMessage(messageTypes_js_1.ContainerMessageType.Attach, message, undefined);
|
|
217
385
|
this.attachOpFiredForDataStore.add(id);
|
|
218
386
|
}
|
|
219
387
|
this.contexts.bind(id);
|
|
220
388
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
389
|
+
/**
|
|
390
|
+
* Generate compact internal DataStore ID.
|
|
391
|
+
*
|
|
392
|
+
* A note about namespace and name collisions:
|
|
393
|
+
* This code assumes that that's the only way to generate internal IDs, and that it's Ok for this namespace to overlap with
|
|
394
|
+
* user-provided alias names namespace.
|
|
395
|
+
* There are two scenarios where it could cause trouble:
|
|
396
|
+
* 1) Old files, where (already removed) CreateRoot*DataStore*() API was used, and thus internal name of data store
|
|
397
|
+
* was provided by user. Such files may experience name collision with future data stores that receive a name generated
|
|
398
|
+
* by this function.
|
|
399
|
+
* 2) Much less likely, but if it happen that internal ID (generated by this function) is exactly the same as alias name
|
|
400
|
+
* that user might use in the future, them ContainerRuntime.getAliasedDataStoreEntryPoint() or
|
|
401
|
+
* ContainerRuntime.getDataStoreFromRequest() could return a data store with internalID matching user request, even though
|
|
402
|
+
* user expected some other data store (that would receive alias later).
|
|
403
|
+
* Please note that above mentioned functions have the implementation they have (allowing #2) due to #1.
|
|
404
|
+
*/
|
|
405
|
+
createDataStoreId() {
|
|
406
|
+
// We use three non-overlapping namespaces:
|
|
407
|
+
// - detached state: even numbers
|
|
408
|
+
// - attached state: odd numbers
|
|
409
|
+
// - uuids
|
|
410
|
+
// In first two cases we will encode result as strings in more compact form.
|
|
411
|
+
if (this.parentContext.attachState === container_definitions_1.AttachState.Detached) {
|
|
412
|
+
// container is detached, only one client observes content, no way to hit collisions with other clients.
|
|
413
|
+
return (0, runtime_utils_1.encodeCompactIdToString)(2 * this.contexts.size);
|
|
414
|
+
}
|
|
415
|
+
const id = this.parentContext.containerRuntime.generateDocumentUniqueId();
|
|
416
|
+
if (typeof id === "number") {
|
|
417
|
+
return (0, runtime_utils_1.encodeCompactIdToString)(2 * id + 1);
|
|
418
|
+
}
|
|
419
|
+
return id;
|
|
420
|
+
}
|
|
421
|
+
createDetachedDataStoreCore(pkg, loadingGroupId) {
|
|
422
|
+
const id = this.createDataStoreId();
|
|
423
|
+
const context = new dataStoreContext_js_1.LocalDetachedFluidDataStoreContext({
|
|
224
424
|
id,
|
|
225
425
|
pkg,
|
|
226
|
-
|
|
227
|
-
storage: this.
|
|
228
|
-
scope: this.
|
|
229
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
426
|
+
parentContext: this.wrapContextForInnerChannel(id),
|
|
427
|
+
storage: this.parentContext.storage,
|
|
428
|
+
scope: this.parentContext.scope,
|
|
429
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(id, {
|
|
230
430
|
type: runtime_definitions_1.CreateSummarizerNodeSource.Local,
|
|
231
431
|
}),
|
|
232
432
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
|
|
233
433
|
snapshotTree: undefined,
|
|
234
|
-
isRootDataStore:
|
|
434
|
+
isRootDataStore: false,
|
|
435
|
+
loadingGroupId,
|
|
436
|
+
channelToDataStoreFn: (channel) => (0, dataStore_js_1.channelToDataStore)(channel, id, this, (0, telemetry_utils_1.createChildLogger)({ logger: this.parentContext.logger })),
|
|
235
437
|
});
|
|
236
438
|
this.contexts.addUnbound(context);
|
|
237
439
|
return context;
|
|
238
440
|
}
|
|
239
|
-
_createFluidDataStoreContext(pkg,
|
|
240
|
-
|
|
241
|
-
const context = new
|
|
441
|
+
_createFluidDataStoreContext(pkg, props, loadingGroupId) {
|
|
442
|
+
const id = this.createDataStoreId();
|
|
443
|
+
const context = new dataStoreContext_js_1.LocalFluidDataStoreContext({
|
|
242
444
|
id,
|
|
243
445
|
pkg,
|
|
244
|
-
|
|
245
|
-
storage: this.
|
|
246
|
-
scope: this.
|
|
247
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
446
|
+
parentContext: this.wrapContextForInnerChannel(id),
|
|
447
|
+
storage: this.parentContext.storage,
|
|
448
|
+
scope: this.parentContext.scope,
|
|
449
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(id, {
|
|
248
450
|
type: runtime_definitions_1.CreateSummarizerNodeSource.Local,
|
|
249
451
|
}),
|
|
250
452
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
|
|
251
453
|
snapshotTree: undefined,
|
|
252
454
|
isRootDataStore: false,
|
|
253
455
|
createProps: props,
|
|
456
|
+
loadingGroupId,
|
|
254
457
|
});
|
|
255
458
|
this.contexts.addUnbound(context);
|
|
256
459
|
return context;
|
|
@@ -258,7 +461,16 @@ class DataStores {
|
|
|
258
461
|
get disposed() {
|
|
259
462
|
return this.disposeOnce.evaluated;
|
|
260
463
|
}
|
|
261
|
-
|
|
464
|
+
reSubmit(type, content, localOpMetadata) {
|
|
465
|
+
switch (type) {
|
|
466
|
+
case messageTypes_js_1.ContainerMessageType.Attach:
|
|
467
|
+
case messageTypes_js_1.ContainerMessageType.Alias:
|
|
468
|
+
this.parentContext.submitMessage(type, content, localOpMetadata);
|
|
469
|
+
return;
|
|
470
|
+
default:
|
|
471
|
+
}
|
|
472
|
+
(0, core_utils_1.assert)(type === messageTypes_js_1.ContainerMessageType.FluidDataStoreOp, 0x8e7 /* type */);
|
|
473
|
+
const envelope = content;
|
|
262
474
|
const context = this.contexts.get(envelope.address);
|
|
263
475
|
// If the data store has been deleted, log an error and throw an error. If there are local changes for a
|
|
264
476
|
// deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
|
|
@@ -269,9 +481,12 @@ class DataStores {
|
|
|
269
481
|
});
|
|
270
482
|
}
|
|
271
483
|
(0, core_utils_1.assert)(!!context, 0x160 /* "There should be a store context for the op" */);
|
|
272
|
-
|
|
484
|
+
const innerContents = envelope.contents;
|
|
485
|
+
context.reSubmit(innerContents.type, innerContents.content, localOpMetadata);
|
|
273
486
|
}
|
|
274
|
-
|
|
487
|
+
rollback(type, content, localOpMetadata) {
|
|
488
|
+
(0, core_utils_1.assert)(type === messageTypes_js_1.ContainerMessageType.FluidDataStoreOp, 0x8e8 /* type */);
|
|
489
|
+
const envelope = content;
|
|
275
490
|
const context = this.contexts.get(envelope.address);
|
|
276
491
|
// If the data store has been deleted, log an error and throw an error. If there are local changes for a
|
|
277
492
|
// deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
|
|
@@ -282,9 +497,19 @@ class DataStores {
|
|
|
282
497
|
});
|
|
283
498
|
}
|
|
284
499
|
(0, core_utils_1.assert)(!!context, 0x2e8 /* "There should be a store context for the op" */);
|
|
285
|
-
|
|
500
|
+
const innerContents = envelope.contents;
|
|
501
|
+
context.rollback(innerContents.type, innerContents.content, localOpMetadata);
|
|
286
502
|
}
|
|
287
|
-
async applyStashedOp(
|
|
503
|
+
async applyStashedOp(content) {
|
|
504
|
+
const opContents = content;
|
|
505
|
+
switch (opContents.type) {
|
|
506
|
+
case messageTypes_js_1.ContainerMessageType.Attach:
|
|
507
|
+
return this.applyStashedAttachOp(opContents.contents);
|
|
508
|
+
case messageTypes_js_1.ContainerMessageType.Alias:
|
|
509
|
+
return;
|
|
510
|
+
default:
|
|
511
|
+
}
|
|
512
|
+
const envelope = opContents.contents;
|
|
288
513
|
const context = this.contexts.get(envelope.address);
|
|
289
514
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
290
515
|
// corruption in case the data store that stashed the op is deleted.
|
|
@@ -299,9 +524,26 @@ class DataStores {
|
|
|
299
524
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
300
525
|
this.processAttachMessage({ contents: message }, false);
|
|
301
526
|
}
|
|
302
|
-
|
|
527
|
+
process(message, local, localMessageMetadata, addedOutboundReference) {
|
|
528
|
+
switch (message.type) {
|
|
529
|
+
case messageTypes_js_1.ContainerMessageType.Attach:
|
|
530
|
+
this.processAttachMessage(message, local);
|
|
531
|
+
return;
|
|
532
|
+
case messageTypes_js_1.ContainerMessageType.Alias:
|
|
533
|
+
this.processAliasMessage(message, localMessageMetadata, local);
|
|
534
|
+
return;
|
|
535
|
+
case messageTypes_js_1.ContainerMessageType.FluidDataStoreOp:
|
|
536
|
+
break;
|
|
537
|
+
default:
|
|
538
|
+
(0, core_utils_1.assert)(false, 0x8e9 /* unreached */);
|
|
539
|
+
}
|
|
303
540
|
const envelope = message.contents;
|
|
304
|
-
const
|
|
541
|
+
const innerContents = envelope.contents;
|
|
542
|
+
const transformed = {
|
|
543
|
+
...message,
|
|
544
|
+
type: innerContents.type,
|
|
545
|
+
contents: innerContents.content,
|
|
546
|
+
};
|
|
305
547
|
const context = this.contexts.get(envelope.address);
|
|
306
548
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
307
549
|
// corruption in case a deleted data store accidentally submitted an op.
|
|
@@ -322,16 +564,17 @@ class DataStores {
|
|
|
322
564
|
context.process(transformed, local, localMessageMetadata);
|
|
323
565
|
// By default, we use the new behavior of detecting outbound routes here.
|
|
324
566
|
// If this setting is true, then DataStoreContext would be notifying GC instead.
|
|
325
|
-
if (this.mc.config.getBoolean(
|
|
567
|
+
if (this.mc.config.getBoolean(index_js_1.detectOutboundRoutesViaDDSKey) !== true &&
|
|
568
|
+
addedOutboundReference !== undefined) {
|
|
326
569
|
// Notify GC of any outbound references that were added by this op.
|
|
327
570
|
detectOutboundReferences(envelope, addedOutboundReference);
|
|
328
571
|
}
|
|
329
572
|
// Notify that a GC node for the data store changed. This is used to detect if a deleted data store is
|
|
330
573
|
// being used.
|
|
331
|
-
this.gcNodeUpdated(`/${envelope.address}`, message.timestamp, context.isLoaded ? context.packagePath : undefined);
|
|
574
|
+
this.gcNodeUpdated(`/${envelope.address}`, "Changed", message.timestamp, context.isLoaded ? context.packagePath : undefined);
|
|
332
575
|
}
|
|
333
576
|
async getDataStore(id, requestHeaderData) {
|
|
334
|
-
const headerData = { ...
|
|
577
|
+
const headerData = { ...containerRuntime_js_1.defaultRuntimeHeaderData, ...requestHeaderData };
|
|
335
578
|
if (this.checkAndLogIfDeleted(id, this.contexts.get(id), "Requested", "getDataStore", requestHeaderData)) {
|
|
336
579
|
// The requested data store has been deleted by gc. Create a 404 response exception.
|
|
337
580
|
const request = { url: id };
|
|
@@ -353,7 +596,7 @@ class DataStores {
|
|
|
353
596
|
if (this.checkAndLogIfDeleted(id, this.contexts.get(id), "Requested", "getDataStoreIfAvailable", requestHeaderData)) {
|
|
354
597
|
return undefined;
|
|
355
598
|
}
|
|
356
|
-
const headerData = { ...
|
|
599
|
+
const headerData = { ...containerRuntime_js_1.defaultRuntimeHeaderData, ...requestHeaderData };
|
|
357
600
|
const context = await this.contexts.getBoundOrRemoted(id, headerData.wait);
|
|
358
601
|
if (context === undefined) {
|
|
359
602
|
return undefined;
|
|
@@ -382,7 +625,10 @@ class DataStores {
|
|
|
382
625
|
});
|
|
383
626
|
return true;
|
|
384
627
|
}
|
|
385
|
-
processSignal(
|
|
628
|
+
processSignal(messageArg, local) {
|
|
629
|
+
const envelope = messageArg.content;
|
|
630
|
+
const fluidDataStoreId = envelope.address;
|
|
631
|
+
const message = { ...messageArg, content: envelope.contents };
|
|
386
632
|
const context = this.contexts.get(fluidDataStoreId);
|
|
387
633
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
388
634
|
// corruption in case a deleted data store accidentally submitted a signal.
|
|
@@ -415,7 +661,7 @@ class DataStores {
|
|
|
415
661
|
fluidDataStoreId,
|
|
416
662
|
}),
|
|
417
663
|
details: JSON.stringify({
|
|
418
|
-
runtimeConnected: this.
|
|
664
|
+
runtimeConnected: this.parentContext.connected,
|
|
419
665
|
connected,
|
|
420
666
|
}),
|
|
421
667
|
}, error);
|
|
@@ -455,7 +701,10 @@ class DataStores {
|
|
|
455
701
|
}));
|
|
456
702
|
return summaryBuilder.getSummaryTree();
|
|
457
703
|
}
|
|
458
|
-
|
|
704
|
+
/**
|
|
705
|
+
* Create a summary. Used when attaching or serializing a detached container.
|
|
706
|
+
*/
|
|
707
|
+
getAttachSummary(telemetryContext) {
|
|
459
708
|
const builder = new runtime_utils_1.SummaryTreeBuilder();
|
|
460
709
|
// Attaching graph of some stores can cause other stores to get bound too.
|
|
461
710
|
// So keep taking summary until no new stores get bound.
|
|
@@ -475,8 +724,8 @@ class DataStores {
|
|
|
475
724
|
.map(([key, value]) => {
|
|
476
725
|
let dataStoreSummary;
|
|
477
726
|
if (value.isLoaded) {
|
|
478
|
-
|
|
479
|
-
|
|
727
|
+
dataStoreSummary = value.getAttachData(
|
|
728
|
+
/* includeGCCData: */ false, telemetryContext).attachSummary;
|
|
480
729
|
}
|
|
481
730
|
else {
|
|
482
731
|
// If this data store is not yet loaded, then there should be no changes in the snapshot from
|
|
@@ -500,8 +749,8 @@ class DataStores {
|
|
|
500
749
|
(0, core_utils_1.assert)(context !== undefined, 0x2b6 /* Missing data store context */);
|
|
501
750
|
if (await context.isRoot()) {
|
|
502
751
|
// A root data store is basically a reference from the container runtime to the data store.
|
|
503
|
-
const handle = new datastore_1.FluidObjectHandle(context, id, this.
|
|
504
|
-
this.
|
|
752
|
+
const handle = new datastore_1.FluidObjectHandle(context, id, this.parentContext.IFluidHandleContext);
|
|
753
|
+
this.parentContext.addedGCOutboundReference?.(this.containerRuntimeHandle, handle);
|
|
505
754
|
}
|
|
506
755
|
}
|
|
507
756
|
this.dataStoresSinceLastGC = [];
|
|
@@ -577,7 +826,7 @@ class DataStores {
|
|
|
577
826
|
// Delete the contexts of unused data stores.
|
|
578
827
|
this.contexts.delete(dataStoreId);
|
|
579
828
|
// Delete the summarizer node of the unused data stores.
|
|
580
|
-
this.
|
|
829
|
+
this.parentContext.deleteChildSummarizerNode?.(dataStoreId);
|
|
581
830
|
}
|
|
582
831
|
}
|
|
583
832
|
/**
|
|
@@ -614,7 +863,7 @@ class DataStores {
|
|
|
614
863
|
// Delete the contexts of sweep ready data stores.
|
|
615
864
|
this.contexts.delete(dataStoreId);
|
|
616
865
|
// Delete the summarizer node of the sweep ready data stores.
|
|
617
|
-
this.
|
|
866
|
+
this.parentContext.deleteChildSummarizerNode?.(dataStoreId);
|
|
618
867
|
}
|
|
619
868
|
return Array.from(sweepReadyDataStoreRoutes);
|
|
620
869
|
}
|
|
@@ -678,17 +927,60 @@ class DataStores {
|
|
|
678
927
|
// Data stores paths are of the format "/dataStoreId".
|
|
679
928
|
// Sub data store paths are of the format "/dataStoreId/subPath/...".
|
|
680
929
|
if (pathParts.length === 2) {
|
|
681
|
-
return
|
|
930
|
+
return index_js_1.GCNodeType.DataStore;
|
|
931
|
+
}
|
|
932
|
+
return index_js_1.GCNodeType.SubDataStore;
|
|
933
|
+
}
|
|
934
|
+
internalId(maybeAlias) {
|
|
935
|
+
return this.aliases.get(maybeAlias) ?? maybeAlias;
|
|
936
|
+
}
|
|
937
|
+
async request(request) {
|
|
938
|
+
const requestParser = runtime_utils_1.RequestParser.create(request);
|
|
939
|
+
const id = requestParser.pathParts[0];
|
|
940
|
+
// Differentiate between requesting the dataStore directly, or one of its children
|
|
941
|
+
const requestForChild = !requestParser.isLeaf(1);
|
|
942
|
+
const headerData = {};
|
|
943
|
+
if (typeof request.headers?.[RuntimeHeaders.wait] === "boolean") {
|
|
944
|
+
headerData.wait = request.headers[RuntimeHeaders.wait];
|
|
945
|
+
}
|
|
946
|
+
if (typeof request.headers?.[RuntimeHeaders.viaHandle] === "boolean") {
|
|
947
|
+
headerData.viaHandle = request.headers[RuntimeHeaders.viaHandle];
|
|
948
|
+
}
|
|
949
|
+
if (typeof request.headers?.[exports.AllowTombstoneRequestHeaderKey] === "boolean") {
|
|
950
|
+
headerData.allowTombstone = request.headers[exports.AllowTombstoneRequestHeaderKey];
|
|
682
951
|
}
|
|
683
|
-
|
|
952
|
+
if (typeof request.headers?.[exports.AllowInactiveRequestHeaderKey] === "boolean") {
|
|
953
|
+
headerData.allowInactive = request.headers[exports.AllowInactiveRequestHeaderKey];
|
|
954
|
+
}
|
|
955
|
+
// We allow Tombstone requests for sub-DataStore objects
|
|
956
|
+
if (requestForChild) {
|
|
957
|
+
headerData.allowTombstone = true;
|
|
958
|
+
}
|
|
959
|
+
await this.waitIfPendingAlias(id);
|
|
960
|
+
const internalId = this.internalId(id);
|
|
961
|
+
const dataStoreContext = await this.getDataStore(internalId, headerData);
|
|
962
|
+
// Remove query params, leading and trailing slashes from the url. This is done to make sure the format is
|
|
963
|
+
// the same as GC nodes id.
|
|
964
|
+
const urlWithoutQuery = (0, index_js_1.trimLeadingAndTrailingSlashes)(request.url.split("?")[0]);
|
|
965
|
+
// Get the initial snapshot details which contain the data store package path.
|
|
966
|
+
const details = await dataStoreContext.getInitialSnapshotDetails();
|
|
967
|
+
// Note that this will throw if the data store is inactive or tombstoned and throwing on incorrect usage
|
|
968
|
+
// is configured.
|
|
969
|
+
this.gcNodeUpdated(`/${urlWithoutQuery}`, "Loaded", undefined /* timestampMs */, details.pkg, request, headerData);
|
|
970
|
+
const dataStore = await dataStoreContext.realize();
|
|
971
|
+
const subRequest = requestParser.createSubRequest(1);
|
|
972
|
+
// We always expect createSubRequest to include a leading slash, but asserting here to protect against
|
|
973
|
+
// unintentionally modifying the url if that changes.
|
|
974
|
+
(0, core_utils_1.assert)(subRequest.url.startsWith("/"), 0x126 /* "Expected createSubRequest url to include a leading slash" */);
|
|
975
|
+
return dataStore.request(subRequest);
|
|
684
976
|
}
|
|
685
977
|
}
|
|
686
|
-
exports.
|
|
978
|
+
exports.ChannelCollection = ChannelCollection;
|
|
687
979
|
function getSummaryForDatastores(snapshot, metadata) {
|
|
688
980
|
if (!snapshot) {
|
|
689
981
|
return undefined;
|
|
690
982
|
}
|
|
691
|
-
if ((0,
|
|
983
|
+
if ((0, index_js_2.rootHasIsolatedChannels)(metadata)) {
|
|
692
984
|
const datastoresSnapshot = snapshot.trees[runtime_definitions_1.channelsTreeName];
|
|
693
985
|
(0, core_utils_1.assert)(!!datastoresSnapshot, 0x168 /* Expected tree in snapshot not found */);
|
|
694
986
|
return datastoresSnapshot;
|
|
@@ -697,7 +989,7 @@ function getSummaryForDatastores(snapshot, metadata) {
|
|
|
697
989
|
// back-compat: strip out all non-datastore paths before giving to DataStores object.
|
|
698
990
|
const datastoresTrees = {};
|
|
699
991
|
for (const [key, value] of Object.entries(snapshot.trees)) {
|
|
700
|
-
if (!
|
|
992
|
+
if (!index_js_2.nonDataStorePaths.includes(key)) {
|
|
701
993
|
datastoresTrees[key] = value;
|
|
702
994
|
}
|
|
703
995
|
}
|
|
@@ -710,6 +1002,8 @@ function getSummaryForDatastores(snapshot, metadata) {
|
|
|
710
1002
|
exports.getSummaryForDatastores = getSummaryForDatastores;
|
|
711
1003
|
/**
|
|
712
1004
|
* Traverse this op's contents and detect any outbound routes that were added by this op.
|
|
1005
|
+
*
|
|
1006
|
+
* @internal
|
|
713
1007
|
*/
|
|
714
1008
|
function detectOutboundReferences(envelope, addedOutboundReference) {
|
|
715
1009
|
// These will be built up as we traverse the envelope contents
|
|
@@ -739,4 +1033,26 @@ function detectOutboundReferences(envelope, addedOutboundReference) {
|
|
|
739
1033
|
outboundPaths.forEach((toPath) => addedOutboundReference(fromPath, toPath));
|
|
740
1034
|
}
|
|
741
1035
|
exports.detectOutboundReferences = detectOutboundReferences;
|
|
742
|
-
|
|
1036
|
+
/** @internal */
|
|
1037
|
+
class ChannelCollectionFactory {
|
|
1038
|
+
constructor(registryEntries,
|
|
1039
|
+
// ADO:7302 We need a better type here
|
|
1040
|
+
provideEntryPoint) {
|
|
1041
|
+
this.provideEntryPoint = provideEntryPoint;
|
|
1042
|
+
this.type = "ChannelCollectionChannel";
|
|
1043
|
+
this.IFluidDataStoreRegistry = new dataStoreRegistry_js_1.FluidDataStoreRegistry(registryEntries);
|
|
1044
|
+
}
|
|
1045
|
+
get IFluidDataStoreFactory() {
|
|
1046
|
+
return this;
|
|
1047
|
+
}
|
|
1048
|
+
async instantiateDataStore(context, _existing) {
|
|
1049
|
+
const runtime = new ChannelCollection(context.baseSnapshot, context, // parentContext
|
|
1050
|
+
context.logger, () => { }, // gcNodeUpdated
|
|
1051
|
+
(_nodePath) => false, // isDataStoreDeleted
|
|
1052
|
+
new Map(), // aliasMap
|
|
1053
|
+
this.provideEntryPoint);
|
|
1054
|
+
return runtime;
|
|
1055
|
+
}
|
|
1056
|
+
}
|
|
1057
|
+
exports.ChannelCollectionFactory = ChannelCollectionFactory;
|
|
1058
|
+
//# sourceMappingURL=channelCollection.js.map
|