@fluidframework/container-runtime 2.0.0-rc.1.0.4 → 2.0.0-rc.2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{.eslintrc.js → .eslintrc.cjs} +5 -5
- package/{.mocharc.js → .mocharc.cjs} +1 -1
- package/CHANGELOG.md +54 -0
- package/README.md +45 -0
- package/{api-extractor-esm.json → api-extractor-cjs.json} +5 -1
- package/api-extractor-lint.json +1 -1
- package/api-extractor.json +1 -1
- package/api-report/container-runtime.api.md +68 -30
- package/dist/batchTracker.d.ts +1 -2
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager.js.map +1 -1
- package/dist/channelCollection.d.ts +223 -0
- package/dist/channelCollection.d.ts.map +1 -0
- package/dist/{dataStores.js → channelCollection.js} +399 -83
- package/dist/channelCollection.js.map +1 -0
- package/dist/connectionTelemetry.d.ts +11 -1
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +42 -4
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/container-runtime-alpha.d.ts +98 -40
- package/dist/container-runtime-beta.d.ts +27 -9
- package/dist/container-runtime-public.d.ts +27 -9
- package/dist/container-runtime-untrimmed.d.ts +123 -40
- package/dist/containerHandleContext.d.ts +1 -1
- package/dist/containerHandleContext.d.ts.map +1 -1
- package/dist/containerHandleContext.js.map +1 -1
- package/dist/containerRuntime.d.ts +79 -55
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +541 -411
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.d.ts +2 -3
- package/dist/dataStore.d.ts.map +1 -1
- package/dist/dataStore.js +12 -11
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +71 -30
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +182 -141
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts +1 -1
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/deltaManagerSummarizerProxy.d.ts +29 -4
- package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
- package/dist/deltaManagerSummarizerProxy.js +91 -5
- package/dist/deltaManagerSummarizerProxy.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts +22 -5
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +134 -75
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.d.ts +2 -2
- package/dist/gc/gcConfigs.d.ts.map +1 -1
- package/dist/gc/gcConfigs.js +21 -21
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +29 -6
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js +5 -1
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcHelpers.d.ts +2 -2
- package/dist/gc/gcHelpers.d.ts.map +1 -1
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcReferenceGraphAlgorithm.d.ts +1 -1
- package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -1
- package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts +12 -5
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js +18 -6
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts +7 -7
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +20 -20
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.d.ts +6 -1
- package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.js +22 -11
- package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
- package/dist/gc/index.d.ts +8 -8
- package/dist/gc/index.d.ts.map +1 -1
- package/dist/gc/index.js +40 -38
- package/dist/gc/index.js.map +1 -1
- package/dist/index.d.ts +8 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -40
- package/dist/index.js.map +1 -1
- package/dist/messageTypes.d.ts +4 -4
- package/dist/messageTypes.d.ts.map +1 -1
- package/dist/messageTypes.js.map +1 -1
- package/dist/opLifecycle/batchManager.d.ts +2 -2
- package/dist/opLifecycle/batchManager.d.ts.map +1 -1
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/definitions.d.ts +2 -2
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -1
- package/dist/opLifecycle/index.d.ts +8 -8
- package/dist/opLifecycle/index.d.ts.map +1 -1
- package/dist/opLifecycle/index.js +18 -18
- package/dist/opLifecycle/index.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts +1 -1
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +4 -4
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +3 -3
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js +1 -10
- package/dist/opLifecycle/opGroupingManager.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts +1 -1
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +5 -5
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +7 -7
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +20 -12
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts +4 -4
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js +2 -2
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/dist/package.json +3 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/pendingStateManager.d.ts +2 -1
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +18 -10
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/scheduleManager.d.ts +1 -2
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js +5 -5
- package/dist/scheduleManager.js.map +1 -1
- package/dist/summary/index.d.ts +12 -12
- package/dist/summary/index.d.ts.map +1 -1
- package/dist/summary/index.js +43 -43
- package/dist/summary/index.js.map +1 -1
- package/dist/summary/orderedClientElection.js +8 -8
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -1
- package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/dist/summary/runningSummarizer.d.ts +11 -10
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +114 -81
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.d.ts +4 -4
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +6 -6
- package/dist/summary/summarizer.js.map +1 -1
- package/dist/summary/summarizerClientElection.d.ts +2 -2
- package/dist/summary/summarizerClientElection.d.ts.map +1 -1
- package/dist/summary/summarizerClientElection.js.map +1 -1
- package/dist/summary/summarizerHeuristics.d.ts +3 -3
- package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
- package/dist/summary/summarizerHeuristics.js.map +1 -1
- package/dist/summary/summarizerNode/index.d.ts +3 -3
- package/dist/summary/summarizerNode/index.d.ts.map +1 -1
- package/dist/summary/summarizerNode/index.js +4 -4
- package/dist/summary/summarizerNode/index.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.d.ts +17 -7
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js +45 -57
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +10 -19
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.js +1 -21
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +5 -6
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +16 -16
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +10 -21
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +15 -2
- package/dist/summary/summaryFormat.d.ts.map +1 -1
- package/dist/summary/summaryFormat.js.map +1 -1
- package/dist/summary/summaryGenerator.d.ts +6 -5
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +10 -1
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryManager.d.ts +5 -6
- package/dist/summary/summaryManager.d.ts.map +1 -1
- package/dist/summary/summaryManager.js +4 -5
- package/dist/summary/summaryManager.js.map +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/lib/{batchTracker.d.mts → batchTracker.d.ts} +2 -3
- package/lib/batchTracker.d.ts.map +1 -0
- package/lib/{batchTracker.mjs → batchTracker.js} +1 -1
- package/lib/batchTracker.js.map +1 -0
- package/lib/{blobManager.d.mts → blobManager.d.ts} +1 -1
- package/lib/blobManager.d.ts.map +1 -0
- package/lib/{blobManager.mjs → blobManager.js} +1 -1
- package/lib/blobManager.js.map +1 -0
- package/lib/channelCollection.d.ts +223 -0
- package/lib/channelCollection.d.ts.map +1 -0
- package/lib/{dataStores.mjs → channelCollection.js} +384 -71
- package/lib/channelCollection.js.map +1 -0
- package/lib/{connectionTelemetry.d.mts → connectionTelemetry.d.ts} +12 -2
- package/lib/connectionTelemetry.d.ts.map +1 -0
- package/lib/{connectionTelemetry.mjs → connectionTelemetry.js} +43 -5
- package/lib/connectionTelemetry.js.map +1 -0
- package/lib/{container-runtime-alpha.d.mts → container-runtime-alpha.d.ts} +98 -40
- package/lib/{container-runtime-public.d.mts → container-runtime-beta.d.ts} +27 -9
- package/lib/{container-runtime-beta.d.mts → container-runtime-public.d.ts} +27 -9
- package/lib/{container-runtime-untrimmed.d.mts → container-runtime-untrimmed.d.ts} +123 -40
- package/lib/{containerHandleContext.d.mts → containerHandleContext.d.ts} +2 -2
- package/lib/containerHandleContext.d.ts.map +1 -0
- package/lib/{containerHandleContext.mjs → containerHandleContext.js} +1 -1
- package/lib/containerHandleContext.js.map +1 -0
- package/lib/{containerRuntime.d.mts → containerRuntime.d.ts} +84 -56
- package/lib/containerRuntime.d.ts.map +1 -0
- package/lib/{containerRuntime.mjs → containerRuntime.js} +460 -332
- package/lib/containerRuntime.js.map +1 -0
- package/lib/{dataStore.d.mts → dataStore.d.ts} +3 -4
- package/lib/dataStore.d.ts.map +1 -0
- package/lib/{dataStore.mjs → dataStore.js} +13 -12
- package/lib/dataStore.js.map +1 -0
- package/lib/{dataStoreContext.d.mts → dataStoreContext.d.ts} +72 -31
- package/lib/dataStoreContext.d.ts.map +1 -0
- package/lib/{dataStoreContext.mjs → dataStoreContext.js} +174 -133
- package/lib/dataStoreContext.js.map +1 -0
- package/lib/{dataStoreContexts.d.mts → dataStoreContexts.d.ts} +2 -2
- package/lib/dataStoreContexts.d.ts.map +1 -0
- package/lib/{dataStoreContexts.mjs → dataStoreContexts.js} +1 -1
- package/lib/dataStoreContexts.js.map +1 -0
- package/lib/{dataStoreRegistry.d.mts → dataStoreRegistry.d.ts} +1 -1
- package/lib/dataStoreRegistry.d.ts.map +1 -0
- package/lib/{dataStoreRegistry.mjs → dataStoreRegistry.js} +5 -1
- package/lib/dataStoreRegistry.js.map +1 -0
- package/{dist/deltaManagerProxyBase.d.ts → lib/deltaManagerSummarizerProxy.d.ts} +16 -7
- package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -0
- package/lib/deltaManagerSummarizerProxy.js +124 -0
- package/lib/deltaManagerSummarizerProxy.js.map +1 -0
- package/lib/{deltaScheduler.d.mts → deltaScheduler.d.ts} +1 -1
- package/lib/deltaScheduler.d.ts.map +1 -0
- package/lib/{deltaScheduler.mjs → deltaScheduler.js} +1 -1
- package/lib/deltaScheduler.js.map +1 -0
- package/lib/{error.d.mts → error.d.ts} +1 -1
- package/lib/error.d.ts.map +1 -0
- package/lib/{error.mjs → error.js} +1 -1
- package/lib/error.js.map +1 -0
- package/lib/gc/{garbageCollection.d.mts → garbageCollection.d.ts} +23 -6
- package/lib/gc/garbageCollection.d.ts.map +1 -0
- package/lib/gc/{garbageCollection.mjs → garbageCollection.js} +103 -44
- package/lib/gc/garbageCollection.js.map +1 -0
- package/lib/gc/{gcConfigs.d.mts → gcConfigs.d.ts} +3 -3
- package/lib/gc/gcConfigs.d.ts.map +1 -0
- package/lib/gc/{gcConfigs.mjs → gcConfigs.js} +3 -3
- package/lib/gc/gcConfigs.js.map +1 -0
- package/lib/gc/{gcDefinitions.d.mts → gcDefinitions.d.ts} +30 -7
- package/lib/gc/gcDefinitions.d.ts.map +1 -0
- package/lib/gc/{gcDefinitions.mjs → gcDefinitions.js} +5 -1
- package/lib/gc/gcDefinitions.js.map +1 -0
- package/lib/gc/{gcHelpers.d.mts → gcHelpers.d.ts} +3 -3
- package/lib/gc/{gcHelpers.d.mts.map → gcHelpers.d.ts.map} +1 -1
- package/lib/gc/{gcHelpers.mjs → gcHelpers.js} +1 -1
- package/lib/gc/gcHelpers.js.map +1 -0
- package/lib/gc/{gcReferenceGraphAlgorithm.d.mts → gcReferenceGraphAlgorithm.d.ts} +2 -2
- package/lib/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
- package/lib/gc/{gcReferenceGraphAlgorithm.mjs → gcReferenceGraphAlgorithm.js} +1 -1
- package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -0
- package/lib/gc/{gcSummaryDefinitions.d.mts → gcSummaryDefinitions.d.ts} +1 -1
- package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -0
- package/lib/gc/{gcSummaryDefinitions.mjs → gcSummaryDefinitions.js} +1 -1
- package/lib/gc/gcSummaryDefinitions.js.map +1 -0
- package/lib/gc/{gcSummaryStateTracker.d.mts → gcSummaryStateTracker.d.ts} +13 -6
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
- package/lib/gc/{gcSummaryStateTracker.mjs → gcSummaryStateTracker.js} +17 -5
- package/lib/gc/gcSummaryStateTracker.js.map +1 -0
- package/lib/gc/{gcTelemetry.d.mts → gcTelemetry.d.ts} +8 -8
- package/lib/gc/gcTelemetry.d.ts.map +1 -0
- package/lib/gc/{gcTelemetry.mjs → gcTelemetry.js} +5 -5
- package/lib/gc/gcTelemetry.js.map +1 -0
- package/lib/gc/{gcUnreferencedStateTracker.d.mts → gcUnreferencedStateTracker.d.ts} +7 -2
- package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
- package/lib/gc/{gcUnreferencedStateTracker.mjs → gcUnreferencedStateTracker.js} +12 -2
- package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
- package/lib/gc/{index.d.mts → index.d.ts} +9 -9
- package/lib/gc/index.d.ts.map +1 -0
- package/lib/gc/{index.mjs → index.js} +8 -8
- package/lib/gc/index.js.map +1 -0
- package/lib/{index.d.mts → index.d.ts} +9 -21
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +12 -0
- package/lib/index.js.map +1 -0
- package/lib/{messageTypes.d.mts → messageTypes.d.ts} +5 -5
- package/lib/messageTypes.d.ts.map +1 -0
- package/lib/{messageTypes.mjs → messageTypes.js} +1 -1
- package/lib/messageTypes.js.map +1 -0
- package/lib/{metadata.d.mts → metadata.d.ts} +1 -1
- package/lib/metadata.d.ts.map +1 -0
- package/lib/{metadata.mjs → metadata.js} +1 -1
- package/lib/metadata.js.map +1 -0
- package/lib/opLifecycle/{batchManager.d.mts → batchManager.d.ts} +3 -3
- package/lib/opLifecycle/batchManager.d.ts.map +1 -0
- package/lib/opLifecycle/{batchManager.mjs → batchManager.js} +1 -1
- package/lib/opLifecycle/batchManager.js.map +1 -0
- package/lib/opLifecycle/{definitions.d.mts → definitions.d.ts} +3 -3
- package/lib/opLifecycle/definitions.d.ts.map +1 -0
- package/lib/opLifecycle/{definitions.mjs → definitions.js} +1 -1
- package/lib/opLifecycle/definitions.js.map +1 -0
- package/lib/opLifecycle/index.d.ts +13 -0
- package/lib/opLifecycle/index.d.ts.map +1 -0
- package/lib/opLifecycle/index.js +12 -0
- package/lib/opLifecycle/index.js.map +1 -0
- package/lib/opLifecycle/{opCompressor.d.mts → opCompressor.d.ts} +2 -2
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -0
- package/lib/opLifecycle/{opCompressor.mjs → opCompressor.js} +3 -3
- package/lib/opLifecycle/opCompressor.js.map +1 -0
- package/lib/opLifecycle/{opDecompressor.d.mts → opDecompressor.d.ts} +2 -2
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -0
- package/lib/opLifecycle/{opDecompressor.mjs → opDecompressor.js} +2 -2
- package/lib/opLifecycle/opDecompressor.js.map +1 -0
- package/lib/opLifecycle/{opGroupingManager.d.mts → opGroupingManager.d.ts} +2 -2
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -0
- package/lib/opLifecycle/{opGroupingManager.mjs → opGroupingManager.js} +2 -11
- package/lib/opLifecycle/opGroupingManager.js.map +1 -0
- package/lib/opLifecycle/{opSplitter.d.mts → opSplitter.d.ts} +2 -2
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -0
- package/lib/opLifecycle/{opSplitter.mjs → opSplitter.js} +3 -3
- package/lib/opLifecycle/opSplitter.js.map +1 -0
- package/lib/opLifecycle/{outbox.d.mts → outbox.d.ts} +8 -8
- package/lib/opLifecycle/outbox.d.ts.map +1 -0
- package/lib/opLifecycle/{outbox.mjs → outbox.js} +12 -4
- package/lib/opLifecycle/outbox.js.map +1 -0
- package/lib/opLifecycle/{remoteMessageProcessor.d.mts → remoteMessageProcessor.d.ts} +5 -5
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
- package/lib/opLifecycle/{remoteMessageProcessor.mjs → remoteMessageProcessor.js} +2 -2
- package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -0
- package/lib/{opProperties.d.mts → opProperties.d.ts} +1 -1
- package/lib/opProperties.d.ts.map +1 -0
- package/lib/{opProperties.mjs → opProperties.js} +1 -1
- package/lib/opProperties.js.map +1 -0
- package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
- package/lib/packageVersion.d.ts.map +1 -0
- package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
- package/lib/packageVersion.js.map +1 -0
- package/lib/{pendingStateManager.d.mts → pendingStateManager.d.ts} +3 -2
- package/lib/pendingStateManager.d.ts.map +1 -0
- package/lib/{pendingStateManager.mjs → pendingStateManager.js} +18 -10
- package/lib/pendingStateManager.js.map +1 -0
- package/lib/{scheduleManager.d.mts → scheduleManager.d.ts} +6 -3
- package/lib/scheduleManager.d.ts.map +1 -0
- package/lib/{scheduleManager.mjs → scheduleManager.js} +3 -3
- package/lib/scheduleManager.js.map +1 -0
- package/lib/{storageServiceWithAttachBlobs.d.mts → storageServiceWithAttachBlobs.d.ts} +1 -1
- package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -0
- package/lib/{storageServiceWithAttachBlobs.mjs → storageServiceWithAttachBlobs.js} +1 -1
- package/lib/storageServiceWithAttachBlobs.js.map +1 -0
- package/lib/summary/{index.d.mts → index.d.ts} +13 -13
- package/lib/summary/index.d.ts.map +1 -0
- package/lib/summary/{index.mjs → index.js} +12 -12
- package/lib/summary/index.js.map +1 -0
- package/lib/summary/{orderedClientElection.d.mts → orderedClientElection.d.ts} +5 -1
- package/lib/summary/orderedClientElection.d.ts.map +1 -0
- package/lib/summary/{orderedClientElection.mjs → orderedClientElection.js} +2 -2
- package/lib/summary/orderedClientElection.js.map +1 -0
- package/lib/summary/{runWhileConnectedCoordinator.d.mts → runWhileConnectedCoordinator.d.ts} +2 -2
- package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
- package/lib/summary/{runWhileConnectedCoordinator.mjs → runWhileConnectedCoordinator.js} +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
- package/lib/summary/{runningSummarizer.d.mts → runningSummarizer.d.ts} +12 -11
- package/lib/summary/runningSummarizer.d.ts.map +1 -0
- package/lib/summary/{runningSummarizer.mjs → runningSummarizer.js} +108 -75
- package/lib/summary/runningSummarizer.js.map +1 -0
- package/lib/summary/{summarizer.d.mts → summarizer.d.ts} +5 -5
- package/lib/summary/summarizer.d.ts.map +1 -0
- package/lib/summary/{summarizer.mjs → summarizer.js} +4 -4
- package/lib/summary/summarizer.js.map +1 -0
- package/lib/summary/{summarizerClientElection.d.mts → summarizerClientElection.d.ts} +3 -3
- package/lib/summary/summarizerClientElection.d.ts.map +1 -0
- package/lib/summary/{summarizerClientElection.mjs → summarizerClientElection.js} +1 -1
- package/lib/summary/summarizerClientElection.js.map +1 -0
- package/lib/summary/{summarizerHeuristics.d.mts → summarizerHeuristics.d.ts} +4 -4
- package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
- package/lib/summary/{summarizerHeuristics.mjs → summarizerHeuristics.js} +1 -1
- package/lib/summary/summarizerHeuristics.js.map +1 -0
- package/lib/summary/summarizerNode/{index.d.mts → index.d.ts} +4 -4
- package/lib/summary/summarizerNode/index.d.ts.map +1 -0
- package/lib/summary/summarizerNode/index.js +7 -0
- package/lib/summary/summarizerNode/index.js.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNode.d.mts → summarizerNode.d.ts} +18 -8
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNode.mjs → summarizerNode.js} +41 -53
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeUtils.d.mts → summarizerNodeUtils.d.ts} +11 -20
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeUtils.mjs → summarizerNodeUtils.js} +1 -20
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeWithGc.d.mts → summarizerNodeWithGc.d.ts} +6 -7
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
- package/lib/summary/summarizerNode/{summarizerNodeWithGc.mjs → summarizerNodeWithGc.js} +12 -12
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
- package/lib/summary/{summarizerTypes.d.mts → summarizerTypes.d.ts} +11 -22
- package/lib/summary/summarizerTypes.d.ts.map +1 -0
- package/lib/summary/{summarizerTypes.mjs → summarizerTypes.js} +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -0
- package/lib/summary/{summaryCollection.d.mts → summaryCollection.d.ts} +1 -1
- package/lib/summary/summaryCollection.d.ts.map +1 -0
- package/lib/summary/{summaryCollection.mjs → summaryCollection.js} +1 -1
- package/lib/summary/summaryCollection.js.map +1 -0
- package/lib/summary/{summaryFormat.d.mts → summaryFormat.d.ts} +16 -3
- package/lib/summary/summaryFormat.d.ts.map +1 -0
- package/lib/summary/{summaryFormat.mjs → summaryFormat.js} +1 -1
- package/lib/summary/summaryFormat.js.map +1 -0
- package/lib/summary/{summaryGenerator.d.mts → summaryGenerator.d.ts} +7 -6
- package/lib/summary/summaryGenerator.d.ts.map +1 -0
- package/lib/summary/{summaryGenerator.mjs → summaryGenerator.js} +11 -2
- package/lib/summary/summaryGenerator.js.map +1 -0
- package/lib/summary/{summaryManager.d.mts → summaryManager.d.ts} +6 -7
- package/lib/summary/summaryManager.d.ts.map +1 -0
- package/lib/summary/{summaryManager.mjs → summaryManager.js} +4 -5
- package/lib/summary/summaryManager.js.map +1 -0
- package/lib/test/batchTracker.spec.js +88 -0
- package/lib/test/batchTracker.spec.js.map +1 -0
- package/lib/test/blobManager.spec.js +835 -0
- package/lib/test/blobManager.spec.js.map +1 -0
- package/lib/test/channelCollection.spec.js +141 -0
- package/lib/test/channelCollection.spec.js.map +1 -0
- package/lib/test/containerRuntime.spec.js +1748 -0
- package/lib/test/containerRuntime.spec.js.map +1 -0
- package/lib/test/dataStoreContext.spec.js +801 -0
- package/lib/test/dataStoreContext.spec.js.map +1 -0
- package/lib/test/dataStoreCreation.spec.js +312 -0
- package/lib/test/dataStoreCreation.spec.js.map +1 -0
- package/lib/test/dataStoreRegistry.spec.js +26 -0
- package/lib/test/dataStoreRegistry.spec.js.map +1 -0
- package/lib/test/fuzz/fuzzUtils.js +66 -0
- package/lib/test/fuzz/fuzzUtils.js.map +1 -0
- package/lib/test/fuzz/summarizer.fuzz.spec.js +31 -0
- package/lib/test/fuzz/summarizer.fuzz.spec.js.map +1 -0
- package/lib/test/fuzz/summarizerFuzzMocks.js +162 -0
- package/lib/test/fuzz/summarizerFuzzMocks.js.map +1 -0
- package/lib/test/fuzz/summarizerFuzzSuite.js +106 -0
- package/lib/test/fuzz/summarizerFuzzSuite.js.map +1 -0
- package/lib/test/gc/garbageCollection.spec.js +1465 -0
- package/lib/test/gc/garbageCollection.spec.js.map +1 -0
- package/lib/test/gc/gcConfigs.spec.js +690 -0
- package/lib/test/gc/gcConfigs.spec.js.map +1 -0
- package/lib/test/gc/gcHelpers.spec.js +110 -0
- package/lib/test/gc/gcHelpers.spec.js.map +1 -0
- package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +68 -0
- package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +1 -0
- package/lib/test/gc/gcStats.spec.js +391 -0
- package/lib/test/gc/gcStats.spec.js.map +1 -0
- package/lib/test/gc/gcSummaryStateTracker.spec.js +228 -0
- package/lib/test/gc/gcSummaryStateTracker.spec.js.map +1 -0
- package/lib/test/gc/gcTelemetry.spec.js +530 -0
- package/lib/test/gc/gcTelemetry.spec.js.map +1 -0
- package/lib/test/gc/gcUnitTestHelpers.js +29 -0
- package/lib/test/gc/gcUnitTestHelpers.js.map +1 -0
- package/lib/test/gc/gcUnreferencedStateTracker.spec.js +192 -0
- package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +1 -0
- package/lib/test/getPendingBlobs.spec.js +193 -0
- package/lib/test/getPendingBlobs.spec.js.map +1 -0
- package/lib/test/hardwareStats.spec.js +93 -0
- package/lib/test/hardwareStats.spec.js.map +1 -0
- package/lib/test/index.js +6 -0
- package/lib/test/index.js.map +1 -0
- package/lib/test/opLifecycle/OpGroupingManager.spec.js +225 -0
- package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +1 -0
- package/lib/test/opLifecycle/batchManager.spec.js +189 -0
- package/lib/test/opLifecycle/batchManager.spec.js.map +1 -0
- package/lib/test/opLifecycle/opCompressor.spec.js +74 -0
- package/lib/test/opLifecycle/opCompressor.spec.js.map +1 -0
- package/lib/test/opLifecycle/opDecompressor.spec.js +218 -0
- package/lib/test/opLifecycle/opDecompressor.spec.js.map +1 -0
- package/lib/test/opLifecycle/opSplitter.spec.js +272 -0
- package/lib/test/opLifecycle/opSplitter.spec.js.map +1 -0
- package/lib/test/opLifecycle/outbox.spec.js +675 -0
- package/lib/test/opLifecycle/outbox.spec.js.map +1 -0
- package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +196 -0
- package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +1 -0
- package/lib/test/pendingStateManager.spec.js +329 -0
- package/lib/test/pendingStateManager.spec.js.map +1 -0
- package/lib/test/scheduleManager.spec.js +270 -0
- package/lib/test/scheduleManager.spec.js.map +1 -0
- package/lib/test/summarizerNode.spec.js +326 -0
- package/lib/test/summarizerNode.spec.js.map +1 -0
- package/lib/test/summarizerNodeWithGc.spec.js +318 -0
- package/lib/test/summarizerNodeWithGc.spec.js.map +1 -0
- package/lib/test/summary/orderedClientElection.spec.js +535 -0
- package/lib/test/summary/orderedClientElection.spec.js.map +1 -0
- package/lib/test/summary/runningSummarizer.spec.js +1349 -0
- package/lib/test/summary/runningSummarizer.spec.js.map +1 -0
- package/lib/test/summary/summarizer.spec.js +29 -0
- package/lib/test/summary/summarizer.spec.js.map +1 -0
- package/lib/test/summary/summarizerClientElection.spec.js +436 -0
- package/lib/test/summary/summarizerClientElection.spec.js.map +1 -0
- package/lib/test/summary/summarizerHeuristics.spec.js +289 -0
- package/lib/test/summary/summarizerHeuristics.spec.js.map +1 -0
- package/lib/test/summary/summaryCollection.spec.js +200 -0
- package/lib/test/summary/summaryCollection.spec.js.map +1 -0
- package/lib/test/summary/summaryManager.spec.js +430 -0
- package/lib/test/summary/summaryManager.spec.js.map +1 -0
- package/lib/test/summary/testQuorumClients.js +34 -0
- package/lib/test/summary/testQuorumClients.js.map +1 -0
- package/lib/test/throttler.spec.js +175 -0
- package/lib/test/throttler.spec.js.map +1 -0
- package/lib/test/types/validateContainerRuntimePrevious.generated.js +180 -0
- package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +1 -0
- package/lib/{throttler.d.mts → throttler.d.ts} +1 -1
- package/lib/throttler.d.ts.map +1 -0
- package/lib/{throttler.mjs → throttler.js} +1 -1
- package/lib/throttler.js.map +1 -0
- package/package.json +99 -88
- package/src/batchTracker.ts +1 -1
- package/src/blobManager.ts +1 -1
- package/src/{dataStores.ts → channelCollection.ts} +520 -84
- package/src/connectionTelemetry.ts +42 -3
- package/src/containerHandleContext.ts +1 -1
- package/src/containerRuntime.ts +661 -464
- package/src/dataStore.ts +13 -15
- package/src/dataStoreContext.ts +257 -184
- package/src/dataStoreContexts.ts +1 -1
- package/src/deltaManagerSummarizerProxy.ts +132 -7
- package/src/gc/garbageCollection.ts +121 -46
- package/src/gc/gcConfigs.ts +3 -3
- package/src/gc/gcDefinitions.ts +30 -7
- package/src/gc/gcHelpers.ts +2 -2
- package/src/gc/gcReferenceGraphAlgorithm.ts +1 -1
- package/src/gc/gcSummaryStateTracker.ts +19 -7
- package/src/gc/gcTelemetry.ts +10 -9
- package/src/gc/gcUnreferencedStateTracker.ts +12 -1
- package/src/gc/index.ts +10 -8
- package/src/index.ts +16 -27
- package/src/messageTypes.ts +4 -4
- package/src/opLifecycle/README.md +2 -4
- package/src/opLifecycle/batchManager.ts +2 -2
- package/src/opLifecycle/definitions.ts +2 -2
- package/src/opLifecycle/index.ts +8 -8
- package/src/opLifecycle/opCompressor.ts +3 -3
- package/src/opLifecycle/opDecompressor.ts +3 -3
- package/src/opLifecycle/opGroupingManager.ts +3 -12
- package/src/opLifecycle/opSplitter.ts +3 -3
- package/src/opLifecycle/outbox.ts +29 -9
- package/src/opLifecycle/remoteMessageProcessor.ts +4 -4
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +19 -13
- package/src/scheduleManager.ts +4 -4
- package/src/summary/index.ts +13 -12
- package/src/summary/orderedClientElection.ts +1 -1
- package/src/summary/runWhileConnectedCoordinator.ts +1 -1
- package/src/summary/runningSummarizer.ts +141 -93
- package/src/summary/summarizer.ts +7 -7
- package/src/summary/summarizerClientElection.ts +2 -2
- package/src/summary/summarizerHeuristics.ts +3 -3
- package/src/summary/summarizerNode/index.ts +6 -3
- package/src/summary/summarizerNode/summarizerNode.ts +54 -69
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +16 -34
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +11 -17
- package/src/summary/summarizerTypes.ts +12 -24
- package/src/summary/summaryFormat.ts +16 -2
- package/src/summary/summaryGenerator.ts +16 -4
- package/src/summary/summaryManager.ts +6 -7
- package/tsconfig.cjs.json +7 -0
- package/tsconfig.json +2 -5
- package/dist/dataStores.d.ts +0 -149
- package/dist/dataStores.d.ts.map +0 -1
- package/dist/dataStores.js.map +0 -1
- package/dist/deltaManagerProxyBase.d.ts.map +0 -1
- package/dist/deltaManagerProxyBase.js +0 -77
- package/dist/deltaManagerProxyBase.js.map +0 -1
- package/lib/batchTracker.d.mts.map +0 -1
- package/lib/batchTracker.mjs.map +0 -1
- package/lib/blobManager.d.mts.map +0 -1
- package/lib/blobManager.mjs.map +0 -1
- package/lib/connectionTelemetry.d.mts.map +0 -1
- package/lib/connectionTelemetry.mjs.map +0 -1
- package/lib/containerHandleContext.d.mts.map +0 -1
- package/lib/containerHandleContext.mjs.map +0 -1
- package/lib/containerRuntime.d.mts.map +0 -1
- package/lib/containerRuntime.mjs.map +0 -1
- package/lib/dataStore.d.mts.map +0 -1
- package/lib/dataStore.mjs.map +0 -1
- package/lib/dataStoreContext.d.mts.map +0 -1
- package/lib/dataStoreContext.mjs.map +0 -1
- package/lib/dataStoreContexts.d.mts.map +0 -1
- package/lib/dataStoreContexts.mjs.map +0 -1
- package/lib/dataStoreRegistry.d.mts.map +0 -1
- package/lib/dataStoreRegistry.mjs.map +0 -1
- package/lib/dataStores.d.mts +0 -149
- package/lib/dataStores.d.mts.map +0 -1
- package/lib/dataStores.mjs.map +0 -1
- package/lib/deltaManagerProxyBase.d.mts +0 -35
- package/lib/deltaManagerProxyBase.d.mts.map +0 -1
- package/lib/deltaManagerProxyBase.mjs +0 -73
- package/lib/deltaManagerProxyBase.mjs.map +0 -1
- package/lib/deltaManagerSummarizerProxy.d.mts +0 -19
- package/lib/deltaManagerSummarizerProxy.d.mts.map +0 -1
- package/lib/deltaManagerSummarizerProxy.mjs +0 -38
- package/lib/deltaManagerSummarizerProxy.mjs.map +0 -1
- package/lib/deltaScheduler.d.mts.map +0 -1
- package/lib/deltaScheduler.mjs.map +0 -1
- package/lib/error.d.mts.map +0 -1
- package/lib/error.mjs.map +0 -1
- package/lib/gc/garbageCollection.d.mts.map +0 -1
- package/lib/gc/garbageCollection.mjs.map +0 -1
- package/lib/gc/gcConfigs.d.mts.map +0 -1
- package/lib/gc/gcConfigs.mjs.map +0 -1
- package/lib/gc/gcDefinitions.d.mts.map +0 -1
- package/lib/gc/gcDefinitions.mjs.map +0 -1
- package/lib/gc/gcHelpers.mjs.map +0 -1
- package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +0 -1
- package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +0 -1
- package/lib/gc/gcSummaryDefinitions.d.mts.map +0 -1
- package/lib/gc/gcSummaryDefinitions.mjs.map +0 -1
- package/lib/gc/gcSummaryStateTracker.d.mts.map +0 -1
- package/lib/gc/gcSummaryStateTracker.mjs.map +0 -1
- package/lib/gc/gcTelemetry.d.mts.map +0 -1
- package/lib/gc/gcTelemetry.mjs.map +0 -1
- package/lib/gc/gcUnreferencedStateTracker.d.mts.map +0 -1
- package/lib/gc/gcUnreferencedStateTracker.mjs.map +0 -1
- package/lib/gc/index.d.mts.map +0 -1
- package/lib/gc/index.mjs.map +0 -1
- package/lib/index.d.mts.map +0 -1
- package/lib/index.mjs +0 -24
- package/lib/index.mjs.map +0 -1
- package/lib/messageTypes.d.mts.map +0 -1
- package/lib/messageTypes.mjs.map +0 -1
- package/lib/metadata.d.mts.map +0 -1
- package/lib/metadata.mjs.map +0 -1
- package/lib/opLifecycle/batchManager.d.mts.map +0 -1
- package/lib/opLifecycle/batchManager.mjs.map +0 -1
- package/lib/opLifecycle/definitions.d.mts.map +0 -1
- package/lib/opLifecycle/definitions.mjs.map +0 -1
- package/lib/opLifecycle/index.d.mts +0 -13
- package/lib/opLifecycle/index.d.mts.map +0 -1
- package/lib/opLifecycle/index.mjs +0 -12
- package/lib/opLifecycle/index.mjs.map +0 -1
- package/lib/opLifecycle/opCompressor.d.mts.map +0 -1
- package/lib/opLifecycle/opCompressor.mjs.map +0 -1
- package/lib/opLifecycle/opDecompressor.d.mts.map +0 -1
- package/lib/opLifecycle/opDecompressor.mjs.map +0 -1
- package/lib/opLifecycle/opGroupingManager.d.mts.map +0 -1
- package/lib/opLifecycle/opGroupingManager.mjs.map +0 -1
- package/lib/opLifecycle/opSplitter.d.mts.map +0 -1
- package/lib/opLifecycle/opSplitter.mjs.map +0 -1
- package/lib/opLifecycle/outbox.d.mts.map +0 -1
- package/lib/opLifecycle/outbox.mjs.map +0 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +0 -1
- package/lib/opLifecycle/remoteMessageProcessor.mjs.map +0 -1
- package/lib/opProperties.d.mts.map +0 -1
- package/lib/opProperties.mjs.map +0 -1
- package/lib/packageVersion.d.mts.map +0 -1
- package/lib/packageVersion.mjs.map +0 -1
- package/lib/pendingStateManager.d.mts.map +0 -1
- package/lib/pendingStateManager.mjs.map +0 -1
- package/lib/scheduleManager.d.mts.map +0 -1
- package/lib/scheduleManager.mjs.map +0 -1
- package/lib/storageServiceWithAttachBlobs.d.mts.map +0 -1
- package/lib/storageServiceWithAttachBlobs.mjs.map +0 -1
- package/lib/summary/index.d.mts.map +0 -1
- package/lib/summary/index.mjs.map +0 -1
- package/lib/summary/orderedClientElection.d.mts.map +0 -1
- package/lib/summary/orderedClientElection.mjs.map +0 -1
- package/lib/summary/runWhileConnectedCoordinator.d.mts.map +0 -1
- package/lib/summary/runWhileConnectedCoordinator.mjs.map +0 -1
- package/lib/summary/runningSummarizer.d.mts.map +0 -1
- package/lib/summary/runningSummarizer.mjs.map +0 -1
- package/lib/summary/summarizer.d.mts.map +0 -1
- package/lib/summary/summarizer.mjs.map +0 -1
- package/lib/summary/summarizerClientElection.d.mts.map +0 -1
- package/lib/summary/summarizerClientElection.mjs.map +0 -1
- package/lib/summary/summarizerHeuristics.d.mts.map +0 -1
- package/lib/summary/summarizerHeuristics.mjs.map +0 -1
- package/lib/summary/summarizerNode/index.d.mts.map +0 -1
- package/lib/summary/summarizerNode/index.mjs +0 -7
- package/lib/summary/summarizerNode/index.mjs.map +0 -1
- package/lib/summary/summarizerNode/summarizerNode.d.mts.map +0 -1
- package/lib/summary/summarizerNode/summarizerNode.mjs.map +0 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +0 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +0 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +0 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +0 -1
- package/lib/summary/summarizerTypes.d.mts.map +0 -1
- package/lib/summary/summarizerTypes.mjs.map +0 -1
- package/lib/summary/summaryCollection.d.mts.map +0 -1
- package/lib/summary/summaryCollection.mjs.map +0 -1
- package/lib/summary/summaryFormat.d.mts.map +0 -1
- package/lib/summary/summaryFormat.mjs.map +0 -1
- package/lib/summary/summaryGenerator.d.mts.map +0 -1
- package/lib/summary/summaryGenerator.mjs.map +0 -1
- package/lib/summary/summaryManager.d.mts.map +0 -1
- package/lib/summary/summaryManager.mjs.map +0 -1
- package/lib/throttler.d.mts.map +0 -1
- package/lib/throttler.mjs.map +0 -1
- package/src/deltaManagerProxyBase.ts +0 -111
package/src/dataStoreContexts.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
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
11
|
export class DataStoreContexts implements Iterable<[string, FluidDataStoreContext]>, IDisposable {
|
|
12
12
|
private readonly notBoundContexts = new Set<string>();
|
|
@@ -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,
|
|
@@ -46,18 +46,22 @@ import {
|
|
|
46
46
|
ISweepPhaseStats,
|
|
47
47
|
GarbageCollectionMessage,
|
|
48
48
|
GarbageCollectionMessageType,
|
|
49
|
-
|
|
49
|
+
disableAutoRecoveryKey,
|
|
50
|
+
} from "./gcDefinitions.js";
|
|
50
51
|
import {
|
|
51
52
|
cloneGCData,
|
|
52
53
|
compatBehaviorAllowsGCMessageType,
|
|
53
54
|
concatGarbageCollectionData,
|
|
54
55
|
getGCDataFromSnapshot,
|
|
55
|
-
} from "./gcHelpers";
|
|
56
|
-
import { runGarbageCollection } from "./gcReferenceGraphAlgorithm";
|
|
57
|
-
import { IGarbageCollectionSnapshotData, IGarbageCollectionState } from "./gcSummaryDefinitions";
|
|
58
|
-
import { GCSummaryStateTracker } from "./gcSummaryStateTracker";
|
|
59
|
-
import {
|
|
60
|
-
|
|
56
|
+
} from "./gcHelpers.js";
|
|
57
|
+
import { runGarbageCollection } from "./gcReferenceGraphAlgorithm.js";
|
|
58
|
+
import { IGarbageCollectionSnapshotData, IGarbageCollectionState } from "./gcSummaryDefinitions.js";
|
|
59
|
+
import { GCSummaryStateTracker } from "./gcSummaryStateTracker.js";
|
|
60
|
+
import {
|
|
61
|
+
UnreferencedStateTracker,
|
|
62
|
+
UnreferencedStateTrackerMap,
|
|
63
|
+
} from "./gcUnreferencedStateTracker.js";
|
|
64
|
+
import { GCTelemetryTracker } from "./gcTelemetry.js";
|
|
61
65
|
|
|
62
66
|
/**
|
|
63
67
|
* The garbage collector for the container runtime. It consolidates the garbage collection functionality and maintains
|
|
@@ -94,6 +98,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
94
98
|
return this.configs.shouldRunGC;
|
|
95
99
|
}
|
|
96
100
|
|
|
101
|
+
public readonly sessionExpiryTimerStarted: number | undefined;
|
|
97
102
|
// Keeps track of the GC state from the last run.
|
|
98
103
|
private gcDataFromLastRun: IGarbageCollectionData | undefined;
|
|
99
104
|
// Keeps a list of references (edges in the GC graph) between GC runs. Each entry has a node id and a list of
|
|
@@ -110,8 +115,15 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
110
115
|
private readonly initializeGCStateFromBaseSnapshotP: Promise<void>;
|
|
111
116
|
// The GC details generated from the base snapshot.
|
|
112
117
|
private readonly baseGCDetailsP: Promise<IGarbageCollectionDetailsBase>;
|
|
113
|
-
|
|
114
|
-
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Map of node ids to their unreferenced state tracker
|
|
121
|
+
* NOTE: The set of keys in this map is considered as the set of unreferenced nodes
|
|
122
|
+
* as of the last GC run. So in between runs, nothing should be added or removed.
|
|
123
|
+
*/
|
|
124
|
+
private readonly unreferencedNodesState: UnreferencedStateTrackerMap =
|
|
125
|
+
new UnreferencedStateTrackerMap();
|
|
126
|
+
|
|
115
127
|
// The Timer responsible for closing the container when the session has expired
|
|
116
128
|
private sessionExpiryTimer: Timer | undefined;
|
|
117
129
|
|
|
@@ -164,6 +176,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
164
176
|
|
|
165
177
|
const baseSnapshot = createParams.baseSnapshot;
|
|
166
178
|
const readAndParseBlob = createParams.readAndParseBlob;
|
|
179
|
+
const pendingSessionExpiryTimerStarted = createParams.sessionExpiryTimerStarted;
|
|
167
180
|
|
|
168
181
|
this.mc = createChildMonitoringContext({
|
|
169
182
|
logger: createParams.baseLogger,
|
|
@@ -181,14 +194,26 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
181
194
|
const overrideSessionExpiryTimeoutMs = this.mc.config.getNumber(
|
|
182
195
|
"Fluid.GarbageCollection.TestOverride.SessionExpiryMs",
|
|
183
196
|
);
|
|
184
|
-
|
|
197
|
+
let timeoutMs = this.configs.sessionExpiryTimeoutMs;
|
|
185
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
|
+
}
|
|
186
210
|
this.sessionExpiryTimer = new Timer(timeoutMs, () => {
|
|
187
211
|
this.runtime.closeFn(
|
|
188
212
|
new ClientSessionExpiredError(`Client session expired.`, timeoutMs),
|
|
189
213
|
);
|
|
190
214
|
});
|
|
191
215
|
this.sessionExpiryTimer.start();
|
|
216
|
+
this.sessionExpiryTimerStarted = Date.now();
|
|
192
217
|
}
|
|
193
218
|
|
|
194
219
|
this.summaryStateTracker = new GCSummaryStateTracker(
|
|
@@ -443,7 +468,9 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
443
468
|
): Promise<IGCStats | undefined> {
|
|
444
469
|
const fullGC =
|
|
445
470
|
options.fullGC ??
|
|
446
|
-
(this.configs.runFullGC === true ||
|
|
471
|
+
(this.configs.runFullGC === true ||
|
|
472
|
+
this.summaryStateTracker.autoRecovery.fullGCRequested() ||
|
|
473
|
+
this.summaryStateTracker.doesSummaryStateNeedReset);
|
|
447
474
|
|
|
448
475
|
// Add the options that are used to run GC to the telemetry context.
|
|
449
476
|
telemetryContext?.setMultiple("fluid_GC", "Options", {
|
|
@@ -593,16 +620,10 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
593
620
|
): { tombstoneReadyNodeIds: Set<string>; sweepReadyNodeIds: Set<string> } {
|
|
594
621
|
// 1. Marks all referenced nodes by clearing their unreferenced tracker, if any.
|
|
595
622
|
for (const nodeId of allReferencedNodeIds) {
|
|
596
|
-
|
|
597
|
-
if (nodeStateTracker !== undefined) {
|
|
598
|
-
// Stop tracking so as to clear out any running timers.
|
|
599
|
-
nodeStateTracker.stopTracking();
|
|
600
|
-
// Delete the node as we don't need to track it any more.
|
|
601
|
-
this.unreferencedNodesState.delete(nodeId);
|
|
602
|
-
}
|
|
623
|
+
this.unreferencedNodesState.delete(nodeId);
|
|
603
624
|
}
|
|
604
625
|
|
|
605
|
-
// 2. Mark unreferenced nodes in this run by starting unreferenced tracking for them.
|
|
626
|
+
// 2. Mark unreferenced nodes in this run by starting or updating unreferenced tracking for them.
|
|
606
627
|
const tombstoneReadyNodeIds: Set<string> = new Set();
|
|
607
628
|
const sweepReadyNodeIds: Set<string> = new Set();
|
|
608
629
|
for (const nodeId of gcResult.deletedNodeIds) {
|
|
@@ -837,8 +858,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
837
858
|
}
|
|
838
859
|
|
|
839
860
|
return this.summaryStateTracker.summarize(
|
|
840
|
-
fullTree,
|
|
841
|
-
trackState,
|
|
861
|
+
trackState && !fullTree,
|
|
842
862
|
gcState,
|
|
843
863
|
this.deletedNodes,
|
|
844
864
|
this.tombstones,
|
|
@@ -872,21 +892,37 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
872
892
|
* @param local - Whether it was send by this client.
|
|
873
893
|
*/
|
|
874
894
|
public processMessage(message: ContainerRuntimeGCMessage, local: boolean) {
|
|
875
|
-
|
|
876
|
-
|
|
895
|
+
const gcMessageType = message.contents.type;
|
|
896
|
+
switch (gcMessageType) {
|
|
897
|
+
case GarbageCollectionMessageType.Sweep: {
|
|
877
898
|
// Delete the nodes whose ids are present in the contents.
|
|
878
899
|
this.deleteSweepReadyNodes(message.contents.deletedNodeIds);
|
|
879
900
|
break;
|
|
880
901
|
}
|
|
902
|
+
case GarbageCollectionMessageType.TombstoneLoaded: {
|
|
903
|
+
if (this.mc.config.getBoolean(disableAutoRecoveryKey) === true) {
|
|
904
|
+
break;
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
// Mark the node as referenced to ensure it isn't Swept
|
|
908
|
+
const tombstonedNodePath = message.contents.nodePath;
|
|
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();
|
|
914
|
+
|
|
915
|
+
break;
|
|
916
|
+
}
|
|
881
917
|
default: {
|
|
882
918
|
if (
|
|
883
919
|
!compatBehaviorAllowsGCMessageType(
|
|
884
|
-
|
|
920
|
+
gcMessageType,
|
|
885
921
|
message.compatDetails?.behavior,
|
|
886
922
|
)
|
|
887
923
|
) {
|
|
888
924
|
const error = DataProcessingError.create(
|
|
889
|
-
`Garbage collection message of unknown type ${
|
|
925
|
+
`Garbage collection message of unknown type ${gcMessageType}`,
|
|
890
926
|
"processMessage",
|
|
891
927
|
);
|
|
892
928
|
throw error;
|
|
@@ -931,13 +967,9 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
931
967
|
|
|
932
968
|
// Clear unreferenced state tracking for deleted nodes.
|
|
933
969
|
for (const nodeId of deletedNodeIds) {
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
nodeStateTracker.stopTracking();
|
|
938
|
-
// Delete the node as we don't need to track it any more.
|
|
939
|
-
this.unreferencedNodesState.delete(nodeId);
|
|
940
|
-
}
|
|
970
|
+
// Usually we avoid modifying the set of unreferencedNodesState keys in between GC runs,
|
|
971
|
+
// but this is ok since this node won't exist at all in the next GC run.
|
|
972
|
+
this.unreferencedNodesState.delete(nodeId);
|
|
941
973
|
this.deletedNodes.add(nodeId);
|
|
942
974
|
}
|
|
943
975
|
}
|
|
@@ -979,6 +1011,15 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
979
1011
|
headers: headerData,
|
|
980
1012
|
});
|
|
981
1013
|
|
|
1014
|
+
// Any time we log a Tombstone Loaded error (via Telemetry Tracker),
|
|
1015
|
+
// we want to also trigger autorecovery to avoid the object being deleted
|
|
1016
|
+
// Note: We don't need to trigger on "Changed" because any change will cause the object
|
|
1017
|
+
// to be loaded by the Summarizer, and auto-recovery will be triggered then.
|
|
1018
|
+
if (isTombstoned && reason === "Loaded") {
|
|
1019
|
+
// Note that when a DataStore and its DDS are all loaded, each will trigger AutoRecovery for itself.
|
|
1020
|
+
this.triggerAutoRecovery(nodePath);
|
|
1021
|
+
}
|
|
1022
|
+
|
|
982
1023
|
const nodeType = this.runtime.getNodeType(nodePath);
|
|
983
1024
|
|
|
984
1025
|
// Unless this is a Loaded event for a Blob or DataStore, we're done after telemetry tracking
|
|
@@ -987,7 +1028,6 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
987
1028
|
}
|
|
988
1029
|
|
|
989
1030
|
const errorRequest: IRequest = request ?? { url: nodePath };
|
|
990
|
-
// If the object is tombstoned and tombstone enforcement is configured, throw an error.
|
|
991
1031
|
if (isTombstoned && this.throwOnTombstoneLoad && headerData?.allowTombstone !== true) {
|
|
992
1032
|
// The requested data store is removed by gc. Create a 404 gc response exception.
|
|
993
1033
|
throw responseToException(
|
|
@@ -1015,14 +1055,42 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
1015
1055
|
}
|
|
1016
1056
|
}
|
|
1017
1057
|
|
|
1058
|
+
/**
|
|
1059
|
+
* The given node should have its unreferenced state reset in the next GC,
|
|
1060
|
+
* even if the true GC graph shows it is unreferenced. This will
|
|
1061
|
+
* prevent it from being deleted by Sweep (after the Grace Period).
|
|
1062
|
+
*
|
|
1063
|
+
* Submit a GC op indicating that the Tombstone with the given path has been loaded.
|
|
1064
|
+
* Broadcasting this information in the op stream allows the Summarizer to reset unreferenced state
|
|
1065
|
+
* before runnint GC next.
|
|
1066
|
+
*/
|
|
1067
|
+
private triggerAutoRecovery(nodePath: string) {
|
|
1068
|
+
if (this.mc.config.getBoolean(disableAutoRecoveryKey) === true) {
|
|
1069
|
+
return;
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1072
|
+
// Use compat behavior "Ignore" since this is an optimization to opportunistically protect
|
|
1073
|
+
// objects from deletion, so it's fine for older clients to ignore this op.
|
|
1074
|
+
const containerGCMessage: ContainerRuntimeGCMessage = {
|
|
1075
|
+
type: ContainerMessageType.GC,
|
|
1076
|
+
contents: {
|
|
1077
|
+
type: GarbageCollectionMessageType.TombstoneLoaded,
|
|
1078
|
+
nodePath,
|
|
1079
|
+
},
|
|
1080
|
+
compatDetails: { behavior: "Ignore" },
|
|
1081
|
+
};
|
|
1082
|
+
this.submitMessage(containerGCMessage);
|
|
1083
|
+
}
|
|
1084
|
+
|
|
1018
1085
|
/**
|
|
1019
1086
|
* Called when an outbound reference is added to a node. This is used to identify all nodes that have been
|
|
1020
1087
|
* referenced between summaries so that their unreferenced timestamp can be reset.
|
|
1021
1088
|
*
|
|
1022
1089
|
* @param fromNodePath - The node from which the reference is added.
|
|
1023
1090
|
* @param toNodePath - The node to which the reference is added.
|
|
1091
|
+
* @param autorecovery - This reference is added artificially, for autorecovery. Used for logging.
|
|
1024
1092
|
*/
|
|
1025
|
-
public addedOutboundReference(fromNodePath: string, toNodePath: string) {
|
|
1093
|
+
public addedOutboundReference(fromNodePath: string, toNodePath: string, autorecovery?: true) {
|
|
1026
1094
|
if (!this.configs.shouldRunGC) {
|
|
1027
1095
|
return;
|
|
1028
1096
|
}
|
|
@@ -1052,7 +1120,14 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
1052
1120
|
isTombstoned: this.tombstones.includes(toNodePath),
|
|
1053
1121
|
lastSummaryTime: this.getLastSummaryTimestampMs(),
|
|
1054
1122
|
fromId: fromNodePath,
|
|
1123
|
+
autorecovery,
|
|
1055
1124
|
});
|
|
1125
|
+
|
|
1126
|
+
// This node is referenced - Clear its unreferenced state
|
|
1127
|
+
// But don't delete the node id from the map yet.
|
|
1128
|
+
// When generating GC stats, the set of nodes in here is used as the baseline for
|
|
1129
|
+
// what was unreferenced in the last GC run.
|
|
1130
|
+
this.unreferencedNodesState.get(toNodePath)?.stopTracking();
|
|
1056
1131
|
}
|
|
1057
1132
|
|
|
1058
1133
|
/**
|
|
@@ -1086,17 +1161,17 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
1086
1161
|
updatedAttachmentBlobCount: 0,
|
|
1087
1162
|
};
|
|
1088
1163
|
|
|
1089
|
-
const updateNodeStats = (nodeId: string,
|
|
1164
|
+
const updateNodeStats = (nodeId: string, isReferenced: boolean) => {
|
|
1090
1165
|
markPhaseStats.nodeCount++;
|
|
1091
1166
|
// If there is no previous GC data, every node's state is generated and is considered as updated.
|
|
1092
1167
|
// Otherwise, find out if any node went from referenced to unreferenced or vice-versa.
|
|
1168
|
+
const wasNotReferenced = this.unreferencedNodesState.has(nodeId);
|
|
1093
1169
|
const stateUpdated =
|
|
1094
|
-
this.gcDataFromLastRun === undefined ||
|
|
1095
|
-
this.unreferencedNodesState.has(nodeId) === referenced;
|
|
1170
|
+
this.gcDataFromLastRun === undefined || wasNotReferenced === isReferenced;
|
|
1096
1171
|
if (stateUpdated) {
|
|
1097
1172
|
markPhaseStats.updatedNodeCount++;
|
|
1098
1173
|
}
|
|
1099
|
-
if (!
|
|
1174
|
+
if (!isReferenced) {
|
|
1100
1175
|
markPhaseStats.unrefNodeCount++;
|
|
1101
1176
|
}
|
|
1102
1177
|
|
|
@@ -1105,7 +1180,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
1105
1180
|
if (stateUpdated) {
|
|
1106
1181
|
markPhaseStats.updatedDataStoreCount++;
|
|
1107
1182
|
}
|
|
1108
|
-
if (!
|
|
1183
|
+
if (!isReferenced) {
|
|
1109
1184
|
markPhaseStats.unrefDataStoreCount++;
|
|
1110
1185
|
}
|
|
1111
1186
|
}
|
|
@@ -1114,7 +1189,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
1114
1189
|
if (stateUpdated) {
|
|
1115
1190
|
markPhaseStats.updatedAttachmentBlobCount++;
|
|
1116
1191
|
}
|
|
1117
|
-
if (!
|
|
1192
|
+
if (!isReferenced) {
|
|
1118
1193
|
markPhaseStats.unrefAttachmentBlobCount++;
|
|
1119
1194
|
}
|
|
1120
1195
|
}
|
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,
|
|
@@ -34,8 +34,8 @@ import {
|
|
|
34
34
|
IGCMetadata_Deprecated,
|
|
35
35
|
disableDatastoreSweepKey,
|
|
36
36
|
gcDisableDataStoreSweepOptionName,
|
|
37
|
-
} from "./gcDefinitions";
|
|
38
|
-
import { getGCVersion, shouldAllowGcSweep } from "./gcHelpers";
|
|
37
|
+
} from "./gcDefinitions.js";
|
|
38
|
+
import { getGCVersion, shouldAllowGcSweep } from "./gcHelpers.js";
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
41
|
* Generates configurations for the Garbage Collector that it uses to determine what to run and how.
|
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
|
|
@@ -80,6 +80,8 @@ export const gcVersionUpgradeToV4Key = "Fluid.GarbageCollection.GCVersionUpgrade
|
|
|
80
80
|
export const disableDatastoreSweepKey = "Fluid.GarbageCollection.DisableDataStoreSweep";
|
|
81
81
|
/** Config key to revert new paradigm of detecting outbound routes in ContainerRuntime layer (use true) */
|
|
82
82
|
export const detectOutboundRoutesViaDDSKey = "Fluid.GarbageCollection.DetectOutboundRoutesViaDDS";
|
|
83
|
+
/** Config key to disable auto-recovery mechanism that protects Tombstones that are loaded from being swept (use true) */
|
|
84
|
+
export const disableAutoRecoveryKey = "Fluid.GarbageCollection.DisableAutoRecovery";
|
|
83
85
|
|
|
84
86
|
// One day in milliseconds.
|
|
85
87
|
export const oneDayMs = 1 * 24 * 60 * 60 * 1000;
|
|
@@ -257,6 +259,8 @@ export type GCNodeType = (typeof GCNodeType)[keyof typeof GCNodeType];
|
|
|
257
259
|
export const GarbageCollectionMessageType = {
|
|
258
260
|
/** Message sent directing GC to delete the given nodes */
|
|
259
261
|
Sweep: "Sweep",
|
|
262
|
+
/** Message sent notifying GC that a Tombstoned object was Loaded */
|
|
263
|
+
TombstoneLoaded: "TombstoneLoaded",
|
|
260
264
|
} as const;
|
|
261
265
|
|
|
262
266
|
/**
|
|
@@ -270,16 +274,28 @@ export type GarbageCollectionMessageType =
|
|
|
270
274
|
* @internal
|
|
271
275
|
*/
|
|
272
276
|
export interface ISweepMessage {
|
|
273
|
-
|
|
274
|
-
|
|
277
|
+
/** @see GarbageCollectionMessageType.Sweep */
|
|
278
|
+
type: typeof GarbageCollectionMessageType.Sweep;
|
|
279
|
+
/** The ids of nodes that are deleted. */
|
|
275
280
|
deletedNodeIds: string[];
|
|
276
281
|
}
|
|
277
282
|
|
|
283
|
+
/**
|
|
284
|
+
* The GC TombstoneLoaded message.
|
|
285
|
+
* @internal
|
|
286
|
+
*/
|
|
287
|
+
export interface ITombstoneLoadedMessage {
|
|
288
|
+
/** @see GarbageCollectionMessageType.TombstoneLoaded */
|
|
289
|
+
type: typeof GarbageCollectionMessageType.TombstoneLoaded;
|
|
290
|
+
/** The id of Tombstoned node that was loaded. */
|
|
291
|
+
nodePath: string;
|
|
292
|
+
}
|
|
293
|
+
|
|
278
294
|
/**
|
|
279
295
|
* Type for a message to be used for sending / received garbage collection messages.
|
|
280
296
|
* @internal
|
|
281
297
|
*/
|
|
282
|
-
export type GarbageCollectionMessage = ISweepMessage;
|
|
298
|
+
export type GarbageCollectionMessage = ISweepMessage | ITombstoneLoadedMessage;
|
|
283
299
|
|
|
284
300
|
/**
|
|
285
301
|
* Defines the APIs for the runtime object to be passed to the garbage collector.
|
|
@@ -311,6 +327,12 @@ export interface IGarbageCollectionRuntime {
|
|
|
311
327
|
|
|
312
328
|
/** Defines the contract for the garbage collector. */
|
|
313
329
|
export interface IGarbageCollector {
|
|
330
|
+
/**
|
|
331
|
+
* Tells the time at which session expiry timer started in a previous container.
|
|
332
|
+
* This is only set when loading from a stashed container and will be equal to the
|
|
333
|
+
* original container's local client time when it was loaded (and started the session expiry timer).
|
|
334
|
+
*/
|
|
335
|
+
readonly sessionExpiryTimerStarted: number | undefined;
|
|
314
336
|
/** Tells whether GC should run or not. */
|
|
315
337
|
readonly shouldRunGC: boolean;
|
|
316
338
|
/** Tells whether the GC state in summary needs to be reset in the next summary. */
|
|
@@ -359,7 +381,7 @@ export interface IGarbageCollector {
|
|
|
359
381
|
headerData?: RuntimeHeaderData,
|
|
360
382
|
): void;
|
|
361
383
|
/** Called when a reference is added to a node. Used to identify nodes that were referenced between summaries. */
|
|
362
|
-
addedOutboundReference(fromNodePath: string, toNodePath: string): void;
|
|
384
|
+
addedOutboundReference(fromNodePath: string, toNodePath: string, autorecovery?: true): void;
|
|
363
385
|
/** Called to process a garbage collection message. */
|
|
364
386
|
processMessage(message: ContainerRuntimeGCMessage, local: boolean): void;
|
|
365
387
|
/** Returns true if this node has been deleted by GC during sweep phase. */
|
|
@@ -382,6 +404,7 @@ export interface IGarbageCollectorCreateParams {
|
|
|
382
404
|
readonly getLastSummaryTimestampMs: () => number | undefined;
|
|
383
405
|
readonly readAndParseBlob: ReadAndParseBlob;
|
|
384
406
|
readonly submitMessage: (message: ContainerRuntimeGCMessage) => void;
|
|
407
|
+
readonly sessionExpiryTimerStarted?: number | undefined;
|
|
385
408
|
}
|
|
386
409
|
|
|
387
410
|
/**
|
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) {
|