@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
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
import { AttachState
|
|
5
|
+
import { AttachState } from "@fluidframework/container-definitions";
|
|
6
6
|
import { TypedEventEmitter } from "@fluid-internal/client-utils";
|
|
7
|
-
import { assert,
|
|
7
|
+
import { assert, LazyPromise, unreachableCase } from "@fluidframework/core-utils";
|
|
8
8
|
import { BlobTreeEntry, readAndParse } from "@fluidframework/driver-utils";
|
|
9
|
-
import { channelsTreeName,
|
|
10
|
-
import { addBlobToSummary
|
|
9
|
+
import { channelsTreeName, gcDataBlobKey, } from "@fluidframework/runtime-definitions";
|
|
10
|
+
import { addBlobToSummary } from "@fluidframework/runtime-utils";
|
|
11
11
|
import { createChildMonitoringContext, DataCorruptionError, DataProcessingError, extractSafePropertiesFromMessage, generateStack, LoggingError, tagCodeArtifacts, ThresholdCounter, } from "@fluidframework/telemetry-utils";
|
|
12
|
-
import { dataStoreAttributesBlobName, hasIsolatedChannels, wrapSummaryInChannelsTree, getAttributesFormatVersion, getFluidDataStoreAttributes, summarizerClientType, } from "./summary/index.
|
|
13
|
-
import { detectOutboundRoutesViaDDSKey, sendGCUnexpectedUsageEvent } from "./gc/index.
|
|
12
|
+
import { dataStoreAttributesBlobName, hasIsolatedChannels, wrapSummaryInChannelsTree, getAttributesFormatVersion, getFluidDataStoreAttributes, summarizerClientType, } from "./summary/index.js";
|
|
13
|
+
import { detectOutboundRoutesViaDDSKey, sendGCUnexpectedUsageEvent } from "./gc/index.js";
|
|
14
14
|
function createAttributes(pkg, isRootDataStore) {
|
|
15
15
|
const stringifiedPkg = JSON.stringify(pkg);
|
|
16
16
|
return {
|
|
@@ -25,6 +25,7 @@ export function createAttributesBlob(pkg, isRootDataStore) {
|
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
27
|
* Represents the context for the store. This context is passed to the store runtime.
|
|
28
|
+
* @internal
|
|
28
29
|
*/
|
|
29
30
|
export class FluidDataStoreContext extends TypedEventEmitter {
|
|
30
31
|
get packagePath() {
|
|
@@ -32,31 +33,31 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
32
33
|
return this.pkg;
|
|
33
34
|
}
|
|
34
35
|
get options() {
|
|
35
|
-
return this.
|
|
36
|
+
return this.parentContext.options;
|
|
36
37
|
}
|
|
37
38
|
get clientId() {
|
|
38
|
-
return this.
|
|
39
|
+
return this.parentContext.clientId;
|
|
39
40
|
}
|
|
40
41
|
get clientDetails() {
|
|
41
|
-
return this.
|
|
42
|
+
return this.parentContext.clientDetails;
|
|
42
43
|
}
|
|
43
44
|
get logger() {
|
|
44
|
-
return this.
|
|
45
|
+
return this.parentContext.logger;
|
|
45
46
|
}
|
|
46
47
|
get deltaManager() {
|
|
47
|
-
return this.
|
|
48
|
+
return this.parentContext.deltaManager;
|
|
48
49
|
}
|
|
49
50
|
get connected() {
|
|
50
|
-
return this.
|
|
51
|
+
return this.parentContext.connected;
|
|
51
52
|
}
|
|
52
53
|
get IFluidHandleContext() {
|
|
53
|
-
return this.
|
|
54
|
+
return this.parentContext.IFluidHandleContext;
|
|
54
55
|
}
|
|
55
56
|
get containerRuntime() {
|
|
56
57
|
return this._containerRuntime;
|
|
57
58
|
}
|
|
58
59
|
ensureNoDataModelChanges(callback) {
|
|
59
|
-
return this.
|
|
60
|
+
return this.parentContext.ensureNoDataModelChanges(callback);
|
|
60
61
|
}
|
|
61
62
|
get isLoaded() {
|
|
62
63
|
return this.loaded;
|
|
@@ -65,7 +66,7 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
65
66
|
return this._baseSnapshot;
|
|
66
67
|
}
|
|
67
68
|
get idCompressor() {
|
|
68
|
-
return this.
|
|
69
|
+
return this.parentContext.idCompressor;
|
|
69
70
|
}
|
|
70
71
|
get disposed() {
|
|
71
72
|
return this._disposed;
|
|
@@ -115,18 +116,19 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
115
116
|
this.loaded = false;
|
|
116
117
|
this.pending = [];
|
|
117
118
|
this._isInMemoryRoot = false;
|
|
118
|
-
this._containerRuntime = props.
|
|
119
|
+
this._containerRuntime = props.parentContext.containerRuntime;
|
|
120
|
+
this.parentContext = props.parentContext;
|
|
119
121
|
this.id = props.id;
|
|
120
122
|
this.storage = props.storage;
|
|
121
123
|
this.scope = props.scope;
|
|
122
124
|
this.pkg = props.pkg;
|
|
123
|
-
this.
|
|
125
|
+
this.loadingGroupId = props.loadingGroupId;
|
|
124
126
|
// URIs use slashes as delimiters. Handles use URIs.
|
|
125
127
|
// Thus having slashes in types almost guarantees trouble down the road!
|
|
126
128
|
assert(!this.id.includes("/"), 0x13a /* Data store ID contains slash */);
|
|
127
129
|
this._attachState =
|
|
128
|
-
this.
|
|
129
|
-
? this.
|
|
130
|
+
this.parentContext.attachState !== AttachState.Detached && this.existing
|
|
131
|
+
? this.parentContext.attachState
|
|
130
132
|
: AttachState.Detached;
|
|
131
133
|
const thisSummarizeInternal = async (fullTree, trackState, telemetryContext) => this.summarizeInternal(fullTree, trackState, telemetryContext);
|
|
132
134
|
this.summarizerNode = props.createSummarizerNodeFn(thisSummarizeInternal, async (fullGC) => this.getGCDataInternal(fullGC));
|
|
@@ -143,7 +145,8 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
143
145
|
},
|
|
144
146
|
});
|
|
145
147
|
this.thresholdOpsCounter = new ThresholdCounter(FluidDataStoreContext.pendingOpsCountThreshold, this.mc.logger);
|
|
146
|
-
this.
|
|
148
|
+
this.gcThrowOnTombstoneUsage = this.parentContext.gcThrowOnTombstoneUsage;
|
|
149
|
+
this.gcTombstoneEnforcementAllowed = this.parentContext.gcTombstoneEnforcementAllowed;
|
|
147
150
|
// By default, a data store can log maximum 10 local changes telemetry in summarizer.
|
|
148
151
|
this.localChangesTelemetryCount =
|
|
149
152
|
this.mc.config.getNumber("Fluid.Telemetry.LocalChangesTelemetryCount") ?? 10;
|
|
@@ -154,9 +157,9 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
154
157
|
}
|
|
155
158
|
this._disposed = true;
|
|
156
159
|
// Dispose any pending runtime after it gets fulfilled
|
|
157
|
-
// Errors are logged where this.
|
|
158
|
-
if (this.
|
|
159
|
-
this.
|
|
160
|
+
// Errors are logged where this.channelP is consumed/generated (realizeCore(), bindRuntime())
|
|
161
|
+
if (this.channelP) {
|
|
162
|
+
this.channelP
|
|
160
163
|
.then((runtime) => {
|
|
161
164
|
runtime.dispose();
|
|
162
165
|
})
|
|
@@ -185,27 +188,26 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
185
188
|
}
|
|
186
189
|
async realize() {
|
|
187
190
|
assert(!this.detachedRuntimeCreation, 0x13d /* "Detached runtime creation on realize()" */);
|
|
188
|
-
if (!this.
|
|
189
|
-
this.
|
|
190
|
-
this.realizeCore(this.existing).catch((error) => {
|
|
191
|
+
if (!this.channelP) {
|
|
192
|
+
this.channelP = this.realizeCore(this.existing).catch((error) => {
|
|
191
193
|
const errorWrapped = DataProcessingError.wrapIfUnrecognized(error, "realizeFluidDataStoreContext");
|
|
192
194
|
errorWrapped.addTelemetryProperties(tagCodeArtifacts({
|
|
193
195
|
fullPackageName: this.pkg?.join("/"),
|
|
194
196
|
fluidDataStoreId: this.id,
|
|
195
197
|
}));
|
|
196
|
-
this.channelDeferred?.reject(errorWrapped);
|
|
197
198
|
this.mc.logger.sendErrorEvent({ eventName: "RealizeError" }, errorWrapped);
|
|
199
|
+
throw errorWrapped;
|
|
198
200
|
});
|
|
199
201
|
}
|
|
200
|
-
return this.
|
|
202
|
+
return this.channelP;
|
|
201
203
|
}
|
|
202
|
-
async factoryFromPackagePath(
|
|
203
|
-
|
|
204
|
+
async factoryFromPackagePath() {
|
|
205
|
+
const packages = this.pkg;
|
|
204
206
|
if (packages === undefined) {
|
|
205
207
|
this.rejectDeferredRealize("packages is undefined");
|
|
206
208
|
}
|
|
207
209
|
let entry;
|
|
208
|
-
let registry = this.
|
|
210
|
+
let registry = this.parentContext.IFluidDataStoreRegistry;
|
|
209
211
|
let lastPkg;
|
|
210
212
|
for (const pkg of packages) {
|
|
211
213
|
if (!registry) {
|
|
@@ -222,7 +224,9 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
222
224
|
if (factory === undefined) {
|
|
223
225
|
this.rejectDeferredRealize("Can't find factory for package", lastPkg, packages);
|
|
224
226
|
}
|
|
225
|
-
|
|
227
|
+
assert(this.registry === undefined, 0x157 /* "datastore registry already attached" */);
|
|
228
|
+
this.registry = registry;
|
|
229
|
+
return factory;
|
|
226
230
|
}
|
|
227
231
|
async realizeCore(existing) {
|
|
228
232
|
const details = await this.getInitialSnapshotDetails();
|
|
@@ -230,18 +234,18 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
230
234
|
// It is important that this be in sync with the pending ops, and also
|
|
231
235
|
// that it is set here, before bindRuntime is called.
|
|
232
236
|
this._baseSnapshot = details.snapshot;
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
this.registry = registry;
|
|
237
|
+
this.baseSnapshotSequenceNumber = details.sequenceNumber;
|
|
238
|
+
assert(this.pkg === details.pkg, 0x13e /* "Unexpected package path" */);
|
|
239
|
+
const factory = await this.factoryFromPackagePath();
|
|
237
240
|
const channel = await factory.instantiateDataStore(this, existing);
|
|
238
241
|
assert(channel !== undefined, 0x140 /* "undefined channel on datastore context" */);
|
|
239
|
-
this.bindRuntime(channel);
|
|
242
|
+
await this.bindRuntime(channel, existing);
|
|
240
243
|
// This data store may have been disposed before the channel is created during realization. If so,
|
|
241
244
|
// dispose the channel now.
|
|
242
245
|
if (this.disposed) {
|
|
243
246
|
channel.dispose();
|
|
244
247
|
}
|
|
248
|
+
return channel;
|
|
245
249
|
}
|
|
246
250
|
/**
|
|
247
251
|
* Notifies this object about changes in the connection state.
|
|
@@ -260,20 +264,14 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
260
264
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
261
265
|
this.channel.setConnectionState(connected, clientId);
|
|
262
266
|
}
|
|
263
|
-
process(
|
|
264
|
-
const safeTelemetryProps = extractSafePropertiesFromMessage(
|
|
267
|
+
process(message, local, localOpMetadata) {
|
|
268
|
+
const safeTelemetryProps = extractSafePropertiesFromMessage(message);
|
|
265
269
|
// On op process, tombstone error is logged in garbage collector. So, set "checkTombstone" to false when calling
|
|
266
270
|
// "verifyNotClosed" which logs tombstone errors. Throw error if tombstoned and throwing on load is configured.
|
|
267
271
|
this.verifyNotClosed("process", false /* checkTombstone */, safeTelemetryProps);
|
|
268
|
-
if (this.tombstoned && this.
|
|
272
|
+
if (this.tombstoned && this.gcThrowOnTombstoneUsage) {
|
|
269
273
|
throw new DataCorruptionError("Context is tombstoned! Call site [process]", safeTelemetryProps);
|
|
270
274
|
}
|
|
271
|
-
const innerContents = messageArg.contents;
|
|
272
|
-
const message = {
|
|
273
|
-
...messageArg,
|
|
274
|
-
type: innerContents.type,
|
|
275
|
-
contents: innerContents.content,
|
|
276
|
-
};
|
|
277
275
|
this.summarizerNode.recordChange(message);
|
|
278
276
|
if (this.loaded) {
|
|
279
277
|
return this.channel?.process(message, local, localOpMetadata);
|
|
@@ -294,10 +292,10 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
294
292
|
this.channel?.processSignal(message, local);
|
|
295
293
|
}
|
|
296
294
|
getQuorum() {
|
|
297
|
-
return this.
|
|
295
|
+
return this.parentContext.getQuorum();
|
|
298
296
|
}
|
|
299
297
|
getAudience() {
|
|
300
|
-
return this.
|
|
298
|
+
return this.parentContext.getAudience();
|
|
301
299
|
}
|
|
302
300
|
/**
|
|
303
301
|
* Returns a summary at the current sequence number.
|
|
@@ -326,6 +324,10 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
326
324
|
summarizeResult.summary.unreferenced = true;
|
|
327
325
|
summarizeResult.stats.unreferencedBlobSize = summarizeResult.stats.totalBlobSize;
|
|
328
326
|
}
|
|
327
|
+
// Add loadingGroupId to the summary
|
|
328
|
+
if (this.loadingGroupId !== undefined) {
|
|
329
|
+
summarizeResult.summary.groupId = this.loadingGroupId;
|
|
330
|
+
}
|
|
329
331
|
return {
|
|
330
332
|
...summarizeResult,
|
|
331
333
|
id: this.id,
|
|
@@ -385,9 +387,11 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
385
387
|
}
|
|
386
388
|
}
|
|
387
389
|
/**
|
|
388
|
-
* @deprecated There is no replacement for this, its functionality is no longer needed.
|
|
390
|
+
* @deprecated There is no replacement for this, its functionality is no longer needed at this layer.
|
|
389
391
|
* It will be removed in a future release, sometime after 2.0.0-internal.8.0.0
|
|
390
392
|
*
|
|
393
|
+
* Similar capability is exposed with from/to string paths instead of handles via @see addedGCOutboundRoute
|
|
394
|
+
*
|
|
391
395
|
* Called when a new outbound reference is added to another node. This is used by garbage collection to identify
|
|
392
396
|
* all references added in the system.
|
|
393
397
|
* @param srcHandle - The handle of the node that added the reference.
|
|
@@ -397,9 +401,21 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
397
401
|
// By default, skip this call since the ContainerRuntime will detect the outbound route directly.
|
|
398
402
|
if (this.mc.config.getBoolean(detectOutboundRoutesViaDDSKey) === true) {
|
|
399
403
|
// Note: The ContainerRuntime code will check this same setting to avoid double counting.
|
|
400
|
-
this.
|
|
404
|
+
this.parentContext.addedGCOutboundReference?.(srcHandle, outboundHandle);
|
|
401
405
|
}
|
|
402
406
|
}
|
|
407
|
+
/**
|
|
408
|
+
* (Same as @see addedGCOutboundReference, but with string paths instead of handles)
|
|
409
|
+
*
|
|
410
|
+
* Called when a new outbound reference is added to another node. This is used by garbage collection to identify
|
|
411
|
+
* all references added in the system.
|
|
412
|
+
*
|
|
413
|
+
* @param fromPath - The absolute path of the node that added the reference.
|
|
414
|
+
* @param toPath - The absolute path of the outbound node that is referenced.
|
|
415
|
+
*/
|
|
416
|
+
addedGCOutboundRoute(fromPath, toPath) {
|
|
417
|
+
this.parentContext.addedGCOutboundReference?.({ absolutePath: fromPath }, { absolutePath: toPath });
|
|
418
|
+
}
|
|
403
419
|
/**
|
|
404
420
|
* Updates the used routes of the channel and its child contexts. The channel must be loaded before calling this.
|
|
405
421
|
* It is called in these two scenarios:
|
|
@@ -429,13 +445,9 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
429
445
|
submitMessage(type, content, localOpMetadata) {
|
|
430
446
|
this.verifyNotClosed("submitMessage");
|
|
431
447
|
assert(!!this.channel, 0x146 /* "Channel must exist when submitting message" */);
|
|
432
|
-
const fluidDataStoreContent = {
|
|
433
|
-
content,
|
|
434
|
-
type,
|
|
435
|
-
};
|
|
436
448
|
// Summarizer clients should not submit messages.
|
|
437
449
|
this.identifyLocalChangeInSummarizer("DataStoreMessageSubmittedInSummarizer", type);
|
|
438
|
-
this.
|
|
450
|
+
this.parentContext.submitMessage(type, content, localOpMetadata);
|
|
439
451
|
}
|
|
440
452
|
/**
|
|
441
453
|
* This is called from a SharedSummaryBlock that does not generate ops but only wants to be part of the summary.
|
|
@@ -465,7 +477,7 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
465
477
|
submitSignal(type, content, targetClientId) {
|
|
466
478
|
this.verifyNotClosed("submitSignal");
|
|
467
479
|
assert(!!this.channel, 0x147 /* "Channel must exist on submitting signal" */);
|
|
468
|
-
return this.
|
|
480
|
+
return this.parentContext.submitSignal(type, content, targetClientId);
|
|
469
481
|
}
|
|
470
482
|
/**
|
|
471
483
|
* This is called by the data store channel when it becomes locally visible indicating that it is ready to become
|
|
@@ -473,54 +485,67 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
473
485
|
*/
|
|
474
486
|
makeLocallyVisible() {
|
|
475
487
|
assert(this.channel !== undefined, 0x2cf /* "undefined channel on datastore context" */);
|
|
476
|
-
assert(this.channel.visibilityState === VisibilityState.LocallyVisible, 0x590 /* Channel must be locally visible */);
|
|
477
488
|
this.makeLocallyVisibleFn();
|
|
478
489
|
}
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
488
|
-
const pending = this.pending;
|
|
489
|
-
// Apply all pending ops
|
|
490
|
-
for (const op of pending) {
|
|
490
|
+
processPendingOps(channel) {
|
|
491
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
492
|
+
const pending = this.pending;
|
|
493
|
+
// Apply all pending ops
|
|
494
|
+
for (const op of pending) {
|
|
495
|
+
// Only process ops whose seq number is greater than snapshot sequence number from which it loaded.
|
|
496
|
+
const seqNumber = this.baseSnapshotSequenceNumber ?? -1;
|
|
497
|
+
if (op.sequenceNumber > seqNumber) {
|
|
491
498
|
channel.process(op, false, undefined /* localOpMetadata */);
|
|
492
499
|
}
|
|
493
|
-
this.thresholdOpsCounter.send("ProcessPendingOps", pending.length);
|
|
494
|
-
this.pending = undefined;
|
|
495
|
-
// And now mark the runtime active
|
|
496
|
-
this.loaded = true;
|
|
497
|
-
this.channel = channel;
|
|
498
|
-
// Freeze the package path to ensure that someone doesn't modify it when it is
|
|
499
|
-
// returned in packagePath().
|
|
500
|
-
Object.freeze(this.pkg);
|
|
501
|
-
/**
|
|
502
|
-
* Update the used routes of the channel. If GC has run before this data store was realized, we will have
|
|
503
|
-
* the used routes saved. So, this will ensure that all the child contexts have up-to-date used routes as
|
|
504
|
-
* per the last time GC was run.
|
|
505
|
-
* Also, this data store may have been realized during summarize. In that case, the child contexts need to
|
|
506
|
-
* have their used routes updated to determine if its needs to summarize again and to add it to the summary.
|
|
507
|
-
*/
|
|
508
|
-
this.updateChannelUsedRoutes();
|
|
509
|
-
// And notify the pending promise it is now available
|
|
510
|
-
this.channelDeferred.resolve(this.channel);
|
|
511
500
|
}
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
501
|
+
this.pending = undefined;
|
|
502
|
+
this.thresholdOpsCounter.send("ProcessPendingOps", pending.length);
|
|
503
|
+
}
|
|
504
|
+
completeBindingRuntime(channel) {
|
|
505
|
+
// And now mark the runtime active
|
|
506
|
+
this.loaded = true;
|
|
507
|
+
this.channel = channel;
|
|
508
|
+
// Channel does not know when it's "live" (as in - starts to receive events in the system)
|
|
509
|
+
// It may read current state of the system when channel was created, but it was not getting any updates
|
|
510
|
+
// through creation process and could have missed events. So update it on current state.
|
|
511
|
+
// Once this.loaded is set (above), it will stat receiving events.
|
|
512
|
+
channel.setConnectionState(this.connected, this.clientId);
|
|
513
|
+
// Freeze the package path to ensure that someone doesn't modify it when it is
|
|
514
|
+
// returned in packagePath().
|
|
515
|
+
Object.freeze(this.pkg);
|
|
516
|
+
/**
|
|
517
|
+
* Update the used routes of the channel. If GC has run before this data store was realized, we will have
|
|
518
|
+
* the used routes saved. So, this will ensure that all the child contexts have up-to-date used routes as
|
|
519
|
+
* per the last time GC was run.
|
|
520
|
+
* Also, this data store may have been realized during summarize. In that case, the child contexts need to
|
|
521
|
+
* have their used routes updated to determine if its needs to summarize again and to add it to the summary.
|
|
522
|
+
*/
|
|
523
|
+
this.updateChannelUsedRoutes();
|
|
524
|
+
}
|
|
525
|
+
async bindRuntime(channel, existing) {
|
|
526
|
+
if (this.channel) {
|
|
527
|
+
throw new Error("Runtime already bound");
|
|
517
528
|
}
|
|
529
|
+
assert(!this.detachedRuntimeCreation, 0x148 /* "Detached runtime creation on runtime bind" */);
|
|
530
|
+
assert(this.pkg !== undefined, 0x14a /* "Undefined package path" */);
|
|
531
|
+
if (!existing) {
|
|
532
|
+
// Execute data store's entry point to make sure that for a local (aka detached from container) data store, the
|
|
533
|
+
// entryPoint initialization function is called before the data store gets attached and potentially connected to
|
|
534
|
+
// the delta stream, so it gets a chance to do things while the data store is still "purely local".
|
|
535
|
+
// This preserves the behavior from before we introduced entryPoints, where the instantiateDataStore method
|
|
536
|
+
// of data store factories tends to construct the data object (at least kick off an async method that returns
|
|
537
|
+
// it); that code moved to the entryPoint initialization function, so we want to ensure it still executes
|
|
538
|
+
// before the data store is attached.
|
|
539
|
+
await channel.entryPoint.get();
|
|
540
|
+
}
|
|
541
|
+
this.processPendingOps(channel);
|
|
542
|
+
this.completeBindingRuntime(channel);
|
|
518
543
|
}
|
|
519
544
|
async getAbsoluteUrl(relativeUrl) {
|
|
520
545
|
if (this.attachState !== AttachState.Attached) {
|
|
521
546
|
return undefined;
|
|
522
547
|
}
|
|
523
|
-
return this.
|
|
548
|
+
return this.parentContext.getAbsoluteUrl(relativeUrl);
|
|
524
549
|
}
|
|
525
550
|
/**
|
|
526
551
|
* @deprecated Sets the datastore as root, for aliasing purposes: #7948
|
|
@@ -536,20 +561,18 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
536
561
|
async getBaseGCDetails() {
|
|
537
562
|
return {};
|
|
538
563
|
}
|
|
539
|
-
reSubmit(contents, localOpMetadata) {
|
|
564
|
+
reSubmit(type, contents, localOpMetadata) {
|
|
540
565
|
assert(!!this.channel, 0x14b /* "Channel must exist when resubmitting ops" */);
|
|
541
|
-
|
|
542
|
-
this.channel.reSubmit(innerContents.type, innerContents.content, localOpMetadata);
|
|
566
|
+
this.channel.reSubmit(type, contents, localOpMetadata);
|
|
543
567
|
}
|
|
544
|
-
rollback(contents, localOpMetadata) {
|
|
568
|
+
rollback(type, contents, localOpMetadata) {
|
|
545
569
|
if (!this.channel) {
|
|
546
570
|
throw new Error("Channel must exist when rolling back ops");
|
|
547
571
|
}
|
|
548
572
|
if (!this.channel.rollback) {
|
|
549
573
|
throw new Error("Channel doesn't support rollback");
|
|
550
574
|
}
|
|
551
|
-
|
|
552
|
-
this.channel.rollback(innerContents.type, innerContents.content, localOpMetadata);
|
|
575
|
+
this.channel.rollback(type, contents, localOpMetadata);
|
|
553
576
|
}
|
|
554
577
|
async applyStashedOp(contents) {
|
|
555
578
|
if (!this.channel) {
|
|
@@ -576,11 +599,11 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
576
599
|
const error = new DataCorruptionError(messageString, safeTelemetryProps);
|
|
577
600
|
sendGCUnexpectedUsageEvent(this.mc, {
|
|
578
601
|
eventName: "GC_Tombstone_DataStore_Changed",
|
|
579
|
-
category: this.
|
|
580
|
-
gcTombstoneEnforcementAllowed: this.
|
|
602
|
+
category: this.gcThrowOnTombstoneUsage ? "error" : "generic",
|
|
603
|
+
gcTombstoneEnforcementAllowed: this.gcTombstoneEnforcementAllowed,
|
|
581
604
|
callSite,
|
|
582
605
|
}, this.pkg, error);
|
|
583
|
-
if (this.
|
|
606
|
+
if (this.gcThrowOnTombstoneUsage) {
|
|
584
607
|
throw error;
|
|
585
608
|
}
|
|
586
609
|
}
|
|
@@ -609,18 +632,31 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
609
632
|
getCreateChildSummarizerNodeFn(id, createParam) {
|
|
610
633
|
return (summarizeInternal, getGCDataFn) => this.summarizerNode.createChild(summarizeInternal, id, createParam, undefined /* config */, getGCDataFn);
|
|
611
634
|
}
|
|
635
|
+
deleteChildSummarizerNode(id) {
|
|
636
|
+
this.summarizerNode.deleteChild(id);
|
|
637
|
+
}
|
|
612
638
|
async uploadBlob(blob, signal) {
|
|
613
|
-
return this.
|
|
639
|
+
return this.parentContext.uploadBlob(blob, signal);
|
|
614
640
|
}
|
|
615
641
|
}
|
|
616
642
|
FluidDataStoreContext.pendingOpsCountThreshold = 1000;
|
|
643
|
+
/** @internal */
|
|
617
644
|
export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
618
645
|
constructor(props) {
|
|
619
646
|
super(props, true /* existing */, false /* isLocalDataStore */, () => {
|
|
620
647
|
throw new Error("Already attached");
|
|
621
648
|
});
|
|
622
649
|
this.initialSnapshotDetailsP = new LazyPromise(async () => {
|
|
623
|
-
|
|
650
|
+
// Sequence number of the snapshot.
|
|
651
|
+
let sequenceNumber;
|
|
652
|
+
if (this.snapshotFetchRequired) {
|
|
653
|
+
assert(this.loadingGroupId !== undefined, 0x8f5 /* groupId should be present to fetch snapshot */);
|
|
654
|
+
const snapshot = await this.runtime.getSnapshotForLoadingGroupId([this.loadingGroupId], [this.id]);
|
|
655
|
+
this._baseSnapshot = snapshot.snapshotTree;
|
|
656
|
+
sequenceNumber = snapshot.sequenceNumber;
|
|
657
|
+
this.snapshotFetchRequired = false;
|
|
658
|
+
}
|
|
659
|
+
let tree = this.baseSnapshot;
|
|
624
660
|
let isRootDataStore = true;
|
|
625
661
|
if (!!tree && tree.blobs[dataStoreAttributesBlobName] !== undefined) {
|
|
626
662
|
// Need to get through snapshot and use that to populate extraBlobs
|
|
@@ -650,31 +686,49 @@ export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
|
650
686
|
assert(tree !== undefined, 0x1fe /* "isolated channels subtree should exist in remote datastore snapshot" */);
|
|
651
687
|
}
|
|
652
688
|
}
|
|
689
|
+
assert(this.pkg !== undefined, 0x8f6 /* The datastore context package should be defined */);
|
|
653
690
|
return {
|
|
654
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
655
691
|
pkg: this.pkg,
|
|
656
692
|
isRootDataStore,
|
|
657
693
|
snapshot: tree,
|
|
694
|
+
sequenceNumber,
|
|
658
695
|
};
|
|
659
696
|
});
|
|
660
|
-
this.
|
|
697
|
+
this._baseSnapshot = props.snapshotTree;
|
|
698
|
+
this.snapshotFetchRequired = !!props.snapshotTree?.omitted;
|
|
699
|
+
this.runtime = props.parentContext.containerRuntime;
|
|
661
700
|
if (props.snapshotTree !== undefined) {
|
|
662
701
|
this.summarizerNode.updateBaseSummaryState(props.snapshotTree);
|
|
663
702
|
}
|
|
664
703
|
}
|
|
704
|
+
/*
|
|
705
|
+
This API should not be called for RemoteFluidDataStoreContext. But here is one scenario where it's not the case:
|
|
706
|
+
The scenario (hit by stashedOps.spec.ts, "resends attach op" UT is the following (as far as I understand):
|
|
707
|
+
1. data store is being attached in attached container
|
|
708
|
+
2. container state is serialized (stashed ops feature)
|
|
709
|
+
3. new container instance is rehydrated (from stashed ops)
|
|
710
|
+
- As result, we create RemoteFluidDataStoreContext for this data store that is actually in "attaching" state (as of # 2).
|
|
711
|
+
But its state is set to attached when loading container from stashed ops
|
|
712
|
+
4. attach op for this data store is processed - setAttachState() is called.
|
|
713
|
+
*/
|
|
714
|
+
setAttachState(attachState) { }
|
|
665
715
|
async getInitialSnapshotDetails() {
|
|
666
716
|
return this.initialSnapshotDetailsP;
|
|
667
717
|
}
|
|
668
|
-
|
|
718
|
+
/**
|
|
719
|
+
* @see FluidDataStoreContext.getAttachData
|
|
720
|
+
*/
|
|
721
|
+
getAttachData(includeGCData) {
|
|
669
722
|
throw new Error("Cannot attach remote store");
|
|
670
723
|
}
|
|
671
724
|
}
|
|
672
725
|
/**
|
|
673
726
|
* Base class for detached & attached context classes
|
|
727
|
+
* @internal
|
|
674
728
|
*/
|
|
675
729
|
export class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
676
730
|
constructor(props) {
|
|
677
|
-
super(props, props.snapshotTree !== undefined
|
|
731
|
+
super(props, props.snapshotTree !== undefined /* existing */, true /* isLocalDataStore */, props.makeLocallyVisibleFn);
|
|
678
732
|
this.initialSnapshotDetailsP = new LazyPromise(async () => {
|
|
679
733
|
let snapshot = this.snapshotTree;
|
|
680
734
|
let attributes;
|
|
@@ -708,39 +762,73 @@ export class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
|
708
762
|
// Summarizer client should not create local data stores.
|
|
709
763
|
this.identifyLocalChangeInSummarizer("DataStoreCreatedInSummarizer");
|
|
710
764
|
this.snapshotTree = props.snapshotTree;
|
|
711
|
-
if (props.isRootDataStore === true) {
|
|
712
|
-
this.setInMemoryRoot();
|
|
713
|
-
}
|
|
714
765
|
this.createProps = props.createProps;
|
|
715
|
-
this.attachListeners();
|
|
716
766
|
}
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
767
|
+
setAttachState(attachState) {
|
|
768
|
+
switch (attachState) {
|
|
769
|
+
case AttachState.Attaching:
|
|
770
|
+
assert(this.attachState === AttachState.Detached, 0x14d /* "Should move from detached to attaching" */);
|
|
771
|
+
this._attachState = AttachState.Attaching;
|
|
772
|
+
if (this.channel?.setAttachState) {
|
|
773
|
+
this.channel.setAttachState(attachState);
|
|
774
|
+
}
|
|
775
|
+
else if (this.channel) {
|
|
776
|
+
// back-compat! To be removed in the future
|
|
777
|
+
// Added in "2.0.0-rc.2.0.0" timeframe.
|
|
778
|
+
this.emit("attaching");
|
|
779
|
+
}
|
|
780
|
+
break;
|
|
781
|
+
case AttachState.Attached:
|
|
782
|
+
// We can get called into here twice, as result of both container and data store being attached, if
|
|
783
|
+
// those processes overlapped, for example, in a flow like that one:
|
|
784
|
+
// 1. Container attach started
|
|
785
|
+
// 2. data store attachment started
|
|
786
|
+
// 3. container attached
|
|
787
|
+
// 4. data store attached.
|
|
788
|
+
if (this.attachState !== AttachState.Attached) {
|
|
789
|
+
assert(this.attachState === AttachState.Attaching, 0x14e /* "Should move from attaching to attached" */);
|
|
790
|
+
this._attachState = AttachState.Attached;
|
|
791
|
+
this.channel?.setAttachState?.(attachState);
|
|
792
|
+
if (this.channel?.setAttachState) {
|
|
793
|
+
this.channel.setAttachState(attachState);
|
|
794
|
+
}
|
|
795
|
+
else if (this.channel) {
|
|
796
|
+
// back-compat! To be removed in the future
|
|
797
|
+
// Added in "2.0.0-rc.2.0.0" timeframe.
|
|
798
|
+
this.emit("attached");
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
break;
|
|
802
|
+
default:
|
|
803
|
+
unreachableCase(attachState, "unreached");
|
|
804
|
+
}
|
|
726
805
|
}
|
|
727
|
-
|
|
806
|
+
/**
|
|
807
|
+
* @see FluidDataStoreContext.getAttachData
|
|
808
|
+
*/
|
|
809
|
+
getAttachData(includeGCData, telemetryContext) {
|
|
728
810
|
assert(this.channel !== undefined, 0x14f /* "There should be a channel when generating attach message" */);
|
|
729
811
|
assert(this.pkg !== undefined, 0x150 /* "pkg should be available in local data store context" */);
|
|
730
|
-
const
|
|
812
|
+
const attachSummary = this.channel.getAttachSummary(telemetryContext);
|
|
731
813
|
// Wrap dds summaries in .channels subtree.
|
|
732
|
-
wrapSummaryInChannelsTree(
|
|
814
|
+
wrapSummaryInChannelsTree(attachSummary);
|
|
733
815
|
// Add data store's attributes to the summary.
|
|
734
816
|
const attributes = createAttributes(this.pkg, this.isInMemoryRoot());
|
|
735
|
-
addBlobToSummary(
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
817
|
+
addBlobToSummary(attachSummary, dataStoreAttributesBlobName, JSON.stringify(attributes));
|
|
818
|
+
if (includeGCData) {
|
|
819
|
+
const gcData = this.channel.getAttachGCData?.(telemetryContext);
|
|
820
|
+
if (gcData !== undefined) {
|
|
821
|
+
addBlobToSummary(attachSummary, gcDataBlobKey, JSON.stringify(gcData));
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
// Add loadingGroupId to the summary
|
|
825
|
+
if (this.loadingGroupId !== undefined) {
|
|
826
|
+
attachSummary.summary.groupId = this.loadingGroupId;
|
|
827
|
+
}
|
|
828
|
+
return {
|
|
829
|
+
attachSummary,
|
|
741
830
|
type: this.pkg[this.pkg.length - 1],
|
|
742
831
|
};
|
|
743
|
-
return message;
|
|
744
832
|
}
|
|
745
833
|
async getInitialSnapshotDetails() {
|
|
746
834
|
return this.initialSnapshotDetailsP;
|
|
@@ -768,6 +856,7 @@ export class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
|
768
856
|
* Various workflows (snapshot creation, requests) result in .realize() being called
|
|
769
857
|
* on context, resulting in instantiation and attachment of runtime.
|
|
770
858
|
* Runtime is created using data store factory that is associated with this context.
|
|
859
|
+
* @internal
|
|
771
860
|
*/
|
|
772
861
|
export class LocalFluidDataStoreContext extends LocalFluidDataStoreContextBase {
|
|
773
862
|
constructor(props) {
|
|
@@ -784,29 +873,29 @@ export class LocalDetachedFluidDataStoreContext extends LocalFluidDataStoreConte
|
|
|
784
873
|
constructor(props) {
|
|
785
874
|
super(props);
|
|
786
875
|
this.detachedRuntimeCreation = true;
|
|
876
|
+
this.channelToDataStoreFn = props.channelToDataStoreFn;
|
|
787
877
|
}
|
|
788
878
|
async attachRuntime(registry, dataStoreChannel) {
|
|
789
879
|
assert(this.detachedRuntimeCreation, 0x154 /* "runtime creation is already attached" */);
|
|
790
880
|
this.detachedRuntimeCreation = false;
|
|
791
|
-
assert(this.
|
|
792
|
-
this.
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
}
|
|
881
|
+
assert(this.channelP === undefined, 0x155 /* "channel deferral is already set" */);
|
|
882
|
+
this.channelP = Promise.resolve()
|
|
883
|
+
.then(async () => {
|
|
884
|
+
const factory = registry.IFluidDataStoreFactory;
|
|
885
|
+
const factory2 = await this.factoryFromPackagePath();
|
|
886
|
+
assert(factory2 === factory, 0x156 /* "Unexpected factory for package path" */);
|
|
887
|
+
await super.bindRuntime(dataStoreChannel, false /* existing */);
|
|
888
|
+
assert(!(await this.isRoot()), 0x8f7 /* there are no more createRootDataStore() kind of APIs! */);
|
|
889
|
+
return dataStoreChannel;
|
|
890
|
+
})
|
|
891
|
+
.catch((error) => {
|
|
892
|
+
this.mc.logger.sendErrorEvent({ eventName: "AttachRuntimeError" }, error);
|
|
893
|
+
// The following two lines result in same exception thrown.
|
|
894
|
+
// But we need to ensure that this.channelDeferred.promise is "observed", as otherwise
|
|
895
|
+
// out UT reports unhandled exception
|
|
896
|
+
throw error;
|
|
897
|
+
});
|
|
898
|
+
return this.channelToDataStoreFn(await this.channelP);
|
|
810
899
|
}
|
|
811
900
|
async getInitialSnapshotDetails() {
|
|
812
901
|
if (this.detachedRuntimeCreation) {
|
|
@@ -815,4 +904,4 @@ export class LocalDetachedFluidDataStoreContext extends LocalFluidDataStoreConte
|
|
|
815
904
|
return super.getInitialSnapshotDetails();
|
|
816
905
|
}
|
|
817
906
|
}
|
|
818
|
-
//# sourceMappingURL=dataStoreContext.
|
|
907
|
+
//# sourceMappingURL=dataStoreContext.js.map
|