@fluidframework/container-runtime 2.0.0-dev.5.3.2.178189 → 2.0.0-dev.6.4.0.191258
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/CHANGELOG.md +123 -0
- package/README.md +4 -3
- package/dist/batchTracker.d.ts +3 -2
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js +6 -5
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager.d.ts +10 -16
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +184 -172
- package/dist/blobManager.js.map +1 -1
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +25 -16
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerRuntime.d.ts +161 -35
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +697 -449
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.d.ts.map +1 -1
- package/dist/dataStore.js +15 -7
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +3 -2
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +83 -87
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts +1 -2
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js +8 -9
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/dataStoreRegistry.js +2 -2
- package/dist/dataStoreRegistry.js.map +1 -1
- package/dist/dataStores.d.ts +22 -6
- package/dist/dataStores.d.ts.map +1 -1
- package/dist/dataStores.js +123 -81
- package/dist/dataStores.js.map +1 -1
- package/dist/deltaManagerProxyBase.d.ts +35 -0
- package/dist/deltaManagerProxyBase.d.ts.map +1 -0
- package/dist/deltaManagerProxyBase.js +77 -0
- package/dist/deltaManagerProxyBase.js.map +1 -0
- package/dist/deltaManagerSummarizerProxy.d.ts +1 -1
- package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
- package/dist/deltaManagerSummarizerProxy.js +4 -2
- package/dist/deltaManagerSummarizerProxy.js.map +1 -1
- package/dist/deltaScheduler.d.ts.map +1 -1
- package/dist/deltaScheduler.js +10 -10
- package/dist/deltaScheduler.js.map +1 -1
- package/dist/error.d.ts +14 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +21 -0
- package/dist/error.js.map +1 -0
- package/dist/gc/garbageCollection.d.ts +10 -9
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +61 -53
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.d.ts.map +1 -1
- package/dist/gc/gcConfigs.js +18 -14
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +17 -4
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js +14 -15
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcHelpers.d.ts +0 -8
- package/dist/gc/gcHelpers.d.ts.map +1 -1
- package/dist/gc/gcHelpers.js +11 -24
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts +4 -7
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js +19 -58
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +45 -35
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.js +4 -4
- package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
- package/dist/gc/index.d.ts +2 -2
- package/dist/gc/index.d.ts.map +1 -1
- package/dist/gc/index.js +3 -5
- package/dist/gc/index.js.map +1 -1
- package/dist/id-compressor/appendOnlySortedMap.d.ts +8 -30
- package/dist/id-compressor/appendOnlySortedMap.d.ts.map +1 -1
- package/dist/id-compressor/appendOnlySortedMap.js +26 -68
- package/dist/id-compressor/appendOnlySortedMap.js.map +1 -1
- package/dist/id-compressor/finalSpace.d.ts +29 -0
- package/dist/id-compressor/finalSpace.d.ts.map +1 -0
- package/dist/id-compressor/finalSpace.js +62 -0
- package/dist/id-compressor/finalSpace.js.map +1 -0
- package/dist/id-compressor/idCompressor.d.ts +25 -250
- package/dist/id-compressor/idCompressor.d.ts.map +1 -1
- package/dist/id-compressor/idCompressor.js +390 -1153
- package/dist/id-compressor/idCompressor.js.map +1 -1
- package/dist/id-compressor/identifiers.d.ts +32 -0
- package/dist/id-compressor/identifiers.d.ts.map +1 -0
- package/dist/id-compressor/identifiers.js +15 -0
- package/dist/id-compressor/identifiers.js.map +1 -0
- package/dist/id-compressor/index.d.ts +5 -6
- package/dist/id-compressor/index.d.ts.map +1 -1
- package/dist/id-compressor/index.js +20 -26
- package/dist/id-compressor/index.js.map +1 -1
- package/dist/id-compressor/persistanceUtilities.d.ts +22 -0
- package/dist/id-compressor/persistanceUtilities.d.ts.map +1 -0
- package/dist/id-compressor/persistanceUtilities.js +43 -0
- package/dist/id-compressor/persistanceUtilities.js.map +1 -0
- package/dist/id-compressor/sessionSpaceNormalizer.d.ts +46 -0
- package/dist/id-compressor/sessionSpaceNormalizer.d.ts.map +1 -0
- package/dist/id-compressor/sessionSpaceNormalizer.js +80 -0
- package/dist/id-compressor/sessionSpaceNormalizer.js.map +1 -0
- package/dist/id-compressor/sessions.d.ts +115 -0
- package/dist/id-compressor/sessions.d.ts.map +1 -0
- package/dist/id-compressor/sessions.js +305 -0
- package/dist/id-compressor/sessions.js.map +1 -0
- package/dist/id-compressor/utilities.d.ts +49 -0
- package/dist/id-compressor/utilities.d.ts.map +1 -0
- package/dist/id-compressor/utilities.js +166 -0
- package/dist/id-compressor/utilities.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/opLifecycle/batchManager.js +10 -6
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts +2 -2
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +12 -7
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts +2 -2
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +23 -20
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js +19 -9
- package/dist/opLifecycle/opGroupingManager.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts +2 -2
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +22 -19
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +7 -5
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +22 -31
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts +6 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js +19 -7
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/dist/opProperties.js +1 -2
- package/dist/opProperties.js.map +1 -1
- 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 +18 -8
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +73 -51
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js +36 -32
- package/dist/scheduleManager.js.map +1 -1
- package/dist/summary/index.d.ts +3 -3
- package/dist/summary/index.d.ts.map +1 -1
- package/dist/summary/index.js +2 -1
- package/dist/summary/index.js.map +1 -1
- package/dist/summary/orderedClientElection.d.ts +3 -3
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js +26 -27
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.js +3 -3
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/dist/summary/runningSummarizer.d.ts +31 -10
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +271 -139
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.d.ts +8 -7
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +79 -78
- 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 +7 -11
- package/dist/summary/summarizerClientElection.js.map +1 -1
- package/dist/summary/summarizerHeuristics.js +10 -14
- package/dist/summary/summarizerHeuristics.js.map +1 -1
- package/dist/summary/summarizerNode/index.d.ts +1 -1
- package/dist/summary/summarizerNode/index.d.ts.map +1 -1
- package/dist/summary/summarizerNode/index.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.d.ts +10 -19
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js +57 -130
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +6 -30
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.js +2 -4
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +4 -14
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +15 -101
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +38 -25
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryCollection.d.ts +2 -3
- package/dist/summary/summaryCollection.d.ts.map +1 -1
- package/dist/summary/summaryCollection.js +12 -13
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +3 -0
- package/dist/summary/summaryFormat.d.ts.map +1 -1
- package/dist/summary/summaryFormat.js +6 -4
- package/dist/summary/summaryFormat.js.map +1 -1
- package/dist/summary/summaryGenerator.d.ts +10 -4
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +106 -57
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryManager.d.ts +8 -8
- package/dist/summary/summaryManager.d.ts.map +1 -1
- package/dist/summary/summaryManager.js +38 -28
- package/dist/summary/summaryManager.js.map +1 -1
- package/lib/batchTracker.d.ts +3 -2
- package/lib/batchTracker.d.ts.map +1 -1
- package/lib/batchTracker.js +5 -4
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager.d.ts +10 -16
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +159 -147
- package/lib/blobManager.js.map +1 -1
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +15 -6
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerRuntime.d.ts +161 -35
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +651 -402
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStore.d.ts.map +1 -1
- package/lib/dataStore.js +13 -5
- package/lib/dataStore.js.map +1 -1
- package/lib/dataStoreContext.d.ts +3 -2
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +47 -51
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.d.ts +1 -2
- package/lib/dataStoreContexts.d.ts.map +1 -1
- package/lib/dataStoreContexts.js +3 -4
- package/lib/dataStoreContexts.js.map +1 -1
- package/lib/dataStoreRegistry.js +1 -1
- package/lib/dataStoreRegistry.js.map +1 -1
- package/lib/dataStores.d.ts +22 -6
- package/lib/dataStores.d.ts.map +1 -1
- package/lib/dataStores.js +107 -65
- package/lib/dataStores.js.map +1 -1
- package/lib/deltaManagerProxyBase.d.ts +35 -0
- package/lib/deltaManagerProxyBase.d.ts.map +1 -0
- package/lib/deltaManagerProxyBase.js +73 -0
- package/lib/deltaManagerProxyBase.js.map +1 -0
- package/lib/deltaManagerSummarizerProxy.d.ts +1 -1
- package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -1
- package/lib/deltaManagerSummarizerProxy.js +3 -1
- package/lib/deltaManagerSummarizerProxy.js.map +1 -1
- package/lib/deltaScheduler.d.ts.map +1 -1
- package/lib/deltaScheduler.js +7 -7
- package/lib/deltaScheduler.js.map +1 -1
- package/lib/error.d.ts +14 -0
- package/lib/error.d.ts.map +1 -0
- package/lib/error.js +17 -0
- package/lib/error.js.map +1 -0
- package/lib/gc/garbageCollection.d.ts +10 -9
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +61 -53
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcConfigs.d.ts.map +1 -1
- package/lib/gc/gcConfigs.js +16 -12
- package/lib/gc/gcConfigs.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +17 -4
- package/lib/gc/gcDefinitions.d.ts.map +1 -1
- package/lib/gc/gcDefinitions.js +13 -14
- package/lib/gc/gcDefinitions.js.map +1 -1
- package/lib/gc/gcHelpers.d.ts +0 -8
- package/lib/gc/gcHelpers.d.ts.map +1 -1
- package/lib/gc/gcHelpers.js +5 -17
- package/lib/gc/gcHelpers.js.map +1 -1
- package/lib/gc/gcSummaryStateTracker.d.ts +4 -7
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/lib/gc/gcSummaryStateTracker.js +20 -59
- package/lib/gc/gcSummaryStateTracker.js.map +1 -1
- package/lib/gc/gcTelemetry.d.ts.map +1 -1
- package/lib/gc/gcTelemetry.js +46 -36
- package/lib/gc/gcTelemetry.js.map +1 -1
- package/lib/gc/gcUnreferencedStateTracker.js +1 -1
- package/lib/gc/gcUnreferencedStateTracker.js.map +1 -1
- package/lib/gc/index.d.ts +2 -2
- package/lib/gc/index.d.ts.map +1 -1
- package/lib/gc/index.js +2 -2
- package/lib/gc/index.js.map +1 -1
- package/lib/id-compressor/appendOnlySortedMap.d.ts +8 -30
- package/lib/id-compressor/appendOnlySortedMap.d.ts.map +1 -1
- package/lib/id-compressor/appendOnlySortedMap.js +25 -66
- package/lib/id-compressor/appendOnlySortedMap.js.map +1 -1
- package/lib/id-compressor/finalSpace.d.ts +29 -0
- package/lib/id-compressor/finalSpace.d.ts.map +1 -0
- package/lib/id-compressor/finalSpace.js +58 -0
- package/lib/id-compressor/finalSpace.js.map +1 -0
- package/lib/id-compressor/idCompressor.d.ts +25 -250
- package/lib/id-compressor/idCompressor.d.ts.map +1 -1
- package/lib/id-compressor/idCompressor.js +385 -1142
- package/lib/id-compressor/idCompressor.js.map +1 -1
- package/lib/id-compressor/identifiers.d.ts +32 -0
- package/lib/id-compressor/identifiers.d.ts.map +1 -0
- package/lib/id-compressor/identifiers.js +11 -0
- package/lib/id-compressor/identifiers.js.map +1 -0
- package/lib/id-compressor/index.d.ts +5 -6
- package/lib/id-compressor/index.d.ts.map +1 -1
- package/lib/id-compressor/index.js +5 -6
- package/lib/id-compressor/index.js.map +1 -1
- package/lib/id-compressor/persistanceUtilities.d.ts +22 -0
- package/lib/id-compressor/persistanceUtilities.d.ts.map +1 -0
- package/lib/id-compressor/persistanceUtilities.js +34 -0
- package/lib/id-compressor/persistanceUtilities.js.map +1 -0
- package/lib/id-compressor/sessionSpaceNormalizer.d.ts +46 -0
- package/lib/id-compressor/sessionSpaceNormalizer.d.ts.map +1 -0
- package/lib/id-compressor/sessionSpaceNormalizer.js +76 -0
- package/lib/id-compressor/sessionSpaceNormalizer.js.map +1 -0
- package/lib/id-compressor/sessions.d.ts +115 -0
- package/lib/id-compressor/sessions.d.ts.map +1 -0
- package/lib/id-compressor/sessions.js +290 -0
- package/lib/id-compressor/sessions.js.map +1 -0
- package/lib/id-compressor/utilities.d.ts +49 -0
- package/lib/id-compressor/utilities.d.ts.map +1 -0
- package/lib/id-compressor/utilities.js +148 -0
- package/lib/id-compressor/utilities.js.map +1 -0
- package/lib/index.d.ts +3 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/opLifecycle/batchManager.js +10 -6
- package/lib/opLifecycle/batchManager.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts +2 -2
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js +10 -5
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts +2 -2
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +15 -12
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/lib/opLifecycle/opGroupingManager.js +17 -7
- package/lib/opLifecycle/opGroupingManager.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts +2 -2
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +13 -10
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +7 -5
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +13 -22
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts +6 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.js +20 -8
- package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/lib/opProperties.js +1 -2
- package/lib/opProperties.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/pendingStateManager.d.ts +18 -8
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +62 -40
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/scheduleManager.d.ts.map +1 -1
- package/lib/scheduleManager.js +18 -14
- package/lib/scheduleManager.js.map +1 -1
- package/lib/summary/index.d.ts +3 -3
- package/lib/summary/index.d.ts.map +1 -1
- package/lib/summary/index.js +1 -1
- package/lib/summary/index.js.map +1 -1
- package/lib/summary/orderedClientElection.d.ts +3 -3
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js +21 -22
- package/lib/summary/orderedClientElection.js.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/lib/summary/runningSummarizer.d.ts +31 -10
- package/lib/summary/runningSummarizer.d.ts.map +1 -1
- package/lib/summary/runningSummarizer.js +265 -133
- package/lib/summary/runningSummarizer.js.map +1 -1
- package/lib/summary/summarizer.d.ts +8 -7
- package/lib/summary/summarizer.d.ts.map +1 -1
- package/lib/summary/summarizer.js +75 -74
- package/lib/summary/summarizer.js.map +1 -1
- package/lib/summary/summarizerClientElection.d.ts +2 -2
- package/lib/summary/summarizerClientElection.d.ts.map +1 -1
- package/lib/summary/summarizerClientElection.js +6 -10
- package/lib/summary/summarizerClientElection.js.map +1 -1
- package/lib/summary/summarizerHeuristics.js +9 -13
- package/lib/summary/summarizerHeuristics.js.map +1 -1
- package/lib/summary/summarizerNode/index.d.ts +1 -1
- package/lib/summary/summarizerNode/index.d.ts.map +1 -1
- package/lib/summary/summarizerNode/index.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.d.ts +10 -19
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.js +42 -115
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +6 -30
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.js +2 -4
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +4 -14
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +14 -100
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/lib/summary/summarizerTypes.d.ts +38 -25
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryCollection.d.ts +2 -3
- package/lib/summary/summaryCollection.d.ts.map +1 -1
- package/lib/summary/summaryCollection.js +5 -6
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryFormat.d.ts +3 -0
- package/lib/summary/summaryFormat.d.ts.map +1 -1
- package/lib/summary/summaryFormat.js +5 -3
- package/lib/summary/summaryFormat.js.map +1 -1
- package/lib/summary/summaryGenerator.d.ts +10 -4
- package/lib/summary/summaryGenerator.d.ts.map +1 -1
- package/lib/summary/summaryGenerator.js +100 -51
- package/lib/summary/summaryGenerator.js.map +1 -1
- package/lib/summary/summaryManager.d.ts +8 -8
- package/lib/summary/summaryManager.d.ts.map +1 -1
- package/lib/summary/summaryManager.js +35 -25
- package/lib/summary/summaryManager.js.map +1 -1
- package/package.json +28 -31
- package/src/batchTracker.ts +7 -5
- package/src/blobManager.ts +188 -166
- package/src/connectionTelemetry.ts +9 -4
- package/src/containerRuntime.ts +806 -441
- package/src/dataStore.ts +12 -4
- package/src/dataStoreContext.ts +39 -43
- package/src/dataStoreContexts.ts +4 -6
- package/src/dataStoreRegistry.ts +1 -1
- package/src/dataStores.ts +114 -80
- package/src/deltaManagerProxyBase.ts +111 -0
- package/src/deltaManagerSummarizerProxy.ts +4 -1
- package/src/deltaScheduler.ts +7 -11
- package/src/error.ts +18 -0
- package/src/gc/garbageCollection.md +53 -5
- package/src/gc/garbageCollection.ts +58 -52
- package/src/gc/gcConfigs.ts +4 -2
- package/src/gc/gcDefinitions.ts +17 -20
- package/src/gc/gcEarlyAdoption.md +145 -0
- package/src/gc/gcHelpers.ts +1 -12
- package/src/gc/gcSummaryStateTracker.ts +19 -65
- package/src/gc/gcTelemetry.ts +14 -12
- package/src/gc/gcUnreferencedStateTracker.ts +1 -1
- package/src/gc/index.ts +2 -4
- package/src/id-compressor/appendOnlySortedMap.ts +26 -87
- package/src/id-compressor/finalSpace.ts +67 -0
- package/src/id-compressor/idCompressor.ts +458 -1682
- package/src/id-compressor/identifiers.ts +42 -0
- package/src/id-compressor/index.ts +11 -20
- package/src/id-compressor/persistanceUtilities.ts +58 -0
- package/src/id-compressor/sessionSpaceNormalizer.ts +83 -0
- package/src/id-compressor/sessions.ts +405 -0
- package/src/id-compressor/utilities.ts +187 -0
- package/src/index.ts +7 -2
- package/src/opLifecycle/opCompressor.ts +6 -5
- package/src/opLifecycle/opDecompressor.ts +6 -4
- package/src/opLifecycle/opGroupingManager.ts +9 -6
- package/src/opLifecycle/opSplitter.ts +7 -6
- package/src/opLifecycle/outbox.ts +23 -32
- package/src/opLifecycle/remoteMessageProcessor.ts +27 -8
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +72 -42
- package/src/scheduleManager.ts +7 -5
- package/src/summary/index.ts +4 -3
- package/src/summary/orderedClientElection.ts +10 -6
- package/src/summary/runWhileConnectedCoordinator.ts +1 -1
- package/src/summary/runningSummarizer.ts +291 -163
- package/src/summary/summarizer.ts +27 -16
- package/src/summary/summarizerClientElection.ts +2 -2
- package/src/summary/summarizerHeuristics.ts +1 -1
- package/src/summary/summarizerNode/index.ts +1 -2
- package/src/summary/summarizerNode/summarizerNode.ts +36 -160
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +7 -38
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +11 -130
- package/src/summary/summarizerTypes.ts +40 -25
- package/src/summary/summaryCollection.ts +3 -3
- package/src/summary/summaryFormat.ts +4 -1
- package/src/summary/summaryGenerator.ts +52 -52
- package/src/summary/summaryManager.ts +44 -17
- package/dist/id-compressor/idRange.d.ts +0 -11
- package/dist/id-compressor/idRange.d.ts.map +0 -1
- package/dist/id-compressor/idRange.js +0 -29
- package/dist/id-compressor/idRange.js.map +0 -1
- package/dist/id-compressor/numericUuid.d.ts +0 -59
- package/dist/id-compressor/numericUuid.d.ts.map +0 -1
- package/dist/id-compressor/numericUuid.js +0 -325
- package/dist/id-compressor/numericUuid.js.map +0 -1
- package/dist/id-compressor/sessionIdNormalizer.d.ts +0 -138
- package/dist/id-compressor/sessionIdNormalizer.d.ts.map +0 -1
- package/dist/id-compressor/sessionIdNormalizer.js +0 -488
- package/dist/id-compressor/sessionIdNormalizer.js.map +0 -1
- package/dist/id-compressor/utils.d.ts +0 -57
- package/dist/id-compressor/utils.d.ts.map +0 -1
- package/dist/id-compressor/utils.js +0 -90
- package/dist/id-compressor/utils.js.map +0 -1
- package/dist/id-compressor/uuidUtilities.d.ts +0 -28
- package/dist/id-compressor/uuidUtilities.d.ts.map +0 -1
- package/dist/id-compressor/uuidUtilities.js +0 -104
- package/dist/id-compressor/uuidUtilities.js.map +0 -1
- package/lib/id-compressor/idRange.d.ts +0 -11
- package/lib/id-compressor/idRange.d.ts.map +0 -1
- package/lib/id-compressor/idRange.js +0 -25
- package/lib/id-compressor/idRange.js.map +0 -1
- package/lib/id-compressor/numericUuid.d.ts +0 -59
- package/lib/id-compressor/numericUuid.d.ts.map +0 -1
- package/lib/id-compressor/numericUuid.js +0 -315
- package/lib/id-compressor/numericUuid.js.map +0 -1
- package/lib/id-compressor/sessionIdNormalizer.d.ts +0 -138
- package/lib/id-compressor/sessionIdNormalizer.d.ts.map +0 -1
- package/lib/id-compressor/sessionIdNormalizer.js +0 -484
- package/lib/id-compressor/sessionIdNormalizer.js.map +0 -1
- package/lib/id-compressor/utils.d.ts +0 -57
- package/lib/id-compressor/utils.d.ts.map +0 -1
- package/lib/id-compressor/utils.js +0 -79
- package/lib/id-compressor/utils.js.map +0 -1
- package/lib/id-compressor/uuidUtilities.d.ts +0 -28
- package/lib/id-compressor/uuidUtilities.d.ts.map +0 -1
- package/lib/id-compressor/uuidUtilities.js +0 -96
- package/lib/id-compressor/uuidUtilities.js.map +0 -1
- package/src/id-compressor/idRange.ts +0 -35
- package/src/id-compressor/numericUuid.ts +0 -383
- package/src/id-compressor/sessionIdNormalizer.ts +0 -609
- package/src/id-compressor/utils.ts +0 -114
- package/src/id-compressor/uuidUtilities.ts +0 -120
package/dist/error.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
import { IFluidErrorBase, LoggingError } from "@fluidframework/telemetry-utils";
|
|
6
|
+
/**
|
|
7
|
+
* Error indicating that a client's session has reached its time limit and is closed.
|
|
8
|
+
*/
|
|
9
|
+
export declare class ClientSessionExpiredError extends LoggingError implements IFluidErrorBase {
|
|
10
|
+
readonly expiryMs: number;
|
|
11
|
+
readonly errorType: "clientSessionExpiredError";
|
|
12
|
+
constructor(message: string, expiryMs: number);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEhF;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,YAAa,YAAW,eAAe;IAGxD,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAFtD,QAAQ,CAAC,SAAS,8BAAiD;gBAEvD,OAAO,EAAE,MAAM,EAAW,QAAQ,EAAE,MAAM;CAGtD"}
|
package/dist/error.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*!
|
|
3
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ClientSessionExpiredError = void 0;
|
|
8
|
+
const container_definitions_1 = require("@fluidframework/container-definitions");
|
|
9
|
+
const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
|
|
10
|
+
/**
|
|
11
|
+
* Error indicating that a client's session has reached its time limit and is closed.
|
|
12
|
+
*/
|
|
13
|
+
class ClientSessionExpiredError extends telemetry_utils_1.LoggingError {
|
|
14
|
+
constructor(message, expiryMs) {
|
|
15
|
+
super(message, { timeoutMs: expiryMs });
|
|
16
|
+
this.expiryMs = expiryMs;
|
|
17
|
+
this.errorType = container_definitions_1.ContainerErrorTypes.clientSessionExpiredError;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.ClientSessionExpiredError = ClientSessionExpiredError;
|
|
21
|
+
//# sourceMappingURL=error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,iFAA4E;AAC5E,qEAAgF;AAEhF;;GAEG;AACH,MAAa,yBAA0B,SAAQ,8BAAY;IAG1D,YAAY,OAAe,EAAW,QAAgB;QACrD,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QADH,aAAQ,GAAR,QAAQ,CAAQ;QAF7C,cAAS,GAAG,2CAAmB,CAAC,yBAAyB,CAAC;IAInE,CAAC;CACD;AAND,8DAMC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ContainerErrorTypes } from \"@fluidframework/container-definitions\";\nimport { IFluidErrorBase, LoggingError } from \"@fluidframework/telemetry-utils\";\n\n/**\n * Error indicating that a client's session has reached its time limit and is closed.\n */\nexport class ClientSessionExpiredError extends LoggingError implements IFluidErrorBase {\n\treadonly errorType = ContainerErrorTypes.clientSessionExpiredError;\n\n\tconstructor(message: string, readonly expiryMs: number) {\n\t\tsuper(message, { timeoutMs: expiryMs });\n\t}\n}\n"]}
|
|
@@ -4,9 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { IRequestHeader } from "@fluidframework/core-interfaces";
|
|
6
6
|
import { IGarbageCollectionDetailsBase, ISummarizeResult, ITelemetryContext } from "@fluidframework/runtime-definitions";
|
|
7
|
-
import { ReadAndParseBlob } from "@fluidframework/runtime-utils";
|
|
8
7
|
import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
|
|
9
|
-
import {
|
|
8
|
+
import { IRefreshSummaryResult } from "../summary";
|
|
10
9
|
import { IGarbageCollector, IGarbageCollectorCreateParams, IGCStats, IGCMetadata } from "./gcDefinitions";
|
|
11
10
|
/**
|
|
12
11
|
* The garbage collector for the container runtime. It consolidates the garbage collection functionality and maintains
|
|
@@ -107,14 +106,17 @@ export declare class GarbageCollector implements IGarbageCollector {
|
|
|
107
106
|
private runGC;
|
|
108
107
|
/**
|
|
109
108
|
* Runs the GC Mark phase. It does the following:
|
|
109
|
+
*
|
|
110
110
|
* 1. Marks all referenced nodes in this run by clearing tracking for them.
|
|
111
|
+
*
|
|
111
112
|
* 2. Marks unreferenced nodes in this run by starting tracking for them.
|
|
113
|
+
*
|
|
112
114
|
* 3. Calls the runtime to update nodes that were marked referenced.
|
|
113
115
|
*
|
|
114
116
|
* @param gcResult - The result of the GC run on the gcData.
|
|
115
117
|
* @param allReferencedNodeIds - Nodes referenced in this GC run + referenced between previous and current GC run.
|
|
116
118
|
* @param currentReferenceTimestampMs - The timestamp to be used for unreferenced nodes' timestamp.
|
|
117
|
-
* @returns
|
|
119
|
+
* @returns A list of sweep ready nodes, i.e., nodes that ready to be deleted.
|
|
118
120
|
*/
|
|
119
121
|
private runMarkPhase;
|
|
120
122
|
/**
|
|
@@ -126,7 +128,7 @@ export declare class GarbageCollector implements IGarbageCollector {
|
|
|
126
128
|
* @param sweepReadyNodes - List of nodes that are sweep ready.
|
|
127
129
|
* @param currentReferenceTimestampMs - The timestamp to be used for unreferenced nodes' timestamp.
|
|
128
130
|
* @param logger - The logger to be used to log any telemetry.
|
|
129
|
-
* @returns
|
|
131
|
+
* @returns A list of nodes that have been deleted.
|
|
130
132
|
*/
|
|
131
133
|
private runSweepPhase;
|
|
132
134
|
/**
|
|
@@ -142,7 +144,7 @@ export declare class GarbageCollector implements IGarbageCollector {
|
|
|
142
144
|
* This function identifies nodes that were referenced since the last run.
|
|
143
145
|
* If these nodes are currently unreferenced, they will be assigned new unreferenced state by the current run.
|
|
144
146
|
*
|
|
145
|
-
* @returns
|
|
147
|
+
* @returns A list of all nodes referenced from the last local summary until now.
|
|
146
148
|
*/
|
|
147
149
|
private findAllNodesReferencedBetweenGCs;
|
|
148
150
|
/**
|
|
@@ -153,13 +155,12 @@ export declare class GarbageCollector implements IGarbageCollector {
|
|
|
153
155
|
summarize(fullTree: boolean, trackState: boolean, telemetryContext?: ITelemetryContext): ISummarizeResult | undefined;
|
|
154
156
|
getMetadata(): IGCMetadata;
|
|
155
157
|
/**
|
|
156
|
-
* Called to refresh the latest summary state. This happens when either a pending summary is acked
|
|
157
|
-
* is downloaded and should be used to update the state.
|
|
158
|
+
* Called to refresh the latest summary state. This happens when either a pending summary is acked.
|
|
158
159
|
*/
|
|
159
|
-
refreshLatestSummary(
|
|
160
|
+
refreshLatestSummary(result: IRefreshSummaryResult): Promise<void>;
|
|
160
161
|
/**
|
|
161
162
|
* Called when a node with the given id is updated. If the node is inactive, log an error.
|
|
162
|
-
* @param nodePath - The
|
|
163
|
+
* @param nodePath - The path of the node that changed.
|
|
163
164
|
* @param reason - Whether the node was loaded or changed.
|
|
164
165
|
* @param timestampMs - The timestamp when the node changed.
|
|
165
166
|
* @param packagePath - The package path of the node. This may not be available if the node hasn't been loaded yet.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"garbageCollection.d.ts","sourceRoot":"","sources":["../../src/gc/garbageCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"garbageCollection.d.ts","sourceRoot":"","sources":["../../src/gc/garbageCollection.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.GarbageCollector = void 0;
|
|
8
|
-
const common_utils_1 = require("@fluidframework/common-utils");
|
|
9
8
|
const core_utils_1 = require("@fluidframework/core-utils");
|
|
10
|
-
const container_utils_1 = require("@fluidframework/container-utils");
|
|
11
9
|
const runtime_definitions_1 = require("@fluidframework/runtime-definitions");
|
|
10
|
+
const runtime_utils_1 = require("@fluidframework/runtime-utils");
|
|
12
11
|
const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
|
|
13
12
|
const containerRuntime_1 = require("../containerRuntime");
|
|
13
|
+
const error_1 = require("../error");
|
|
14
14
|
const gcConfigs_1 = require("./gcConfigs");
|
|
15
15
|
const gcDefinitions_1 = require("./gcDefinitions");
|
|
16
16
|
const gcHelpers_1 = require("./gcHelpers");
|
|
@@ -60,21 +60,25 @@ class GarbageCollector {
|
|
|
60
60
|
this.activeConnection = createParams.activeConnection;
|
|
61
61
|
const baseSnapshot = createParams.baseSnapshot;
|
|
62
62
|
const readAndParseBlob = createParams.readAndParseBlob;
|
|
63
|
-
this.mc = (0, telemetry_utils_1.
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
this.mc = (0, telemetry_utils_1.createChildMonitoringContext)({
|
|
64
|
+
logger: createParams.baseLogger,
|
|
65
|
+
namespace: "GarbageCollector",
|
|
66
|
+
properties: {
|
|
67
|
+
all: { completedGCRuns: () => this.completedRuns },
|
|
68
|
+
},
|
|
69
|
+
});
|
|
66
70
|
this.configs = (0, gcConfigs_1.generateGCConfigs)(this.mc, createParams);
|
|
67
71
|
// If session expiry is enabled, we need to close the container when the session expiry timeout expires.
|
|
68
72
|
if (this.configs.sessionExpiryTimeoutMs !== undefined) {
|
|
69
73
|
// If Test Override config is set, override Session Expiry timeout.
|
|
70
74
|
const overrideSessionExpiryTimeoutMs = this.mc.config.getNumber("Fluid.GarbageCollection.TestOverride.SessionExpiryMs");
|
|
71
|
-
const timeoutMs = overrideSessionExpiryTimeoutMs
|
|
72
|
-
this.sessionExpiryTimer = new
|
|
73
|
-
this.runtime.closeFn(new
|
|
75
|
+
const timeoutMs = overrideSessionExpiryTimeoutMs ?? this.configs.sessionExpiryTimeoutMs;
|
|
76
|
+
this.sessionExpiryTimer = new core_utils_1.Timer(timeoutMs, () => {
|
|
77
|
+
this.runtime.closeFn(new error_1.ClientSessionExpiredError(`Client session expired.`, timeoutMs));
|
|
74
78
|
});
|
|
75
79
|
this.sessionExpiryTimer.start();
|
|
76
80
|
}
|
|
77
|
-
this.summaryStateTracker = new gcSummaryStateTracker_1.GCSummaryStateTracker(this.configs,
|
|
81
|
+
this.summaryStateTracker = new gcSummaryStateTracker_1.GCSummaryStateTracker(this.configs, baseSnapshot?.trees[runtime_definitions_1.gcTreeKey] !== undefined /* wasGCRunInBaseSnapshot */);
|
|
78
82
|
this.telemetryTracker = new gcTelemetry_1.GCTelemetryTracker(this.mc, this.configs, this.isSummarizerClient, this.runtime.gcTombstoneEnforcementAllowed, createParams.createContainerMetadata, (nodeId) => this.runtime.getNodeType(nodeId), (nodeId) => this.unreferencedNodesState.get(nodeId), this.getNodePackagePath);
|
|
79
83
|
// Get the GC data from the base snapshot. Use LazyPromise because we only want to do this once since it
|
|
80
84
|
// it involves fetching blobs from storage which is expensive.
|
|
@@ -105,7 +109,7 @@ class GarbageCollector {
|
|
|
105
109
|
return snapshotData;
|
|
106
110
|
}
|
|
107
111
|
catch (error) {
|
|
108
|
-
const dpe =
|
|
112
|
+
const dpe = telemetry_utils_1.DataProcessingError.wrapIfUnrecognized(error, "FailedToInitializeGC");
|
|
109
113
|
dpe.addTelemetryProperties({
|
|
110
114
|
gcConfigs: JSON.stringify(this.configs),
|
|
111
115
|
});
|
|
@@ -152,7 +156,7 @@ class GarbageCollector {
|
|
|
152
156
|
// used to initialize the GC state of all the nodes in the container.
|
|
153
157
|
this.baseGCDetailsP = new core_utils_1.LazyPromise(async () => {
|
|
154
158
|
const baseSnapshotData = await this.baseSnapshotDataP;
|
|
155
|
-
if (
|
|
159
|
+
if (baseSnapshotData?.gcState === undefined) {
|
|
156
160
|
return {};
|
|
157
161
|
}
|
|
158
162
|
const gcNodes = {};
|
|
@@ -246,7 +250,7 @@ class GarbageCollector {
|
|
|
246
250
|
// If this call is because we are refreshing from a snapshot due to an ack, it is likely that the GC state
|
|
247
251
|
// in the snapshot is newer than this client's. And so, the deleted / tombstone nodes need to be updated.
|
|
248
252
|
if (this.configs.shouldRunSweep) {
|
|
249
|
-
const snapshotDeletedNodes =
|
|
253
|
+
const snapshotDeletedNodes = snapshotData?.deletedNodes
|
|
250
254
|
? new Set(snapshotData.deletedNodes)
|
|
251
255
|
: undefined;
|
|
252
256
|
// If the snapshot contains deleted nodes that are not yet deleted by this client, ask the runtime to
|
|
@@ -266,11 +270,11 @@ class GarbageCollector {
|
|
|
266
270
|
else if (this.configs.tombstoneMode) {
|
|
267
271
|
// The snapshot may contain more or fewer tombstone nodes than this client. Update tombstone state and
|
|
268
272
|
// notify the runtime to update its state as well.
|
|
269
|
-
this.tombstones =
|
|
273
|
+
this.tombstones = snapshotData?.tombstones ? Array.from(snapshotData.tombstones) : [];
|
|
270
274
|
this.runtime.updateTombstonedRoutes(this.tombstones);
|
|
271
275
|
}
|
|
272
276
|
// If there is no snapshot data, it means this snapshot was generated with GC disabled. Unset all GC state.
|
|
273
|
-
if (
|
|
277
|
+
if (snapshotData?.gcState === undefined) {
|
|
274
278
|
this.gcDataFromLastRun = undefined;
|
|
275
279
|
return;
|
|
276
280
|
}
|
|
@@ -321,16 +325,19 @@ class GarbageCollector {
|
|
|
321
325
|
* @returns stats of the GC run or undefined if GC did not run.
|
|
322
326
|
*/
|
|
323
327
|
async collectGarbage(options, telemetryContext) {
|
|
324
|
-
|
|
325
|
-
|
|
328
|
+
const fullGC = options.fullGC ??
|
|
329
|
+
(this.configs.runFullGC === true || this.summaryStateTracker.doesSummaryStateNeedReset);
|
|
326
330
|
// Add the options that are used to run GC to the telemetry context.
|
|
327
|
-
telemetryContext
|
|
331
|
+
telemetryContext?.setMultiple("fluid_GC", "Options", {
|
|
328
332
|
fullGC,
|
|
329
333
|
runSweep: options.runSweep,
|
|
330
334
|
});
|
|
331
335
|
const logger = options.logger
|
|
332
|
-
? telemetry_utils_1.
|
|
333
|
-
|
|
336
|
+
? (0, telemetry_utils_1.createChildLogger)({
|
|
337
|
+
logger: options.logger,
|
|
338
|
+
properties: {
|
|
339
|
+
all: { completedGCRuns: () => this.completedRuns },
|
|
340
|
+
},
|
|
334
341
|
})
|
|
335
342
|
: this.mc.logger;
|
|
336
343
|
/**
|
|
@@ -358,7 +365,7 @@ class GarbageCollector {
|
|
|
358
365
|
await this.runtime.updateStateBeforeGC();
|
|
359
366
|
/** GC step */
|
|
360
367
|
const gcStats = await this.runGC(fullGC, currentReferenceTimestampMs, logger);
|
|
361
|
-
event.end(
|
|
368
|
+
event.end({ ...gcStats, timestamp: currentReferenceTimestampMs });
|
|
362
369
|
/** Post-GC steps */
|
|
363
370
|
// Log pending unreferenced events such as a node being used after inactive. This is done after GC runs and
|
|
364
371
|
// updates its state so that we don't send false positives based on intermediate state. For example, we may get
|
|
@@ -379,13 +386,13 @@ class GarbageCollector {
|
|
|
379
386
|
* 4. Runs Sweep phase.
|
|
380
387
|
*/
|
|
381
388
|
async runGC(fullGC, currentReferenceTimestampMs, logger) {
|
|
382
|
-
var _a;
|
|
383
389
|
// 1. Generate / analyze the runtime's reference graph.
|
|
384
390
|
// Get the reference graph (gcData) and run GC algorithm to get referenced / unreferenced nodes.
|
|
385
391
|
const gcData = await this.runtime.getGCData(fullGC);
|
|
386
392
|
const gcResult = (0, gcReferenceGraphAlgorithm_1.runGarbageCollection)(gcData.gcNodes, ["/"]);
|
|
387
393
|
// Get all referenced nodes - References in this run + references between the previous and current runs.
|
|
388
|
-
const allReferencedNodeIds =
|
|
394
|
+
const allReferencedNodeIds = this.findAllNodesReferencedBetweenGCs(gcData, this.gcDataFromLastRun, logger) ??
|
|
395
|
+
gcResult.referencedNodeIds;
|
|
389
396
|
// 2. Generate stats based on the previous / current GC state.
|
|
390
397
|
// Must happen before running Mark / Sweep phase because previous GC state will be updated in these stages.
|
|
391
398
|
const gcStats = this.generateStats(gcResult);
|
|
@@ -400,14 +407,17 @@ class GarbageCollector {
|
|
|
400
407
|
}
|
|
401
408
|
/**
|
|
402
409
|
* Runs the GC Mark phase. It does the following:
|
|
410
|
+
*
|
|
403
411
|
* 1. Marks all referenced nodes in this run by clearing tracking for them.
|
|
412
|
+
*
|
|
404
413
|
* 2. Marks unreferenced nodes in this run by starting tracking for them.
|
|
414
|
+
*
|
|
405
415
|
* 3. Calls the runtime to update nodes that were marked referenced.
|
|
406
416
|
*
|
|
407
417
|
* @param gcResult - The result of the GC run on the gcData.
|
|
408
418
|
* @param allReferencedNodeIds - Nodes referenced in this GC run + referenced between previous and current GC run.
|
|
409
419
|
* @param currentReferenceTimestampMs - The timestamp to be used for unreferenced nodes' timestamp.
|
|
410
|
-
* @returns
|
|
420
|
+
* @returns A list of sweep ready nodes, i.e., nodes that ready to be deleted.
|
|
411
421
|
*/
|
|
412
422
|
runMarkPhase(gcResult, allReferencedNodeIds, currentReferenceTimestampMs) {
|
|
413
423
|
// 1. Marks all referenced nodes by clearing their unreferenced tracker, if any.
|
|
@@ -450,7 +460,7 @@ class GarbageCollector {
|
|
|
450
460
|
* @param sweepReadyNodes - List of nodes that are sweep ready.
|
|
451
461
|
* @param currentReferenceTimestampMs - The timestamp to be used for unreferenced nodes' timestamp.
|
|
452
462
|
* @param logger - The logger to be used to log any telemetry.
|
|
453
|
-
* @returns
|
|
463
|
+
* @returns A list of nodes that have been deleted.
|
|
454
464
|
*/
|
|
455
465
|
runSweepPhase(gcResult, sweepReadyNodes, currentReferenceTimestampMs, logger) {
|
|
456
466
|
// Log events for objects that are ready to be deleted by sweep. This will give us data on sweep when
|
|
@@ -512,7 +522,7 @@ class GarbageCollector {
|
|
|
512
522
|
* This function identifies nodes that were referenced since the last run.
|
|
513
523
|
* If these nodes are currently unreferenced, they will be assigned new unreferenced state by the current run.
|
|
514
524
|
*
|
|
515
|
-
* @returns
|
|
525
|
+
* @returns A list of all nodes referenced from the last local summary until now.
|
|
516
526
|
*/
|
|
517
527
|
findAllNodesReferencedBetweenGCs(currentGCData, previousGCData, logger) {
|
|
518
528
|
// If we haven't run GC before there is nothing to do.
|
|
@@ -576,7 +586,6 @@ class GarbageCollector {
|
|
|
576
586
|
* blobs. All the blob keys should start with `gcBlobPrefix`.
|
|
577
587
|
*/
|
|
578
588
|
summarize(fullTree, trackState, telemetryContext) {
|
|
579
|
-
var _a;
|
|
580
589
|
if (!this.configs.shouldRunGC || this.gcDataFromLastRun === undefined) {
|
|
581
590
|
return;
|
|
582
591
|
}
|
|
@@ -584,7 +593,7 @@ class GarbageCollector {
|
|
|
584
593
|
for (const [nodeId, outboundRoutes] of Object.entries(this.gcDataFromLastRun.gcNodes)) {
|
|
585
594
|
gcState.gcNodes[nodeId] = {
|
|
586
595
|
outboundRoutes,
|
|
587
|
-
unreferencedTimestampMs:
|
|
596
|
+
unreferencedTimestampMs: this.unreferencedNodesState.get(nodeId)?.unreferencedTimestampMs,
|
|
588
597
|
};
|
|
589
598
|
}
|
|
590
599
|
return this.summaryStateTracker.summarize(fullTree, trackState, gcState, this.deletedNodes, this.tombstones);
|
|
@@ -603,30 +612,14 @@ class GarbageCollector {
|
|
|
603
612
|
};
|
|
604
613
|
}
|
|
605
614
|
/**
|
|
606
|
-
* Called to refresh the latest summary state. This happens when either a pending summary is acked
|
|
607
|
-
* is downloaded and should be used to update the state.
|
|
615
|
+
* Called to refresh the latest summary state. This happens when either a pending summary is acked.
|
|
608
616
|
*/
|
|
609
|
-
async refreshLatestSummary(
|
|
610
|
-
|
|
611
|
-
// If the latest summary was updated but it was not tracked by this client, our state needs to be updated from
|
|
612
|
-
// this snapshot data.
|
|
613
|
-
if (this.shouldRunGC && result.latestSummaryUpdated && !result.wasSummaryTracked) {
|
|
614
|
-
// The current reference timestamp should be available if we are refreshing state from a snapshot. There has
|
|
615
|
-
// to be at least one op (summary op / ack, if nothing else) if a snapshot was taken.
|
|
616
|
-
const currentReferenceTimestampMs = this.runtime.getCurrentReferenceTimestampMs();
|
|
617
|
-
if (currentReferenceTimestampMs === undefined) {
|
|
618
|
-
throw container_utils_1.DataProcessingError.create("No reference timestamp when updating GC state from snapshot", "refreshLatestSummary", undefined, {
|
|
619
|
-
proposalHandle,
|
|
620
|
-
summaryRefSeq: result.summaryRefSeq,
|
|
621
|
-
gcConfigs: JSON.stringify(this.configs),
|
|
622
|
-
});
|
|
623
|
-
}
|
|
624
|
-
this.updateStateFromSnapshotData(latestSnapshotData, currentReferenceTimestampMs);
|
|
625
|
-
}
|
|
617
|
+
async refreshLatestSummary(result) {
|
|
618
|
+
return this.summaryStateTracker.refreshLatestSummary(result);
|
|
626
619
|
}
|
|
627
620
|
/**
|
|
628
621
|
* Called when a node with the given id is updated. If the node is inactive, log an error.
|
|
629
|
-
* @param nodePath - The
|
|
622
|
+
* @param nodePath - The path of the node that changed.
|
|
630
623
|
* @param reason - Whether the node was loaded or changed.
|
|
631
624
|
* @param timestampMs - The timestamp when the node changed.
|
|
632
625
|
* @param packagePath - The package path of the node. This may not be available if the node hasn't been loaded yet.
|
|
@@ -636,16 +629,33 @@ class GarbageCollector {
|
|
|
636
629
|
if (!this.configs.shouldRunGC) {
|
|
637
630
|
return;
|
|
638
631
|
}
|
|
632
|
+
// This will log if appropriate
|
|
639
633
|
this.telemetryTracker.nodeUsed({
|
|
640
634
|
id: nodePath,
|
|
641
635
|
usageType: reason,
|
|
642
|
-
currentReferenceTimestampMs: timestampMs
|
|
636
|
+
currentReferenceTimestampMs: timestampMs ?? this.runtime.getCurrentReferenceTimestampMs(),
|
|
643
637
|
packagePath,
|
|
644
638
|
completedGCRuns: this.completedRuns,
|
|
645
639
|
isTombstoned: this.tombstones.includes(nodePath),
|
|
646
640
|
lastSummaryTime: this.getLastSummaryTimestampMs(),
|
|
647
|
-
viaHandle: requestHeaders
|
|
641
|
+
viaHandle: requestHeaders?.[containerRuntime_1.RuntimeHeaders.viaHandle],
|
|
648
642
|
});
|
|
643
|
+
// Unless this is a Loaded event, we're done after telemetry tracking
|
|
644
|
+
if (reason !== "Loaded") {
|
|
645
|
+
return;
|
|
646
|
+
}
|
|
647
|
+
// We may throw when loading an Inactive object, depending on these preconditions
|
|
648
|
+
const shouldThrowOnInactiveLoad = !this.isSummarizerClient &&
|
|
649
|
+
this.configs.throwOnInactiveLoad === true &&
|
|
650
|
+
requestHeaders?.[containerRuntime_1.AllowInactiveRequestHeaderKey] !== true;
|
|
651
|
+
const state = this.unreferencedNodesState.get(nodePath)?.state;
|
|
652
|
+
if (shouldThrowOnInactiveLoad && state === "Inactive") {
|
|
653
|
+
const request = { url: nodePath };
|
|
654
|
+
const error = (0, runtime_utils_1.responseToException)((0, runtime_utils_1.createResponseError)(404, "Object is inactive", request, {
|
|
655
|
+
[containerRuntime_1.InactiveResponseHeaderKey]: true,
|
|
656
|
+
}), request);
|
|
657
|
+
throw error;
|
|
658
|
+
}
|
|
649
659
|
}
|
|
650
660
|
/**
|
|
651
661
|
* Called when an outbound reference is added to a node. This is used to identify all nodes that have been
|
|
@@ -655,11 +665,10 @@ class GarbageCollector {
|
|
|
655
665
|
* @param toNodePath - The node to which the reference is added.
|
|
656
666
|
*/
|
|
657
667
|
addedOutboundReference(fromNodePath, toNodePath) {
|
|
658
|
-
var _a;
|
|
659
668
|
if (!this.configs.shouldRunGC) {
|
|
660
669
|
return;
|
|
661
670
|
}
|
|
662
|
-
const outboundRoutes =
|
|
671
|
+
const outboundRoutes = this.newReferencesSinceLastRun.get(fromNodePath) ?? [];
|
|
663
672
|
outboundRoutes.push(toNodePath);
|
|
664
673
|
this.newReferencesSinceLastRun.set(fromNodePath, outboundRoutes);
|
|
665
674
|
this.telemetryTracker.nodeUsed({
|
|
@@ -681,8 +690,7 @@ class GarbageCollector {
|
|
|
681
690
|
return this.deletedNodes.has(nodePath);
|
|
682
691
|
}
|
|
683
692
|
dispose() {
|
|
684
|
-
|
|
685
|
-
(_a = this.sessionExpiryTimer) === null || _a === void 0 ? void 0 : _a.clear();
|
|
693
|
+
this.sessionExpiryTimer?.clear();
|
|
686
694
|
this.sessionExpiryTimer = undefined;
|
|
687
695
|
}
|
|
688
696
|
/**
|