@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
|
@@ -9,17 +9,17 @@ const core_utils_1 = require("@fluidframework/core-utils");
|
|
|
9
9
|
const runtime_definitions_1 = require("@fluidframework/runtime-definitions");
|
|
10
10
|
const runtime_utils_1 = require("@fluidframework/runtime-utils");
|
|
11
11
|
const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
const
|
|
12
|
+
const blobManager_js_1 = require("../blobManager.js");
|
|
13
|
+
const containerRuntime_js_1 = require("../containerRuntime.js");
|
|
14
|
+
const error_js_1 = require("../error.js");
|
|
15
|
+
const messageTypes_js_1 = require("../messageTypes.js");
|
|
16
|
+
const gcConfigs_js_1 = require("./gcConfigs.js");
|
|
17
|
+
const gcDefinitions_js_1 = require("./gcDefinitions.js");
|
|
18
|
+
const gcHelpers_js_1 = require("./gcHelpers.js");
|
|
19
|
+
const gcReferenceGraphAlgorithm_js_1 = require("./gcReferenceGraphAlgorithm.js");
|
|
20
|
+
const gcSummaryStateTracker_js_1 = require("./gcSummaryStateTracker.js");
|
|
21
|
+
const gcUnreferencedStateTracker_js_1 = require("./gcUnreferencedStateTracker.js");
|
|
22
|
+
const gcTelemetry_js_1 = require("./gcTelemetry.js");
|
|
23
23
|
/**
|
|
24
24
|
* The garbage collector for the container runtime. It consolidates the garbage collection functionality and maintains
|
|
25
25
|
* its state across summaries.
|
|
@@ -76,8 +76,12 @@ class GarbageCollector {
|
|
|
76
76
|
this.tombstones = [];
|
|
77
77
|
// A list of nodes that have been deleted during sweep phase.
|
|
78
78
|
this.deletedNodes = new Set();
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
/**
|
|
80
|
+
* Map of node ids to their unreferenced state tracker
|
|
81
|
+
* NOTE: The set of keys in this map is considered as the set of unreferenced nodes
|
|
82
|
+
* as of the last GC run. So in between runs, nothing should be added or removed.
|
|
83
|
+
*/
|
|
84
|
+
this.unreferencedNodesState = new gcUnreferencedStateTracker_js_1.UnreferencedStateTrackerMap();
|
|
81
85
|
// The number of times GC has successfully completed on this instance of GarbageCollector.
|
|
82
86
|
this.completedRuns = 0;
|
|
83
87
|
this.runtime = createParams.runtime;
|
|
@@ -87,6 +91,7 @@ class GarbageCollector {
|
|
|
87
91
|
this.submitMessage = createParams.submitMessage;
|
|
88
92
|
const baseSnapshot = createParams.baseSnapshot;
|
|
89
93
|
const readAndParseBlob = createParams.readAndParseBlob;
|
|
94
|
+
const pendingSessionExpiryTimerStarted = createParams.sessionExpiryTimerStarted;
|
|
90
95
|
this.mc = (0, telemetry_utils_1.createChildMonitoringContext)({
|
|
91
96
|
logger: createParams.baseLogger,
|
|
92
97
|
namespace: "GarbageCollector",
|
|
@@ -94,19 +99,29 @@ class GarbageCollector {
|
|
|
94
99
|
all: { completedGCRuns: () => this.completedRuns },
|
|
95
100
|
},
|
|
96
101
|
});
|
|
97
|
-
this.configs = (0,
|
|
102
|
+
this.configs = (0, gcConfigs_js_1.generateGCConfigs)(this.mc, createParams);
|
|
98
103
|
// If session expiry is enabled, we need to close the container when the session expiry timeout expires.
|
|
99
104
|
if (this.configs.sessionExpiryTimeoutMs !== undefined) {
|
|
100
105
|
// If Test Override config is set, override Session Expiry timeout.
|
|
101
106
|
const overrideSessionExpiryTimeoutMs = this.mc.config.getNumber("Fluid.GarbageCollection.TestOverride.SessionExpiryMs");
|
|
102
|
-
|
|
107
|
+
let timeoutMs = this.configs.sessionExpiryTimeoutMs;
|
|
108
|
+
if (pendingSessionExpiryTimerStarted) {
|
|
109
|
+
// NOTE: This assumes the client clock hasn't been tampered with since the original session
|
|
110
|
+
const timeLapsedSincePendingTimer = Date.now() - pendingSessionExpiryTimerStarted;
|
|
111
|
+
timeoutMs -= timeLapsedSincePendingTimer;
|
|
112
|
+
}
|
|
113
|
+
timeoutMs = overrideSessionExpiryTimeoutMs ?? timeoutMs;
|
|
114
|
+
if (timeoutMs <= 0) {
|
|
115
|
+
this.runtime.closeFn(new error_js_1.ClientSessionExpiredError(`Client session expired.`, timeoutMs));
|
|
116
|
+
}
|
|
103
117
|
this.sessionExpiryTimer = new core_utils_1.Timer(timeoutMs, () => {
|
|
104
|
-
this.runtime.closeFn(new
|
|
118
|
+
this.runtime.closeFn(new error_js_1.ClientSessionExpiredError(`Client session expired.`, timeoutMs));
|
|
105
119
|
});
|
|
106
120
|
this.sessionExpiryTimer.start();
|
|
121
|
+
this.sessionExpiryTimerStarted = Date.now();
|
|
107
122
|
}
|
|
108
|
-
this.summaryStateTracker = new
|
|
109
|
-
this.telemetryTracker = new
|
|
123
|
+
this.summaryStateTracker = new gcSummaryStateTracker_js_1.GCSummaryStateTracker(this.configs, baseSnapshot?.trees[runtime_definitions_1.gcTreeKey] !== undefined /* wasGCRunInBaseSnapshot */);
|
|
124
|
+
this.telemetryTracker = new gcTelemetry_js_1.GCTelemetryTracker(this.mc, this.configs, this.isSummarizerClient, createParams.createContainerMetadata, (nodeId) => this.runtime.getNodeType(nodeId), (nodeId) => this.unreferencedNodesState.get(nodeId), this.getNodePackagePath);
|
|
110
125
|
// Get the GC data from the base snapshot. Use LazyPromise because we only want to do this once since it
|
|
111
126
|
// it involves fetching blobs from storage which is expensive.
|
|
112
127
|
this.baseSnapshotDataP = new core_utils_1.LazyPromise(async () => {
|
|
@@ -121,7 +136,7 @@ class GarbageCollector {
|
|
|
121
136
|
// incremental gc summary will not work with older gc data as well
|
|
122
137
|
return undefined;
|
|
123
138
|
}
|
|
124
|
-
const snapshotData = await (0,
|
|
139
|
+
const snapshotData = await (0, gcHelpers_js_1.getGCDataFromSnapshot)(gcSnapshotTree, readAndParseBlob);
|
|
125
140
|
// If the GC version in base snapshot does not match the GC version currently in effect, the GC data
|
|
126
141
|
// in the snapshot cannot be interpreted correctly. Set everything to undefined except for
|
|
127
142
|
// deletedNodes because irrespective of GC versions, these nodes have been deleted and cannot be
|
|
@@ -168,7 +183,7 @@ class GarbageCollector {
|
|
|
168
183
|
const gcNodes = {};
|
|
169
184
|
for (const [nodeId, nodeData] of Object.entries(baseSnapshotData.gcState.gcNodes)) {
|
|
170
185
|
if (nodeData.unreferencedTimestampMs !== undefined) {
|
|
171
|
-
this.unreferencedNodesState.set(nodeId, new
|
|
186
|
+
this.unreferencedNodesState.set(nodeId, new gcUnreferencedStateTracker_js_1.UnreferencedStateTracker(nodeData.unreferencedTimestampMs, this.configs.inactiveTimeoutMs, currentReferenceTimestampMs, this.configs.tombstoneTimeoutMs, this.configs.sweepGracePeriodMs));
|
|
172
187
|
}
|
|
173
188
|
gcNodes[nodeId] = Array.from(nodeData.outboundRoutes);
|
|
174
189
|
}
|
|
@@ -188,7 +203,7 @@ class GarbageCollector {
|
|
|
188
203
|
// Run GC on the nodes in the base summary to get the routes used in each node in the container.
|
|
189
204
|
// This is an optimization for space (vs performance) wherein we don't need to store the used routes of
|
|
190
205
|
// each node in the summary.
|
|
191
|
-
const usedRoutes = (0,
|
|
206
|
+
const usedRoutes = (0, gcReferenceGraphAlgorithm_js_1.runGarbageCollection)(gcNodes, ["/"]).referencedNodeIds;
|
|
192
207
|
return { gcData: { gcNodes }, usedRoutes };
|
|
193
208
|
});
|
|
194
209
|
// Log all the GC options and the state determined by the garbage collector.
|
|
@@ -290,7 +305,9 @@ class GarbageCollector {
|
|
|
290
305
|
*/
|
|
291
306
|
async collectGarbage(options, telemetryContext) {
|
|
292
307
|
const fullGC = options.fullGC ??
|
|
293
|
-
(this.configs.runFullGC === true ||
|
|
308
|
+
(this.configs.runFullGC === true ||
|
|
309
|
+
this.summaryStateTracker.autoRecovery.fullGCRequested() ||
|
|
310
|
+
this.summaryStateTracker.doesSummaryStateNeedReset);
|
|
294
311
|
// Add the options that are used to run GC to the telemetry context.
|
|
295
312
|
telemetryContext?.setMultiple("fluid_GC", "Options", {
|
|
296
313
|
fullGC,
|
|
@@ -366,7 +383,7 @@ class GarbageCollector {
|
|
|
366
383
|
// 1. Generate / analyze the runtime's reference graph.
|
|
367
384
|
// Get the reference graph (gcData) and run GC algorithm to get referenced / unreferenced nodes.
|
|
368
385
|
const gcData = await this.runtime.getGCData(fullGC);
|
|
369
|
-
const gcResult = (0,
|
|
386
|
+
const gcResult = (0, gcReferenceGraphAlgorithm_js_1.runGarbageCollection)(gcData.gcNodes, ["/"]);
|
|
370
387
|
// Get all referenced nodes - References in this run + references between the previous and current runs.
|
|
371
388
|
const allReferencedNodeIds = this.findAllNodesReferencedBetweenGCs(gcData, this.gcDataFromLastRun, logger) ??
|
|
372
389
|
gcResult.referencedNodeIds;
|
|
@@ -377,10 +394,11 @@ class GarbageCollector {
|
|
|
377
394
|
// It will mark nodes as referenced / unreferenced and return lists of tombstone-ready and sweep-ready nodes.
|
|
378
395
|
const { tombstoneReadyNodeIds, sweepReadyNodeIds } = this.runMarkPhase(gcResult, allReferencedNodeIds, currentReferenceTimestampMs);
|
|
379
396
|
// 4. Run the Sweep phase.
|
|
380
|
-
// It will
|
|
381
|
-
//
|
|
397
|
+
// It will initiate the deletion (sending the GC Sweep op) of any sweep-ready nodes that are
|
|
398
|
+
// allowed to be deleted per config, and tombstone the rest along with the tombstone-ready nodes.
|
|
399
|
+
// Note that no nodes will be deleted until the GC Sweep op is processed.
|
|
382
400
|
this.runSweepPhase(gcResult, tombstoneReadyNodeIds, sweepReadyNodeIds);
|
|
383
|
-
this.gcDataFromLastRun = (0,
|
|
401
|
+
this.gcDataFromLastRun = (0, gcHelpers_js_1.cloneGCData)(gcData);
|
|
384
402
|
// 5. Get the sweep phase stats.
|
|
385
403
|
const sweepPhaseStats = this.getSweepPhaseStats(this.deletedNodes, sweepReadyNodeIds, markPhaseStats);
|
|
386
404
|
return { ...markPhaseStats, ...sweepPhaseStats };
|
|
@@ -402,31 +420,25 @@ class GarbageCollector {
|
|
|
402
420
|
runMarkPhase(gcResult, allReferencedNodeIds, currentReferenceTimestampMs) {
|
|
403
421
|
// 1. Marks all referenced nodes by clearing their unreferenced tracker, if any.
|
|
404
422
|
for (const nodeId of allReferencedNodeIds) {
|
|
405
|
-
|
|
406
|
-
if (nodeStateTracker !== undefined) {
|
|
407
|
-
// Stop tracking so as to clear out any running timers.
|
|
408
|
-
nodeStateTracker.stopTracking();
|
|
409
|
-
// Delete the node as we don't need to track it any more.
|
|
410
|
-
this.unreferencedNodesState.delete(nodeId);
|
|
411
|
-
}
|
|
423
|
+
this.unreferencedNodesState.delete(nodeId);
|
|
412
424
|
}
|
|
413
|
-
// 2. Mark unreferenced nodes in this run by starting unreferenced tracking for them.
|
|
425
|
+
// 2. Mark unreferenced nodes in this run by starting or updating unreferenced tracking for them.
|
|
414
426
|
const tombstoneReadyNodeIds = new Set();
|
|
415
427
|
const sweepReadyNodeIds = new Set();
|
|
416
428
|
for (const nodeId of gcResult.deletedNodeIds) {
|
|
417
429
|
const nodeStateTracker = this.unreferencedNodesState.get(nodeId);
|
|
418
430
|
if (nodeStateTracker === undefined) {
|
|
419
|
-
this.unreferencedNodesState.set(nodeId, new
|
|
431
|
+
this.unreferencedNodesState.set(nodeId, new gcUnreferencedStateTracker_js_1.UnreferencedStateTracker(currentReferenceTimestampMs, this.configs.inactiveTimeoutMs, currentReferenceTimestampMs, this.configs.tombstoneTimeoutMs, this.configs.sweepGracePeriodMs));
|
|
420
432
|
}
|
|
421
433
|
else {
|
|
422
434
|
// If a node was already unreferenced, update its tracking information. Since the current reference time
|
|
423
435
|
// is from the ops seen, this will ensure that we keep updating unreferenced state as time moves forward.
|
|
424
436
|
nodeStateTracker.updateTracking(currentReferenceTimestampMs);
|
|
425
437
|
// If a node is tombstone or sweep-ready, store it so it can be returned.
|
|
426
|
-
if (nodeStateTracker.state ===
|
|
438
|
+
if (nodeStateTracker.state === gcDefinitions_js_1.UnreferencedState.TombstoneReady) {
|
|
427
439
|
tombstoneReadyNodeIds.add(nodeId);
|
|
428
440
|
}
|
|
429
|
-
if (nodeStateTracker.state ===
|
|
441
|
+
if (nodeStateTracker.state === gcDefinitions_js_1.UnreferencedState.SweepReady) {
|
|
430
442
|
sweepReadyNodeIds.add(nodeId);
|
|
431
443
|
}
|
|
432
444
|
}
|
|
@@ -454,45 +466,61 @@ class GarbageCollector {
|
|
|
454
466
|
* marked as Tombstone, or deleted by Sweep.
|
|
455
467
|
*/
|
|
456
468
|
if (this.configs.testMode) {
|
|
457
|
-
// If we are running in GC test mode, unreferenced nodes (gcResult.deletedNodeIds) are deleted.
|
|
458
|
-
this.runtime.
|
|
469
|
+
// If we are running in GC test mode, unreferenced nodes (gcResult.deletedNodeIds) are deleted immediately.
|
|
470
|
+
this.runtime.deleteSweepReadyNodes(gcResult.deletedNodeIds);
|
|
459
471
|
return;
|
|
460
472
|
}
|
|
461
|
-
//
|
|
473
|
+
// We'll build up the lists of nodes to be either Tombstoned or Deleted
|
|
474
|
+
// based on the configuration and the nodes' current state.
|
|
475
|
+
// We must Tombstone any sweep-ready node that Sweep won't run for.
|
|
462
476
|
// This is important because a container may never load during a node's Sweep Grace Period,
|
|
463
477
|
// so that node would directly become sweep-ready skipping over tombstone-ready state,
|
|
464
478
|
// but should be Tombstoned since Sweep is disabled.
|
|
465
|
-
const { nodesToTombstone, nodesToDelete } =
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
:
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
479
|
+
const { nodesToTombstone, nodesToDelete } = {
|
|
480
|
+
nodesToTombstone: [...tombstoneReadyNodes],
|
|
481
|
+
nodesToDelete: [],
|
|
482
|
+
};
|
|
483
|
+
switch (this.configs.shouldRunSweep) {
|
|
484
|
+
case "YES":
|
|
485
|
+
nodesToDelete.push(...sweepReadyNodes);
|
|
486
|
+
break;
|
|
487
|
+
case "ONLY_BLOBS":
|
|
488
|
+
sweepReadyNodes.forEach((nodeId) => {
|
|
489
|
+
const nodeType = this.runtime.getNodeType(nodeId);
|
|
490
|
+
if (nodeType === gcDefinitions_js_1.GCNodeType.Blob) {
|
|
491
|
+
nodesToDelete.push(nodeId);
|
|
492
|
+
}
|
|
493
|
+
else {
|
|
494
|
+
nodesToTombstone.push(nodeId);
|
|
495
|
+
}
|
|
496
|
+
});
|
|
497
|
+
break;
|
|
498
|
+
default: // case "NO":
|
|
499
|
+
nodesToTombstone.push(...sweepReadyNodes);
|
|
500
|
+
break;
|
|
501
|
+
}
|
|
474
502
|
if (this.configs.tombstoneMode) {
|
|
475
503
|
this.tombstones = nodesToTombstone;
|
|
476
504
|
// If we are running in GC tombstone mode, update tombstoned routes.
|
|
477
505
|
this.runtime.updateTombstonedRoutes(this.tombstones);
|
|
478
506
|
}
|
|
479
|
-
if (
|
|
507
|
+
if (nodesToDelete.length > 0) {
|
|
480
508
|
// Do not send DDS node ids in the GC op. This is an optimization to reduce its size. Since GC applies to
|
|
481
509
|
// to data store only, all its DDSes are deleted along with it. The DDS ids will be retrieved from the
|
|
482
510
|
// local state when processing the op.
|
|
483
511
|
const sweepReadyDSAndBlobs = nodesToDelete.filter((nodeId) => {
|
|
484
512
|
const nodeType = this.runtime.getNodeType(nodeId);
|
|
485
|
-
return nodeType ===
|
|
513
|
+
return nodeType === gcDefinitions_js_1.GCNodeType.DataStore || nodeType === gcDefinitions_js_1.GCNodeType.Blob;
|
|
486
514
|
});
|
|
487
515
|
const contents = {
|
|
488
|
-
type:
|
|
516
|
+
type: gcDefinitions_js_1.GarbageCollectionMessageType.Sweep,
|
|
489
517
|
deletedNodeIds: sweepReadyDSAndBlobs,
|
|
490
518
|
};
|
|
491
519
|
// Its fine for older clients to ignore this op because it doesn't have any functional impact. This op
|
|
492
520
|
// is an optimization to ensure that all clients are in sync when it comes to deleted nodes to prevent their
|
|
493
521
|
// accidental usage. The clients will sync without the delete op too but it may take longer.
|
|
494
522
|
const containerGCMessage = {
|
|
495
|
-
type:
|
|
523
|
+
type: messageTypes_js_1.ContainerMessageType.GC,
|
|
496
524
|
contents,
|
|
497
525
|
compatDetails: { behavior: "Ignore" },
|
|
498
526
|
};
|
|
@@ -547,7 +575,7 @@ class GarbageCollector {
|
|
|
547
575
|
* - We don't require DDSes handles to be stored in a referenced DDS.
|
|
548
576
|
* - A new data store may have "root" DDSes already created and we don't detect them today.
|
|
549
577
|
*/
|
|
550
|
-
const gcDataSuperSet = (0,
|
|
578
|
+
const gcDataSuperSet = (0, gcHelpers_js_1.concatGarbageCollectionData)(previousGCData, currentGCData);
|
|
551
579
|
const newOutboundRoutesSinceLastRun = [];
|
|
552
580
|
this.newReferencesSinceLastRun.forEach((outboundRoutes, sourceNodeId) => {
|
|
553
581
|
if (gcDataSuperSet.gcNodes[sourceNodeId] === undefined) {
|
|
@@ -565,7 +593,7 @@ class GarbageCollector {
|
|
|
565
593
|
* Note that some of these nodes may be unreferenced now and if so, the current run will mark them as
|
|
566
594
|
* unreferenced and add unreferenced state.
|
|
567
595
|
*/
|
|
568
|
-
const gcResult = (0,
|
|
596
|
+
const gcResult = (0, gcReferenceGraphAlgorithm_js_1.runGarbageCollection)(gcDataSuperSet.gcNodes, [
|
|
569
597
|
"/",
|
|
570
598
|
...newOutboundRoutesSinceLastRun,
|
|
571
599
|
]);
|
|
@@ -587,7 +615,7 @@ class GarbageCollector {
|
|
|
587
615
|
unreferencedTimestampMs: this.unreferencedNodesState.get(nodeId)?.unreferencedTimestampMs,
|
|
588
616
|
};
|
|
589
617
|
}
|
|
590
|
-
return this.summaryStateTracker.summarize(fullTree,
|
|
618
|
+
return this.summaryStateTracker.summarize(trackState && !fullTree, gcState, this.deletedNodes, this.tombstones);
|
|
591
619
|
}
|
|
592
620
|
getMetadata() {
|
|
593
621
|
return {
|
|
@@ -614,15 +642,28 @@ class GarbageCollector {
|
|
|
614
642
|
* @param local - Whether it was send by this client.
|
|
615
643
|
*/
|
|
616
644
|
processMessage(message, local) {
|
|
617
|
-
|
|
618
|
-
|
|
645
|
+
const gcMessageType = message.contents.type;
|
|
646
|
+
switch (gcMessageType) {
|
|
647
|
+
case gcDefinitions_js_1.GarbageCollectionMessageType.Sweep: {
|
|
619
648
|
// Delete the nodes whose ids are present in the contents.
|
|
620
649
|
this.deleteSweepReadyNodes(message.contents.deletedNodeIds);
|
|
621
650
|
break;
|
|
622
651
|
}
|
|
652
|
+
case gcDefinitions_js_1.GarbageCollectionMessageType.TombstoneLoaded: {
|
|
653
|
+
if (this.mc.config.getBoolean(gcDefinitions_js_1.disableAutoRecoveryKey) === true) {
|
|
654
|
+
break;
|
|
655
|
+
}
|
|
656
|
+
// Mark the node as referenced to ensure it isn't Swept
|
|
657
|
+
const tombstonedNodePath = message.contents.nodePath;
|
|
658
|
+
this.addedOutboundReference("/", tombstonedNodePath, true /* autorecovery */);
|
|
659
|
+
// In case the cause of the TombstoneLoaded event is incorrect GC Data (i.e. the object is actually reachable),
|
|
660
|
+
// do fullGC on the next run to get a chance to repair (in the likely case the bug is not deterministic)
|
|
661
|
+
this.summaryStateTracker.autoRecovery.requestFullGCOnNextRun();
|
|
662
|
+
break;
|
|
663
|
+
}
|
|
623
664
|
default: {
|
|
624
|
-
if (!(0,
|
|
625
|
-
const error = telemetry_utils_1.DataProcessingError.create(`Garbage collection message of unknown type ${
|
|
665
|
+
if (!(0, gcHelpers_js_1.compatBehaviorAllowsGCMessageType)(gcMessageType, message.compatDetails?.behavior)) {
|
|
666
|
+
const error = telemetry_utils_1.DataProcessingError.create(`Garbage collection message of unknown type ${gcMessageType}`, "processMessage");
|
|
626
667
|
throw error;
|
|
627
668
|
}
|
|
628
669
|
break;
|
|
@@ -632,6 +673,10 @@ class GarbageCollector {
|
|
|
632
673
|
/**
|
|
633
674
|
* Delete nodes that are sweep-ready. Call the runtime to delete these nodes and clear the unreferenced state
|
|
634
675
|
* tracking for nodes that are actually deleted by the runtime.
|
|
676
|
+
*
|
|
677
|
+
* Note that this doesn't check any configuration around whether Sweep is enabled.
|
|
678
|
+
* That happens before the op is submitted, and from that point, any client should execute the delete.
|
|
679
|
+
*
|
|
635
680
|
* @param sweepReadyNodeIds - The ids of nodes that are ready to be deleted.
|
|
636
681
|
*/
|
|
637
682
|
deleteSweepReadyNodes(sweepReadyNodeIds) {
|
|
@@ -657,13 +702,9 @@ class GarbageCollector {
|
|
|
657
702
|
const deletedNodeIds = this.runtime.deleteSweepReadyNodes(allSweepReadyNodeIds);
|
|
658
703
|
// Clear unreferenced state tracking for deleted nodes.
|
|
659
704
|
for (const nodeId of deletedNodeIds) {
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
nodeStateTracker.stopTracking();
|
|
664
|
-
// Delete the node as we don't need to track it any more.
|
|
665
|
-
this.unreferencedNodesState.delete(nodeId);
|
|
666
|
-
}
|
|
705
|
+
// Usually we avoid modifying the set of unreferencedNodesState keys in between GC runs,
|
|
706
|
+
// but this is ok since this node won't exist at all in the next GC run.
|
|
707
|
+
this.unreferencedNodesState.delete(nodeId);
|
|
667
708
|
this.deletedNodes.add(nodeId);
|
|
668
709
|
}
|
|
669
710
|
}
|
|
@@ -693,17 +734,24 @@ class GarbageCollector {
|
|
|
693
734
|
lastSummaryTime: this.getLastSummaryTimestampMs(),
|
|
694
735
|
headers: headerData,
|
|
695
736
|
});
|
|
737
|
+
// Any time we log a Tombstone Loaded error (via Telemetry Tracker),
|
|
738
|
+
// we want to also trigger autorecovery to avoid the object being deleted
|
|
739
|
+
// Note: We don't need to trigger on "Changed" because any change will cause the object
|
|
740
|
+
// to be loaded by the Summarizer, and auto-recovery will be triggered then.
|
|
741
|
+
if (isTombstoned && reason === "Loaded") {
|
|
742
|
+
// Note that when a DataStore and its DDS are all loaded, each will trigger AutoRecovery for itself.
|
|
743
|
+
this.triggerAutoRecovery(nodePath);
|
|
744
|
+
}
|
|
696
745
|
const nodeType = this.runtime.getNodeType(nodePath);
|
|
697
746
|
// Unless this is a Loaded event for a Blob or DataStore, we're done after telemetry tracking
|
|
698
|
-
if (reason !== "Loaded" || ![
|
|
747
|
+
if (reason !== "Loaded" || ![gcDefinitions_js_1.GCNodeType.Blob, gcDefinitions_js_1.GCNodeType.DataStore].includes(nodeType)) {
|
|
699
748
|
return;
|
|
700
749
|
}
|
|
701
750
|
const errorRequest = request ?? { url: nodePath };
|
|
702
|
-
// If the object is tombstoned and tombstone enforcement is configured, throw an error.
|
|
703
751
|
if (isTombstoned && this.throwOnTombstoneLoad && headerData?.allowTombstone !== true) {
|
|
704
752
|
// The requested data store is removed by gc. Create a 404 gc response exception.
|
|
705
753
|
throw (0, runtime_utils_1.responseToException)((0, runtime_utils_1.createResponseError)(404, `${nodeType} was tombstoned`, errorRequest, {
|
|
706
|
-
[
|
|
754
|
+
[containerRuntime_js_1.TombstoneResponseHeaderKey]: true,
|
|
707
755
|
}), errorRequest);
|
|
708
756
|
}
|
|
709
757
|
// If the object is inactive and inactive enforcement is configured, throw an error.
|
|
@@ -713,19 +761,45 @@ class GarbageCollector {
|
|
|
713
761
|
headerData?.allowInactive !== true;
|
|
714
762
|
if (shouldThrowOnInactiveLoad) {
|
|
715
763
|
throw (0, runtime_utils_1.responseToException)((0, runtime_utils_1.createResponseError)(404, `${nodeType} is inactive`, errorRequest, {
|
|
716
|
-
[
|
|
764
|
+
[containerRuntime_js_1.InactiveResponseHeaderKey]: true,
|
|
717
765
|
}), errorRequest);
|
|
718
766
|
}
|
|
719
767
|
}
|
|
720
768
|
}
|
|
769
|
+
/**
|
|
770
|
+
* The given node should have its unreferenced state reset in the next GC,
|
|
771
|
+
* even if the true GC graph shows it is unreferenced. This will
|
|
772
|
+
* prevent it from being deleted by Sweep (after the Grace Period).
|
|
773
|
+
*
|
|
774
|
+
* Submit a GC op indicating that the Tombstone with the given path has been loaded.
|
|
775
|
+
* Broadcasting this information in the op stream allows the Summarizer to reset unreferenced state
|
|
776
|
+
* before runnint GC next.
|
|
777
|
+
*/
|
|
778
|
+
triggerAutoRecovery(nodePath) {
|
|
779
|
+
if (this.mc.config.getBoolean(gcDefinitions_js_1.disableAutoRecoveryKey) === true) {
|
|
780
|
+
return;
|
|
781
|
+
}
|
|
782
|
+
// Use compat behavior "Ignore" since this is an optimization to opportunistically protect
|
|
783
|
+
// objects from deletion, so it's fine for older clients to ignore this op.
|
|
784
|
+
const containerGCMessage = {
|
|
785
|
+
type: messageTypes_js_1.ContainerMessageType.GC,
|
|
786
|
+
contents: {
|
|
787
|
+
type: gcDefinitions_js_1.GarbageCollectionMessageType.TombstoneLoaded,
|
|
788
|
+
nodePath,
|
|
789
|
+
},
|
|
790
|
+
compatDetails: { behavior: "Ignore" },
|
|
791
|
+
};
|
|
792
|
+
this.submitMessage(containerGCMessage);
|
|
793
|
+
}
|
|
721
794
|
/**
|
|
722
795
|
* Called when an outbound reference is added to a node. This is used to identify all nodes that have been
|
|
723
796
|
* referenced between summaries so that their unreferenced timestamp can be reset.
|
|
724
797
|
*
|
|
725
798
|
* @param fromNodePath - The node from which the reference is added.
|
|
726
799
|
* @param toNodePath - The node to which the reference is added.
|
|
800
|
+
* @param autorecovery - This reference is added artificially, for autorecovery. Used for logging.
|
|
727
801
|
*/
|
|
728
|
-
addedOutboundReference(fromNodePath, toNodePath) {
|
|
802
|
+
addedOutboundReference(fromNodePath, toNodePath, autorecovery) {
|
|
729
803
|
if (!this.configs.shouldRunGC) {
|
|
730
804
|
return;
|
|
731
805
|
}
|
|
@@ -751,7 +825,13 @@ class GarbageCollector {
|
|
|
751
825
|
isTombstoned: this.tombstones.includes(toNodePath),
|
|
752
826
|
lastSummaryTime: this.getLastSummaryTimestampMs(),
|
|
753
827
|
fromId: fromNodePath,
|
|
828
|
+
autorecovery,
|
|
754
829
|
});
|
|
830
|
+
// This node is referenced - Clear its unreferenced state
|
|
831
|
+
// But don't delete the node id from the map yet.
|
|
832
|
+
// When generating GC stats, the set of nodes in here is used as the baseline for
|
|
833
|
+
// what was unreferenced in the last GC run.
|
|
834
|
+
this.unreferencedNodesState.get(toNodePath)?.stopTracking();
|
|
755
835
|
}
|
|
756
836
|
/**
|
|
757
837
|
* Returns whether a node with the given path has been deleted or not. This can be used by the runtime to identify
|
|
@@ -781,33 +861,33 @@ class GarbageCollector {
|
|
|
781
861
|
updatedDataStoreCount: 0,
|
|
782
862
|
updatedAttachmentBlobCount: 0,
|
|
783
863
|
};
|
|
784
|
-
const updateNodeStats = (nodeId,
|
|
864
|
+
const updateNodeStats = (nodeId, isReferenced) => {
|
|
785
865
|
markPhaseStats.nodeCount++;
|
|
786
866
|
// If there is no previous GC data, every node's state is generated and is considered as updated.
|
|
787
867
|
// Otherwise, find out if any node went from referenced to unreferenced or vice-versa.
|
|
788
|
-
const
|
|
789
|
-
|
|
868
|
+
const wasNotReferenced = this.unreferencedNodesState.has(nodeId);
|
|
869
|
+
const stateUpdated = this.gcDataFromLastRun === undefined || wasNotReferenced === isReferenced;
|
|
790
870
|
if (stateUpdated) {
|
|
791
871
|
markPhaseStats.updatedNodeCount++;
|
|
792
872
|
}
|
|
793
|
-
if (!
|
|
873
|
+
if (!isReferenced) {
|
|
794
874
|
markPhaseStats.unrefNodeCount++;
|
|
795
875
|
}
|
|
796
|
-
if (this.runtime.getNodeType(nodeId) ===
|
|
876
|
+
if (this.runtime.getNodeType(nodeId) === gcDefinitions_js_1.GCNodeType.DataStore) {
|
|
797
877
|
markPhaseStats.dataStoreCount++;
|
|
798
878
|
if (stateUpdated) {
|
|
799
879
|
markPhaseStats.updatedDataStoreCount++;
|
|
800
880
|
}
|
|
801
|
-
if (!
|
|
881
|
+
if (!isReferenced) {
|
|
802
882
|
markPhaseStats.unrefDataStoreCount++;
|
|
803
883
|
}
|
|
804
884
|
}
|
|
805
|
-
if (this.runtime.getNodeType(nodeId) ===
|
|
885
|
+
if (this.runtime.getNodeType(nodeId) === gcDefinitions_js_1.GCNodeType.Blob) {
|
|
806
886
|
markPhaseStats.attachmentBlobCount++;
|
|
807
887
|
if (stateUpdated) {
|
|
808
888
|
markPhaseStats.updatedAttachmentBlobCount++;
|
|
809
889
|
}
|
|
810
|
-
if (!
|
|
890
|
+
if (!isReferenced) {
|
|
811
891
|
markPhaseStats.unrefAttachmentBlobCount++;
|
|
812
892
|
}
|
|
813
893
|
}
|
|
@@ -822,8 +902,9 @@ class GarbageCollector {
|
|
|
822
902
|
}
|
|
823
903
|
/**
|
|
824
904
|
* Generates the stats of a garbage collection sweep phase run.
|
|
825
|
-
* @param deletedNodes - The nodes that have been deleted
|
|
826
|
-
* @param sweepReadyNodes - The nodes that are sweep-ready in this GC run.
|
|
905
|
+
* @param deletedNodes - The nodes that have already been deleted even before this run.
|
|
906
|
+
* @param sweepReadyNodes - The nodes that are sweep-ready in this GC run. These will be deleted but are not deleted yet,
|
|
907
|
+
* due to either sweep not being enabled or the Sweep Op needing to roundtrip before the delete is executed.
|
|
827
908
|
* @param markPhaseStats - The stats of the mark phase run.
|
|
828
909
|
* @returns the stats of the sweep phase run.
|
|
829
910
|
*/
|
|
@@ -842,45 +923,45 @@ class GarbageCollector {
|
|
|
842
923
|
// be good enough because the only types that participate in GC today are data stores, DDSes and blobs.
|
|
843
924
|
const getDeletedNodeType = (nodeId) => {
|
|
844
925
|
const pathParts = nodeId.split("/");
|
|
845
|
-
if (pathParts[1] ===
|
|
846
|
-
return
|
|
926
|
+
if (pathParts[1] === blobManager_js_1.BlobManager.basePath) {
|
|
927
|
+
return gcDefinitions_js_1.GCNodeType.Blob;
|
|
847
928
|
}
|
|
848
929
|
if (pathParts.length === 2) {
|
|
849
|
-
return
|
|
930
|
+
return gcDefinitions_js_1.GCNodeType.DataStore;
|
|
850
931
|
}
|
|
851
932
|
if (pathParts.length === 3) {
|
|
852
|
-
return
|
|
933
|
+
return gcDefinitions_js_1.GCNodeType.SubDataStore;
|
|
853
934
|
}
|
|
854
|
-
return
|
|
935
|
+
return gcDefinitions_js_1.GCNodeType.Other;
|
|
855
936
|
};
|
|
856
937
|
for (const nodeId of deletedNodes) {
|
|
857
938
|
sweepPhaseStats.deletedNodeCount++;
|
|
858
939
|
const nodeType = getDeletedNodeType(nodeId);
|
|
859
|
-
if (nodeType ===
|
|
940
|
+
if (nodeType === gcDefinitions_js_1.GCNodeType.DataStore) {
|
|
860
941
|
sweepPhaseStats.deletedDataStoreCount++;
|
|
861
942
|
}
|
|
862
|
-
else if (nodeType ===
|
|
943
|
+
else if (nodeType === gcDefinitions_js_1.GCNodeType.Blob) {
|
|
863
944
|
sweepPhaseStats.deletedAttachmentBlobCount++;
|
|
864
945
|
}
|
|
865
946
|
}
|
|
866
|
-
//
|
|
947
|
+
// The counts from the mark phase stats do not include nodes that were
|
|
867
948
|
// deleted in previous runs. So, add the deleted node counts to life time stats.
|
|
868
949
|
sweepPhaseStats.lifetimeNodeCount += sweepPhaseStats.deletedNodeCount;
|
|
869
950
|
sweepPhaseStats.lifetimeDataStoreCount += sweepPhaseStats.deletedDataStoreCount;
|
|
870
951
|
sweepPhaseStats.lifetimeAttachmentBlobCount += sweepPhaseStats.deletedAttachmentBlobCount;
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
//
|
|
875
|
-
// is
|
|
876
|
-
//
|
|
952
|
+
// These stats are used to estimate the impact of GC in terms of how much garbage is/will be cleaned up.
|
|
953
|
+
// So we include the current sweep-ready node stats since these nodes will be deleted eventually.
|
|
954
|
+
// - If sweep is enabled, this will happen in the run after the GC op round trips back
|
|
955
|
+
// (they'll be in deletedNodes that time).
|
|
956
|
+
// - If sweep is not enabled, we still want to include these nodes since they
|
|
957
|
+
// _will be_ deleted once it is enabled.
|
|
877
958
|
for (const nodeId of sweepReadyNodes) {
|
|
878
959
|
sweepPhaseStats.deletedNodeCount++;
|
|
879
960
|
const nodeType = this.runtime.getNodeType(nodeId);
|
|
880
|
-
if (nodeType ===
|
|
961
|
+
if (nodeType === gcDefinitions_js_1.GCNodeType.DataStore) {
|
|
881
962
|
sweepPhaseStats.deletedDataStoreCount++;
|
|
882
963
|
}
|
|
883
|
-
else if (nodeType ===
|
|
964
|
+
else if (nodeType === gcDefinitions_js_1.GCNodeType.Blob) {
|
|
884
965
|
sweepPhaseStats.deletedAttachmentBlobCount++;
|
|
885
966
|
}
|
|
886
967
|
}
|