@fluidframework/container-runtime 2.0.0-dev-rc.1.0.0.232845 → 2.0.0-dev-rc.2.0.0.246488
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.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 +426 -33
- 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.d.ts +0 -5
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +0 -12
- package/dist/blobManager.js.map +1 -1
- package/dist/channelCollection.d.ts +226 -0
- package/dist/channelCollection.d.ts.map +1 -0
- package/dist/{dataStores.js → channelCollection.js} +455 -150
- 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 +128 -48
- package/dist/container-runtime-beta.d.ts +67 -9
- package/dist/container-runtime-public.d.ts +67 -9
- package/dist/container-runtime-untrimmed.d.ts +692 -49
- 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 +81 -64
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +522 -379
- 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 +118 -41
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +248 -159
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts +2 -1
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js +1 -0
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/dataStoreRegistry.d.ts +4 -0
- package/dist/dataStoreRegistry.d.ts.map +1 -1
- package/dist/dataStoreRegistry.js +2 -2
- package/dist/dataStoreRegistry.js.map +1 -1
- package/dist/deltaManagerSummarizerProxy.d.ts +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 +12 -6
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +116 -78
- 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 +30 -23
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +22 -13
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js +7 -4
- 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 +6 -7
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +20 -18
- 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 +40 -39
- package/dist/gc/index.js.map +1 -1
- package/dist/index.d.ts +11 -21
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -42
- package/dist/index.js.map +1 -1
- package/dist/messageTypes.d.ts +3 -3
- 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 +32 -18
- 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 +7 -4
- 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 +9 -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.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js +12 -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 +5 -4
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +47 -32
- 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 +16 -5
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js +40 -10
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +9 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +3 -4
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +12 -12
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +9 -20
- 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 -6
- package/lib/blobManager.d.ts.map +1 -0
- package/lib/{blobManager.mjs → blobManager.js} +1 -13
- package/lib/blobManager.js.map +1 -0
- package/lib/channelCollection.d.ts +226 -0
- package/lib/channelCollection.d.ts.map +1 -0
- package/lib/{dataStores.mjs → channelCollection.js} +442 -140
- 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} +128 -48
- package/lib/{container-runtime-beta.d.mts → container-runtime-beta.d.ts} +67 -9
- package/lib/{container-runtime-public.d.mts → container-runtime-public.d.ts} +67 -9
- package/lib/{container-runtime-untrimmed.d.mts → container-runtime-untrimmed.d.ts} +692 -49
- 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} +86 -65
- package/lib/containerRuntime.d.ts.map +1 -0
- package/lib/{containerRuntime.mjs → containerRuntime.js} +444 -303
- 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} +119 -42
- package/lib/dataStoreContext.d.ts.map +1 -0
- package/lib/{dataStoreContext.mjs → dataStoreContext.js} +240 -151
- package/lib/dataStoreContext.js.map +1 -0
- package/lib/{dataStoreContexts.d.mts → dataStoreContexts.d.ts} +3 -2
- package/lib/dataStoreContexts.d.ts.map +1 -0
- package/lib/{dataStoreContexts.mjs → dataStoreContexts.js} +2 -1
- package/lib/dataStoreContexts.js.map +1 -0
- package/lib/{dataStoreRegistry.d.mts → dataStoreRegistry.d.ts} +5 -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} +13 -7
- package/lib/gc/garbageCollection.d.ts.map +1 -0
- package/lib/gc/{garbageCollection.mjs → garbageCollection.js} +79 -41
- 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} +14 -7
- package/lib/gc/gcConfigs.js.map +1 -0
- package/lib/gc/{gcDefinitions.d.mts → gcDefinitions.d.ts} +23 -14
- package/lib/gc/gcDefinitions.d.ts.map +1 -0
- package/lib/gc/{gcDefinitions.mjs → gcDefinitions.js} +7 -4
- 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} +7 -8
- package/lib/gc/gcTelemetry.d.ts.map +1 -0
- package/lib/gc/{gcTelemetry.mjs → gcTelemetry.js} +5 -3
- 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.ts +13 -0
- 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} +12 -22
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +15 -0
- package/lib/index.js.map +1 -0
- package/lib/{messageTypes.d.mts → messageTypes.d.ts} +4 -4
- 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} +24 -10
- 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} +7 -4
- 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} +7 -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} +6 -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} +6 -5
- package/lib/summary/runningSummarizer.d.ts.map +1 -0
- package/lib/summary/{runningSummarizer.mjs → runningSummarizer.js} +41 -26
- 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} +17 -6
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNode.mjs → summarizerNode.js} +34 -4
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeUtils.d.mts → summarizerNodeUtils.d.ts} +10 -2
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeUtils.mjs → summarizerNodeUtils.js} +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeWithGc.d.mts → summarizerNodeWithGc.d.ts} +4 -5
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeWithGc.mjs → summarizerNodeWithGc.js} +7 -7
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
- package/lib/summary/{summarizerTypes.d.mts → summarizerTypes.d.ts} +10 -21
- 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 +138 -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 +771 -0
- package/lib/test/dataStoreContext.spec.js.map +1 -0
- package/lib/test/dataStoreCreation.spec.js +303 -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 +1464 -0
- package/lib/test/gc/garbageCollection.spec.js.map +1 -0
- package/lib/test/gc/gcConfigs.spec.js +689 -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 +390 -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 +101 -88
- package/src/batchTracker.ts +1 -1
- package/src/blobManager.ts +1 -15
- package/src/{dataStores.ts → channelCollection.ts} +629 -178
- package/src/connectionTelemetry.ts +42 -3
- package/src/containerHandleContext.ts +1 -1
- package/src/containerRuntime.ts +626 -430
- package/src/dataStore.ts +16 -15
- package/src/dataStoreContext.ts +376 -216
- package/src/dataStoreContexts.ts +2 -1
- package/src/dataStoreRegistry.ts +1 -0
- package/src/deltaManagerSummarizerProxy.ts +132 -7
- package/src/gc/garbageCollection.ts +84 -44
- package/src/gc/gcConfigs.ts +17 -7
- package/src/gc/gcDefinitions.ts +23 -13
- 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 +9 -7
- package/src/gc/gcUnreferencedStateTracker.ts +1 -1
- package/src/gc/index.ts +10 -9
- package/src/index.ts +28 -27
- package/src/messageTypes.ts +3 -3
- 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 +43 -16
- package/src/opLifecycle/remoteMessageProcessor.ts +10 -6
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +19 -13
- package/src/scheduleManager.ts +5 -4
- package/src/summary/index.ts +13 -12
- package/src/summary/orderedClientElection.ts +2 -1
- package/src/summary/runWhileConnectedCoordinator.ts +1 -1
- package/src/summary/runningSummarizer.ts +52 -32
- 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 +50 -5
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +14 -1
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +11 -11
- package/src/summary/summarizerTypes.ts +11 -23
- 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 -151
- 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 -151
- 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 +0 -13
- 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 -25
- 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,150 @@ 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
|
+
setChannelDirty: (address) => {
|
|
111
|
+
return context.setChannelDirty(address);
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
exports.wrapContext = wrapContext;
|
|
116
|
+
/**
|
|
117
|
+
* Creates a wrapper of a {@link IFluidParentContext} to be provided to the inner datastore channels.
|
|
118
|
+
* The wrapper will have the submit methods overwritten with the appropriate id as the destination address.
|
|
119
|
+
*
|
|
120
|
+
* @param id - the id of the channel
|
|
121
|
+
* @param parentContext - the {@link IFluidParentContext} to wrap
|
|
122
|
+
* @returns A wrapped {@link IFluidParentContext}
|
|
123
|
+
*/
|
|
124
|
+
function wrapContextForInnerChannel(id, parentContext) {
|
|
125
|
+
const context = wrapContext(parentContext);
|
|
126
|
+
context.submitMessage = (type, content, localOpMetadata) => {
|
|
127
|
+
const fluidDataStoreContent = {
|
|
128
|
+
content,
|
|
129
|
+
type,
|
|
130
|
+
};
|
|
131
|
+
const envelope = {
|
|
132
|
+
address: id,
|
|
133
|
+
contents: fluidDataStoreContent,
|
|
134
|
+
};
|
|
135
|
+
parentContext.submitMessage(messageTypes_js_1.ContainerMessageType.FluidDataStoreOp, envelope, localOpMetadata);
|
|
136
|
+
};
|
|
137
|
+
context.submitSignal = (type, contents, targetClientId) => {
|
|
138
|
+
const envelope = {
|
|
139
|
+
address: id,
|
|
140
|
+
contents,
|
|
141
|
+
};
|
|
142
|
+
parentContext.submitSignal(type, envelope, targetClientId);
|
|
143
|
+
};
|
|
144
|
+
return context;
|
|
145
|
+
}
|
|
146
|
+
exports.wrapContextForInnerChannel = wrapContextForInnerChannel;
|
|
23
147
|
/**
|
|
24
148
|
* This class encapsulates data store handling. Currently it is only used by the container runtime,
|
|
25
149
|
* but eventually could be hosted on any channel once we formalize the channel api boundary.
|
|
150
|
+
* @internal
|
|
26
151
|
*/
|
|
27
|
-
class
|
|
28
|
-
constructor(baseSnapshot,
|
|
152
|
+
class ChannelCollection {
|
|
153
|
+
constructor(baseSnapshot, parentContext, baseLogger, gcNodeUpdated, isDataStoreDeleted, aliasMap, provideEntryPoint) {
|
|
29
154
|
this.baseSnapshot = baseSnapshot;
|
|
30
|
-
this.
|
|
31
|
-
this.submitAttachFn = submitAttachFn;
|
|
32
|
-
this.getCreateChildSummarizerNodeFn = getCreateChildSummarizerNodeFn;
|
|
33
|
-
this.deleteChildSummarizerNodeFn = deleteChildSummarizerNodeFn;
|
|
155
|
+
this.parentContext = parentContext;
|
|
34
156
|
this.gcNodeUpdated = gcNodeUpdated;
|
|
35
157
|
this.isDataStoreDeleted = isDataStoreDeleted;
|
|
36
158
|
this.aliasMap = aliasMap;
|
|
37
|
-
this.contexts = contexts;
|
|
38
159
|
// Stores tracked by the Domain
|
|
39
160
|
this.pendingAttach = new Map();
|
|
40
161
|
// 0.24 back-compat attachingBeforeSummary
|
|
@@ -44,9 +165,13 @@ class DataStores {
|
|
|
44
165
|
// root data stores that are added.
|
|
45
166
|
this.dataStoresSinceLastGC = [];
|
|
46
167
|
this.pendingAliasMap = new Map();
|
|
168
|
+
/** For sampling. Only log once per container */
|
|
169
|
+
this.shouldSendAttachLog = true;
|
|
47
170
|
this.dispose = () => this.disposeOnce.value;
|
|
48
171
|
this.mc = (0, telemetry_utils_1.createChildMonitoringContext)({ logger: baseLogger });
|
|
49
|
-
this.
|
|
172
|
+
this.contexts = new dataStoreContexts_js_1.DataStoreContexts(baseLogger);
|
|
173
|
+
this.containerRuntimeHandle = new datastore_1.FluidObjectHandle(this.parentContext, "/", this.parentContext.IFluidHandleContext);
|
|
174
|
+
this.entryPoint = new datastore_1.FluidObjectHandle(new core_utils_1.LazyPromise(async () => provideEntryPoint(this)), "", this.parentContext.IFluidHandleContext);
|
|
50
175
|
// Extract stores stored inside the snapshot
|
|
51
176
|
const fluidDataStores = new Map();
|
|
52
177
|
if (baseSnapshot) {
|
|
@@ -63,17 +188,17 @@ class DataStores {
|
|
|
63
188
|
unreferencedDataStoreCount++;
|
|
64
189
|
}
|
|
65
190
|
// If we have a detached container, then create local data store contexts.
|
|
66
|
-
if (this.
|
|
67
|
-
dataStoreContext = new
|
|
191
|
+
if (this.parentContext.attachState !== container_definitions_1.AttachState.Detached) {
|
|
192
|
+
dataStoreContext = new dataStoreContext_js_1.RemoteFluidDataStoreContext({
|
|
68
193
|
id: key,
|
|
69
194
|
snapshotTree: value,
|
|
70
|
-
|
|
71
|
-
storage: this.
|
|
72
|
-
scope: this.
|
|
73
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
195
|
+
parentContext: this.wrapContextForInnerChannel(key),
|
|
196
|
+
storage: this.parentContext.storage,
|
|
197
|
+
scope: this.parentContext.scope,
|
|
198
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(key, {
|
|
74
199
|
type: runtime_definitions_1.CreateSummarizerNodeSource.FromSummary,
|
|
75
200
|
}),
|
|
76
|
-
|
|
201
|
+
loadingGroupId: value.groupId,
|
|
77
202
|
});
|
|
78
203
|
}
|
|
79
204
|
else {
|
|
@@ -81,18 +206,17 @@ class DataStores {
|
|
|
81
206
|
throw new telemetry_utils_1.LoggingError("Snapshot should be there to load from!!");
|
|
82
207
|
}
|
|
83
208
|
const snapshotTree = value;
|
|
84
|
-
dataStoreContext = new
|
|
209
|
+
dataStoreContext = new dataStoreContext_js_1.LocalFluidDataStoreContext({
|
|
85
210
|
id: key,
|
|
86
211
|
pkg: undefined,
|
|
87
|
-
|
|
88
|
-
storage: this.
|
|
89
|
-
scope: this.
|
|
90
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
212
|
+
parentContext: this.wrapContextForInnerChannel(key),
|
|
213
|
+
storage: this.parentContext.storage,
|
|
214
|
+
scope: this.parentContext.scope,
|
|
215
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(key, {
|
|
91
216
|
type: runtime_definitions_1.CreateSummarizerNodeSource.FromSummary,
|
|
92
217
|
}),
|
|
93
218
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(key),
|
|
94
219
|
snapshotTree,
|
|
95
|
-
isRootDataStore: undefined,
|
|
96
220
|
});
|
|
97
221
|
}
|
|
98
222
|
this.contexts.addBoundOrRemoted(dataStoreContext);
|
|
@@ -112,13 +236,45 @@ class DataStores {
|
|
|
112
236
|
const pendingAliasPromise = this.pendingAliases.get(maybeAlias);
|
|
113
237
|
return pendingAliasPromise ?? "Success";
|
|
114
238
|
}
|
|
239
|
+
wrapContextForInnerChannel(id) {
|
|
240
|
+
return wrapContextForInnerChannel(id, this.parentContext);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* IFluidDataStoreChannel.makeVisibleAndAttachGraph implementation
|
|
244
|
+
* Not clear when it would be called and what it should do.
|
|
245
|
+
* Currently this API is called by context only for root data stores.
|
|
246
|
+
*/
|
|
247
|
+
makeVisibleAndAttachGraph() {
|
|
248
|
+
this.parentContext.makeLocallyVisible();
|
|
249
|
+
}
|
|
115
250
|
processAttachMessage(message, local) {
|
|
116
251
|
const attachMessage = message.contents;
|
|
117
252
|
this.dataStoresSinceLastGC.push(attachMessage.id);
|
|
253
|
+
// We need to process the GC Data for both local and remote attach messages
|
|
254
|
+
const foundGCData = (0, runtime_utils_1.processAttachMessageGCData)(attachMessage.snapshot, (nodeId, toPath) => {
|
|
255
|
+
// nodeId is the relative path under the node being attached. Always starts with "/", but no trailing "/" after an id
|
|
256
|
+
const fromPath = `/${attachMessage.id}${nodeId === "/" ? "" : nodeId}`;
|
|
257
|
+
this.parentContext.addedGCOutboundReference?.({ absolutePath: fromPath }, { absolutePath: toPath });
|
|
258
|
+
});
|
|
259
|
+
// Only log once per container to avoid noise/cost.
|
|
260
|
+
// Allows longitudinal tracking of various state (e.g. foundGCData), and some sampled details
|
|
261
|
+
if (this.shouldSendAttachLog) {
|
|
262
|
+
this.shouldSendAttachLog = false;
|
|
263
|
+
this.mc.logger.sendTelemetryEvent({
|
|
264
|
+
eventName: "dataStoreAttachMessage_sampled",
|
|
265
|
+
...(0, telemetry_utils_1.tagCodeArtifacts)({ id: attachMessage.id, pkg: attachMessage.type }),
|
|
266
|
+
details: {
|
|
267
|
+
local,
|
|
268
|
+
snapshot: !!attachMessage.snapshot,
|
|
269
|
+
foundGCData,
|
|
270
|
+
},
|
|
271
|
+
...(0, telemetry_utils_1.extractSafePropertiesFromMessage)(message),
|
|
272
|
+
});
|
|
273
|
+
}
|
|
118
274
|
// The local object has already been attached
|
|
119
275
|
if (local) {
|
|
120
276
|
(0, core_utils_1.assert)(this.pendingAttach.has(attachMessage.id), 0x15e /* "Local object does not have matching attach message id" */);
|
|
121
|
-
this.contexts.get(attachMessage.id)?.
|
|
277
|
+
this.contexts.get(attachMessage.id)?.setAttachState(container_definitions_1.AttachState.Attached);
|
|
122
278
|
this.pendingAttach.delete(attachMessage.id);
|
|
123
279
|
return;
|
|
124
280
|
}
|
|
@@ -141,18 +297,18 @@ class DataStores {
|
|
|
141
297
|
// Include the type of attach message which is the pkg of the store to be
|
|
142
298
|
// used by RemoteFluidDataStoreContext in case it is not in the snapshot.
|
|
143
299
|
const pkg = [attachMessage.type];
|
|
144
|
-
const remoteFluidDataStoreContext = new
|
|
300
|
+
const remoteFluidDataStoreContext = new dataStoreContext_js_1.RemoteFluidDataStoreContext({
|
|
145
301
|
id: attachMessage.id,
|
|
146
302
|
snapshotTree,
|
|
147
|
-
|
|
148
|
-
storage: new
|
|
149
|
-
scope: this.
|
|
150
|
-
|
|
151
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(attachMessage.id, {
|
|
303
|
+
parentContext: this.wrapContextForInnerChannel(attachMessage.id),
|
|
304
|
+
storage: new storageServiceWithAttachBlobs_js_1.StorageServiceWithAttachBlobs(this.parentContext.storage, flatAttachBlobs),
|
|
305
|
+
scope: this.parentContext.scope,
|
|
306
|
+
loadingGroupId: attachMessage.snapshot?.groupId,
|
|
307
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(attachMessage.id, {
|
|
152
308
|
type: runtime_definitions_1.CreateSummarizerNodeSource.FromAttach,
|
|
153
309
|
sequenceNumber: message.sequenceNumber,
|
|
154
310
|
snapshot: attachMessage.snapshot ?? {
|
|
155
|
-
entries: [(0,
|
|
311
|
+
entries: [(0, dataStoreContext_js_1.createAttributesBlob)(pkg, true /* isRootDataStore */)],
|
|
156
312
|
},
|
|
157
313
|
}),
|
|
158
314
|
pkg,
|
|
@@ -161,46 +317,58 @@ class DataStores {
|
|
|
161
317
|
}
|
|
162
318
|
processAliasMessage(message, localOpMetadata, local) {
|
|
163
319
|
const aliasMessage = message.contents;
|
|
164
|
-
if (!(0,
|
|
320
|
+
if (!(0, dataStore_js_1.isDataStoreAliasMessage)(aliasMessage)) {
|
|
165
321
|
throw new telemetry_utils_1.DataCorruptionError("malformedDataStoreAliasMessage", {
|
|
166
322
|
...(0, telemetry_utils_1.extractSafePropertiesFromMessage)(message),
|
|
167
323
|
});
|
|
168
324
|
}
|
|
169
325
|
const resolve = localOpMetadata;
|
|
170
|
-
const aliasResult = this.processAliasMessageCore(aliasMessage);
|
|
326
|
+
const aliasResult = this.processAliasMessageCore(aliasMessage.internalId, aliasMessage.alias);
|
|
171
327
|
if (local) {
|
|
172
328
|
resolve(aliasResult);
|
|
173
329
|
}
|
|
174
330
|
}
|
|
175
|
-
processAliasMessageCore(
|
|
176
|
-
if (this.alreadyProcessed(
|
|
331
|
+
processAliasMessageCore(internalId, alias) {
|
|
332
|
+
if (this.alreadyProcessed(alias)) {
|
|
177
333
|
return false;
|
|
178
334
|
}
|
|
179
|
-
const context = this.contexts.get(
|
|
335
|
+
const context = this.contexts.get(internalId);
|
|
180
336
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
181
337
|
// corruption in case a deleted data store accidentally submitted a signal.
|
|
182
|
-
if (this.checkAndLogIfDeleted(
|
|
338
|
+
if (this.checkAndLogIfDeleted(internalId, context, "Changed", "processAliasMessageCore")) {
|
|
183
339
|
return false;
|
|
184
340
|
}
|
|
185
341
|
if (context === undefined) {
|
|
186
342
|
this.mc.logger.sendErrorEvent({
|
|
187
343
|
eventName: "AliasFluidDataStoreNotFound",
|
|
188
|
-
fluidDataStoreId:
|
|
344
|
+
fluidDataStoreId: internalId,
|
|
189
345
|
});
|
|
190
346
|
return false;
|
|
191
347
|
}
|
|
192
|
-
const handle = new datastore_1.FluidObjectHandle(context,
|
|
193
|
-
this.
|
|
194
|
-
this.aliasMap.set(
|
|
348
|
+
const handle = new datastore_1.FluidObjectHandle(context, internalId, this.parentContext.IFluidHandleContext);
|
|
349
|
+
this.parentContext.addedGCOutboundReference?.(this.containerRuntimeHandle, handle);
|
|
350
|
+
this.aliasMap.set(alias, context.id);
|
|
195
351
|
context.setInMemoryRoot();
|
|
196
352
|
return true;
|
|
197
353
|
}
|
|
198
354
|
alreadyProcessed(id) {
|
|
199
355
|
return this.aliasMap.get(id) !== undefined || this.contexts.get(id) !== undefined;
|
|
200
356
|
}
|
|
357
|
+
/** Package up the context's attach summary etc into an IAttachMessage */
|
|
358
|
+
generateAttachMessage(localContext) {
|
|
359
|
+
const { attachSummary } = localContext.getAttachData(/* includeGCData: */ true);
|
|
360
|
+
const type = localContext.packagePath[localContext.packagePath.length - 1];
|
|
361
|
+
// Attach message needs the summary in ITree format. Convert the ISummaryTree into an ITree.
|
|
362
|
+
const snapshot = (0, runtime_utils_1.convertSummaryTreeToITree)(attachSummary.summary);
|
|
363
|
+
return {
|
|
364
|
+
id: localContext.id,
|
|
365
|
+
snapshot,
|
|
366
|
+
type,
|
|
367
|
+
};
|
|
368
|
+
}
|
|
201
369
|
/**
|
|
202
|
-
* Make the data
|
|
203
|
-
* bound list. This data store can now be reached from the root.
|
|
370
|
+
* Make the data store locally visible in the container graph by moving the data store context from unbound to
|
|
371
|
+
* bound list and submitting the attach message. This data store can now be reached from the root.
|
|
204
372
|
* @param id - The id of the data store context to make visible.
|
|
205
373
|
*/
|
|
206
374
|
makeDataStoreLocallyVisible(id) {
|
|
@@ -211,50 +379,72 @@ class DataStores {
|
|
|
211
379
|
* globally visible. Move it to attaching state and send an "attach" op for it.
|
|
212
380
|
* If the container is detached, this data store will be part of the summary that makes the container attached.
|
|
213
381
|
*/
|
|
214
|
-
if (this.
|
|
215
|
-
localContext.
|
|
216
|
-
|
|
217
|
-
this.pendingAttach.set(id, message);
|
|
218
|
-
this.submitAttachFn(message);
|
|
219
|
-
this.attachOpFiredForDataStore.add(id);
|
|
382
|
+
if (this.parentContext.attachState !== container_definitions_1.AttachState.Detached) {
|
|
383
|
+
localContext.setAttachState(container_definitions_1.AttachState.Attaching);
|
|
384
|
+
this.submitAttachChannelOp(localContext);
|
|
220
385
|
}
|
|
221
386
|
this.contexts.bind(id);
|
|
222
387
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
388
|
+
submitAttachChannelOp(localContext) {
|
|
389
|
+
const message = this.generateAttachMessage(localContext);
|
|
390
|
+
this.pendingAttach.set(localContext.id, message);
|
|
391
|
+
this.parentContext.submitMessage(messageTypes_js_1.ContainerMessageType.Attach, message, undefined);
|
|
392
|
+
this.attachOpFiredForDataStore.add(localContext.id);
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Generate compact internal DataStore ID.
|
|
396
|
+
*
|
|
397
|
+
* A note about namespace and name collisions:
|
|
398
|
+
* This code assumes that that's the only way to generate internal IDs, and that it's Ok for this namespace to overlap with
|
|
399
|
+
* user-provided alias names namespace.
|
|
400
|
+
* There are two scenarios where it could cause trouble:
|
|
401
|
+
* 1) Old files, where (already removed) CreateRoot*DataStore*() API was used, and thus internal name of data store
|
|
402
|
+
* was provided by user. Such files may experience name collision with future data stores that receive a name generated
|
|
403
|
+
* by this function.
|
|
404
|
+
* 2) Much less likely, but if it happen that internal ID (generated by this function) is exactly the same as alias name
|
|
405
|
+
* that user might use in the future, them ContainerRuntime.getAliasedDataStoreEntryPoint() or
|
|
406
|
+
* ContainerRuntime.getDataStoreFromRequest() could return a data store with internalID matching user request, even though
|
|
407
|
+
* user expected some other data store (that would receive alias later).
|
|
408
|
+
* Please note that above mentioned functions have the implementation they have (allowing #2) due to #1.
|
|
409
|
+
*/
|
|
410
|
+
createDataStoreId() {
|
|
411
|
+
// We use three non-overlapping namespaces:
|
|
412
|
+
// - detached state: even numbers
|
|
413
|
+
// - attached state: odd numbers
|
|
414
|
+
// - uuids
|
|
415
|
+
// In first two cases we will encode result as strings in more compact form.
|
|
416
|
+
if (this.parentContext.attachState === container_definitions_1.AttachState.Detached) {
|
|
417
|
+
// container is detached, only one client observes content, no way to hit collisions with other clients.
|
|
418
|
+
return (0, runtime_utils_1.encodeCompactIdToString)(2 * this.contexts.size);
|
|
419
|
+
}
|
|
420
|
+
const id = this.parentContext.containerRuntime.generateDocumentUniqueId();
|
|
421
|
+
if (typeof id === "number") {
|
|
422
|
+
return (0, runtime_utils_1.encodeCompactIdToString)(2 * id + 1);
|
|
423
|
+
}
|
|
424
|
+
return id;
|
|
425
|
+
}
|
|
426
|
+
createDetachedDataStore(pkg, loadingGroupId) {
|
|
427
|
+
return this.createContext(this.createDataStoreId(), pkg, dataStoreContext_js_1.LocalDetachedFluidDataStoreContext, undefined, // props
|
|
428
|
+
loadingGroupId);
|
|
241
429
|
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
430
|
+
createDataStoreContext(pkg, props, loadingGroupId) {
|
|
431
|
+
return this.createContext(this.createDataStoreId(), pkg, dataStoreContext_js_1.LocalFluidDataStoreContext, props, loadingGroupId);
|
|
432
|
+
}
|
|
433
|
+
createContext(id, pkg, contextCtor, createProps, loadingGroupId) {
|
|
434
|
+
const context = new contextCtor({
|
|
245
435
|
id,
|
|
246
436
|
pkg,
|
|
247
|
-
|
|
248
|
-
storage: this.
|
|
249
|
-
scope: this.
|
|
250
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
437
|
+
parentContext: this.wrapContextForInnerChannel(id),
|
|
438
|
+
storage: this.parentContext.storage,
|
|
439
|
+
scope: this.parentContext.scope,
|
|
440
|
+
createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(id, {
|
|
251
441
|
type: runtime_definitions_1.CreateSummarizerNodeSource.Local,
|
|
252
442
|
}),
|
|
253
443
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
|
|
254
444
|
snapshotTree: undefined,
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
445
|
+
createProps,
|
|
446
|
+
loadingGroupId,
|
|
447
|
+
channelToDataStoreFn: (channel) => (0, dataStore_js_1.channelToDataStore)(channel, id, this, (0, telemetry_utils_1.createChildLogger)({ logger: this.parentContext.logger })),
|
|
258
448
|
});
|
|
259
449
|
this.contexts.addUnbound(context);
|
|
260
450
|
return context;
|
|
@@ -262,7 +452,20 @@ class DataStores {
|
|
|
262
452
|
get disposed() {
|
|
263
453
|
return this.disposeOnce.evaluated;
|
|
264
454
|
}
|
|
265
|
-
|
|
455
|
+
reSubmit(type, content, localOpMetadata) {
|
|
456
|
+
switch (type) {
|
|
457
|
+
case messageTypes_js_1.ContainerMessageType.Attach:
|
|
458
|
+
case messageTypes_js_1.ContainerMessageType.Alias:
|
|
459
|
+
this.parentContext.submitMessage(type, content, localOpMetadata);
|
|
460
|
+
return;
|
|
461
|
+
case messageTypes_js_1.ContainerMessageType.FluidDataStoreOp:
|
|
462
|
+
return this.reSubmitChannelOp(type, content, localOpMetadata);
|
|
463
|
+
default:
|
|
464
|
+
(0, core_utils_1.assert)(false, 0x907 /* unknown op type */);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
reSubmitChannelOp(type, content, localOpMetadata) {
|
|
468
|
+
const envelope = content;
|
|
266
469
|
const context = this.contexts.get(envelope.address);
|
|
267
470
|
// If the data store has been deleted, log an error and throw an error. If there are local changes for a
|
|
268
471
|
// deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
|
|
@@ -273,9 +476,12 @@ class DataStores {
|
|
|
273
476
|
});
|
|
274
477
|
}
|
|
275
478
|
(0, core_utils_1.assert)(!!context, 0x160 /* "There should be a store context for the op" */);
|
|
276
|
-
|
|
479
|
+
const innerContents = envelope.contents;
|
|
480
|
+
context.reSubmit(innerContents.type, innerContents.content, localOpMetadata);
|
|
277
481
|
}
|
|
278
|
-
|
|
482
|
+
rollback(type, content, localOpMetadata) {
|
|
483
|
+
(0, core_utils_1.assert)(type === messageTypes_js_1.ContainerMessageType.FluidDataStoreOp, 0x8e8 /* type */);
|
|
484
|
+
const envelope = content;
|
|
279
485
|
const context = this.contexts.get(envelope.address);
|
|
280
486
|
// If the data store has been deleted, log an error and throw an error. If there are local changes for a
|
|
281
487
|
// deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
|
|
@@ -286,9 +492,23 @@ class DataStores {
|
|
|
286
492
|
});
|
|
287
493
|
}
|
|
288
494
|
(0, core_utils_1.assert)(!!context, 0x2e8 /* "There should be a store context for the op" */);
|
|
289
|
-
|
|
495
|
+
const innerContents = envelope.contents;
|
|
496
|
+
context.rollback(innerContents.type, innerContents.content, localOpMetadata);
|
|
497
|
+
}
|
|
498
|
+
async applyStashedOp(content) {
|
|
499
|
+
const opContents = content;
|
|
500
|
+
switch (opContents.type) {
|
|
501
|
+
case messageTypes_js_1.ContainerMessageType.Attach:
|
|
502
|
+
return this.applyStashedAttachOp(opContents.contents);
|
|
503
|
+
case messageTypes_js_1.ContainerMessageType.Alias:
|
|
504
|
+
return;
|
|
505
|
+
case messageTypes_js_1.ContainerMessageType.FluidDataStoreOp:
|
|
506
|
+
return this.applyStashedChannelChannelOp(opContents.contents);
|
|
507
|
+
default:
|
|
508
|
+
(0, core_utils_1.assert)(false, 0x908 /* unknon type of op */);
|
|
509
|
+
}
|
|
290
510
|
}
|
|
291
|
-
async
|
|
511
|
+
async applyStashedChannelChannelOp(envelope) {
|
|
292
512
|
const context = this.contexts.get(envelope.address);
|
|
293
513
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
294
514
|
// corruption in case the data store that stashed the op is deleted.
|
|
@@ -303,29 +523,61 @@ class DataStores {
|
|
|
303
523
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
304
524
|
this.processAttachMessage({ contents: message }, false);
|
|
305
525
|
}
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
526
|
+
process(message, local, localMessageMetadata, addedOutboundReference) {
|
|
527
|
+
switch (message.type) {
|
|
528
|
+
case messageTypes_js_1.ContainerMessageType.Attach:
|
|
529
|
+
this.processAttachMessage(message, local);
|
|
530
|
+
return;
|
|
531
|
+
case messageTypes_js_1.ContainerMessageType.Alias:
|
|
532
|
+
this.processAliasMessage(message, localMessageMetadata, local);
|
|
533
|
+
return;
|
|
534
|
+
case messageTypes_js_1.ContainerMessageType.FluidDataStoreOp: {
|
|
535
|
+
const envelope = message.contents;
|
|
536
|
+
const innerContents = envelope.contents;
|
|
537
|
+
const transformed = {
|
|
538
|
+
...message,
|
|
539
|
+
type: innerContents.type,
|
|
540
|
+
contents: innerContents.content,
|
|
541
|
+
};
|
|
542
|
+
this.processChannelOp(envelope.address, transformed, local, localMessageMetadata);
|
|
543
|
+
// By default, we use the new behavior of detecting outbound routes here.
|
|
544
|
+
// If this setting is true, then DataStoreContext would be notifying GC instead.
|
|
545
|
+
if (this.mc.config.getBoolean(index_js_1.detectOutboundRoutesViaDDSKey) !== true &&
|
|
546
|
+
addedOutboundReference !== undefined) {
|
|
547
|
+
// Notify GC of any outbound references that were added by this op.
|
|
548
|
+
detectOutboundReferences(envelope.address, transformed.contents, addedOutboundReference);
|
|
549
|
+
}
|
|
550
|
+
break;
|
|
551
|
+
}
|
|
552
|
+
default:
|
|
553
|
+
(0, core_utils_1.assert)(false, 0x8e9 /* unreached */);
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
processChannelOp(address, message, local, localMessageMetadata) {
|
|
557
|
+
const context = this.contexts.get(address);
|
|
310
558
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
311
559
|
// corruption in case a deleted data store accidentally submitted an op.
|
|
312
|
-
if (this.checkAndLogIfDeleted(
|
|
560
|
+
if (this.checkAndLogIfDeleted(address, context, "Changed", "processFluidDataStoreOp")) {
|
|
313
561
|
return;
|
|
314
562
|
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
563
|
+
if (context === undefined) {
|
|
564
|
+
// Former assert 0x162
|
|
565
|
+
throw telemetry_utils_1.DataProcessingError.create("No context for op", "processFluidDataStoreOp", message, {
|
|
566
|
+
local,
|
|
567
|
+
messageDetails: JSON.stringify({
|
|
568
|
+
type: message.type,
|
|
569
|
+
contentType: typeof message.contents,
|
|
570
|
+
}),
|
|
571
|
+
...(0, telemetry_utils_1.tagCodeArtifacts)({ address }),
|
|
572
|
+
});
|
|
322
573
|
}
|
|
574
|
+
context.process(message, local, localMessageMetadata);
|
|
323
575
|
// Notify that a GC node for the data store changed. This is used to detect if a deleted data store is
|
|
324
576
|
// being used.
|
|
325
|
-
this.gcNodeUpdated(`/${
|
|
577
|
+
this.gcNodeUpdated(`/${address}`, "Changed", message.timestamp, context.isLoaded ? context.packagePath : undefined);
|
|
326
578
|
}
|
|
327
579
|
async getDataStore(id, requestHeaderData) {
|
|
328
|
-
const headerData = { ...
|
|
580
|
+
const headerData = { ...containerRuntime_js_1.defaultRuntimeHeaderData, ...requestHeaderData };
|
|
329
581
|
if (this.checkAndLogIfDeleted(id, this.contexts.get(id), "Requested", "getDataStore", requestHeaderData)) {
|
|
330
582
|
// The requested data store has been deleted by gc. Create a 404 response exception.
|
|
331
583
|
const request = { url: id };
|
|
@@ -347,7 +599,7 @@ class DataStores {
|
|
|
347
599
|
if (this.checkAndLogIfDeleted(id, this.contexts.get(id), "Requested", "getDataStoreIfAvailable", requestHeaderData)) {
|
|
348
600
|
return undefined;
|
|
349
601
|
}
|
|
350
|
-
const headerData = { ...
|
|
602
|
+
const headerData = { ...containerRuntime_js_1.defaultRuntimeHeaderData, ...requestHeaderData };
|
|
351
603
|
const context = await this.contexts.getBoundOrRemoted(id, headerData.wait);
|
|
352
604
|
if (context === undefined) {
|
|
353
605
|
return undefined;
|
|
@@ -376,7 +628,10 @@ class DataStores {
|
|
|
376
628
|
});
|
|
377
629
|
return true;
|
|
378
630
|
}
|
|
379
|
-
processSignal(
|
|
631
|
+
processSignal(messageArg, local) {
|
|
632
|
+
const envelope = messageArg.content;
|
|
633
|
+
const fluidDataStoreId = envelope.address;
|
|
634
|
+
const message = { ...messageArg, content: envelope.contents };
|
|
380
635
|
const context = this.contexts.get(fluidDataStoreId);
|
|
381
636
|
// If the data store has been deleted, log an error and ignore this message. This helps prevent document
|
|
382
637
|
// corruption in case a deleted data store accidentally submitted a signal.
|
|
@@ -409,7 +664,7 @@ class DataStores {
|
|
|
409
664
|
fluidDataStoreId,
|
|
410
665
|
}),
|
|
411
666
|
details: JSON.stringify({
|
|
412
|
-
runtimeConnected: this.
|
|
667
|
+
runtimeConnected: this.parentContext.connected,
|
|
413
668
|
connected,
|
|
414
669
|
}),
|
|
415
670
|
}, error);
|
|
@@ -417,11 +672,10 @@ class DataStores {
|
|
|
417
672
|
}
|
|
418
673
|
}
|
|
419
674
|
setAttachState(attachState) {
|
|
420
|
-
const eventName = attachState === container_definitions_1.AttachState.Attaching ? "attaching" : "attached";
|
|
421
675
|
for (const [, context] of this.contexts) {
|
|
422
676
|
// Fire only for bounded stores.
|
|
423
677
|
if (!this.contexts.isNotBound(context.id)) {
|
|
424
|
-
context.
|
|
678
|
+
context.setAttachState(attachState);
|
|
425
679
|
}
|
|
426
680
|
}
|
|
427
681
|
}
|
|
@@ -449,7 +703,10 @@ class DataStores {
|
|
|
449
703
|
}));
|
|
450
704
|
return summaryBuilder.getSummaryTree();
|
|
451
705
|
}
|
|
452
|
-
|
|
706
|
+
/**
|
|
707
|
+
* Create a summary. Used when attaching or serializing a detached container.
|
|
708
|
+
*/
|
|
709
|
+
getAttachSummary(telemetryContext) {
|
|
453
710
|
const builder = new runtime_utils_1.SummaryTreeBuilder();
|
|
454
711
|
// Attaching graph of some stores can cause other stores to get bound too.
|
|
455
712
|
// So keep taking summary until no new stores get bound.
|
|
@@ -469,8 +726,8 @@ class DataStores {
|
|
|
469
726
|
.map(([key, value]) => {
|
|
470
727
|
let dataStoreSummary;
|
|
471
728
|
if (value.isLoaded) {
|
|
472
|
-
|
|
473
|
-
|
|
729
|
+
dataStoreSummary = value.getAttachData(
|
|
730
|
+
/* includeGCCData: */ false, telemetryContext).attachSummary;
|
|
474
731
|
}
|
|
475
732
|
else {
|
|
476
733
|
// If this data store is not yet loaded, then there should be no changes in the snapshot from
|
|
@@ -494,8 +751,8 @@ class DataStores {
|
|
|
494
751
|
(0, core_utils_1.assert)(context !== undefined, 0x2b6 /* Missing data store context */);
|
|
495
752
|
if (await context.isRoot()) {
|
|
496
753
|
// A root data store is basically a reference from the container runtime to the data store.
|
|
497
|
-
const handle = new datastore_1.FluidObjectHandle(context, id, this.
|
|
498
|
-
this.
|
|
754
|
+
const handle = new datastore_1.FluidObjectHandle(context, id, this.parentContext.IFluidHandleContext);
|
|
755
|
+
this.parentContext.addedGCOutboundReference?.(this.containerRuntimeHandle, handle);
|
|
499
756
|
}
|
|
500
757
|
}
|
|
501
758
|
this.dataStoresSinceLastGC = [];
|
|
@@ -554,25 +811,14 @@ class DataStores {
|
|
|
554
811
|
context.updateUsedRoutes(usedDataStoreRoutes.get(contextId) ?? []);
|
|
555
812
|
}
|
|
556
813
|
}
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
// store based on its DDS being unused.
|
|
566
|
-
if (pathParts.length > 2) {
|
|
567
|
-
continue;
|
|
568
|
-
}
|
|
569
|
-
const dataStoreId = pathParts[1];
|
|
570
|
-
(0, core_utils_1.assert)(this.contexts.has(dataStoreId), 0x2d7 /* No data store with specified id */);
|
|
571
|
-
// Delete the contexts of unused data stores.
|
|
572
|
-
this.contexts.delete(dataStoreId);
|
|
573
|
-
// Delete the summarizer node of the unused data stores.
|
|
574
|
-
this.deleteChildSummarizerNodeFn(dataStoreId);
|
|
575
|
-
}
|
|
814
|
+
deleteChild(dataStoreId) {
|
|
815
|
+
const dataStoreContext = this.contexts.get(dataStoreId);
|
|
816
|
+
(0, core_utils_1.assert)(dataStoreContext !== undefined, 0x2d7 /* No data store with specified id */);
|
|
817
|
+
dataStoreContext.delete();
|
|
818
|
+
// Delete the contexts of unused data stores.
|
|
819
|
+
this.contexts.delete(dataStoreId);
|
|
820
|
+
// Delete the summarizer node of the unused data stores.
|
|
821
|
+
this.parentContext.deleteChildSummarizerNode(dataStoreId);
|
|
576
822
|
}
|
|
577
823
|
/**
|
|
578
824
|
* Delete data stores and its objects that are sweep ready.
|
|
@@ -581,15 +827,12 @@ class DataStores {
|
|
|
581
827
|
* @returns The routes of data stores and its objects that were deleted.
|
|
582
828
|
*/
|
|
583
829
|
deleteSweepReadyNodes(sweepReadyDataStoreRoutes) {
|
|
584
|
-
// If sweep for data stores is not enabled, return empty list indicating nothing is deleted.
|
|
585
|
-
if (this.mc.config.getBoolean(gc_1.disableDatastoreSweepKey) === true) {
|
|
586
|
-
return [];
|
|
587
|
-
}
|
|
588
830
|
for (const route of sweepReadyDataStoreRoutes) {
|
|
589
831
|
const pathParts = route.split("/");
|
|
590
832
|
const dataStoreId = pathParts[1];
|
|
591
833
|
// Ignore sub-data store routes because a data store and its sub-routes are deleted together, so, we only
|
|
592
834
|
// need to delete the data store.
|
|
835
|
+
// These routes will still be returned below as among the deleted routes
|
|
593
836
|
if (pathParts.length > 2) {
|
|
594
837
|
continue;
|
|
595
838
|
}
|
|
@@ -607,11 +850,7 @@ class DataStores {
|
|
|
607
850
|
});
|
|
608
851
|
continue;
|
|
609
852
|
}
|
|
610
|
-
|
|
611
|
-
// Delete the contexts of sweep ready data stores.
|
|
612
|
-
this.contexts.delete(dataStoreId);
|
|
613
|
-
// Delete the summarizer node of the sweep ready data stores.
|
|
614
|
-
this.deleteChildSummarizerNodeFn(dataStoreId);
|
|
853
|
+
this.deleteChild(dataStoreId);
|
|
615
854
|
}
|
|
616
855
|
return Array.from(sweepReadyDataStoreRoutes);
|
|
617
856
|
}
|
|
@@ -675,17 +914,60 @@ class DataStores {
|
|
|
675
914
|
// Data stores paths are of the format "/dataStoreId".
|
|
676
915
|
// Sub data store paths are of the format "/dataStoreId/subPath/...".
|
|
677
916
|
if (pathParts.length === 2) {
|
|
678
|
-
return
|
|
917
|
+
return index_js_1.GCNodeType.DataStore;
|
|
918
|
+
}
|
|
919
|
+
return index_js_1.GCNodeType.SubDataStore;
|
|
920
|
+
}
|
|
921
|
+
internalId(maybeAlias) {
|
|
922
|
+
return this.aliases.get(maybeAlias) ?? maybeAlias;
|
|
923
|
+
}
|
|
924
|
+
async request(request) {
|
|
925
|
+
const requestParser = runtime_utils_1.RequestParser.create(request);
|
|
926
|
+
const id = requestParser.pathParts[0];
|
|
927
|
+
// Differentiate between requesting the dataStore directly, or one of its children
|
|
928
|
+
const requestForChild = !requestParser.isLeaf(1);
|
|
929
|
+
const headerData = {};
|
|
930
|
+
if (typeof request.headers?.[RuntimeHeaders.wait] === "boolean") {
|
|
931
|
+
headerData.wait = request.headers[RuntimeHeaders.wait];
|
|
932
|
+
}
|
|
933
|
+
if (typeof request.headers?.[RuntimeHeaders.viaHandle] === "boolean") {
|
|
934
|
+
headerData.viaHandle = request.headers[RuntimeHeaders.viaHandle];
|
|
935
|
+
}
|
|
936
|
+
if (typeof request.headers?.[exports.AllowTombstoneRequestHeaderKey] === "boolean") {
|
|
937
|
+
headerData.allowTombstone = request.headers[exports.AllowTombstoneRequestHeaderKey];
|
|
938
|
+
}
|
|
939
|
+
if (typeof request.headers?.[exports.AllowInactiveRequestHeaderKey] === "boolean") {
|
|
940
|
+
headerData.allowInactive = request.headers[exports.AllowInactiveRequestHeaderKey];
|
|
679
941
|
}
|
|
680
|
-
|
|
942
|
+
// We allow Tombstone requests for sub-DataStore objects
|
|
943
|
+
if (requestForChild) {
|
|
944
|
+
headerData.allowTombstone = true;
|
|
945
|
+
}
|
|
946
|
+
await this.waitIfPendingAlias(id);
|
|
947
|
+
const internalId = this.internalId(id);
|
|
948
|
+
const dataStoreContext = await this.getDataStore(internalId, headerData);
|
|
949
|
+
// Remove query params, leading and trailing slashes from the url. This is done to make sure the format is
|
|
950
|
+
// the same as GC nodes id.
|
|
951
|
+
const urlWithoutQuery = (0, index_js_1.trimLeadingAndTrailingSlashes)(request.url.split("?")[0]);
|
|
952
|
+
// Get the initial snapshot details which contain the data store package path.
|
|
953
|
+
const details = await dataStoreContext.getInitialSnapshotDetails();
|
|
954
|
+
// Note that this will throw if the data store is inactive or tombstoned and throwing on incorrect usage
|
|
955
|
+
// is configured.
|
|
956
|
+
this.gcNodeUpdated(`/${urlWithoutQuery}`, "Loaded", undefined /* timestampMs */, details.pkg, request, headerData);
|
|
957
|
+
const dataStore = await dataStoreContext.realize();
|
|
958
|
+
const subRequest = requestParser.createSubRequest(1);
|
|
959
|
+
// We always expect createSubRequest to include a leading slash, but asserting here to protect against
|
|
960
|
+
// unintentionally modifying the url if that changes.
|
|
961
|
+
(0, core_utils_1.assert)(subRequest.url.startsWith("/"), 0x126 /* "Expected createSubRequest url to include a leading slash" */);
|
|
962
|
+
return dataStore.request(subRequest);
|
|
681
963
|
}
|
|
682
964
|
}
|
|
683
|
-
exports.
|
|
965
|
+
exports.ChannelCollection = ChannelCollection;
|
|
684
966
|
function getSummaryForDatastores(snapshot, metadata) {
|
|
685
967
|
if (!snapshot) {
|
|
686
968
|
return undefined;
|
|
687
969
|
}
|
|
688
|
-
if ((0,
|
|
970
|
+
if ((0, index_js_2.rootHasIsolatedChannels)(metadata)) {
|
|
689
971
|
const datastoresSnapshot = snapshot.trees[runtime_definitions_1.channelsTreeName];
|
|
690
972
|
(0, core_utils_1.assert)(!!datastoresSnapshot, 0x168 /* Expected tree in snapshot not found */);
|
|
691
973
|
return datastoresSnapshot;
|
|
@@ -694,7 +976,7 @@ function getSummaryForDatastores(snapshot, metadata) {
|
|
|
694
976
|
// back-compat: strip out all non-datastore paths before giving to DataStores object.
|
|
695
977
|
const datastoresTrees = {};
|
|
696
978
|
for (const [key, value] of Object.entries(snapshot.trees)) {
|
|
697
|
-
if (!
|
|
979
|
+
if (!index_js_2.nonDataStorePaths.includes(key)) {
|
|
698
980
|
datastoresTrees[key] = value;
|
|
699
981
|
}
|
|
700
982
|
}
|
|
@@ -710,7 +992,7 @@ exports.getSummaryForDatastores = getSummaryForDatastores;
|
|
|
710
992
|
*
|
|
711
993
|
* @internal
|
|
712
994
|
*/
|
|
713
|
-
function detectOutboundReferences(
|
|
995
|
+
function detectOutboundReferences(address, contents, addedOutboundReference) {
|
|
714
996
|
// These will be built up as we traverse the envelope contents
|
|
715
997
|
const outboundPaths = [];
|
|
716
998
|
let ddsAddress;
|
|
@@ -731,11 +1013,34 @@ function detectOutboundReferences(envelope, addedOutboundReference) {
|
|
|
731
1013
|
}
|
|
732
1014
|
}
|
|
733
1015
|
}
|
|
734
|
-
recursivelyFindHandles(
|
|
1016
|
+
recursivelyFindHandles(contents);
|
|
735
1017
|
// GC node paths are all absolute paths, hence the "" prefix.
|
|
736
1018
|
// e.g. this will yield "/dataStoreId/ddsId"
|
|
737
|
-
const fromPath = ["",
|
|
1019
|
+
const fromPath = ["", address, ddsAddress].join("/");
|
|
738
1020
|
outboundPaths.forEach((toPath) => addedOutboundReference(fromPath, toPath));
|
|
739
1021
|
}
|
|
740
1022
|
exports.detectOutboundReferences = detectOutboundReferences;
|
|
741
|
-
|
|
1023
|
+
/** @internal */
|
|
1024
|
+
class ChannelCollectionFactory {
|
|
1025
|
+
constructor(registryEntries,
|
|
1026
|
+
// ADO:7302 We need a better type here
|
|
1027
|
+
provideEntryPoint, ctor) {
|
|
1028
|
+
this.provideEntryPoint = provideEntryPoint;
|
|
1029
|
+
this.ctor = ctor;
|
|
1030
|
+
this.type = "ChannelCollectionChannel";
|
|
1031
|
+
this.IFluidDataStoreRegistry = new dataStoreRegistry_js_1.FluidDataStoreRegistry(registryEntries);
|
|
1032
|
+
}
|
|
1033
|
+
get IFluidDataStoreFactory() {
|
|
1034
|
+
return this;
|
|
1035
|
+
}
|
|
1036
|
+
async instantiateDataStore(context, _existing) {
|
|
1037
|
+
const runtime = this.ctor(context.baseSnapshot, context, // parentContext
|
|
1038
|
+
context.logger, () => { }, // gcNodeUpdated
|
|
1039
|
+
(_nodePath) => false, // isDataStoreDeleted
|
|
1040
|
+
new Map(), // aliasMap
|
|
1041
|
+
this.provideEntryPoint);
|
|
1042
|
+
return runtime;
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
exports.ChannelCollectionFactory = ChannelCollectionFactory;
|
|
1046
|
+
//# sourceMappingURL=channelCollection.js.map
|