@fluidframework/container-runtime 2.0.0-dev.2.3.0.115467 → 2.0.0-dev.4.1.0.148229
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +21 -10
- package/.mocharc.js +2 -2
- package/api-extractor.json +2 -2
- package/dist/batchTracker.d.ts +1 -2
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js +2 -1
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager.d.ts +74 -42
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +321 -152
- package/dist/blobManager.js.map +1 -1
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +11 -9
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerHandleContext.d.ts.map +1 -1
- package/dist/containerHandleContext.js +3 -1
- package/dist/containerHandleContext.js.map +1 -1
- package/dist/containerRuntime.d.ts +148 -114
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +534 -342
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.d.ts.map +1 -1
- package/dist/dataStore.js +11 -9
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +40 -13
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +146 -66
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js +7 -3
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/dataStoreRegistry.d.ts.map +1 -1
- package/dist/dataStoreRegistry.js +3 -1
- package/dist/dataStoreRegistry.js.map +1 -1
- package/dist/dataStores.d.ts +39 -12
- package/dist/dataStores.d.ts.map +1 -1
- package/dist/dataStores.js +164 -76
- package/dist/dataStores.js.map +1 -1
- package/dist/deltaManagerSummarizerProxy.d.ts +19 -0
- package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -0
- package/dist/deltaManagerSummarizerProxy.js +40 -0
- package/dist/deltaManagerSummarizerProxy.js.map +1 -0
- package/dist/deltaScheduler.d.ts.map +1 -1
- package/dist/deltaScheduler.js +8 -3
- package/dist/deltaScheduler.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts +204 -0
- package/dist/gc/garbageCollection.d.ts.map +1 -0
- package/dist/gc/garbageCollection.js +926 -0
- package/dist/gc/garbageCollection.js.map +1 -0
- package/dist/gc/gcConfigs.d.ts +22 -0
- package/dist/gc/gcConfigs.d.ts.map +1 -0
- package/dist/gc/gcConfigs.js +143 -0
- package/dist/gc/gcConfigs.js.map +1 -0
- package/dist/gc/gcDefinitions.d.ts +320 -0
- package/dist/gc/gcDefinitions.d.ts.map +1 -0
- package/dist/gc/gcDefinitions.js +81 -0
- package/dist/gc/gcDefinitions.js.map +1 -0
- package/dist/gc/gcHelpers.d.ts +86 -0
- package/dist/gc/gcHelpers.d.ts.map +1 -0
- package/dist/gc/gcHelpers.js +268 -0
- package/dist/gc/gcHelpers.js.map +1 -0
- package/dist/gc/gcReferenceGraphAlgorithm.d.ts +16 -0
- package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
- package/dist/gc/gcReferenceGraphAlgorithm.js +49 -0
- package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -0
- package/dist/gc/gcSummaryDefinitions.d.ts +52 -0
- package/dist/gc/gcSummaryDefinitions.d.ts.map +1 -0
- package/dist/gc/gcSummaryDefinitions.js +7 -0
- package/dist/gc/gcSummaryDefinitions.js.map +1 -0
- package/dist/gc/gcSummaryStateTracker.d.ts +93 -0
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -0
- package/dist/gc/gcSummaryStateTracker.js +239 -0
- package/dist/gc/gcSummaryStateTracker.js.map +1 -0
- package/{lib → dist/gc}/gcSweepReadyUsageDetection.d.ts +5 -5
- package/dist/gc/gcSweepReadyUsageDetection.d.ts.map +1 -0
- package/dist/{gcSweepReadyUsageDetection.js → gc/gcSweepReadyUsageDetection.js} +15 -11
- package/dist/gc/gcSweepReadyUsageDetection.js.map +1 -0
- package/dist/gc/gcUnreferencedStateTracker.d.ts +34 -0
- package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
- package/dist/gc/gcUnreferencedStateTracker.js +94 -0
- package/dist/gc/gcUnreferencedStateTracker.js.map +1 -0
- package/dist/gc/index.d.ts +13 -0
- package/dist/gc/index.d.ts.map +1 -0
- package/dist/gc/index.js +50 -0
- package/dist/gc/index.js.map +1 -0
- package/dist/index.d.ts +3 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -13
- package/dist/index.js.map +1 -1
- package/dist/opLifecycle/batchManager.d.ts +10 -0
- package/dist/opLifecycle/batchManager.d.ts.map +1 -1
- package/dist/opLifecycle/batchManager.js +37 -8
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/definitions.d.ts +29 -1
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -1
- package/dist/opLifecycle/index.d.ts +3 -3
- package/dist/opLifecycle/index.d.ts.map +1 -1
- package/dist/opLifecycle/index.js +3 -1
- package/dist/opLifecycle/index.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts +1 -1
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +46 -17
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts +6 -1
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +72 -18
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts +46 -2
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +142 -5
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +23 -2
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +101 -51
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js +17 -2
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/dist/opProperties.d.ts.map +1 -1
- package/dist/opProperties.js +1 -3
- 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 +6 -15
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +137 -165
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/scheduleManager.d.ts +0 -1
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js +11 -21
- package/dist/scheduleManager.js.map +1 -1
- package/dist/storageServiceWithAttachBlobs.d.ts +17 -0
- package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -0
- package/dist/storageServiceWithAttachBlobs.js +32 -0
- package/dist/storageServiceWithAttachBlobs.js.map +1 -0
- package/dist/summary/index.d.ts +17 -0
- package/dist/summary/index.d.ts.map +1 -0
- package/dist/summary/index.js +46 -0
- package/dist/summary/index.js.map +1 -0
- package/dist/summary/orderedClientElection.d.ts.map +1 -0
- package/dist/{orderedClientElection.js → summary/orderedClientElection.js} +10 -4
- package/dist/summary/orderedClientElection.js.map +1 -0
- package/{lib → dist/summary}/runWhileConnectedCoordinator.d.ts +3 -2
- package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
- package/dist/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.js} +5 -4
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -0
- package/{lib → dist/summary}/runningSummarizer.d.ts +19 -18
- package/dist/summary/runningSummarizer.d.ts.map +1 -0
- package/dist/{runningSummarizer.js → summary/runningSummarizer.js} +191 -77
- package/dist/summary/runningSummarizer.js.map +1 -0
- package/dist/{summarizer.d.ts → summary/summarizer.d.ts} +6 -12
- package/dist/summary/summarizer.d.ts.map +1 -0
- package/dist/{summarizer.js → summary/summarizer.js} +32 -76
- package/dist/summary/summarizer.js.map +1 -0
- package/dist/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +1 -2
- package/dist/summary/summarizerClientElection.d.ts.map +1 -0
- package/dist/{summarizerClientElection.js → summary/summarizerClientElection.js} +3 -30
- package/dist/summary/summarizerClientElection.js.map +1 -0
- package/dist/{summarizerHeuristics.d.ts → summary/summarizerHeuristics.d.ts} +1 -1
- package/dist/summary/summarizerHeuristics.d.ts.map +1 -0
- package/dist/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +9 -12
- package/dist/summary/summarizerHeuristics.js.map +1 -0
- package/dist/summary/summarizerNode/index.d.ts +8 -0
- package/dist/summary/summarizerNode/index.d.ts.map +1 -0
- package/dist/summary/summarizerNode/index.js +12 -0
- package/dist/summary/summarizerNode/index.js.map +1 -0
- package/dist/summary/summarizerNode/summarizerNode.d.ts +149 -0
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
- package/dist/summary/summarizerNode/summarizerNode.js +531 -0
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +125 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.js +132 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +22 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +423 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
- package/{lib → dist/summary}/summarizerTypes.d.ts +29 -42
- package/dist/summary/summarizerTypes.d.ts.map +1 -0
- package/dist/{summarizerTypes.js → summary/summarizerTypes.js} +0 -5
- package/dist/summary/summarizerTypes.js.map +1 -0
- package/dist/summary/summaryCollection.d.ts.map +1 -0
- package/dist/{summaryCollection.js → summary/summaryCollection.js} +18 -8
- package/dist/summary/summaryCollection.js.map +1 -0
- package/{lib → dist/summary}/summaryFormat.d.ts +3 -21
- package/dist/summary/summaryFormat.d.ts.map +1 -0
- package/dist/{summaryFormat.js → summary/summaryFormat.js} +19 -21
- package/dist/summary/summaryFormat.js.map +1 -0
- package/dist/summary/summaryGenerator.d.ts.map +1 -0
- package/dist/{summaryGenerator.js → summary/summaryGenerator.js} +34 -16
- package/dist/summary/summaryGenerator.js.map +1 -0
- package/dist/{summaryManager.d.ts → summary/summaryManager.d.ts} +1 -1
- package/dist/summary/summaryManager.d.ts.map +1 -0
- package/dist/{summaryManager.js → summary/summaryManager.js} +21 -9
- package/dist/summary/summaryManager.js.map +1 -0
- package/dist/throttler.d.ts +2 -2
- package/dist/throttler.d.ts.map +1 -1
- package/dist/throttler.js +4 -4
- package/dist/throttler.js.map +1 -1
- package/lib/batchTracker.d.ts +1 -2
- package/lib/batchTracker.d.ts.map +1 -1
- package/lib/batchTracker.js +2 -1
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager.d.ts +74 -42
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +322 -153
- package/lib/blobManager.js.map +1 -1
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +11 -9
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerHandleContext.d.ts.map +1 -1
- package/lib/containerHandleContext.js +3 -1
- package/lib/containerHandleContext.js.map +1 -1
- package/lib/containerRuntime.d.ts +148 -114
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +506 -314
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStore.d.ts.map +1 -1
- package/lib/dataStore.js +11 -9
- package/lib/dataStore.js.map +1 -1
- package/lib/dataStoreContext.d.ts +40 -13
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +136 -56
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.d.ts.map +1 -1
- package/lib/dataStoreContexts.js +7 -3
- package/lib/dataStoreContexts.js.map +1 -1
- package/lib/dataStoreRegistry.d.ts.map +1 -1
- package/lib/dataStoreRegistry.js +3 -1
- package/lib/dataStoreRegistry.js.map +1 -1
- package/lib/dataStores.d.ts +39 -12
- package/lib/dataStores.d.ts.map +1 -1
- package/lib/dataStores.js +162 -74
- package/lib/dataStores.js.map +1 -1
- package/lib/deltaManagerSummarizerProxy.d.ts +19 -0
- package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -0
- package/lib/deltaManagerSummarizerProxy.js +36 -0
- package/lib/deltaManagerSummarizerProxy.js.map +1 -0
- package/lib/deltaScheduler.d.ts.map +1 -1
- package/lib/deltaScheduler.js +9 -4
- package/lib/deltaScheduler.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts +204 -0
- package/lib/gc/garbageCollection.d.ts.map +1 -0
- package/lib/gc/garbageCollection.js +922 -0
- package/lib/gc/garbageCollection.js.map +1 -0
- package/lib/gc/gcConfigs.d.ts +22 -0
- package/lib/gc/gcConfigs.d.ts.map +1 -0
- package/lib/gc/gcConfigs.js +139 -0
- package/lib/gc/gcConfigs.js.map +1 -0
- package/lib/gc/gcDefinitions.d.ts +320 -0
- package/lib/gc/gcDefinitions.d.ts.map +1 -0
- package/lib/gc/gcDefinitions.js +78 -0
- package/lib/gc/gcDefinitions.js.map +1 -0
- package/lib/gc/gcHelpers.d.ts +86 -0
- package/lib/gc/gcHelpers.d.ts.map +1 -0
- package/lib/gc/gcHelpers.js +254 -0
- package/lib/gc/gcHelpers.js.map +1 -0
- package/lib/gc/gcReferenceGraphAlgorithm.d.ts +16 -0
- package/lib/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
- package/lib/gc/gcReferenceGraphAlgorithm.js +45 -0
- package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -0
- package/lib/gc/gcSummaryDefinitions.d.ts +52 -0
- package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -0
- package/lib/gc/gcSummaryDefinitions.js +6 -0
- package/lib/gc/gcSummaryDefinitions.js.map +1 -0
- package/lib/gc/gcSummaryStateTracker.d.ts +93 -0
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
- package/lib/gc/gcSummaryStateTracker.js +235 -0
- package/lib/gc/gcSummaryStateTracker.js.map +1 -0
- package/{dist → lib/gc}/gcSweepReadyUsageDetection.d.ts +5 -5
- package/lib/gc/gcSweepReadyUsageDetection.d.ts.map +1 -0
- package/lib/{gcSweepReadyUsageDetection.js → gc/gcSweepReadyUsageDetection.js} +15 -11
- package/lib/gc/gcSweepReadyUsageDetection.js.map +1 -0
- package/lib/gc/gcUnreferencedStateTracker.d.ts +34 -0
- package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
- package/lib/gc/gcUnreferencedStateTracker.js +90 -0
- package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
- package/lib/gc/index.d.ts +13 -0
- package/lib/gc/index.d.ts.map +1 -0
- package/lib/gc/index.js +12 -0
- package/lib/gc/index.js.map +1 -0
- package/lib/index.d.ts +3 -8
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -6
- package/lib/index.js.map +1 -1
- package/lib/opLifecycle/batchManager.d.ts +10 -0
- package/lib/opLifecycle/batchManager.d.ts.map +1 -1
- package/lib/opLifecycle/batchManager.js +35 -7
- package/lib/opLifecycle/batchManager.js.map +1 -1
- package/lib/opLifecycle/definitions.d.ts +29 -1
- package/lib/opLifecycle/definitions.d.ts.map +1 -1
- package/lib/opLifecycle/definitions.js.map +1 -1
- package/lib/opLifecycle/index.d.ts +3 -3
- package/lib/opLifecycle/index.d.ts.map +1 -1
- package/lib/opLifecycle/index.js +2 -2
- package/lib/opLifecycle/index.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts +1 -1
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js +47 -18
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts +6 -1
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +72 -18
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts +46 -2
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +141 -5
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +23 -2
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +103 -53
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.js +17 -2
- package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/lib/opProperties.d.ts.map +1 -1
- package/lib/opProperties.js +1 -3
- 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 +6 -15
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +137 -165
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/scheduleManager.d.ts +0 -1
- package/lib/scheduleManager.d.ts.map +1 -1
- package/lib/scheduleManager.js +11 -21
- package/lib/scheduleManager.js.map +1 -1
- package/lib/storageServiceWithAttachBlobs.d.ts +17 -0
- package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -0
- package/lib/storageServiceWithAttachBlobs.js +28 -0
- package/lib/storageServiceWithAttachBlobs.js.map +1 -0
- package/lib/summary/index.d.ts +17 -0
- package/lib/summary/index.d.ts.map +1 -0
- package/lib/summary/index.js +15 -0
- package/lib/summary/index.js.map +1 -0
- package/lib/summary/orderedClientElection.d.ts.map +1 -0
- package/lib/{orderedClientElection.js → summary/orderedClientElection.js} +10 -4
- package/lib/summary/orderedClientElection.js.map +1 -0
- package/{dist → lib/summary}/runWhileConnectedCoordinator.d.ts +3 -2
- package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
- package/lib/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.js} +5 -4
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
- package/{dist → lib/summary}/runningSummarizer.d.ts +19 -18
- package/lib/summary/runningSummarizer.d.ts.map +1 -0
- package/lib/{runningSummarizer.js → summary/runningSummarizer.js} +193 -79
- package/lib/summary/runningSummarizer.js.map +1 -0
- package/lib/{summarizer.d.ts → summary/summarizer.d.ts} +6 -12
- package/lib/summary/summarizer.d.ts.map +1 -0
- package/lib/{summarizer.js → summary/summarizer.js} +34 -78
- package/lib/summary/summarizer.js.map +1 -0
- package/lib/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +1 -2
- package/lib/summary/summarizerClientElection.d.ts.map +1 -0
- package/lib/{summarizerClientElection.js → summary/summarizerClientElection.js} +3 -30
- package/lib/summary/summarizerClientElection.js.map +1 -0
- package/lib/{summarizerHeuristics.d.ts → summary/summarizerHeuristics.d.ts} +1 -1
- package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
- package/lib/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +9 -12
- package/lib/summary/summarizerHeuristics.js.map +1 -0
- package/lib/summary/summarizerNode/index.d.ts +8 -0
- package/lib/summary/summarizerNode/index.d.ts.map +1 -0
- package/lib/summary/summarizerNode/index.js +7 -0
- package/lib/summary/summarizerNode/index.js.map +1 -0
- package/lib/summary/summarizerNode/summarizerNode.d.ts +149 -0
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
- package/lib/summary/summarizerNode/summarizerNode.js +526 -0
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +125 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.js +125 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +22 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +419 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
- package/{dist → lib/summary}/summarizerTypes.d.ts +29 -42
- package/lib/summary/summarizerTypes.d.ts.map +1 -0
- package/lib/summary/summarizerTypes.js +6 -0
- package/lib/summary/summarizerTypes.js.map +1 -0
- package/lib/summary/summaryCollection.d.ts.map +1 -0
- package/lib/{summaryCollection.js → summary/summaryCollection.js} +18 -8
- package/lib/summary/summaryCollection.js.map +1 -0
- package/{dist → lib/summary}/summaryFormat.d.ts +3 -21
- package/lib/summary/summaryFormat.d.ts.map +1 -0
- package/lib/{summaryFormat.js → summary/summaryFormat.js} +20 -21
- package/lib/summary/summaryFormat.js.map +1 -0
- package/lib/summary/summaryGenerator.d.ts.map +1 -0
- package/lib/{summaryGenerator.js → summary/summaryGenerator.js} +34 -16
- package/lib/summary/summaryGenerator.js.map +1 -0
- package/lib/{summaryManager.d.ts → summary/summaryManager.d.ts} +1 -1
- package/lib/summary/summaryManager.d.ts.map +1 -0
- package/lib/{summaryManager.js → summary/summaryManager.js} +21 -9
- package/lib/summary/summaryManager.js.map +1 -0
- package/lib/throttler.d.ts +2 -2
- package/lib/throttler.d.ts.map +1 -1
- package/lib/throttler.js +4 -4
- package/lib/throttler.js.map +1 -1
- package/package.json +67 -61
- package/prettier.config.cjs +1 -1
- package/src/batchTracker.ts +55 -50
- package/src/blobManager.ts +863 -594
- package/src/connectionTelemetry.ts +280 -249
- package/src/containerHandleContext.ts +27 -29
- package/src/containerRuntime.ts +3174 -2805
- package/src/dataStore.ts +172 -159
- package/src/dataStoreContext.ts +1141 -993
- package/src/dataStoreContexts.ts +178 -161
- package/src/dataStoreRegistry.ts +25 -20
- package/src/dataStores.ts +887 -716
- package/src/deltaManagerSummarizerProxy.ts +46 -0
- package/src/deltaScheduler.ts +158 -150
- package/{garbageCollection.md → src/gc/garbageCollection.md} +16 -3
- package/src/gc/garbageCollection.ts +1250 -0
- package/src/gc/gcConfigs.ts +193 -0
- package/src/gc/gcDefinitions.ts +387 -0
- package/src/gc/gcHelpers.ts +332 -0
- package/src/gc/gcReferenceGraphAlgorithm.ts +52 -0
- package/src/gc/gcSummaryDefinitions.ts +54 -0
- package/src/gc/gcSummaryStateTracker.ts +329 -0
- package/src/gc/gcSweepReadyUsageDetection.ts +145 -0
- package/src/gc/gcUnreferencedStateTracker.ts +114 -0
- package/src/gc/index.ts +65 -0
- package/src/index.ts +61 -75
- package/src/opLifecycle/README.md +157 -0
- package/src/opLifecycle/batchManager.ts +119 -86
- package/src/opLifecycle/definitions.ts +49 -19
- package/src/opLifecycle/index.ts +7 -6
- package/src/opLifecycle/opCompressor.ts +78 -40
- package/src/opLifecycle/opDecompressor.ts +148 -64
- package/src/opLifecycle/opSplitter.ts +269 -66
- package/src/opLifecycle/outbox.ts +268 -184
- package/src/opLifecycle/remoteMessageProcessor.ts +63 -47
- package/src/opProperties.ts +11 -9
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +386 -381
- package/src/scheduleManager.ts +299 -280
- package/src/storageServiceWithAttachBlobs.ts +38 -0
- package/src/summary/index.ts +105 -0
- package/src/summary/orderedClientElection.ts +564 -0
- package/src/summary/runWhileConnectedCoordinator.ts +113 -0
- package/src/summary/runningSummarizer.ts +788 -0
- package/src/summary/summarizer.ts +372 -0
- package/src/summary/summarizerClientElection.ts +139 -0
- package/src/summary/summarizerHeuristics.ts +224 -0
- package/src/summary/summarizerNode/index.ts +12 -0
- package/src/summary/summarizerNode/summarizerNode.ts +766 -0
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +214 -0
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +644 -0
- package/src/summary/summarizerTypes.ts +507 -0
- package/src/summary/summaryCollection.ts +450 -0
- package/src/summary/summaryFormat.ts +228 -0
- package/src/summary/summaryGenerator.ts +505 -0
- package/src/summary/summaryManager.ts +423 -0
- package/src/throttler.ts +131 -122
- package/tsconfig.esnext.json +6 -6
- package/tsconfig.json +9 -13
- package/dist/garbageCollection.d.ts +0 -387
- package/dist/garbageCollection.d.ts.map +0 -1
- package/dist/garbageCollection.js +0 -1138
- package/dist/garbageCollection.js.map +0 -1
- package/dist/garbageCollectionConstants.d.ts +0 -19
- package/dist/garbageCollectionConstants.d.ts.map +0 -1
- package/dist/garbageCollectionConstants.js +0 -34
- package/dist/garbageCollectionConstants.js.map +0 -1
- package/dist/gcSweepReadyUsageDetection.d.ts.map +0 -1
- package/dist/gcSweepReadyUsageDetection.js.map +0 -1
- package/dist/orderedClientElection.d.ts.map +0 -1
- package/dist/orderedClientElection.js.map +0 -1
- package/dist/runWhileConnectedCoordinator.d.ts.map +0 -1
- package/dist/runWhileConnectedCoordinator.js.map +0 -1
- package/dist/runningSummarizer.d.ts.map +0 -1
- package/dist/runningSummarizer.js.map +0 -1
- package/dist/serializedSnapshotStorage.d.ts +0 -58
- package/dist/serializedSnapshotStorage.d.ts.map +0 -1
- package/dist/serializedSnapshotStorage.js +0 -108
- package/dist/serializedSnapshotStorage.js.map +0 -1
- package/dist/summarizer.d.ts.map +0 -1
- package/dist/summarizer.js.map +0 -1
- package/dist/summarizerClientElection.d.ts.map +0 -1
- package/dist/summarizerClientElection.js.map +0 -1
- package/dist/summarizerHandle.d.ts +0 -12
- package/dist/summarizerHandle.d.ts.map +0 -1
- package/dist/summarizerHandle.js +0 -22
- package/dist/summarizerHandle.js.map +0 -1
- package/dist/summarizerHeuristics.d.ts.map +0 -1
- package/dist/summarizerHeuristics.js.map +0 -1
- package/dist/summarizerTypes.d.ts.map +0 -1
- package/dist/summarizerTypes.js.map +0 -1
- package/dist/summaryCollection.d.ts.map +0 -1
- package/dist/summaryCollection.js.map +0 -1
- package/dist/summaryFormat.d.ts.map +0 -1
- package/dist/summaryFormat.js.map +0 -1
- package/dist/summaryGenerator.d.ts.map +0 -1
- package/dist/summaryGenerator.js.map +0 -1
- package/dist/summaryManager.d.ts.map +0 -1
- package/dist/summaryManager.js.map +0 -1
- package/lib/garbageCollection.d.ts +0 -387
- package/lib/garbageCollection.d.ts.map +0 -1
- package/lib/garbageCollection.js +0 -1133
- package/lib/garbageCollection.js.map +0 -1
- package/lib/garbageCollectionConstants.d.ts +0 -19
- package/lib/garbageCollectionConstants.d.ts.map +0 -1
- package/lib/garbageCollectionConstants.js +0 -31
- package/lib/garbageCollectionConstants.js.map +0 -1
- package/lib/gcSweepReadyUsageDetection.d.ts.map +0 -1
- package/lib/gcSweepReadyUsageDetection.js.map +0 -1
- package/lib/orderedClientElection.d.ts.map +0 -1
- package/lib/orderedClientElection.js.map +0 -1
- package/lib/runWhileConnectedCoordinator.d.ts.map +0 -1
- package/lib/runWhileConnectedCoordinator.js.map +0 -1
- package/lib/runningSummarizer.d.ts.map +0 -1
- package/lib/runningSummarizer.js.map +0 -1
- package/lib/serializedSnapshotStorage.d.ts +0 -58
- package/lib/serializedSnapshotStorage.d.ts.map +0 -1
- package/lib/serializedSnapshotStorage.js +0 -104
- package/lib/serializedSnapshotStorage.js.map +0 -1
- package/lib/summarizer.d.ts.map +0 -1
- package/lib/summarizer.js.map +0 -1
- package/lib/summarizerClientElection.d.ts.map +0 -1
- package/lib/summarizerClientElection.js.map +0 -1
- package/lib/summarizerHandle.d.ts +0 -12
- package/lib/summarizerHandle.d.ts.map +0 -1
- package/lib/summarizerHandle.js +0 -18
- package/lib/summarizerHandle.js.map +0 -1
- package/lib/summarizerHeuristics.d.ts.map +0 -1
- package/lib/summarizerHeuristics.js.map +0 -1
- package/lib/summarizerTypes.d.ts.map +0 -1
- package/lib/summarizerTypes.js +0 -9
- package/lib/summarizerTypes.js.map +0 -1
- package/lib/summaryCollection.d.ts.map +0 -1
- package/lib/summaryCollection.js.map +0 -1
- package/lib/summaryFormat.d.ts.map +0 -1
- package/lib/summaryFormat.js.map +0 -1
- package/lib/summaryGenerator.d.ts.map +0 -1
- package/lib/summaryGenerator.js.map +0 -1
- package/lib/summaryManager.d.ts.map +0 -1
- package/lib/summaryManager.js.map +0 -1
- package/src/garbageCollection.ts +0 -1646
- package/src/garbageCollectionConstants.ts +0 -35
- package/src/gcSweepReadyUsageDetection.ts +0 -139
- package/src/orderedClientElection.ts +0 -532
- package/src/runWhileConnectedCoordinator.ts +0 -106
- package/src/runningSummarizer.ts +0 -611
- package/src/serializedSnapshotStorage.ts +0 -146
- package/src/summarizer.ts +0 -421
- package/src/summarizerClientElection.ts +0 -161
- package/src/summarizerHandle.ts +0 -21
- package/src/summarizerHeuristics.ts +0 -222
- package/src/summarizerTypes.ts +0 -510
- package/src/summaryCollection.ts +0 -421
- package/src/summaryFormat.ts +0 -235
- package/src/summaryGenerator.ts +0 -446
- package/src/summaryManager.ts +0 -394
- /package/dist/{orderedClientElection.d.ts → summary/orderedClientElection.d.ts} +0 -0
- /package/dist/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +0 -0
- /package/dist/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +0 -0
- /package/lib/{orderedClientElection.d.ts → summary/orderedClientElection.d.ts} +0 -0
- /package/lib/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +0 -0
- /package/lib/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +0 -0
package/dist/dataStores.js
CHANGED
|
@@ -14,26 +14,26 @@ const container_definitions_1 = require("@fluidframework/container-definitions")
|
|
|
14
14
|
const driver_utils_1 = require("@fluidframework/driver-utils");
|
|
15
15
|
const common_utils_1 = require("@fluidframework/common-utils");
|
|
16
16
|
const uuid_1 = require("uuid");
|
|
17
|
-
const garbage_collector_1 = require("@fluidframework/garbage-collector");
|
|
18
17
|
const dataStoreContexts_1 = require("./dataStoreContexts");
|
|
18
|
+
const containerRuntime_1 = require("./containerRuntime");
|
|
19
19
|
const dataStoreContext_1 = require("./dataStoreContext");
|
|
20
|
-
const
|
|
20
|
+
const storageServiceWithAttachBlobs_1 = require("./storageServiceWithAttachBlobs");
|
|
21
21
|
const dataStore_1 = require("./dataStore");
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
const summarizerClientElection_1 = require("./summarizerClientElection");
|
|
22
|
+
const gc_1 = require("./gc");
|
|
23
|
+
const summary_1 = require("./summary");
|
|
25
24
|
/**
|
|
26
25
|
* This class encapsulates data store handling. Currently it is only used by the container runtime,
|
|
27
26
|
* but eventually could be hosted on any channel once we formalize the channel api boundary.
|
|
28
27
|
*/
|
|
29
28
|
class DataStores {
|
|
30
|
-
constructor(baseSnapshot, runtime, submitAttachFn, getCreateChildSummarizerNodeFn, deleteChildSummarizerNodeFn, baseLogger,
|
|
29
|
+
constructor(baseSnapshot, runtime, submitAttachFn, getCreateChildSummarizerNodeFn, deleteChildSummarizerNodeFn, baseLogger, gcNodeUpdated, isDataStoreDeleted, aliasMap, contexts = new dataStoreContexts_1.DataStoreContexts(baseLogger)) {
|
|
31
30
|
this.baseSnapshot = baseSnapshot;
|
|
32
31
|
this.runtime = runtime;
|
|
33
32
|
this.submitAttachFn = submitAttachFn;
|
|
34
33
|
this.getCreateChildSummarizerNodeFn = getCreateChildSummarizerNodeFn;
|
|
35
34
|
this.deleteChildSummarizerNodeFn = deleteChildSummarizerNodeFn;
|
|
36
35
|
this.gcNodeUpdated = gcNodeUpdated;
|
|
36
|
+
this.isDataStoreDeleted = isDataStoreDeleted;
|
|
37
37
|
this.aliasMap = aliasMap;
|
|
38
38
|
this.contexts = contexts;
|
|
39
39
|
// Stores tracked by the Domain
|
|
@@ -48,18 +48,11 @@ class DataStores {
|
|
|
48
48
|
this.dispose = () => this.disposeOnce.value;
|
|
49
49
|
this.mc = (0, telemetry_utils_1.loggerToMonitoringContext)(telemetry_utils_1.ChildLogger.create(baseLogger));
|
|
50
50
|
this.containerRuntimeHandle = new datastore_1.FluidObjectHandle(this.runtime, "/", this.runtime.IFluidHandleContext);
|
|
51
|
-
const baseGCDetailsP = new common_utils_1.LazyPromise(async () => {
|
|
52
|
-
return getBaseGCDetails();
|
|
53
|
-
});
|
|
54
|
-
// Returns the base GC details for the data store with the given id.
|
|
55
|
-
const dataStoreBaseGCDetails = async (dataStoreId) => {
|
|
56
|
-
const baseGCDetails = await baseGCDetailsP;
|
|
57
|
-
return baseGCDetails.get(dataStoreId);
|
|
58
|
-
};
|
|
59
51
|
// Tombstone should only throw when the feature flag is enabled and the client isn't a summarizer
|
|
60
|
-
this.
|
|
61
|
-
this.mc.config.getBoolean(
|
|
62
|
-
this.runtime.
|
|
52
|
+
this.throwOnTombstoneLoad =
|
|
53
|
+
this.mc.config.getBoolean(gc_1.throwOnTombstoneLoadKey) === true &&
|
|
54
|
+
this.runtime.gcTombstoneEnforcementAllowed &&
|
|
55
|
+
this.runtime.clientDetails.type !== summary_1.summarizerClientType;
|
|
63
56
|
// Extract stores stored inside the snapshot
|
|
64
57
|
const fluidDataStores = new Map();
|
|
65
58
|
if (baseSnapshot) {
|
|
@@ -80,11 +73,12 @@ class DataStores {
|
|
|
80
73
|
dataStoreContext = new dataStoreContext_1.RemoteFluidDataStoreContext({
|
|
81
74
|
id: key,
|
|
82
75
|
snapshotTree: value,
|
|
83
|
-
getBaseGCDetails: async () => dataStoreBaseGCDetails(key),
|
|
84
76
|
runtime: this.runtime,
|
|
85
77
|
storage: this.runtime.storage,
|
|
86
78
|
scope: this.runtime.scope,
|
|
87
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
79
|
+
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
80
|
+
type: runtime_definitions_1.CreateSummarizerNodeSource.FromSummary,
|
|
81
|
+
}),
|
|
88
82
|
});
|
|
89
83
|
}
|
|
90
84
|
else {
|
|
@@ -98,7 +92,9 @@ class DataStores {
|
|
|
98
92
|
runtime: this.runtime,
|
|
99
93
|
storage: this.runtime.storage,
|
|
100
94
|
scope: this.runtime.scope,
|
|
101
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
95
|
+
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
|
|
96
|
+
type: runtime_definitions_1.CreateSummarizerNodeSource.FromSummary,
|
|
97
|
+
}),
|
|
102
98
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(key),
|
|
103
99
|
snapshotTree,
|
|
104
100
|
isRootDataStore: undefined,
|
|
@@ -143,10 +139,10 @@ class DataStores {
|
|
|
143
139
|
} }));
|
|
144
140
|
throw error;
|
|
145
141
|
}
|
|
146
|
-
const
|
|
142
|
+
const flatAttachBlobs = new Map();
|
|
147
143
|
let snapshotTree;
|
|
148
144
|
if (attachMessage.snapshot) {
|
|
149
|
-
snapshotTree = (0, driver_utils_1.buildSnapshotTree)(attachMessage.snapshot.entries,
|
|
145
|
+
snapshotTree = (0, driver_utils_1.buildSnapshotTree)(attachMessage.snapshot.entries, flatAttachBlobs);
|
|
150
146
|
}
|
|
151
147
|
// Include the type of attach message which is the pkg of the store to be
|
|
152
148
|
// used by RemoteFluidDataStoreContext in case it is not in the snapshot.
|
|
@@ -154,10 +150,8 @@ class DataStores {
|
|
|
154
150
|
const remoteFluidDataStoreContext = new dataStoreContext_1.RemoteFluidDataStoreContext({
|
|
155
151
|
id: attachMessage.id,
|
|
156
152
|
snapshotTree,
|
|
157
|
-
// New data stores begin with empty GC details since GC hasn't run on them yet.
|
|
158
|
-
getBaseGCDetails: async () => { return {}; },
|
|
159
153
|
runtime: this.runtime,
|
|
160
|
-
storage: new
|
|
154
|
+
storage: new storageServiceWithAttachBlobs_1.StorageServiceWithAttachBlobs(this.runtime.storage, flatAttachBlobs),
|
|
161
155
|
scope: this.runtime.scope,
|
|
162
156
|
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(attachMessage.id, {
|
|
163
157
|
type: runtime_definitions_1.CreateSummarizerNodeSource.FromAttach,
|
|
@@ -232,7 +226,9 @@ class DataStores {
|
|
|
232
226
|
runtime: this.runtime,
|
|
233
227
|
storage: this.runtime.storage,
|
|
234
228
|
scope: this.runtime.scope,
|
|
235
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
229
|
+
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
230
|
+
type: runtime_definitions_1.CreateSummarizerNodeSource.Local,
|
|
231
|
+
}),
|
|
236
232
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
|
|
237
233
|
snapshotTree: undefined,
|
|
238
234
|
isRootDataStore: isRoot,
|
|
@@ -248,7 +244,9 @@ class DataStores {
|
|
|
248
244
|
runtime: this.runtime,
|
|
249
245
|
storage: this.runtime.storage,
|
|
250
246
|
scope: this.runtime.scope,
|
|
251
|
-
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
247
|
+
createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
|
|
248
|
+
type: runtime_definitions_1.CreateSummarizerNodeSource.Local,
|
|
249
|
+
}),
|
|
252
250
|
makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
|
|
253
251
|
snapshotTree: undefined,
|
|
254
252
|
isRootDataStore: false,
|
|
@@ -257,7 +255,9 @@ class DataStores {
|
|
|
257
255
|
this.contexts.addUnbound(context);
|
|
258
256
|
return context;
|
|
259
257
|
}
|
|
260
|
-
get disposed() {
|
|
258
|
+
get disposed() {
|
|
259
|
+
return this.disposeOnce.evaluated;
|
|
260
|
+
}
|
|
261
261
|
resubmitDataStoreOp(content, localOpMetadata) {
|
|
262
262
|
const envelope = content;
|
|
263
263
|
const context = this.contexts.get(envelope.address);
|
|
@@ -284,6 +284,8 @@ class DataStores {
|
|
|
284
284
|
processFluidDataStoreOp(message, local, localMessageMetadata) {
|
|
285
285
|
const envelope = message.contents;
|
|
286
286
|
const transformed = Object.assign(Object.assign({}, message), { contents: envelope.contents });
|
|
287
|
+
const request = { url: envelope.address };
|
|
288
|
+
this.validateNotDeleted(envelope.address, request);
|
|
287
289
|
const context = this.contexts.get(envelope.address);
|
|
288
290
|
(0, common_utils_1.assert)(!!context, 0x162 /* "There should be a store context for the op" */);
|
|
289
291
|
context.process(transformed, local, localMessageMetadata);
|
|
@@ -291,32 +293,70 @@ class DataStores {
|
|
|
291
293
|
// being used.
|
|
292
294
|
this.gcNodeUpdated(`/${envelope.address}`, message.timestamp, context.isLoaded ? context.packagePath : undefined);
|
|
293
295
|
}
|
|
294
|
-
async getDataStore(id,
|
|
295
|
-
const
|
|
296
|
+
async getDataStore(id, requestHeaderData) {
|
|
297
|
+
const headerData = Object.assign(Object.assign({}, containerRuntime_1.defaultRuntimeHeaderData), requestHeaderData);
|
|
296
298
|
const request = { url: id };
|
|
299
|
+
this.validateNotDeleted(id, request, headerData);
|
|
300
|
+
const context = await this.contexts.getBoundOrRemoted(id, headerData.wait);
|
|
297
301
|
if (context === undefined) {
|
|
298
302
|
// The requested data store does not exits. Throw a 404 response exception.
|
|
299
303
|
throw (0, runtime_utils_1.responseToException)((0, runtime_utils_1.create404Response)(request), request);
|
|
300
304
|
}
|
|
305
|
+
this.validateNotTombstoned(context, request, requestHeaderData);
|
|
306
|
+
return context;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Validate that the data store had not been deleted by GC.
|
|
310
|
+
*
|
|
311
|
+
* @param id - data store id
|
|
312
|
+
* @param request - the request information to log if the validation detects the data store has been deleted
|
|
313
|
+
* @param requestHeaderData - the request header information to log if the validation detects the data store has been deleted
|
|
314
|
+
*/
|
|
315
|
+
validateNotDeleted(id, request, requestHeaderData) {
|
|
316
|
+
const dataStoreNodePath = `/${id}`;
|
|
317
|
+
if (this.isDataStoreDeleted(dataStoreNodePath)) {
|
|
318
|
+
(0, common_utils_1.assert)(!this.contexts.has(id), 0x570 /* Inconsistent state! GC says the data store is deleted, but the data store is not deleted from the runtime. */);
|
|
319
|
+
// The requested data store is removed by gc. Create a 404 gc response exception.
|
|
320
|
+
const error = (0, runtime_utils_1.responseToException)((0, runtime_utils_1.createResponseError)(404, "DataStore was deleted", request), request);
|
|
321
|
+
(0, gc_1.sendGCUnexpectedUsageEvent)(this.mc, {
|
|
322
|
+
eventName: "GC_Deleted_DataStore_Requested",
|
|
323
|
+
category: "error",
|
|
324
|
+
isSummarizerClient: this.runtime.clientDetails.type === summary_1.summarizerClientType,
|
|
325
|
+
headers: JSON.stringify(requestHeaderData),
|
|
326
|
+
gcTombstoneEnforcementAllowed: this.runtime.gcTombstoneEnforcementAllowed,
|
|
327
|
+
}, undefined /** packagePath */, error);
|
|
328
|
+
throw error;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Validates that the data store context requested has not been marked as tombstone by GC.
|
|
333
|
+
*
|
|
334
|
+
* @param context - the data store context in question
|
|
335
|
+
* @param request - the request information to log if the validation detects the data store has been tombstoned
|
|
336
|
+
* @param headerData - the request header information to log if the validation detects the data store has been tombstoned
|
|
337
|
+
*/
|
|
338
|
+
validateNotTombstoned(context, request, headerData) {
|
|
301
339
|
if (context.tombstoned) {
|
|
340
|
+
const shouldFail = this.throwOnTombstoneLoad && !headerData.allowTombstone;
|
|
302
341
|
// The requested data store is removed by gc. Create a 404 gc response exception.
|
|
303
|
-
const error = (0, runtime_utils_1.responseToException)((0, runtime_utils_1.createResponseError)(404, "
|
|
304
|
-
|
|
305
|
-
|
|
342
|
+
const error = (0, runtime_utils_1.responseToException)((0, runtime_utils_1.createResponseError)(404, "DataStore was deleted", request, {
|
|
343
|
+
[containerRuntime_1.TombstoneResponseHeaderKey]: true,
|
|
344
|
+
}), request);
|
|
345
|
+
(0, gc_1.sendGCUnexpectedUsageEvent)(this.mc, {
|
|
306
346
|
eventName: "GC_Tombstone_DataStore_Requested",
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
if (this.throwOnTombstoneUsage) {
|
|
347
|
+
category: shouldFail ? "error" : "generic",
|
|
348
|
+
isSummarizerClient: this.runtime.clientDetails.type === summary_1.summarizerClientType,
|
|
349
|
+
headers: JSON.stringify(headerData),
|
|
350
|
+
gcTombstoneEnforcementAllowed: this.runtime.gcTombstoneEnforcementAllowed,
|
|
351
|
+
}, context.isLoaded ? context.packagePath : undefined, error);
|
|
352
|
+
if (shouldFail) {
|
|
314
353
|
throw error;
|
|
315
354
|
}
|
|
316
355
|
}
|
|
317
|
-
return context;
|
|
318
356
|
}
|
|
319
357
|
processSignal(address, message, local) {
|
|
358
|
+
const request = { url: address };
|
|
359
|
+
this.validateNotDeleted(address, request);
|
|
320
360
|
const context = this.contexts.get(address);
|
|
321
361
|
if (!context) {
|
|
322
362
|
// Attach message may not have been processed yet
|
|
@@ -342,6 +382,10 @@ class DataStores {
|
|
|
342
382
|
eventName: "SetConnectionStateError",
|
|
343
383
|
clientId,
|
|
344
384
|
fluidDataStore,
|
|
385
|
+
details: JSON.stringify({
|
|
386
|
+
runtimeConnected: this.runtime.connected,
|
|
387
|
+
connected,
|
|
388
|
+
}),
|
|
345
389
|
}, error);
|
|
346
390
|
}
|
|
347
391
|
}
|
|
@@ -363,10 +407,12 @@ class DataStores {
|
|
|
363
407
|
// Iterate over each store and ask it to snapshot
|
|
364
408
|
await Promise.all(Array.from(this.contexts)
|
|
365
409
|
.filter(([_, context]) => {
|
|
366
|
-
// Summarizer works only with clients with no local changes
|
|
367
|
-
|
|
410
|
+
// Summarizer works only with clients with no local changes. A data store in attaching
|
|
411
|
+
// state indicates an op was sent to attach a local data store.
|
|
412
|
+
(0, common_utils_1.assert)(context.attachState !== container_definitions_1.AttachState.Attaching, 0x588 /* Local data store detected in attaching state during summarize */);
|
|
368
413
|
return context.attachState === container_definitions_1.AttachState.Attached;
|
|
369
|
-
})
|
|
414
|
+
})
|
|
415
|
+
.map(async ([contextId, context]) => {
|
|
370
416
|
const contextSummary = await context.summarize(fullTree, trackState, telemetryContext);
|
|
371
417
|
summaryBuilder.addWithStats(contextId, contextSummary);
|
|
372
418
|
}));
|
|
@@ -386,9 +432,9 @@ class DataStores {
|
|
|
386
432
|
// Take summary of bounded data stores only, make sure we haven't summarized them already
|
|
387
433
|
// and no attach op has been fired for that data store because for loader versions <= 0.24
|
|
388
434
|
// we set attach state as "attaching" before taking createNew summary.
|
|
389
|
-
!(this.contexts.isNotBound(key)
|
|
390
|
-
|
|
391
|
-
|
|
435
|
+
!(this.contexts.isNotBound(key) ||
|
|
436
|
+
builderTree[key] ||
|
|
437
|
+
this.attachOpFiredForDataStore.has(key)))
|
|
392
438
|
.map(([key, value]) => {
|
|
393
439
|
let dataStoreSummary;
|
|
394
440
|
if (value.isLoaded) {
|
|
@@ -437,14 +483,16 @@ class DataStores {
|
|
|
437
483
|
* @param fullGC - true to bypass optimizations and force full generation of GC data.
|
|
438
484
|
*/
|
|
439
485
|
async getGCData(fullGC = false) {
|
|
440
|
-
const builder = new
|
|
486
|
+
const builder = new runtime_utils_1.GCDataBuilder();
|
|
441
487
|
// Iterate over each store and get their GC data.
|
|
442
488
|
await Promise.all(Array.from(this.contexts)
|
|
443
489
|
.filter(([_, context]) => {
|
|
444
|
-
//
|
|
445
|
-
//
|
|
490
|
+
// Summarizer client and hence GC works only with clients with no local changes. A data store in
|
|
491
|
+
// attaching state indicates an op was sent to attach a local data store.
|
|
492
|
+
(0, common_utils_1.assert)(context.attachState !== container_definitions_1.AttachState.Attaching, 0x589 /* Local data store detected in attaching state while running GC */);
|
|
446
493
|
return context.attachState === container_definitions_1.AttachState.Attached;
|
|
447
|
-
})
|
|
494
|
+
})
|
|
495
|
+
.map(async ([contextId, context]) => {
|
|
448
496
|
const contextGCData = await context.getGCData(fullGC);
|
|
449
497
|
// Prefix the child's id to the ids of its GC nodes so they can be identified as belonging to the child.
|
|
450
498
|
// This also gradually builds the id of each node to be a path from the root.
|
|
@@ -461,14 +509,10 @@ class DataStores {
|
|
|
461
509
|
updateUsedRoutes(usedRoutes) {
|
|
462
510
|
var _a;
|
|
463
511
|
// Get a map of data store ids to routes used in it.
|
|
464
|
-
const usedDataStoreRoutes = (0,
|
|
512
|
+
const usedDataStoreRoutes = (0, runtime_utils_1.unpackChildNodesUsedRoutes)(usedRoutes);
|
|
465
513
|
// Verify that the used routes are correct.
|
|
466
514
|
for (const [id] of usedDataStoreRoutes) {
|
|
467
515
|
(0, common_utils_1.assert)(this.contexts.has(id), 0x167 /* "Used route does not belong to any known data store" */);
|
|
468
|
-
// Revive datastores regardless of whether or not tombstone the tombstone flag is flipped
|
|
469
|
-
const dataStore = this.contexts.get(id);
|
|
470
|
-
(0, common_utils_1.assert)(dataStore !== undefined, 0x46e /* No data store retrieved with specified id */);
|
|
471
|
-
dataStore.setTombstone(false /* tombstone */);
|
|
472
516
|
}
|
|
473
517
|
// Update the used routes in each data store. Used routes is empty for unused data stores.
|
|
474
518
|
for (const [contextId, context] of this.contexts) {
|
|
@@ -476,13 +520,10 @@ class DataStores {
|
|
|
476
520
|
}
|
|
477
521
|
}
|
|
478
522
|
/**
|
|
479
|
-
* This is called to update objects whose routes are unused. The unused objects are
|
|
480
|
-
* tombstones.
|
|
523
|
+
* This is called to update objects whose routes are unused. The unused objects are deleted.
|
|
481
524
|
* @param unusedRoutes - The routes that are unused in all data stores in this Container.
|
|
482
|
-
* @param tombstone - if true, the objects corresponding to unused routes are marked tombstones. Otherwise, they
|
|
483
|
-
* are deleted.
|
|
484
525
|
*/
|
|
485
|
-
updateUnusedRoutes(unusedRoutes
|
|
526
|
+
updateUnusedRoutes(unusedRoutes) {
|
|
486
527
|
for (const route of unusedRoutes) {
|
|
487
528
|
const pathParts = route.split("/");
|
|
488
529
|
// Delete data store only if its route (/datastoreId) is in unusedRoutes. We don't want to delete a data
|
|
@@ -492,23 +533,70 @@ class DataStores {
|
|
|
492
533
|
}
|
|
493
534
|
const dataStoreId = pathParts[1];
|
|
494
535
|
(0, common_utils_1.assert)(this.contexts.has(dataStoreId), 0x2d7 /* No data store with specified id */);
|
|
495
|
-
/**
|
|
496
|
-
* When running GC in tombstone mode, datastore contexts are tombstoned. Tombstoned datastore contexts
|
|
497
|
-
* enable testing scenarios with accessing deleted content without actually deleting content from
|
|
498
|
-
* summaries.
|
|
499
|
-
*/
|
|
500
|
-
if (tombstone) {
|
|
501
|
-
const dataStore = this.contexts.get(dataStoreId);
|
|
502
|
-
(0, common_utils_1.assert)(dataStore !== undefined, 0x442 /* No data store retrieved with specified id */);
|
|
503
|
-
dataStore.setTombstone(true /* tombstone */);
|
|
504
|
-
continue;
|
|
505
|
-
}
|
|
506
536
|
// Delete the contexts of unused data stores.
|
|
507
537
|
this.contexts.delete(dataStoreId);
|
|
508
538
|
// Delete the summarizer node of the unused data stores.
|
|
509
539
|
this.deleteChildSummarizerNodeFn(dataStoreId);
|
|
510
540
|
}
|
|
511
541
|
}
|
|
542
|
+
/**
|
|
543
|
+
* Delete data stores and its objects that are sweep ready.
|
|
544
|
+
* @param sweepReadyDataStoreRoutes - The routes of data stores and its objects that are sweep ready and should
|
|
545
|
+
* be deleted.
|
|
546
|
+
* @returns - The routes of data stores and its objects that were deleted.
|
|
547
|
+
*/
|
|
548
|
+
deleteSweepReadyNodes(sweepReadyDataStoreRoutes) {
|
|
549
|
+
// If sweep for data stores is not enabled, return empty list indicating nothing is deleted.
|
|
550
|
+
if (this.mc.config.getBoolean(gc_1.sweepDatastoresKey) !== true) {
|
|
551
|
+
return [];
|
|
552
|
+
}
|
|
553
|
+
for (const route of sweepReadyDataStoreRoutes) {
|
|
554
|
+
const pathParts = route.split("/");
|
|
555
|
+
const dataStoreId = pathParts[1];
|
|
556
|
+
// TODO: GC:Validation - Skip any routes already deleted
|
|
557
|
+
// Ignore sub-data store routes because a data store and its sub-routes are deleted together, so, we only
|
|
558
|
+
// need to delete the data store.
|
|
559
|
+
if (pathParts.length > 2) {
|
|
560
|
+
continue;
|
|
561
|
+
}
|
|
562
|
+
if (!this.contexts.has(dataStoreId)) {
|
|
563
|
+
this.mc.logger.sendErrorEvent({
|
|
564
|
+
eventName: "DeletedDataStoreNotFound",
|
|
565
|
+
dataStoreId,
|
|
566
|
+
});
|
|
567
|
+
}
|
|
568
|
+
const dataStore = this.contexts.get(dataStoreId);
|
|
569
|
+
(0, common_utils_1.assert)(dataStore !== undefined, 0x571 /* Attempting to delete unknown dataStore */);
|
|
570
|
+
dataStore.delete();
|
|
571
|
+
// Delete the contexts of sweep ready data stores.
|
|
572
|
+
this.contexts.delete(dataStoreId);
|
|
573
|
+
// Delete the summarizer node of the sweep ready data stores.
|
|
574
|
+
this.deleteChildSummarizerNodeFn(dataStoreId);
|
|
575
|
+
}
|
|
576
|
+
return Array.from(sweepReadyDataStoreRoutes);
|
|
577
|
+
}
|
|
578
|
+
/**
|
|
579
|
+
* This is called to update objects whose routes are tombstones. Tombstoned datastore contexts enable testing
|
|
580
|
+
* scenarios with accessing deleted content without actually deleting content from summaries.
|
|
581
|
+
* @param tombstonedRoutes - The routes that are tombstones in all data stores in this Container.
|
|
582
|
+
*/
|
|
583
|
+
updateTombstonedRoutes(tombstonedRoutes) {
|
|
584
|
+
const tombstonedDataStoresSet = new Set();
|
|
585
|
+
for (const route of tombstonedRoutes) {
|
|
586
|
+
const pathParts = route.split("/");
|
|
587
|
+
// Tombstone data store only if its route (/datastoreId) is directly in tombstoneRoutes.
|
|
588
|
+
if (pathParts.length > 2) {
|
|
589
|
+
continue;
|
|
590
|
+
}
|
|
591
|
+
const dataStoreId = pathParts[1];
|
|
592
|
+
(0, common_utils_1.assert)(this.contexts.has(dataStoreId), 0x510 /* No data store with specified id */);
|
|
593
|
+
tombstonedDataStoresSet.add(dataStoreId);
|
|
594
|
+
}
|
|
595
|
+
// Update the used routes in each data store. Used routes is empty for unused data stores.
|
|
596
|
+
for (const [contextId, context] of this.contexts) {
|
|
597
|
+
context.setTombstone(tombstonedDataStoresSet.has(contextId));
|
|
598
|
+
}
|
|
599
|
+
}
|
|
512
600
|
/**
|
|
513
601
|
* Returns the outbound routes of this channel. Only root data stores are considered referenced and their paths are
|
|
514
602
|
* part of outbound routes.
|
|
@@ -545,9 +633,9 @@ class DataStores {
|
|
|
545
633
|
// Data stores paths are of the format "/dataStoreId".
|
|
546
634
|
// Sub data store paths are of the format "/dataStoreId/subPath/...".
|
|
547
635
|
if (pathParts.length === 2) {
|
|
548
|
-
return
|
|
636
|
+
return gc_1.GCNodeType.DataStore;
|
|
549
637
|
}
|
|
550
|
-
return
|
|
638
|
+
return gc_1.GCNodeType.SubDataStore;
|
|
551
639
|
}
|
|
552
640
|
}
|
|
553
641
|
exports.DataStores = DataStores;
|
|
@@ -555,7 +643,7 @@ function getSummaryForDatastores(snapshot, metadata) {
|
|
|
555
643
|
if (!snapshot) {
|
|
556
644
|
return undefined;
|
|
557
645
|
}
|
|
558
|
-
if ((0,
|
|
646
|
+
if ((0, summary_1.rootHasIsolatedChannels)(metadata)) {
|
|
559
647
|
const datastoresSnapshot = snapshot.trees[runtime_definitions_1.channelsTreeName];
|
|
560
648
|
(0, common_utils_1.assert)(!!datastoresSnapshot, 0x168 /* Expected tree in snapshot not found */);
|
|
561
649
|
return datastoresSnapshot;
|
|
@@ -564,7 +652,7 @@ function getSummaryForDatastores(snapshot, metadata) {
|
|
|
564
652
|
// back-compat: strip out all non-datastore paths before giving to DataStores object.
|
|
565
653
|
const datastoresTrees = {};
|
|
566
654
|
for (const [key, value] of Object.entries(snapshot.trees)) {
|
|
567
|
-
if (!
|
|
655
|
+
if (!summary_1.nonDataStorePaths.includes(key)) {
|
|
568
656
|
datastoresTrees[key] = value;
|
|
569
657
|
}
|
|
570
658
|
}
|