@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
package/src/dataStoreContexts.ts
CHANGED
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
import { assert, Deferred, Lazy } from "@fluidframework/core-utils";
|
|
7
7
|
import { IDisposable, ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
|
|
8
8
|
import { createChildLogger, ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
|
|
9
|
-
import { FluidDataStoreContext, LocalFluidDataStoreContext } from "./dataStoreContext";
|
|
9
|
+
import { FluidDataStoreContext, LocalFluidDataStoreContext } from "./dataStoreContext.js";
|
|
10
10
|
|
|
11
|
+
/** @internal */
|
|
11
12
|
export class DataStoreContexts implements Iterable<[string, FluidDataStoreContext]>, IDisposable {
|
|
12
13
|
private readonly notBoundContexts = new Set<string>();
|
|
13
14
|
|
package/src/dataStoreRegistry.ts
CHANGED
|
@@ -3,11 +3,26 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { TypedEventEmitter } from "@fluid-internal/client-utils";
|
|
7
|
+
import type {
|
|
8
|
+
IConnectionDetails,
|
|
9
|
+
IDeltaManager,
|
|
10
|
+
IDeltaManagerEvents,
|
|
11
|
+
IDeltaQueue,
|
|
12
|
+
IDeltaSender,
|
|
13
|
+
ReadOnlyInfo,
|
|
14
|
+
} from "@fluidframework/container-definitions";
|
|
15
|
+
import type { IErrorBase } from "@fluidframework/core-interfaces";
|
|
16
|
+
import type { IAnyDriverError } from "@fluidframework/driver-definitions";
|
|
17
|
+
import {
|
|
18
|
+
IClientConfiguration,
|
|
19
|
+
IClientDetails,
|
|
20
|
+
IDocumentMessage,
|
|
21
|
+
ISequencedDocumentMessage,
|
|
22
|
+
ISignalMessage,
|
|
23
|
+
} from "@fluidframework/protocol-definitions";
|
|
8
24
|
|
|
9
|
-
import {
|
|
10
|
-
import { summarizerClientType } from "./summary";
|
|
25
|
+
import { summarizerClientType } from "./summary/index.js";
|
|
11
26
|
|
|
12
27
|
/**
|
|
13
28
|
* Proxy to the real IDeltaManager for restricting certain access to layers below container runtime in summarizer clients:
|
|
@@ -15,9 +30,65 @@ import { summarizerClientType } from "./summary";
|
|
|
15
30
|
* - Summarizer client should not be active to layers below the container runtime to restrict local changes.
|
|
16
31
|
*/
|
|
17
32
|
export class DeltaManagerSummarizerProxy
|
|
18
|
-
extends
|
|
33
|
+
extends TypedEventEmitter<IDeltaManagerEvents>
|
|
19
34
|
implements IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>
|
|
20
35
|
{
|
|
36
|
+
public get IDeltaSender(): IDeltaSender {
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public get inbound(): IDeltaQueue<ISequencedDocumentMessage> {
|
|
41
|
+
return this.deltaManager.inbound;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public get outbound(): IDeltaQueue<IDocumentMessage[]> {
|
|
45
|
+
return this.deltaManager.outbound;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public get inboundSignal(): IDeltaQueue<ISignalMessage> {
|
|
49
|
+
return this.deltaManager.inboundSignal;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public get minimumSequenceNumber(): number {
|
|
53
|
+
return this.deltaManager.minimumSequenceNumber;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
public get lastSequenceNumber(): number {
|
|
57
|
+
return this.deltaManager.lastSequenceNumber;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
public get lastMessage() {
|
|
61
|
+
return this.deltaManager.lastMessage;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
public get lastKnownSeqNumber() {
|
|
65
|
+
return this.deltaManager.lastKnownSeqNumber;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
public get initialSequenceNumber(): number {
|
|
69
|
+
return this.deltaManager.initialSequenceNumber;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public get hasCheckpointSequenceNumber() {
|
|
73
|
+
return this.deltaManager.hasCheckpointSequenceNumber;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
public get clientDetails(): IClientDetails {
|
|
77
|
+
return this.deltaManager.clientDetails;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
public get version(): string {
|
|
81
|
+
return this.deltaManager.version;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
public get maxMessageSize(): number {
|
|
85
|
+
return this.deltaManager.maxMessageSize;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
public get serviceConfiguration(): IClientConfiguration | undefined {
|
|
89
|
+
return this.deltaManager.serviceConfiguration;
|
|
90
|
+
}
|
|
91
|
+
|
|
21
92
|
public get active(): boolean {
|
|
22
93
|
// Summarize clients should not be active. There shouldn't be any local changes (writes) in the summarizer
|
|
23
94
|
// except for the SummarizeOp which is generated by the runtime.
|
|
@@ -40,10 +111,64 @@ export class DeltaManagerSummarizerProxy
|
|
|
40
111
|
|
|
41
112
|
private readonly isSummarizerClient: boolean;
|
|
42
113
|
|
|
43
|
-
constructor(
|
|
44
|
-
|
|
114
|
+
constructor(
|
|
115
|
+
private readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
|
|
116
|
+
) {
|
|
117
|
+
super();
|
|
118
|
+
|
|
45
119
|
// We are expecting this class to have many listeners, so we suppress noisy "MaxListenersExceededWarning" logging.
|
|
46
120
|
super.setMaxListeners(0);
|
|
47
121
|
this.isSummarizerClient = this.deltaManager.clientDetails.type === summarizerClientType;
|
|
122
|
+
|
|
123
|
+
this.deltaManager.on("prepareSend", this.onPrepareSend);
|
|
124
|
+
this.deltaManager.on("submitOp", this.onSubmitOp);
|
|
125
|
+
this.deltaManager.on("op", this.onOp);
|
|
126
|
+
this.deltaManager.on("pong", this.onPong);
|
|
127
|
+
this.deltaManager.on("connect", this.onConnect);
|
|
128
|
+
this.deltaManager.on("disconnect", this.onDisconnect);
|
|
129
|
+
this.deltaManager.on("readonly", this.onReadonly);
|
|
48
130
|
}
|
|
131
|
+
|
|
132
|
+
public dispose(): void {
|
|
133
|
+
this.deltaManager.off("prepareSend", this.onPrepareSend);
|
|
134
|
+
this.deltaManager.off("submitOp", this.onSubmitOp);
|
|
135
|
+
this.deltaManager.off("op", this.onOp);
|
|
136
|
+
this.deltaManager.off("pong", this.onPong);
|
|
137
|
+
this.deltaManager.off("connect", this.onConnect);
|
|
138
|
+
this.deltaManager.off("disconnect", this.onDisconnect);
|
|
139
|
+
this.deltaManager.off("readonly", this.onReadonly);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
public submitSignal(content: any, targetClientId?: string): void {
|
|
143
|
+
return this.deltaManager.submitSignal(content, targetClientId);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
public flush(): void {
|
|
147
|
+
return this.deltaManager.flush();
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
private readonly onPrepareSend = (messageBuffer: any[]): void => {
|
|
151
|
+
this.emit("prepareSend", messageBuffer);
|
|
152
|
+
};
|
|
153
|
+
private readonly onSubmitOp = (message: IDocumentMessage): void => {
|
|
154
|
+
this.emit("submitOp", message);
|
|
155
|
+
};
|
|
156
|
+
private readonly onOp = (message: ISequencedDocumentMessage, processingTime: number): void => {
|
|
157
|
+
this.emit("op", message, processingTime);
|
|
158
|
+
};
|
|
159
|
+
private readonly onPong = (latency: number): void => {
|
|
160
|
+
this.emit("pong", latency);
|
|
161
|
+
};
|
|
162
|
+
private readonly onConnect = (details: IConnectionDetails, opsBehind?: number): void => {
|
|
163
|
+
this.emit("connect", details, opsBehind);
|
|
164
|
+
};
|
|
165
|
+
private readonly onDisconnect = (reason: string, error?: IAnyDriverError): void => {
|
|
166
|
+
this.emit("disconnect", reason, error);
|
|
167
|
+
};
|
|
168
|
+
private readonly onReadonly = (
|
|
169
|
+
readonly: boolean,
|
|
170
|
+
readonlyConnectionReason?: { reason: string; error?: IErrorBase },
|
|
171
|
+
): void => {
|
|
172
|
+
this.emit("readonly", readonly, readonlyConnectionReason);
|
|
173
|
+
};
|
|
49
174
|
}
|
|
@@ -22,16 +22,16 @@ import {
|
|
|
22
22
|
PerformanceEvent,
|
|
23
23
|
tagCodeArtifacts,
|
|
24
24
|
} from "@fluidframework/telemetry-utils";
|
|
25
|
-
import { BlobManager } from "../blobManager";
|
|
25
|
+
import { BlobManager } from "../blobManager.js";
|
|
26
26
|
import {
|
|
27
27
|
InactiveResponseHeaderKey,
|
|
28
28
|
RuntimeHeaderData,
|
|
29
29
|
TombstoneResponseHeaderKey,
|
|
30
|
-
} from "../containerRuntime";
|
|
31
|
-
import { ClientSessionExpiredError } from "../error";
|
|
32
|
-
import { ContainerMessageType, ContainerRuntimeGCMessage } from "../messageTypes";
|
|
33
|
-
import { IRefreshSummaryResult } from "../summary";
|
|
34
|
-
import { generateGCConfigs } from "./gcConfigs";
|
|
30
|
+
} from "../containerRuntime.js";
|
|
31
|
+
import { ClientSessionExpiredError } from "../error.js";
|
|
32
|
+
import { ContainerMessageType, ContainerRuntimeGCMessage } from "../messageTypes.js";
|
|
33
|
+
import { IRefreshSummaryResult } from "../summary/index.js";
|
|
34
|
+
import { generateGCConfigs } from "./gcConfigs.js";
|
|
35
35
|
import {
|
|
36
36
|
GCNodeType,
|
|
37
37
|
IGarbageCollector,
|
|
@@ -47,21 +47,21 @@ import {
|
|
|
47
47
|
GarbageCollectionMessage,
|
|
48
48
|
GarbageCollectionMessageType,
|
|
49
49
|
disableAutoRecoveryKey,
|
|
50
|
-
} from "./gcDefinitions";
|
|
50
|
+
} from "./gcDefinitions.js";
|
|
51
51
|
import {
|
|
52
52
|
cloneGCData,
|
|
53
53
|
compatBehaviorAllowsGCMessageType,
|
|
54
54
|
concatGarbageCollectionData,
|
|
55
55
|
getGCDataFromSnapshot,
|
|
56
|
-
} from "./gcHelpers";
|
|
57
|
-
import { runGarbageCollection } from "./gcReferenceGraphAlgorithm";
|
|
58
|
-
import { IGarbageCollectionSnapshotData, IGarbageCollectionState } from "./gcSummaryDefinitions";
|
|
59
|
-
import { GCSummaryStateTracker } from "./gcSummaryStateTracker";
|
|
56
|
+
} from "./gcHelpers.js";
|
|
57
|
+
import { runGarbageCollection } from "./gcReferenceGraphAlgorithm.js";
|
|
58
|
+
import { IGarbageCollectionSnapshotData, IGarbageCollectionState } from "./gcSummaryDefinitions.js";
|
|
59
|
+
import { GCSummaryStateTracker } from "./gcSummaryStateTracker.js";
|
|
60
60
|
import {
|
|
61
61
|
UnreferencedStateTracker,
|
|
62
62
|
UnreferencedStateTrackerMap,
|
|
63
|
-
} from "./gcUnreferencedStateTracker";
|
|
64
|
-
import { GCTelemetryTracker } from "./gcTelemetry";
|
|
63
|
+
} from "./gcUnreferencedStateTracker.js";
|
|
64
|
+
import { GCTelemetryTracker } from "./gcTelemetry.js";
|
|
65
65
|
|
|
66
66
|
/**
|
|
67
67
|
* The garbage collector for the container runtime. It consolidates the garbage collection functionality and maintains
|
|
@@ -98,6 +98,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
98
98
|
return this.configs.shouldRunGC;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
+
public readonly sessionExpiryTimerStarted: number | undefined;
|
|
101
102
|
// Keeps track of the GC state from the last run.
|
|
102
103
|
private gcDataFromLastRun: IGarbageCollectionData | undefined;
|
|
103
104
|
// Keeps a list of references (edges in the GC graph) between GC runs. Each entry has a node id and a list of
|
|
@@ -175,6 +176,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
175
176
|
|
|
176
177
|
const baseSnapshot = createParams.baseSnapshot;
|
|
177
178
|
const readAndParseBlob = createParams.readAndParseBlob;
|
|
179
|
+
const pendingSessionExpiryTimerStarted = createParams.sessionExpiryTimerStarted;
|
|
178
180
|
|
|
179
181
|
this.mc = createChildMonitoringContext({
|
|
180
182
|
logger: createParams.baseLogger,
|
|
@@ -192,14 +194,26 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
192
194
|
const overrideSessionExpiryTimeoutMs = this.mc.config.getNumber(
|
|
193
195
|
"Fluid.GarbageCollection.TestOverride.SessionExpiryMs",
|
|
194
196
|
);
|
|
195
|
-
|
|
197
|
+
let timeoutMs = this.configs.sessionExpiryTimeoutMs;
|
|
196
198
|
|
|
199
|
+
if (pendingSessionExpiryTimerStarted) {
|
|
200
|
+
// NOTE: This assumes the client clock hasn't been tampered with since the original session
|
|
201
|
+
const timeLapsedSincePendingTimer = Date.now() - pendingSessionExpiryTimerStarted;
|
|
202
|
+
timeoutMs -= timeLapsedSincePendingTimer;
|
|
203
|
+
}
|
|
204
|
+
timeoutMs = overrideSessionExpiryTimeoutMs ?? timeoutMs;
|
|
205
|
+
if (timeoutMs <= 0) {
|
|
206
|
+
this.runtime.closeFn(
|
|
207
|
+
new ClientSessionExpiredError(`Client session expired.`, timeoutMs),
|
|
208
|
+
);
|
|
209
|
+
}
|
|
197
210
|
this.sessionExpiryTimer = new Timer(timeoutMs, () => {
|
|
198
211
|
this.runtime.closeFn(
|
|
199
212
|
new ClientSessionExpiredError(`Client session expired.`, timeoutMs),
|
|
200
213
|
);
|
|
201
214
|
});
|
|
202
215
|
this.sessionExpiryTimer.start();
|
|
216
|
+
this.sessionExpiryTimerStarted = Date.now();
|
|
203
217
|
}
|
|
204
218
|
|
|
205
219
|
this.summaryStateTracker = new GCSummaryStateTracker(
|
|
@@ -454,7 +468,9 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
454
468
|
): Promise<IGCStats | undefined> {
|
|
455
469
|
const fullGC =
|
|
456
470
|
options.fullGC ??
|
|
457
|
-
(this.configs.runFullGC === true ||
|
|
471
|
+
(this.configs.runFullGC === true ||
|
|
472
|
+
this.summaryStateTracker.autoRecovery.fullGCRequested() ||
|
|
473
|
+
this.summaryStateTracker.doesSummaryStateNeedReset);
|
|
458
474
|
|
|
459
475
|
// Add the options that are used to run GC to the telemetry context.
|
|
460
476
|
telemetryContext?.setMultiple("fluid_GC", "Options", {
|
|
@@ -566,8 +582,9 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
566
582
|
);
|
|
567
583
|
|
|
568
584
|
// 4. Run the Sweep phase.
|
|
569
|
-
// It will
|
|
570
|
-
//
|
|
585
|
+
// It will initiate the deletion (sending the GC Sweep op) of any sweep-ready nodes that are
|
|
586
|
+
// allowed to be deleted per config, and tombstone the rest along with the tombstone-ready nodes.
|
|
587
|
+
// Note that no nodes will be deleted until the GC Sweep op is processed.
|
|
571
588
|
this.runSweepPhase(gcResult, tombstoneReadyNodeIds, sweepReadyNodeIds);
|
|
572
589
|
|
|
573
590
|
this.gcDataFromLastRun = cloneGCData(gcData);
|
|
@@ -667,24 +684,39 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
667
684
|
*/
|
|
668
685
|
|
|
669
686
|
if (this.configs.testMode) {
|
|
670
|
-
// If we are running in GC test mode, unreferenced nodes (gcResult.deletedNodeIds) are deleted.
|
|
671
|
-
this.runtime.
|
|
687
|
+
// If we are running in GC test mode, unreferenced nodes (gcResult.deletedNodeIds) are deleted immediately.
|
|
688
|
+
this.runtime.deleteSweepReadyNodes(gcResult.deletedNodeIds);
|
|
672
689
|
return;
|
|
673
690
|
}
|
|
674
691
|
|
|
675
|
-
//
|
|
692
|
+
// We'll build up the lists of nodes to be either Tombstoned or Deleted
|
|
693
|
+
// based on the configuration and the nodes' current state.
|
|
694
|
+
// We must Tombstone any sweep-ready node that Sweep won't run for.
|
|
676
695
|
// This is important because a container may never load during a node's Sweep Grace Period,
|
|
677
696
|
// so that node would directly become sweep-ready skipping over tombstone-ready state,
|
|
678
697
|
// but should be Tombstoned since Sweep is disabled.
|
|
679
|
-
const { nodesToTombstone, nodesToDelete } =
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
:
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
698
|
+
const { nodesToTombstone, nodesToDelete } = {
|
|
699
|
+
nodesToTombstone: [...tombstoneReadyNodes],
|
|
700
|
+
nodesToDelete: [] as string[],
|
|
701
|
+
};
|
|
702
|
+
switch (this.configs.shouldRunSweep) {
|
|
703
|
+
case "YES":
|
|
704
|
+
nodesToDelete.push(...sweepReadyNodes);
|
|
705
|
+
break;
|
|
706
|
+
case "ONLY_BLOBS":
|
|
707
|
+
sweepReadyNodes.forEach((nodeId) => {
|
|
708
|
+
const nodeType = this.runtime.getNodeType(nodeId);
|
|
709
|
+
if (nodeType === GCNodeType.Blob) {
|
|
710
|
+
nodesToDelete.push(nodeId);
|
|
711
|
+
} else {
|
|
712
|
+
nodesToTombstone.push(nodeId);
|
|
713
|
+
}
|
|
714
|
+
});
|
|
715
|
+
break;
|
|
716
|
+
default: // case "NO":
|
|
717
|
+
nodesToTombstone.push(...sweepReadyNodes);
|
|
718
|
+
break;
|
|
719
|
+
}
|
|
688
720
|
|
|
689
721
|
if (this.configs.tombstoneMode) {
|
|
690
722
|
this.tombstones = nodesToTombstone;
|
|
@@ -692,7 +724,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
692
724
|
this.runtime.updateTombstonedRoutes(this.tombstones);
|
|
693
725
|
}
|
|
694
726
|
|
|
695
|
-
if (
|
|
727
|
+
if (nodesToDelete.length > 0) {
|
|
696
728
|
// Do not send DDS node ids in the GC op. This is an optimization to reduce its size. Since GC applies to
|
|
697
729
|
// to data store only, all its DDSes are deleted along with it. The DDS ids will be retrieved from the
|
|
698
730
|
// local state when processing the op.
|
|
@@ -826,8 +858,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
826
858
|
}
|
|
827
859
|
|
|
828
860
|
return this.summaryStateTracker.summarize(
|
|
829
|
-
fullTree,
|
|
830
|
-
trackState,
|
|
861
|
+
trackState && !fullTree,
|
|
831
862
|
gcState,
|
|
832
863
|
this.deletedNodes,
|
|
833
864
|
this.tombstones,
|
|
@@ -875,7 +906,11 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
875
906
|
|
|
876
907
|
// Mark the node as referenced to ensure it isn't Swept
|
|
877
908
|
const tombstonedNodePath = message.contents.nodePath;
|
|
878
|
-
this.addedOutboundReference("/", tombstonedNodePath);
|
|
909
|
+
this.addedOutboundReference("/", tombstonedNodePath, true /* autorecovery */);
|
|
910
|
+
|
|
911
|
+
// In case the cause of the TombstoneLoaded event is incorrect GC Data (i.e. the object is actually reachable),
|
|
912
|
+
// do fullGC on the next run to get a chance to repair (in the likely case the bug is not deterministic)
|
|
913
|
+
this.summaryStateTracker.autoRecovery.requestFullGCOnNextRun();
|
|
879
914
|
|
|
880
915
|
break;
|
|
881
916
|
}
|
|
@@ -900,6 +935,10 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
900
935
|
/**
|
|
901
936
|
* Delete nodes that are sweep-ready. Call the runtime to delete these nodes and clear the unreferenced state
|
|
902
937
|
* tracking for nodes that are actually deleted by the runtime.
|
|
938
|
+
*
|
|
939
|
+
* Note that this doesn't check any configuration around whether Sweep is enabled.
|
|
940
|
+
* That happens before the op is submitted, and from that point, any client should execute the delete.
|
|
941
|
+
*
|
|
903
942
|
* @param sweepReadyNodeIds - The ids of nodes that are ready to be deleted.
|
|
904
943
|
*/
|
|
905
944
|
private deleteSweepReadyNodes(sweepReadyNodeIds: readonly string[]) {
|
|
@@ -1035,7 +1074,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
1035
1074
|
const containerGCMessage: ContainerRuntimeGCMessage = {
|
|
1036
1075
|
type: ContainerMessageType.GC,
|
|
1037
1076
|
contents: {
|
|
1038
|
-
type:
|
|
1077
|
+
type: GarbageCollectionMessageType.TombstoneLoaded,
|
|
1039
1078
|
nodePath,
|
|
1040
1079
|
},
|
|
1041
1080
|
compatDetails: { behavior: "Ignore" },
|
|
@@ -1169,8 +1208,9 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
1169
1208
|
|
|
1170
1209
|
/**
|
|
1171
1210
|
* Generates the stats of a garbage collection sweep phase run.
|
|
1172
|
-
* @param deletedNodes - The nodes that have been deleted
|
|
1173
|
-
* @param sweepReadyNodes - The nodes that are sweep-ready in this GC run.
|
|
1211
|
+
* @param deletedNodes - The nodes that have already been deleted even before this run.
|
|
1212
|
+
* @param sweepReadyNodes - The nodes that are sweep-ready in this GC run. These will be deleted but are not deleted yet,
|
|
1213
|
+
* due to either sweep not being enabled or the Sweep Op needing to roundtrip before the delete is executed.
|
|
1174
1214
|
* @param markPhaseStats - The stats of the mark phase run.
|
|
1175
1215
|
* @returns the stats of the sweep phase run.
|
|
1176
1216
|
*/
|
|
@@ -1216,19 +1256,18 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
1216
1256
|
}
|
|
1217
1257
|
}
|
|
1218
1258
|
|
|
1219
|
-
//
|
|
1259
|
+
// The counts from the mark phase stats do not include nodes that were
|
|
1220
1260
|
// deleted in previous runs. So, add the deleted node counts to life time stats.
|
|
1221
1261
|
sweepPhaseStats.lifetimeNodeCount += sweepPhaseStats.deletedNodeCount;
|
|
1222
1262
|
sweepPhaseStats.lifetimeDataStoreCount += sweepPhaseStats.deletedDataStoreCount;
|
|
1223
1263
|
sweepPhaseStats.lifetimeAttachmentBlobCount += sweepPhaseStats.deletedAttachmentBlobCount;
|
|
1224
1264
|
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
// If sweep is not enabled,
|
|
1230
|
-
//
|
|
1231
|
-
// If sweep is enabled, this will happen in the run after the GC op round trips back.
|
|
1265
|
+
// These stats are used to estimate the impact of GC in terms of how much garbage is/will be cleaned up.
|
|
1266
|
+
// So we include the current sweep-ready node stats since these nodes will be deleted eventually.
|
|
1267
|
+
// - If sweep is enabled, this will happen in the run after the GC op round trips back
|
|
1268
|
+
// (they'll be in deletedNodes that time).
|
|
1269
|
+
// - If sweep is not enabled, we still want to include these nodes since they
|
|
1270
|
+
// _will be_ deleted once it is enabled.
|
|
1232
1271
|
for (const nodeId of sweepReadyNodes) {
|
|
1233
1272
|
sweepPhaseStats.deletedNodeCount++;
|
|
1234
1273
|
const nodeType = this.runtime.getNodeType(nodeId);
|
|
@@ -1238,6 +1277,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
1238
1277
|
sweepPhaseStats.deletedAttachmentBlobCount++;
|
|
1239
1278
|
}
|
|
1240
1279
|
}
|
|
1280
|
+
|
|
1241
1281
|
return sweepPhaseStats;
|
|
1242
1282
|
}
|
|
1243
1283
|
}
|
package/src/gc/gcConfigs.ts
CHANGED
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
UsageError,
|
|
9
9
|
validatePrecondition,
|
|
10
10
|
} from "@fluidframework/telemetry-utils";
|
|
11
|
-
import { IContainerRuntimeMetadata } from "../summary";
|
|
11
|
+
import { IContainerRuntimeMetadata } from "../summary/index.js";
|
|
12
12
|
import {
|
|
13
13
|
nextGCVersion,
|
|
14
14
|
defaultInactiveTimeoutMs,
|
|
@@ -32,8 +32,10 @@ import {
|
|
|
32
32
|
defaultSweepGracePeriodMs,
|
|
33
33
|
gcGenerationOptionName,
|
|
34
34
|
IGCMetadata_Deprecated,
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
disableDatastoreSweepKey,
|
|
36
|
+
gcDisableDataStoreSweepOptionName,
|
|
37
|
+
} from "./gcDefinitions.js";
|
|
38
|
+
import { getGCVersion, shouldAllowGcSweep } from "./gcHelpers.js";
|
|
37
39
|
|
|
38
40
|
/**
|
|
39
41
|
* Generates configurations for the Garbage Collector that it uses to determine what to run and how.
|
|
@@ -137,18 +139,26 @@ export function generateGCConfigs(
|
|
|
137
139
|
* Whether sweep should run or not. This refers to whether Tombstones should fail on load and whether
|
|
138
140
|
* sweep-ready nodes should be deleted.
|
|
139
141
|
*
|
|
140
|
-
* Assuming overall GC is enabled and
|
|
142
|
+
* Assuming overall GC is enabled and tombstoneTimeout is provided, the following conditions have to be met to run sweep:
|
|
141
143
|
*
|
|
142
|
-
* 1. Sweep should be
|
|
143
|
-
* 2. Sweep should be enabled for this session.
|
|
144
|
+
* 1. Sweep should be allowed in this container.
|
|
145
|
+
* 2. Sweep should be enabled for this session, optionally restricted to attachment blobs only.
|
|
144
146
|
*
|
|
145
147
|
* These conditions can be overridden via the RunSweep feature flag.
|
|
146
148
|
*/
|
|
147
|
-
const
|
|
149
|
+
const sweepEnabled: boolean =
|
|
148
150
|
!shouldRunGC || tombstoneTimeoutMs === undefined
|
|
149
151
|
? false
|
|
150
152
|
: mc.config.getBoolean(runSweepKey) ??
|
|
151
153
|
(sweepAllowed && createParams.gcOptions.enableGCSweep === true);
|
|
154
|
+
const disableDatastoreSweep =
|
|
155
|
+
mc.config.getBoolean(disableDatastoreSweepKey) === true ||
|
|
156
|
+
createParams.gcOptions[gcDisableDataStoreSweepOptionName] === true;
|
|
157
|
+
const shouldRunSweep: IGarbageCollectorConfigs["shouldRunSweep"] = sweepEnabled
|
|
158
|
+
? disableDatastoreSweep
|
|
159
|
+
? "ONLY_BLOBS"
|
|
160
|
+
: "YES"
|
|
161
|
+
: "NO";
|
|
152
162
|
|
|
153
163
|
// Override inactive timeout if test config or gc options to override it is set.
|
|
154
164
|
const inactiveTimeoutMs =
|
package/src/gc/gcDefinitions.ts
CHANGED
|
@@ -18,9 +18,9 @@ import {
|
|
|
18
18
|
IContainerRuntimeMetadata,
|
|
19
19
|
ICreateContainerMetadata,
|
|
20
20
|
IRefreshSummaryResult,
|
|
21
|
-
} from "../summary";
|
|
22
|
-
import { RuntimeHeaderData } from "../containerRuntime";
|
|
23
|
-
import { ContainerRuntimeGCMessage } from "../messageTypes";
|
|
21
|
+
} from "../summary/index.js";
|
|
22
|
+
import { RuntimeHeaderData } from "../containerRuntime.js";
|
|
23
|
+
import { ContainerRuntimeGCMessage } from "../messageTypes.js";
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* @alpha
|
|
@@ -40,6 +40,12 @@ export const nextGCVersion: GCVersion = 4;
|
|
|
40
40
|
*/
|
|
41
41
|
export const gcDisableThrowOnTombstoneLoadOptionName = "gcDisableThrowOnTombstoneLoad";
|
|
42
42
|
|
|
43
|
+
/**
|
|
44
|
+
* This undocumented GC Option (on ContainerRuntime Options) allows an app to enable Sweep for blobs only.
|
|
45
|
+
* Only applies if enableGCSweep option is set to true.
|
|
46
|
+
*/
|
|
47
|
+
export const gcDisableDataStoreSweepOptionName = "disableDataStoreSweep";
|
|
48
|
+
|
|
43
49
|
/**
|
|
44
50
|
* This undocumented GC Option (on ContainerRuntime Options) allows configuring which documents can have Sweep enabled.
|
|
45
51
|
* This provides a way to disable both Tombstone Enforcement and Sweep.
|
|
@@ -70,10 +76,8 @@ export const throwOnTombstoneLoadOverrideKey =
|
|
|
70
76
|
export const throwOnTombstoneUsageKey = "Fluid.GarbageCollection.ThrowOnTombstoneUsage";
|
|
71
77
|
/** Config key to enable GC version upgrade. */
|
|
72
78
|
export const gcVersionUpgradeToV4Key = "Fluid.GarbageCollection.GCVersionUpgradeToV4";
|
|
73
|
-
/** Config key to disable GC sweep for datastores. */
|
|
79
|
+
/** Config key to disable GC sweep for datastores. They'll merely be Tombstoned. */
|
|
74
80
|
export const disableDatastoreSweepKey = "Fluid.GarbageCollection.DisableDataStoreSweep";
|
|
75
|
-
/** Config key to disable GC sweep for attachment blobs. */
|
|
76
|
-
export const disableAttachmentBlobSweepKey = "Fluid.GarbageCollection.DisableAttachmentBlobSweep";
|
|
77
81
|
/** Config key to revert new paradigm of detecting outbound routes in ContainerRuntime layer (use true) */
|
|
78
82
|
export const detectOutboundRoutesViaDDSKey = "Fluid.GarbageCollection.DetectOutboundRoutesViaDDS";
|
|
79
83
|
/** Config key to disable auto-recovery mechanism that protects Tombstones that are loaded from being swept (use true) */
|
|
@@ -303,8 +307,6 @@ export interface IGarbageCollectionRuntime {
|
|
|
303
307
|
getGCData(fullGC?: boolean): Promise<IGarbageCollectionData>;
|
|
304
308
|
/** After GC has run, called to notify the runtime of routes that are used in it. */
|
|
305
309
|
updateUsedRoutes(usedRoutes: readonly string[]): void;
|
|
306
|
-
/** After GC has run, called to notify the runtime of routes that are unused in it. */
|
|
307
|
-
updateUnusedRoutes(unusedRoutes: readonly string[]): void;
|
|
308
310
|
/**
|
|
309
311
|
* After GC has run and identified nodes that are sweep ready, called to delete the sweep ready nodes. The runtime
|
|
310
312
|
* should return the routes of nodes that were deleted.
|
|
@@ -323,6 +325,12 @@ export interface IGarbageCollectionRuntime {
|
|
|
323
325
|
|
|
324
326
|
/** Defines the contract for the garbage collector. */
|
|
325
327
|
export interface IGarbageCollector {
|
|
328
|
+
/**
|
|
329
|
+
* Tells the time at which session expiry timer started in a previous container.
|
|
330
|
+
* This is only set when loading from a stashed container and will be equal to the
|
|
331
|
+
* original container's local client time when it was loaded (and started the session expiry timer).
|
|
332
|
+
*/
|
|
333
|
+
readonly sessionExpiryTimerStarted: number | undefined;
|
|
326
334
|
/** Tells whether GC should run or not. */
|
|
327
335
|
readonly shouldRunGC: boolean;
|
|
328
336
|
/** Tells whether the GC state in summary needs to be reset in the next summary. */
|
|
@@ -371,7 +379,7 @@ export interface IGarbageCollector {
|
|
|
371
379
|
headerData?: RuntimeHeaderData,
|
|
372
380
|
): void;
|
|
373
381
|
/** Called when a reference is added to a node. Used to identify nodes that were referenced between summaries. */
|
|
374
|
-
addedOutboundReference(fromNodePath: string, toNodePath: string): void;
|
|
382
|
+
addedOutboundReference(fromNodePath: string, toNodePath: string, autorecovery?: true): void;
|
|
375
383
|
/** Called to process a garbage collection message. */
|
|
376
384
|
processMessage(message: ContainerRuntimeGCMessage, local: boolean): void;
|
|
377
385
|
/** Returns true if this node has been deleted by GC during sweep phase. */
|
|
@@ -394,6 +402,7 @@ export interface IGarbageCollectorCreateParams {
|
|
|
394
402
|
readonly getLastSummaryTimestampMs: () => number | undefined;
|
|
395
403
|
readonly readAndParseBlob: ReadAndParseBlob;
|
|
396
404
|
readonly submitMessage: (message: ContainerRuntimeGCMessage) => void;
|
|
405
|
+
readonly sessionExpiryTimerStarted?: number | undefined;
|
|
397
406
|
}
|
|
398
407
|
|
|
399
408
|
/**
|
|
@@ -465,7 +474,7 @@ export interface IGarbageCollectorConfigs {
|
|
|
465
474
|
*/
|
|
466
475
|
readonly gcEnabled: boolean;
|
|
467
476
|
/**
|
|
468
|
-
* Tracks if sweep phase is
|
|
477
|
+
* Tracks if sweep phase is allowed for this document. This is specified during document creation and doesn't change
|
|
469
478
|
* throughout its lifetime.
|
|
470
479
|
*/
|
|
471
480
|
readonly sweepEnabled: boolean;
|
|
@@ -475,10 +484,11 @@ export interface IGarbageCollectorConfigs {
|
|
|
475
484
|
*/
|
|
476
485
|
readonly shouldRunGC: boolean;
|
|
477
486
|
/**
|
|
478
|
-
* Tracks if sweep phase should run or not
|
|
479
|
-
*
|
|
487
|
+
* Tracks if sweep phase should run or not, or if it should run only for attachment blobs.
|
|
488
|
+
* Even if the sweep phase is allowed for a document (see sweepEnabled), it may be disabled or partially enabled
|
|
489
|
+
* for the session, depending on a variety of other configurations present.
|
|
480
490
|
*/
|
|
481
|
-
readonly shouldRunSweep:
|
|
491
|
+
readonly shouldRunSweep: "YES" | "ONLY_BLOBS" | "NO";
|
|
482
492
|
/**
|
|
483
493
|
* If true, bypass optimizations and generate GC data for all nodes irrespective of whether a node changed or not.
|
|
484
494
|
*/
|
package/src/gc/gcHelpers.ts
CHANGED
|
@@ -12,12 +12,12 @@ import {
|
|
|
12
12
|
IGarbageCollectionData,
|
|
13
13
|
IGarbageCollectionDetailsBase,
|
|
14
14
|
} from "@fluidframework/runtime-definitions";
|
|
15
|
-
import { GCFeatureMatrix, GCVersion, IGCMetadata } from "./gcDefinitions";
|
|
15
|
+
import { GCFeatureMatrix, GCVersion, IGCMetadata } from "./gcDefinitions.js";
|
|
16
16
|
import {
|
|
17
17
|
IGarbageCollectionNodeData,
|
|
18
18
|
IGarbageCollectionSnapshotData,
|
|
19
19
|
IGarbageCollectionState,
|
|
20
|
-
} from "./gcSummaryDefinitions";
|
|
20
|
+
} from "./gcSummaryDefinitions.js";
|
|
21
21
|
|
|
22
22
|
export function getGCVersion(metadata?: IGCMetadata): GCVersion {
|
|
23
23
|
if (!metadata) {
|