@fluidframework/container-runtime 2.0.0-dev.5.2.0.169897 → 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 +147 -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 +15 -18
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +212 -171
- package/dist/blobManager.js.map +1 -1
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +33 -17
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerRuntime.d.ts +172 -35
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +722 -425
- 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 +4 -4
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +87 -90
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts +1 -1
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js +10 -10
- 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 +23 -7
- package/dist/dataStores.d.ts.map +1 -1
- package/dist/dataStores.js +125 -82
- 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 +65 -56
- 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 -5
- 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 +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/metadata.d.ts +18 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +7 -0
- package/dist/metadata.js.map +1 -0
- package/dist/opLifecycle/batchManager.d.ts +2 -1
- package/dist/opLifecycle/batchManager.d.ts.map +1 -1
- package/dist/opLifecycle/batchManager.js +15 -7
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/definitions.d.ts +11 -0
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -1
- package/dist/opLifecycle/index.d.ts +1 -1
- package/dist/opLifecycle/index.d.ts.map +1 -1
- package/dist/opLifecycle/index.js +2 -1
- package/dist/opLifecycle/index.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 +30 -21
- 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 +19 -13
- 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 +24 -19
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +39 -6
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +138 -61
- 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 +22 -8
- 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 +25 -10
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +101 -64
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js +43 -33
- package/dist/scheduleManager.js.map +1 -1
- package/dist/summary/index.d.ts +4 -4
- package/dist/summary/index.d.ts.map +1 -1
- package/dist/summary/index.js +3 -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 +40 -23
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js +144 -149
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +25 -29
- 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 +21 -16
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +74 -123
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +44 -24
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryCollection.d.ts +2 -2
- package/dist/summary/summaryCollection.d.ts.map +1 -1
- package/dist/summary/summaryCollection.js +16 -13
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +4 -0
- package/dist/summary/summaryFormat.d.ts.map +1 -1
- package/dist/summary/summaryFormat.js +8 -5
- package/dist/summary/summaryFormat.js.map +1 -1
- package/dist/summary/summaryGenerator.d.ts +21 -6
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +117 -54
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryManager.d.ts +8 -7
- 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 +15 -18
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +187 -146
- package/lib/blobManager.js.map +1 -1
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +23 -7
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerRuntime.d.ts +172 -35
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +678 -380
- 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 +4 -4
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +49 -52
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.d.ts +1 -1
- package/lib/dataStoreContexts.d.ts.map +1 -1
- package/lib/dataStoreContexts.js +3 -3
- 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 +23 -7
- package/lib/dataStores.d.ts.map +1 -1
- package/lib/dataStores.js +107 -64
- 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 -52
- 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 -5
- 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 +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/metadata.d.ts +18 -0
- package/lib/metadata.d.ts.map +1 -0
- package/lib/metadata.js +6 -0
- package/lib/metadata.js.map +1 -0
- package/lib/opLifecycle/batchManager.d.ts +2 -1
- package/lib/opLifecycle/batchManager.d.ts.map +1 -1
- package/lib/opLifecycle/batchManager.js +15 -7
- package/lib/opLifecycle/batchManager.js.map +1 -1
- package/lib/opLifecycle/definitions.d.ts +11 -0
- package/lib/opLifecycle/definitions.d.ts.map +1 -1
- package/lib/opLifecycle/definitions.js.map +1 -1
- package/lib/opLifecycle/index.d.ts +1 -1
- package/lib/opLifecycle/index.d.ts.map +1 -1
- package/lib/opLifecycle/index.js +1 -1
- package/lib/opLifecycle/index.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 +22 -13
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/lib/opLifecycle/opGroupingManager.js +17 -11
- 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 +15 -10
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +39 -6
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +132 -56
- 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 +23 -9
- 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 +25 -10
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +90 -53
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/scheduleManager.d.ts.map +1 -1
- package/lib/scheduleManager.js +25 -15
- package/lib/scheduleManager.js.map +1 -1
- package/lib/summary/index.d.ts +4 -4
- package/lib/summary/index.d.ts.map +1 -1
- package/lib/summary/index.js +2 -2
- 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 +40 -23
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.js +132 -137
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +25 -29
- 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 +21 -16
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +70 -119
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/lib/summary/summarizerTypes.d.ts +44 -24
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryCollection.d.ts +2 -2
- package/lib/summary/summaryCollection.d.ts.map +1 -1
- package/lib/summary/summaryCollection.js +9 -6
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryFormat.d.ts +4 -0
- package/lib/summary/summaryFormat.d.ts.map +1 -1
- package/lib/summary/summaryFormat.js +7 -4
- package/lib/summary/summaryFormat.js.map +1 -1
- package/lib/summary/summaryGenerator.d.ts +21 -6
- package/lib/summary/summaryGenerator.d.ts.map +1 -1
- package/lib/summary/summaryGenerator.js +109 -47
- package/lib/summary/summaryGenerator.js.map +1 -1
- package/lib/summary/summaryManager.d.ts +8 -7
- 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 +30 -32
- package/src/batchTracker.ts +7 -5
- package/src/blobManager.ts +235 -172
- package/src/connectionTelemetry.ts +19 -5
- package/src/containerRuntime.ts +853 -431
- package/src/dataStore.ts +12 -4
- package/src/dataStoreContext.ts +49 -46
- package/src/dataStoreContexts.ts +4 -4
- package/src/dataStoreRegistry.ts +1 -1
- package/src/dataStores.ts +119 -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 -51
- package/src/gc/gcConfigs.ts +4 -2
- package/src/gc/gcDefinitions.ts +17 -21
- 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 +15 -13
- 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 +9 -2
- package/src/metadata.ts +19 -0
- package/src/opLifecycle/README.md +20 -0
- package/src/opLifecycle/batchManager.ts +9 -1
- package/src/opLifecycle/definitions.ts +11 -0
- package/src/opLifecycle/index.ts +1 -1
- package/src/opLifecycle/opCompressor.ts +6 -5
- package/src/opLifecycle/opDecompressor.ts +47 -17
- package/src/opLifecycle/opGroupingManager.ts +18 -8
- package/src/opLifecycle/opSplitter.ts +10 -7
- package/src/opLifecycle/outbox.ts +177 -72
- package/src/opLifecycle/remoteMessageProcessor.ts +32 -9
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +123 -78
- package/src/scheduleManager.ts +22 -11
- package/src/summary/index.ts +7 -4
- 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 +2 -2
- package/src/summary/summarizerNode/summarizerNode.ts +142 -184
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +27 -35
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +72 -148
- package/src/summary/summarizerTypes.ts +49 -24
- package/src/summary/summaryCollection.ts +9 -4
- package/src/summary/summaryFormat.ts +9 -2
- package/src/summary/summaryGenerator.ts +72 -49
- package/src/summary/summaryManager.ts +44 -16
- 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 -30
- package/dist/id-compressor/uuidUtilities.d.ts.map +0 -1
- package/dist/id-compressor/uuidUtilities.js +0 -106
- 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 -30
- package/lib/id-compressor/uuidUtilities.d.ts.map +0 -1
- package/lib/id-compressor/uuidUtilities.js +0 -98
- 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 -123
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,11 +5,12 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.GarbageCollector = void 0;
|
|
8
|
-
const
|
|
9
|
-
const container_utils_1 = require("@fluidframework/container-utils");
|
|
8
|
+
const core_utils_1 = require("@fluidframework/core-utils");
|
|
10
9
|
const runtime_definitions_1 = require("@fluidframework/runtime-definitions");
|
|
10
|
+
const runtime_utils_1 = require("@fluidframework/runtime-utils");
|
|
11
11
|
const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
|
|
12
12
|
const containerRuntime_1 = require("../containerRuntime");
|
|
13
|
+
const error_1 = require("../error");
|
|
13
14
|
const gcConfigs_1 = require("./gcConfigs");
|
|
14
15
|
const gcDefinitions_1 = require("./gcDefinitions");
|
|
15
16
|
const gcHelpers_1 = require("./gcHelpers");
|
|
@@ -59,25 +60,29 @@ class GarbageCollector {
|
|
|
59
60
|
this.activeConnection = createParams.activeConnection;
|
|
60
61
|
const baseSnapshot = createParams.baseSnapshot;
|
|
61
62
|
const readAndParseBlob = createParams.readAndParseBlob;
|
|
62
|
-
this.mc = (0, telemetry_utils_1.
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
this.mc = (0, telemetry_utils_1.createChildMonitoringContext)({
|
|
64
|
+
logger: createParams.baseLogger,
|
|
65
|
+
namespace: "GarbageCollector",
|
|
66
|
+
properties: {
|
|
67
|
+
all: { completedGCRuns: () => this.completedRuns },
|
|
68
|
+
},
|
|
69
|
+
});
|
|
65
70
|
this.configs = (0, gcConfigs_1.generateGCConfigs)(this.mc, createParams);
|
|
66
71
|
// If session expiry is enabled, we need to close the container when the session expiry timeout expires.
|
|
67
72
|
if (this.configs.sessionExpiryTimeoutMs !== undefined) {
|
|
68
73
|
// If Test Override config is set, override Session Expiry timeout.
|
|
69
74
|
const overrideSessionExpiryTimeoutMs = this.mc.config.getNumber("Fluid.GarbageCollection.TestOverride.SessionExpiryMs");
|
|
70
|
-
const timeoutMs = overrideSessionExpiryTimeoutMs
|
|
71
|
-
this.sessionExpiryTimer = new
|
|
72
|
-
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));
|
|
73
78
|
});
|
|
74
79
|
this.sessionExpiryTimer.start();
|
|
75
80
|
}
|
|
76
|
-
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 */);
|
|
77
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);
|
|
78
83
|
// Get the GC data from the base snapshot. Use LazyPromise because we only want to do this once since it
|
|
79
84
|
// it involves fetching blobs from storage which is expensive.
|
|
80
|
-
this.baseSnapshotDataP = new
|
|
85
|
+
this.baseSnapshotDataP = new core_utils_1.LazyPromise(async () => {
|
|
81
86
|
if (baseSnapshot === undefined) {
|
|
82
87
|
return undefined;
|
|
83
88
|
}
|
|
@@ -104,7 +109,7 @@ class GarbageCollector {
|
|
|
104
109
|
return snapshotData;
|
|
105
110
|
}
|
|
106
111
|
catch (error) {
|
|
107
|
-
const dpe =
|
|
112
|
+
const dpe = telemetry_utils_1.DataProcessingError.wrapIfUnrecognized(error, "FailedToInitializeGC");
|
|
108
113
|
dpe.addTelemetryProperties({
|
|
109
114
|
gcConfigs: JSON.stringify(this.configs),
|
|
110
115
|
});
|
|
@@ -116,7 +121,7 @@ class GarbageCollector {
|
|
|
116
121
|
* connected in write mode or when GC runs the first time. It sets up all unreferenced nodes from the base
|
|
117
122
|
* GC state and updates their inactive or sweep ready state.
|
|
118
123
|
*/
|
|
119
|
-
this.initializeGCStateFromBaseSnapshotP = new
|
|
124
|
+
this.initializeGCStateFromBaseSnapshotP = new core_utils_1.LazyPromise(async () => {
|
|
120
125
|
/**
|
|
121
126
|
* If there is no current reference timestamp, skip initialization. We need the current timestamp to track
|
|
122
127
|
* how long objects have been unreferenced and if they can be deleted.
|
|
@@ -149,9 +154,9 @@ class GarbageCollector {
|
|
|
149
154
|
});
|
|
150
155
|
// Get the GC details from the GC state in the base summary. This is returned in getBaseGCDetails which is
|
|
151
156
|
// used to initialize the GC state of all the nodes in the container.
|
|
152
|
-
this.baseGCDetailsP = new
|
|
157
|
+
this.baseGCDetailsP = new core_utils_1.LazyPromise(async () => {
|
|
153
158
|
const baseSnapshotData = await this.baseSnapshotDataP;
|
|
154
|
-
if (
|
|
159
|
+
if (baseSnapshotData?.gcState === undefined) {
|
|
155
160
|
return {};
|
|
156
161
|
}
|
|
157
162
|
const gcNodes = {};
|
|
@@ -245,7 +250,7 @@ class GarbageCollector {
|
|
|
245
250
|
// If this call is because we are refreshing from a snapshot due to an ack, it is likely that the GC state
|
|
246
251
|
// in the snapshot is newer than this client's. And so, the deleted / tombstone nodes need to be updated.
|
|
247
252
|
if (this.configs.shouldRunSweep) {
|
|
248
|
-
const snapshotDeletedNodes =
|
|
253
|
+
const snapshotDeletedNodes = snapshotData?.deletedNodes
|
|
249
254
|
? new Set(snapshotData.deletedNodes)
|
|
250
255
|
: undefined;
|
|
251
256
|
// If the snapshot contains deleted nodes that are not yet deleted by this client, ask the runtime to
|
|
@@ -265,11 +270,11 @@ class GarbageCollector {
|
|
|
265
270
|
else if (this.configs.tombstoneMode) {
|
|
266
271
|
// The snapshot may contain more or fewer tombstone nodes than this client. Update tombstone state and
|
|
267
272
|
// notify the runtime to update its state as well.
|
|
268
|
-
this.tombstones =
|
|
273
|
+
this.tombstones = snapshotData?.tombstones ? Array.from(snapshotData.tombstones) : [];
|
|
269
274
|
this.runtime.updateTombstonedRoutes(this.tombstones);
|
|
270
275
|
}
|
|
271
276
|
// If there is no snapshot data, it means this snapshot was generated with GC disabled. Unset all GC state.
|
|
272
|
-
if (
|
|
277
|
+
if (snapshotData?.gcState === undefined) {
|
|
273
278
|
this.gcDataFromLastRun = undefined;
|
|
274
279
|
return;
|
|
275
280
|
}
|
|
@@ -320,16 +325,19 @@ class GarbageCollector {
|
|
|
320
325
|
* @returns stats of the GC run or undefined if GC did not run.
|
|
321
326
|
*/
|
|
322
327
|
async collectGarbage(options, telemetryContext) {
|
|
323
|
-
|
|
324
|
-
|
|
328
|
+
const fullGC = options.fullGC ??
|
|
329
|
+
(this.configs.runFullGC === true || this.summaryStateTracker.doesSummaryStateNeedReset);
|
|
325
330
|
// Add the options that are used to run GC to the telemetry context.
|
|
326
|
-
telemetryContext
|
|
331
|
+
telemetryContext?.setMultiple("fluid_GC", "Options", {
|
|
327
332
|
fullGC,
|
|
328
333
|
runSweep: options.runSweep,
|
|
329
334
|
});
|
|
330
335
|
const logger = options.logger
|
|
331
|
-
? telemetry_utils_1.
|
|
332
|
-
|
|
336
|
+
? (0, telemetry_utils_1.createChildLogger)({
|
|
337
|
+
logger: options.logger,
|
|
338
|
+
properties: {
|
|
339
|
+
all: { completedGCRuns: () => this.completedRuns },
|
|
340
|
+
},
|
|
333
341
|
})
|
|
334
342
|
: this.mc.logger;
|
|
335
343
|
/**
|
|
@@ -357,7 +365,7 @@ class GarbageCollector {
|
|
|
357
365
|
await this.runtime.updateStateBeforeGC();
|
|
358
366
|
/** GC step */
|
|
359
367
|
const gcStats = await this.runGC(fullGC, currentReferenceTimestampMs, logger);
|
|
360
|
-
event.end(
|
|
368
|
+
event.end({ ...gcStats, timestamp: currentReferenceTimestampMs });
|
|
361
369
|
/** Post-GC steps */
|
|
362
370
|
// Log pending unreferenced events such as a node being used after inactive. This is done after GC runs and
|
|
363
371
|
// updates its state so that we don't send false positives based on intermediate state. For example, we may get
|
|
@@ -378,13 +386,13 @@ class GarbageCollector {
|
|
|
378
386
|
* 4. Runs Sweep phase.
|
|
379
387
|
*/
|
|
380
388
|
async runGC(fullGC, currentReferenceTimestampMs, logger) {
|
|
381
|
-
var _a;
|
|
382
389
|
// 1. Generate / analyze the runtime's reference graph.
|
|
383
390
|
// Get the reference graph (gcData) and run GC algorithm to get referenced / unreferenced nodes.
|
|
384
391
|
const gcData = await this.runtime.getGCData(fullGC);
|
|
385
392
|
const gcResult = (0, gcReferenceGraphAlgorithm_1.runGarbageCollection)(gcData.gcNodes, ["/"]);
|
|
386
393
|
// Get all referenced nodes - References in this run + references between the previous and current runs.
|
|
387
|
-
const allReferencedNodeIds =
|
|
394
|
+
const allReferencedNodeIds = this.findAllNodesReferencedBetweenGCs(gcData, this.gcDataFromLastRun, logger) ??
|
|
395
|
+
gcResult.referencedNodeIds;
|
|
388
396
|
// 2. Generate stats based on the previous / current GC state.
|
|
389
397
|
// Must happen before running Mark / Sweep phase because previous GC state will be updated in these stages.
|
|
390
398
|
const gcStats = this.generateStats(gcResult);
|
|
@@ -399,14 +407,17 @@ class GarbageCollector {
|
|
|
399
407
|
}
|
|
400
408
|
/**
|
|
401
409
|
* Runs the GC Mark phase. It does the following:
|
|
410
|
+
*
|
|
402
411
|
* 1. Marks all referenced nodes in this run by clearing tracking for them.
|
|
412
|
+
*
|
|
403
413
|
* 2. Marks unreferenced nodes in this run by starting tracking for them.
|
|
414
|
+
*
|
|
404
415
|
* 3. Calls the runtime to update nodes that were marked referenced.
|
|
405
416
|
*
|
|
406
417
|
* @param gcResult - The result of the GC run on the gcData.
|
|
407
418
|
* @param allReferencedNodeIds - Nodes referenced in this GC run + referenced between previous and current GC run.
|
|
408
419
|
* @param currentReferenceTimestampMs - The timestamp to be used for unreferenced nodes' timestamp.
|
|
409
|
-
* @returns
|
|
420
|
+
* @returns A list of sweep ready nodes, i.e., nodes that ready to be deleted.
|
|
410
421
|
*/
|
|
411
422
|
runMarkPhase(gcResult, allReferencedNodeIds, currentReferenceTimestampMs) {
|
|
412
423
|
// 1. Marks all referenced nodes by clearing their unreferenced tracker, if any.
|
|
@@ -449,7 +460,7 @@ class GarbageCollector {
|
|
|
449
460
|
* @param sweepReadyNodes - List of nodes that are sweep ready.
|
|
450
461
|
* @param currentReferenceTimestampMs - The timestamp to be used for unreferenced nodes' timestamp.
|
|
451
462
|
* @param logger - The logger to be used to log any telemetry.
|
|
452
|
-
* @returns
|
|
463
|
+
* @returns A list of nodes that have been deleted.
|
|
453
464
|
*/
|
|
454
465
|
runSweepPhase(gcResult, sweepReadyNodes, currentReferenceTimestampMs, logger) {
|
|
455
466
|
// Log events for objects that are ready to be deleted by sweep. This will give us data on sweep when
|
|
@@ -511,7 +522,7 @@ class GarbageCollector {
|
|
|
511
522
|
* This function identifies nodes that were referenced since the last run.
|
|
512
523
|
* If these nodes are currently unreferenced, they will be assigned new unreferenced state by the current run.
|
|
513
524
|
*
|
|
514
|
-
* @returns
|
|
525
|
+
* @returns A list of all nodes referenced from the last local summary until now.
|
|
515
526
|
*/
|
|
516
527
|
findAllNodesReferencedBetweenGCs(currentGCData, previousGCData, logger) {
|
|
517
528
|
// If we haven't run GC before there is nothing to do.
|
|
@@ -575,7 +586,6 @@ class GarbageCollector {
|
|
|
575
586
|
* blobs. All the blob keys should start with `gcBlobPrefix`.
|
|
576
587
|
*/
|
|
577
588
|
summarize(fullTree, trackState, telemetryContext) {
|
|
578
|
-
var _a;
|
|
579
589
|
if (!this.configs.shouldRunGC || this.gcDataFromLastRun === undefined) {
|
|
580
590
|
return;
|
|
581
591
|
}
|
|
@@ -583,7 +593,7 @@ class GarbageCollector {
|
|
|
583
593
|
for (const [nodeId, outboundRoutes] of Object.entries(this.gcDataFromLastRun.gcNodes)) {
|
|
584
594
|
gcState.gcNodes[nodeId] = {
|
|
585
595
|
outboundRoutes,
|
|
586
|
-
unreferencedTimestampMs:
|
|
596
|
+
unreferencedTimestampMs: this.unreferencedNodesState.get(nodeId)?.unreferencedTimestampMs,
|
|
587
597
|
};
|
|
588
598
|
}
|
|
589
599
|
return this.summaryStateTracker.summarize(fullTree, trackState, gcState, this.deletedNodes, this.tombstones);
|
|
@@ -602,30 +612,14 @@ class GarbageCollector {
|
|
|
602
612
|
};
|
|
603
613
|
}
|
|
604
614
|
/**
|
|
605
|
-
* Called to refresh the latest summary state. This happens when either a pending summary is acked
|
|
606
|
-
* 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.
|
|
607
616
|
*/
|
|
608
|
-
async refreshLatestSummary(
|
|
609
|
-
|
|
610
|
-
// If the latest summary was updated but it was not tracked by this client, our state needs to be updated from
|
|
611
|
-
// this snapshot data.
|
|
612
|
-
if (this.shouldRunGC && result.latestSummaryUpdated && !result.wasSummaryTracked) {
|
|
613
|
-
// The current reference timestamp should be available if we are refreshing state from a snapshot. There has
|
|
614
|
-
// to be at least one op (summary op / ack, if nothing else) if a snapshot was taken.
|
|
615
|
-
const currentReferenceTimestampMs = this.runtime.getCurrentReferenceTimestampMs();
|
|
616
|
-
if (currentReferenceTimestampMs === undefined) {
|
|
617
|
-
throw container_utils_1.DataProcessingError.create("No reference timestamp when updating GC state from snapshot", "refreshLatestSummary", undefined, {
|
|
618
|
-
proposalHandle,
|
|
619
|
-
summaryRefSeq: result.summaryRefSeq,
|
|
620
|
-
gcConfigs: JSON.stringify(this.configs),
|
|
621
|
-
});
|
|
622
|
-
}
|
|
623
|
-
this.updateStateFromSnapshotData(latestSnapshotData, currentReferenceTimestampMs);
|
|
624
|
-
}
|
|
617
|
+
async refreshLatestSummary(result) {
|
|
618
|
+
return this.summaryStateTracker.refreshLatestSummary(result);
|
|
625
619
|
}
|
|
626
620
|
/**
|
|
627
621
|
* Called when a node with the given id is updated. If the node is inactive, log an error.
|
|
628
|
-
* @param nodePath - The
|
|
622
|
+
* @param nodePath - The path of the node that changed.
|
|
629
623
|
* @param reason - Whether the node was loaded or changed.
|
|
630
624
|
* @param timestampMs - The timestamp when the node changed.
|
|
631
625
|
* @param packagePath - The package path of the node. This may not be available if the node hasn't been loaded yet.
|
|
@@ -635,16 +629,33 @@ class GarbageCollector {
|
|
|
635
629
|
if (!this.configs.shouldRunGC) {
|
|
636
630
|
return;
|
|
637
631
|
}
|
|
632
|
+
// This will log if appropriate
|
|
638
633
|
this.telemetryTracker.nodeUsed({
|
|
639
634
|
id: nodePath,
|
|
640
635
|
usageType: reason,
|
|
641
|
-
currentReferenceTimestampMs: timestampMs
|
|
636
|
+
currentReferenceTimestampMs: timestampMs ?? this.runtime.getCurrentReferenceTimestampMs(),
|
|
642
637
|
packagePath,
|
|
643
638
|
completedGCRuns: this.completedRuns,
|
|
644
639
|
isTombstoned: this.tombstones.includes(nodePath),
|
|
645
640
|
lastSummaryTime: this.getLastSummaryTimestampMs(),
|
|
646
|
-
viaHandle: requestHeaders
|
|
641
|
+
viaHandle: requestHeaders?.[containerRuntime_1.RuntimeHeaders.viaHandle],
|
|
647
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
|
+
}
|
|
648
659
|
}
|
|
649
660
|
/**
|
|
650
661
|
* Called when an outbound reference is added to a node. This is used to identify all nodes that have been
|
|
@@ -654,11 +665,10 @@ class GarbageCollector {
|
|
|
654
665
|
* @param toNodePath - The node to which the reference is added.
|
|
655
666
|
*/
|
|
656
667
|
addedOutboundReference(fromNodePath, toNodePath) {
|
|
657
|
-
var _a;
|
|
658
668
|
if (!this.configs.shouldRunGC) {
|
|
659
669
|
return;
|
|
660
670
|
}
|
|
661
|
-
const outboundRoutes =
|
|
671
|
+
const outboundRoutes = this.newReferencesSinceLastRun.get(fromNodePath) ?? [];
|
|
662
672
|
outboundRoutes.push(toNodePath);
|
|
663
673
|
this.newReferencesSinceLastRun.set(fromNodePath, outboundRoutes);
|
|
664
674
|
this.telemetryTracker.nodeUsed({
|
|
@@ -680,8 +690,7 @@ class GarbageCollector {
|
|
|
680
690
|
return this.deletedNodes.has(nodePath);
|
|
681
691
|
}
|
|
682
692
|
dispose() {
|
|
683
|
-
|
|
684
|
-
(_a = this.sessionExpiryTimer) === null || _a === void 0 ? void 0 : _a.clear();
|
|
693
|
+
this.sessionExpiryTimer?.clear();
|
|
685
694
|
this.sessionExpiryTimer = undefined;
|
|
686
695
|
}
|
|
687
696
|
/**
|