@fluidframework/container-runtime 2.0.0-dev-rc.1.0.0.228517 → 2.0.0-dev-rc.2.0.0.245554
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 +46 -1
- 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 +435 -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 +225 -0
- package/dist/channelCollection.d.ts.map +1 -0
- package/dist/{dataStores.js → channelCollection.js} +449 -143
- 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 +138 -49
- package/dist/container-runtime-beta.d.ts +75 -9
- package/dist/container-runtime-public.d.ts +75 -9
- package/dist/container-runtime-untrimmed.d.ts +717 -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 +84 -64
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +550 -427
- 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 -38
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +249 -161
- 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/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 +29 -7
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +179 -98
- 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 +40 -15
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js +11 -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 +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 +11 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -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 -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 +225 -0
- package/lib/channelCollection.d.ts.map +1 -0
- package/lib/{dataStores.mjs → channelCollection.js} +436 -133
- 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} +138 -49
- package/lib/{container-runtime-beta.d.mts → container-runtime-beta.d.ts} +75 -9
- package/lib/{container-runtime-public.d.mts → container-runtime-public.d.ts} +75 -9
- package/lib/{container-runtime-untrimmed.d.mts → container-runtime-untrimmed.d.ts} +717 -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} +89 -65
- package/lib/containerRuntime.d.ts.map +1 -0
- package/lib/{containerRuntime.mjs → containerRuntime.js} +469 -348
- 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 -39
- package/lib/dataStoreContext.d.ts.map +1 -0
- package/lib/{dataStoreContext.mjs → dataStoreContext.js} +241 -153
- 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} +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} +30 -8
- package/lib/gc/garbageCollection.d.ts.map +1 -0
- package/lib/gc/{garbageCollection.mjs → garbageCollection.js} +149 -68
- 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} +41 -16
- package/lib/gc/gcDefinitions.d.ts.map +1 -0
- package/lib/gc/{gcDefinitions.mjs → gcDefinitions.js} +11 -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} +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.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 -21
- 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} +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 +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 +106 -87
- package/src/batchTracker.ts +1 -1
- package/src/blobManager.ts +1 -15
- package/src/{dataStores.ts → channelCollection.ts} +622 -170
- package/src/connectionTelemetry.ts +42 -3
- package/src/containerHandleContext.ts +1 -1
- package/src/containerRuntime.ts +683 -483
- package/src/dataStore.ts +16 -15
- package/src/dataStoreContext.ts +378 -216
- package/src/dataStoreContexts.ts +2 -1
- package/src/deltaManagerSummarizerProxy.ts +132 -7
- package/src/gc/garbageCollection.ts +167 -71
- package/src/gc/gcConfigs.ts +17 -7
- package/src/gc/gcDefinitions.ts +42 -16
- 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 +11 -9
- package/src/index.ts +29 -26
- 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 +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 -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
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
import { IRequest } from "@fluidframework/core-interfaces";
|
|
6
6
|
import { IGarbageCollectionDetailsBase, ISummarizeResult, ITelemetryContext } from "@fluidframework/runtime-definitions";
|
|
7
7
|
import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
|
|
8
|
-
import { RuntimeHeaderData } from "../containerRuntime.
|
|
9
|
-
import { ContainerRuntimeGCMessage } from "../messageTypes.
|
|
10
|
-
import { IRefreshSummaryResult } from "../summary/index.
|
|
11
|
-
import { IGarbageCollector, IGarbageCollectorCreateParams, IGCStats, IGCMetadata } from "./gcDefinitions.
|
|
8
|
+
import { RuntimeHeaderData } from "../containerRuntime.js";
|
|
9
|
+
import { ContainerRuntimeGCMessage } from "../messageTypes.js";
|
|
10
|
+
import { IRefreshSummaryResult } from "../summary/index.js";
|
|
11
|
+
import { IGarbageCollector, IGarbageCollectorCreateParams, IGCStats, IGCMetadata } from "./gcDefinitions.js";
|
|
12
12
|
/**
|
|
13
13
|
* The garbage collector for the container runtime. It consolidates the garbage collection functionality and maintains
|
|
14
14
|
* its state across summaries.
|
|
@@ -36,6 +36,7 @@ export declare class GarbageCollector implements IGarbageCollector {
|
|
|
36
36
|
private readonly mc;
|
|
37
37
|
private readonly configs;
|
|
38
38
|
get shouldRunGC(): boolean;
|
|
39
|
+
readonly sessionExpiryTimerStarted: number | undefined;
|
|
39
40
|
private gcDataFromLastRun;
|
|
40
41
|
private readonly newReferencesSinceLastRun;
|
|
41
42
|
private tombstones;
|
|
@@ -43,6 +44,11 @@ export declare class GarbageCollector implements IGarbageCollector {
|
|
|
43
44
|
private readonly baseSnapshotDataP;
|
|
44
45
|
private readonly initializeGCStateFromBaseSnapshotP;
|
|
45
46
|
private readonly baseGCDetailsP;
|
|
47
|
+
/**
|
|
48
|
+
* Map of node ids to their unreferenced state tracker
|
|
49
|
+
* NOTE: The set of keys in this map is considered as the set of unreferenced nodes
|
|
50
|
+
* as of the last GC run. So in between runs, nothing should be added or removed.
|
|
51
|
+
*/
|
|
46
52
|
private readonly unreferencedNodesState;
|
|
47
53
|
private sessionExpiryTimer;
|
|
48
54
|
private completedRuns;
|
|
@@ -178,6 +184,10 @@ export declare class GarbageCollector implements IGarbageCollector {
|
|
|
178
184
|
/**
|
|
179
185
|
* Delete nodes that are sweep-ready. Call the runtime to delete these nodes and clear the unreferenced state
|
|
180
186
|
* tracking for nodes that are actually deleted by the runtime.
|
|
187
|
+
*
|
|
188
|
+
* Note that this doesn't check any configuration around whether Sweep is enabled.
|
|
189
|
+
* That happens before the op is submitted, and from that point, any client should execute the delete.
|
|
190
|
+
*
|
|
181
191
|
* @param sweepReadyNodeIds - The ids of nodes that are ready to be deleted.
|
|
182
192
|
*/
|
|
183
193
|
private deleteSweepReadyNodes;
|
|
@@ -192,14 +202,25 @@ export declare class GarbageCollector implements IGarbageCollector {
|
|
|
192
202
|
* @param requestHeaders - If the node was loaded via request path, the headers in the request.
|
|
193
203
|
*/
|
|
194
204
|
nodeUpdated(nodePath: string, reason: "Loaded" | "Changed", timestampMs?: number, packagePath?: readonly string[], request?: IRequest, headerData?: RuntimeHeaderData): void;
|
|
205
|
+
/**
|
|
206
|
+
* The given node should have its unreferenced state reset in the next GC,
|
|
207
|
+
* even if the true GC graph shows it is unreferenced. This will
|
|
208
|
+
* prevent it from being deleted by Sweep (after the Grace Period).
|
|
209
|
+
*
|
|
210
|
+
* Submit a GC op indicating that the Tombstone with the given path has been loaded.
|
|
211
|
+
* Broadcasting this information in the op stream allows the Summarizer to reset unreferenced state
|
|
212
|
+
* before runnint GC next.
|
|
213
|
+
*/
|
|
214
|
+
private triggerAutoRecovery;
|
|
195
215
|
/**
|
|
196
216
|
* Called when an outbound reference is added to a node. This is used to identify all nodes that have been
|
|
197
217
|
* referenced between summaries so that their unreferenced timestamp can be reset.
|
|
198
218
|
*
|
|
199
219
|
* @param fromNodePath - The node from which the reference is added.
|
|
200
220
|
* @param toNodePath - The node to which the reference is added.
|
|
221
|
+
* @param autorecovery - This reference is added artificially, for autorecovery. Used for logging.
|
|
201
222
|
*/
|
|
202
|
-
addedOutboundReference(fromNodePath: string, toNodePath: string): void;
|
|
223
|
+
addedOutboundReference(fromNodePath: string, toNodePath: string, autorecovery?: true): void;
|
|
203
224
|
/**
|
|
204
225
|
* Returns whether a node with the given path has been deleted or not. This can be used by the runtime to identify
|
|
205
226
|
* cases where objects are used after they are deleted and throw / log errors accordingly.
|
|
@@ -214,11 +235,12 @@ export declare class GarbageCollector implements IGarbageCollector {
|
|
|
214
235
|
private getMarkPhaseStats;
|
|
215
236
|
/**
|
|
216
237
|
* Generates the stats of a garbage collection sweep phase run.
|
|
217
|
-
* @param deletedNodes - The nodes that have been deleted
|
|
218
|
-
* @param sweepReadyNodes - The nodes that are sweep-ready in this GC run.
|
|
238
|
+
* @param deletedNodes - The nodes that have already been deleted even before this run.
|
|
239
|
+
* @param sweepReadyNodes - The nodes that are sweep-ready in this GC run. These will be deleted but are not deleted yet,
|
|
240
|
+
* due to either sweep not being enabled or the Sweep Op needing to roundtrip before the delete is executed.
|
|
219
241
|
* @param markPhaseStats - The stats of the mark phase run.
|
|
220
242
|
* @returns the stats of the sweep phase run.
|
|
221
243
|
*/
|
|
222
244
|
private getSweepPhaseStats;
|
|
223
245
|
}
|
|
224
|
-
//# sourceMappingURL=garbageCollection.d.
|
|
246
|
+
//# sourceMappingURL=garbageCollection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"garbageCollection.d.ts","sourceRoot":"","sources":["../../src/gc/garbageCollection.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,17 +6,17 @@ import { assert, LazyPromise, Timer } from "@fluidframework/core-utils";
|
|
|
6
6
|
import { gcTreeKey, } from "@fluidframework/runtime-definitions";
|
|
7
7
|
import { createResponseError, responseToException } from "@fluidframework/runtime-utils";
|
|
8
8
|
import { createChildLogger, createChildMonitoringContext, DataProcessingError, PerformanceEvent, tagCodeArtifacts, } from "@fluidframework/telemetry-utils";
|
|
9
|
-
import { BlobManager } from "../blobManager.
|
|
10
|
-
import { InactiveResponseHeaderKey, TombstoneResponseHeaderKey, } from "../containerRuntime.
|
|
11
|
-
import { ClientSessionExpiredError } from "../error.
|
|
12
|
-
import { ContainerMessageType } from "../messageTypes.
|
|
13
|
-
import { generateGCConfigs } from "./gcConfigs.
|
|
14
|
-
import { GCNodeType, UnreferencedState, GarbageCollectionMessageType, } from "./gcDefinitions.
|
|
15
|
-
import { cloneGCData, compatBehaviorAllowsGCMessageType, concatGarbageCollectionData, getGCDataFromSnapshot, } from "./gcHelpers.
|
|
16
|
-
import { runGarbageCollection } from "./gcReferenceGraphAlgorithm.
|
|
17
|
-
import { GCSummaryStateTracker } from "./gcSummaryStateTracker.
|
|
18
|
-
import { UnreferencedStateTracker } from "./gcUnreferencedStateTracker.
|
|
19
|
-
import { GCTelemetryTracker } from "./gcTelemetry.
|
|
9
|
+
import { BlobManager } from "../blobManager.js";
|
|
10
|
+
import { InactiveResponseHeaderKey, TombstoneResponseHeaderKey, } from "../containerRuntime.js";
|
|
11
|
+
import { ClientSessionExpiredError } from "../error.js";
|
|
12
|
+
import { ContainerMessageType } from "../messageTypes.js";
|
|
13
|
+
import { generateGCConfigs } from "./gcConfigs.js";
|
|
14
|
+
import { GCNodeType, UnreferencedState, GarbageCollectionMessageType, disableAutoRecoveryKey, } from "./gcDefinitions.js";
|
|
15
|
+
import { cloneGCData, compatBehaviorAllowsGCMessageType, concatGarbageCollectionData, getGCDataFromSnapshot, } from "./gcHelpers.js";
|
|
16
|
+
import { runGarbageCollection } from "./gcReferenceGraphAlgorithm.js";
|
|
17
|
+
import { GCSummaryStateTracker } from "./gcSummaryStateTracker.js";
|
|
18
|
+
import { UnreferencedStateTracker, UnreferencedStateTrackerMap, } from "./gcUnreferencedStateTracker.js";
|
|
19
|
+
import { GCTelemetryTracker } from "./gcTelemetry.js";
|
|
20
20
|
/**
|
|
21
21
|
* The garbage collector for the container runtime. It consolidates the garbage collection functionality and maintains
|
|
22
22
|
* its state across summaries.
|
|
@@ -73,8 +73,12 @@ export class GarbageCollector {
|
|
|
73
73
|
this.tombstones = [];
|
|
74
74
|
// A list of nodes that have been deleted during sweep phase.
|
|
75
75
|
this.deletedNodes = new Set();
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
/**
|
|
77
|
+
* Map of node ids to their unreferenced state tracker
|
|
78
|
+
* NOTE: The set of keys in this map is considered as the set of unreferenced nodes
|
|
79
|
+
* as of the last GC run. So in between runs, nothing should be added or removed.
|
|
80
|
+
*/
|
|
81
|
+
this.unreferencedNodesState = new UnreferencedStateTrackerMap();
|
|
78
82
|
// The number of times GC has successfully completed on this instance of GarbageCollector.
|
|
79
83
|
this.completedRuns = 0;
|
|
80
84
|
this.runtime = createParams.runtime;
|
|
@@ -84,6 +88,7 @@ export class GarbageCollector {
|
|
|
84
88
|
this.submitMessage = createParams.submitMessage;
|
|
85
89
|
const baseSnapshot = createParams.baseSnapshot;
|
|
86
90
|
const readAndParseBlob = createParams.readAndParseBlob;
|
|
91
|
+
const pendingSessionExpiryTimerStarted = createParams.sessionExpiryTimerStarted;
|
|
87
92
|
this.mc = createChildMonitoringContext({
|
|
88
93
|
logger: createParams.baseLogger,
|
|
89
94
|
namespace: "GarbageCollector",
|
|
@@ -96,11 +101,21 @@ export class GarbageCollector {
|
|
|
96
101
|
if (this.configs.sessionExpiryTimeoutMs !== undefined) {
|
|
97
102
|
// If Test Override config is set, override Session Expiry timeout.
|
|
98
103
|
const overrideSessionExpiryTimeoutMs = this.mc.config.getNumber("Fluid.GarbageCollection.TestOverride.SessionExpiryMs");
|
|
99
|
-
|
|
104
|
+
let timeoutMs = this.configs.sessionExpiryTimeoutMs;
|
|
105
|
+
if (pendingSessionExpiryTimerStarted) {
|
|
106
|
+
// NOTE: This assumes the client clock hasn't been tampered with since the original session
|
|
107
|
+
const timeLapsedSincePendingTimer = Date.now() - pendingSessionExpiryTimerStarted;
|
|
108
|
+
timeoutMs -= timeLapsedSincePendingTimer;
|
|
109
|
+
}
|
|
110
|
+
timeoutMs = overrideSessionExpiryTimeoutMs ?? timeoutMs;
|
|
111
|
+
if (timeoutMs <= 0) {
|
|
112
|
+
this.runtime.closeFn(new ClientSessionExpiredError(`Client session expired.`, timeoutMs));
|
|
113
|
+
}
|
|
100
114
|
this.sessionExpiryTimer = new Timer(timeoutMs, () => {
|
|
101
115
|
this.runtime.closeFn(new ClientSessionExpiredError(`Client session expired.`, timeoutMs));
|
|
102
116
|
});
|
|
103
117
|
this.sessionExpiryTimer.start();
|
|
118
|
+
this.sessionExpiryTimerStarted = Date.now();
|
|
104
119
|
}
|
|
105
120
|
this.summaryStateTracker = new GCSummaryStateTracker(this.configs, baseSnapshot?.trees[gcTreeKey] !== undefined /* wasGCRunInBaseSnapshot */);
|
|
106
121
|
this.telemetryTracker = new GCTelemetryTracker(this.mc, this.configs, this.isSummarizerClient, createParams.createContainerMetadata, (nodeId) => this.runtime.getNodeType(nodeId), (nodeId) => this.unreferencedNodesState.get(nodeId), this.getNodePackagePath);
|
|
@@ -287,7 +302,9 @@ export class GarbageCollector {
|
|
|
287
302
|
*/
|
|
288
303
|
async collectGarbage(options, telemetryContext) {
|
|
289
304
|
const fullGC = options.fullGC ??
|
|
290
|
-
(this.configs.runFullGC === true ||
|
|
305
|
+
(this.configs.runFullGC === true ||
|
|
306
|
+
this.summaryStateTracker.autoRecovery.fullGCRequested() ||
|
|
307
|
+
this.summaryStateTracker.doesSummaryStateNeedReset);
|
|
291
308
|
// Add the options that are used to run GC to the telemetry context.
|
|
292
309
|
telemetryContext?.setMultiple("fluid_GC", "Options", {
|
|
293
310
|
fullGC,
|
|
@@ -374,8 +391,9 @@ export class GarbageCollector {
|
|
|
374
391
|
// It will mark nodes as referenced / unreferenced and return lists of tombstone-ready and sweep-ready nodes.
|
|
375
392
|
const { tombstoneReadyNodeIds, sweepReadyNodeIds } = this.runMarkPhase(gcResult, allReferencedNodeIds, currentReferenceTimestampMs);
|
|
376
393
|
// 4. Run the Sweep phase.
|
|
377
|
-
// It will
|
|
378
|
-
//
|
|
394
|
+
// It will initiate the deletion (sending the GC Sweep op) of any sweep-ready nodes that are
|
|
395
|
+
// allowed to be deleted per config, and tombstone the rest along with the tombstone-ready nodes.
|
|
396
|
+
// Note that no nodes will be deleted until the GC Sweep op is processed.
|
|
379
397
|
this.runSweepPhase(gcResult, tombstoneReadyNodeIds, sweepReadyNodeIds);
|
|
380
398
|
this.gcDataFromLastRun = cloneGCData(gcData);
|
|
381
399
|
// 5. Get the sweep phase stats.
|
|
@@ -399,15 +417,9 @@ export class GarbageCollector {
|
|
|
399
417
|
runMarkPhase(gcResult, allReferencedNodeIds, currentReferenceTimestampMs) {
|
|
400
418
|
// 1. Marks all referenced nodes by clearing their unreferenced tracker, if any.
|
|
401
419
|
for (const nodeId of allReferencedNodeIds) {
|
|
402
|
-
|
|
403
|
-
if (nodeStateTracker !== undefined) {
|
|
404
|
-
// Stop tracking so as to clear out any running timers.
|
|
405
|
-
nodeStateTracker.stopTracking();
|
|
406
|
-
// Delete the node as we don't need to track it any more.
|
|
407
|
-
this.unreferencedNodesState.delete(nodeId);
|
|
408
|
-
}
|
|
420
|
+
this.unreferencedNodesState.delete(nodeId);
|
|
409
421
|
}
|
|
410
|
-
// 2. Mark unreferenced nodes in this run by starting unreferenced tracking for them.
|
|
422
|
+
// 2. Mark unreferenced nodes in this run by starting or updating unreferenced tracking for them.
|
|
411
423
|
const tombstoneReadyNodeIds = new Set();
|
|
412
424
|
const sweepReadyNodeIds = new Set();
|
|
413
425
|
for (const nodeId of gcResult.deletedNodeIds) {
|
|
@@ -451,29 +463,45 @@ export class GarbageCollector {
|
|
|
451
463
|
* marked as Tombstone, or deleted by Sweep.
|
|
452
464
|
*/
|
|
453
465
|
if (this.configs.testMode) {
|
|
454
|
-
// If we are running in GC test mode, unreferenced nodes (gcResult.deletedNodeIds) are deleted.
|
|
455
|
-
this.runtime.
|
|
466
|
+
// If we are running in GC test mode, unreferenced nodes (gcResult.deletedNodeIds) are deleted immediately.
|
|
467
|
+
this.runtime.deleteSweepReadyNodes(gcResult.deletedNodeIds);
|
|
456
468
|
return;
|
|
457
469
|
}
|
|
458
|
-
//
|
|
470
|
+
// We'll build up the lists of nodes to be either Tombstoned or Deleted
|
|
471
|
+
// based on the configuration and the nodes' current state.
|
|
472
|
+
// We must Tombstone any sweep-ready node that Sweep won't run for.
|
|
459
473
|
// This is important because a container may never load during a node's Sweep Grace Period,
|
|
460
474
|
// so that node would directly become sweep-ready skipping over tombstone-ready state,
|
|
461
475
|
// but should be Tombstoned since Sweep is disabled.
|
|
462
|
-
const { nodesToTombstone, nodesToDelete } =
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
:
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
476
|
+
const { nodesToTombstone, nodesToDelete } = {
|
|
477
|
+
nodesToTombstone: [...tombstoneReadyNodes],
|
|
478
|
+
nodesToDelete: [],
|
|
479
|
+
};
|
|
480
|
+
switch (this.configs.shouldRunSweep) {
|
|
481
|
+
case "YES":
|
|
482
|
+
nodesToDelete.push(...sweepReadyNodes);
|
|
483
|
+
break;
|
|
484
|
+
case "ONLY_BLOBS":
|
|
485
|
+
sweepReadyNodes.forEach((nodeId) => {
|
|
486
|
+
const nodeType = this.runtime.getNodeType(nodeId);
|
|
487
|
+
if (nodeType === GCNodeType.Blob) {
|
|
488
|
+
nodesToDelete.push(nodeId);
|
|
489
|
+
}
|
|
490
|
+
else {
|
|
491
|
+
nodesToTombstone.push(nodeId);
|
|
492
|
+
}
|
|
493
|
+
});
|
|
494
|
+
break;
|
|
495
|
+
default: // case "NO":
|
|
496
|
+
nodesToTombstone.push(...sweepReadyNodes);
|
|
497
|
+
break;
|
|
498
|
+
}
|
|
471
499
|
if (this.configs.tombstoneMode) {
|
|
472
500
|
this.tombstones = nodesToTombstone;
|
|
473
501
|
// If we are running in GC tombstone mode, update tombstoned routes.
|
|
474
502
|
this.runtime.updateTombstonedRoutes(this.tombstones);
|
|
475
503
|
}
|
|
476
|
-
if (
|
|
504
|
+
if (nodesToDelete.length > 0) {
|
|
477
505
|
// Do not send DDS node ids in the GC op. This is an optimization to reduce its size. Since GC applies to
|
|
478
506
|
// to data store only, all its DDSes are deleted along with it. The DDS ids will be retrieved from the
|
|
479
507
|
// local state when processing the op.
|
|
@@ -584,7 +612,7 @@ export class GarbageCollector {
|
|
|
584
612
|
unreferencedTimestampMs: this.unreferencedNodesState.get(nodeId)?.unreferencedTimestampMs,
|
|
585
613
|
};
|
|
586
614
|
}
|
|
587
|
-
return this.summaryStateTracker.summarize(fullTree,
|
|
615
|
+
return this.summaryStateTracker.summarize(trackState && !fullTree, gcState, this.deletedNodes, this.tombstones);
|
|
588
616
|
}
|
|
589
617
|
getMetadata() {
|
|
590
618
|
return {
|
|
@@ -611,15 +639,28 @@ export class GarbageCollector {
|
|
|
611
639
|
* @param local - Whether it was send by this client.
|
|
612
640
|
*/
|
|
613
641
|
processMessage(message, local) {
|
|
614
|
-
|
|
615
|
-
|
|
642
|
+
const gcMessageType = message.contents.type;
|
|
643
|
+
switch (gcMessageType) {
|
|
644
|
+
case GarbageCollectionMessageType.Sweep: {
|
|
616
645
|
// Delete the nodes whose ids are present in the contents.
|
|
617
646
|
this.deleteSweepReadyNodes(message.contents.deletedNodeIds);
|
|
618
647
|
break;
|
|
619
648
|
}
|
|
649
|
+
case GarbageCollectionMessageType.TombstoneLoaded: {
|
|
650
|
+
if (this.mc.config.getBoolean(disableAutoRecoveryKey) === true) {
|
|
651
|
+
break;
|
|
652
|
+
}
|
|
653
|
+
// Mark the node as referenced to ensure it isn't Swept
|
|
654
|
+
const tombstonedNodePath = message.contents.nodePath;
|
|
655
|
+
this.addedOutboundReference("/", tombstonedNodePath, true /* autorecovery */);
|
|
656
|
+
// In case the cause of the TombstoneLoaded event is incorrect GC Data (i.e. the object is actually reachable),
|
|
657
|
+
// do fullGC on the next run to get a chance to repair (in the likely case the bug is not deterministic)
|
|
658
|
+
this.summaryStateTracker.autoRecovery.requestFullGCOnNextRun();
|
|
659
|
+
break;
|
|
660
|
+
}
|
|
620
661
|
default: {
|
|
621
|
-
if (!compatBehaviorAllowsGCMessageType(
|
|
622
|
-
const error = DataProcessingError.create(`Garbage collection message of unknown type ${
|
|
662
|
+
if (!compatBehaviorAllowsGCMessageType(gcMessageType, message.compatDetails?.behavior)) {
|
|
663
|
+
const error = DataProcessingError.create(`Garbage collection message of unknown type ${gcMessageType}`, "processMessage");
|
|
623
664
|
throw error;
|
|
624
665
|
}
|
|
625
666
|
break;
|
|
@@ -629,6 +670,10 @@ export class GarbageCollector {
|
|
|
629
670
|
/**
|
|
630
671
|
* Delete nodes that are sweep-ready. Call the runtime to delete these nodes and clear the unreferenced state
|
|
631
672
|
* tracking for nodes that are actually deleted by the runtime.
|
|
673
|
+
*
|
|
674
|
+
* Note that this doesn't check any configuration around whether Sweep is enabled.
|
|
675
|
+
* That happens before the op is submitted, and from that point, any client should execute the delete.
|
|
676
|
+
*
|
|
632
677
|
* @param sweepReadyNodeIds - The ids of nodes that are ready to be deleted.
|
|
633
678
|
*/
|
|
634
679
|
deleteSweepReadyNodes(sweepReadyNodeIds) {
|
|
@@ -654,13 +699,9 @@ export class GarbageCollector {
|
|
|
654
699
|
const deletedNodeIds = this.runtime.deleteSweepReadyNodes(allSweepReadyNodeIds);
|
|
655
700
|
// Clear unreferenced state tracking for deleted nodes.
|
|
656
701
|
for (const nodeId of deletedNodeIds) {
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
nodeStateTracker.stopTracking();
|
|
661
|
-
// Delete the node as we don't need to track it any more.
|
|
662
|
-
this.unreferencedNodesState.delete(nodeId);
|
|
663
|
-
}
|
|
702
|
+
// Usually we avoid modifying the set of unreferencedNodesState keys in between GC runs,
|
|
703
|
+
// but this is ok since this node won't exist at all in the next GC run.
|
|
704
|
+
this.unreferencedNodesState.delete(nodeId);
|
|
664
705
|
this.deletedNodes.add(nodeId);
|
|
665
706
|
}
|
|
666
707
|
}
|
|
@@ -690,13 +731,20 @@ export class GarbageCollector {
|
|
|
690
731
|
lastSummaryTime: this.getLastSummaryTimestampMs(),
|
|
691
732
|
headers: headerData,
|
|
692
733
|
});
|
|
734
|
+
// Any time we log a Tombstone Loaded error (via Telemetry Tracker),
|
|
735
|
+
// we want to also trigger autorecovery to avoid the object being deleted
|
|
736
|
+
// Note: We don't need to trigger on "Changed" because any change will cause the object
|
|
737
|
+
// to be loaded by the Summarizer, and auto-recovery will be triggered then.
|
|
738
|
+
if (isTombstoned && reason === "Loaded") {
|
|
739
|
+
// Note that when a DataStore and its DDS are all loaded, each will trigger AutoRecovery for itself.
|
|
740
|
+
this.triggerAutoRecovery(nodePath);
|
|
741
|
+
}
|
|
693
742
|
const nodeType = this.runtime.getNodeType(nodePath);
|
|
694
743
|
// Unless this is a Loaded event for a Blob or DataStore, we're done after telemetry tracking
|
|
695
744
|
if (reason !== "Loaded" || ![GCNodeType.Blob, GCNodeType.DataStore].includes(nodeType)) {
|
|
696
745
|
return;
|
|
697
746
|
}
|
|
698
747
|
const errorRequest = request ?? { url: nodePath };
|
|
699
|
-
// If the object is tombstoned and tombstone enforcement is configured, throw an error.
|
|
700
748
|
if (isTombstoned && this.throwOnTombstoneLoad && headerData?.allowTombstone !== true) {
|
|
701
749
|
// The requested data store is removed by gc. Create a 404 gc response exception.
|
|
702
750
|
throw responseToException(createResponseError(404, `${nodeType} was tombstoned`, errorRequest, {
|
|
@@ -715,14 +763,40 @@ export class GarbageCollector {
|
|
|
715
763
|
}
|
|
716
764
|
}
|
|
717
765
|
}
|
|
766
|
+
/**
|
|
767
|
+
* The given node should have its unreferenced state reset in the next GC,
|
|
768
|
+
* even if the true GC graph shows it is unreferenced. This will
|
|
769
|
+
* prevent it from being deleted by Sweep (after the Grace Period).
|
|
770
|
+
*
|
|
771
|
+
* Submit a GC op indicating that the Tombstone with the given path has been loaded.
|
|
772
|
+
* Broadcasting this information in the op stream allows the Summarizer to reset unreferenced state
|
|
773
|
+
* before runnint GC next.
|
|
774
|
+
*/
|
|
775
|
+
triggerAutoRecovery(nodePath) {
|
|
776
|
+
if (this.mc.config.getBoolean(disableAutoRecoveryKey) === true) {
|
|
777
|
+
return;
|
|
778
|
+
}
|
|
779
|
+
// Use compat behavior "Ignore" since this is an optimization to opportunistically protect
|
|
780
|
+
// objects from deletion, so it's fine for older clients to ignore this op.
|
|
781
|
+
const containerGCMessage = {
|
|
782
|
+
type: ContainerMessageType.GC,
|
|
783
|
+
contents: {
|
|
784
|
+
type: GarbageCollectionMessageType.TombstoneLoaded,
|
|
785
|
+
nodePath,
|
|
786
|
+
},
|
|
787
|
+
compatDetails: { behavior: "Ignore" },
|
|
788
|
+
};
|
|
789
|
+
this.submitMessage(containerGCMessage);
|
|
790
|
+
}
|
|
718
791
|
/**
|
|
719
792
|
* Called when an outbound reference is added to a node. This is used to identify all nodes that have been
|
|
720
793
|
* referenced between summaries so that their unreferenced timestamp can be reset.
|
|
721
794
|
*
|
|
722
795
|
* @param fromNodePath - The node from which the reference is added.
|
|
723
796
|
* @param toNodePath - The node to which the reference is added.
|
|
797
|
+
* @param autorecovery - This reference is added artificially, for autorecovery. Used for logging.
|
|
724
798
|
*/
|
|
725
|
-
addedOutboundReference(fromNodePath, toNodePath) {
|
|
799
|
+
addedOutboundReference(fromNodePath, toNodePath, autorecovery) {
|
|
726
800
|
if (!this.configs.shouldRunGC) {
|
|
727
801
|
return;
|
|
728
802
|
}
|
|
@@ -748,7 +822,13 @@ export class GarbageCollector {
|
|
|
748
822
|
isTombstoned: this.tombstones.includes(toNodePath),
|
|
749
823
|
lastSummaryTime: this.getLastSummaryTimestampMs(),
|
|
750
824
|
fromId: fromNodePath,
|
|
825
|
+
autorecovery,
|
|
751
826
|
});
|
|
827
|
+
// This node is referenced - Clear its unreferenced state
|
|
828
|
+
// But don't delete the node id from the map yet.
|
|
829
|
+
// When generating GC stats, the set of nodes in here is used as the baseline for
|
|
830
|
+
// what was unreferenced in the last GC run.
|
|
831
|
+
this.unreferencedNodesState.get(toNodePath)?.stopTracking();
|
|
752
832
|
}
|
|
753
833
|
/**
|
|
754
834
|
* Returns whether a node with the given path has been deleted or not. This can be used by the runtime to identify
|
|
@@ -778,16 +858,16 @@ export class GarbageCollector {
|
|
|
778
858
|
updatedDataStoreCount: 0,
|
|
779
859
|
updatedAttachmentBlobCount: 0,
|
|
780
860
|
};
|
|
781
|
-
const updateNodeStats = (nodeId,
|
|
861
|
+
const updateNodeStats = (nodeId, isReferenced) => {
|
|
782
862
|
markPhaseStats.nodeCount++;
|
|
783
863
|
// If there is no previous GC data, every node's state is generated and is considered as updated.
|
|
784
864
|
// Otherwise, find out if any node went from referenced to unreferenced or vice-versa.
|
|
785
|
-
const
|
|
786
|
-
|
|
865
|
+
const wasNotReferenced = this.unreferencedNodesState.has(nodeId);
|
|
866
|
+
const stateUpdated = this.gcDataFromLastRun === undefined || wasNotReferenced === isReferenced;
|
|
787
867
|
if (stateUpdated) {
|
|
788
868
|
markPhaseStats.updatedNodeCount++;
|
|
789
869
|
}
|
|
790
|
-
if (!
|
|
870
|
+
if (!isReferenced) {
|
|
791
871
|
markPhaseStats.unrefNodeCount++;
|
|
792
872
|
}
|
|
793
873
|
if (this.runtime.getNodeType(nodeId) === GCNodeType.DataStore) {
|
|
@@ -795,7 +875,7 @@ export class GarbageCollector {
|
|
|
795
875
|
if (stateUpdated) {
|
|
796
876
|
markPhaseStats.updatedDataStoreCount++;
|
|
797
877
|
}
|
|
798
|
-
if (!
|
|
878
|
+
if (!isReferenced) {
|
|
799
879
|
markPhaseStats.unrefDataStoreCount++;
|
|
800
880
|
}
|
|
801
881
|
}
|
|
@@ -804,7 +884,7 @@ export class GarbageCollector {
|
|
|
804
884
|
if (stateUpdated) {
|
|
805
885
|
markPhaseStats.updatedAttachmentBlobCount++;
|
|
806
886
|
}
|
|
807
|
-
if (!
|
|
887
|
+
if (!isReferenced) {
|
|
808
888
|
markPhaseStats.unrefAttachmentBlobCount++;
|
|
809
889
|
}
|
|
810
890
|
}
|
|
@@ -819,8 +899,9 @@ export class GarbageCollector {
|
|
|
819
899
|
}
|
|
820
900
|
/**
|
|
821
901
|
* Generates the stats of a garbage collection sweep phase run.
|
|
822
|
-
* @param deletedNodes - The nodes that have been deleted
|
|
823
|
-
* @param sweepReadyNodes - The nodes that are sweep-ready in this GC run.
|
|
902
|
+
* @param deletedNodes - The nodes that have already been deleted even before this run.
|
|
903
|
+
* @param sweepReadyNodes - The nodes that are sweep-ready in this GC run. These will be deleted but are not deleted yet,
|
|
904
|
+
* due to either sweep not being enabled or the Sweep Op needing to roundtrip before the delete is executed.
|
|
824
905
|
* @param markPhaseStats - The stats of the mark phase run.
|
|
825
906
|
* @returns the stats of the sweep phase run.
|
|
826
907
|
*/
|
|
@@ -860,17 +941,17 @@ export class GarbageCollector {
|
|
|
860
941
|
sweepPhaseStats.deletedAttachmentBlobCount++;
|
|
861
942
|
}
|
|
862
943
|
}
|
|
863
|
-
//
|
|
944
|
+
// The counts from the mark phase stats do not include nodes that were
|
|
864
945
|
// deleted in previous runs. So, add the deleted node counts to life time stats.
|
|
865
946
|
sweepPhaseStats.lifetimeNodeCount += sweepPhaseStats.deletedNodeCount;
|
|
866
947
|
sweepPhaseStats.lifetimeDataStoreCount += sweepPhaseStats.deletedDataStoreCount;
|
|
867
948
|
sweepPhaseStats.lifetimeAttachmentBlobCount += sweepPhaseStats.deletedAttachmentBlobCount;
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
//
|
|
872
|
-
// is
|
|
873
|
-
//
|
|
949
|
+
// These stats are used to estimate the impact of GC in terms of how much garbage is/will be cleaned up.
|
|
950
|
+
// So we include the current sweep-ready node stats since these nodes will be deleted eventually.
|
|
951
|
+
// - If sweep is enabled, this will happen in the run after the GC op round trips back
|
|
952
|
+
// (they'll be in deletedNodes that time).
|
|
953
|
+
// - If sweep is not enabled, we still want to include these nodes since they
|
|
954
|
+
// _will be_ deleted once it is enabled.
|
|
874
955
|
for (const nodeId of sweepReadyNodes) {
|
|
875
956
|
sweepPhaseStats.deletedNodeCount++;
|
|
876
957
|
const nodeType = this.runtime.getNodeType(nodeId);
|
|
@@ -884,4 +965,4 @@ export class GarbageCollector {
|
|
|
884
965
|
return sweepPhaseStats;
|
|
885
966
|
}
|
|
886
967
|
}
|
|
887
|
-
//# sourceMappingURL=garbageCollection.
|
|
968
|
+
//# sourceMappingURL=garbageCollection.js.map
|