@fluidframework/container-runtime 2.0.0-dev.3.1.0.125672 → 2.0.0-dev.4.2.0.153917
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 +58 -0
- package/README.md +69 -0
- package/dist/blobManager.d.ts +29 -24
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +162 -92
- package/dist/blobManager.js.map +1 -1
- package/dist/containerRuntime.d.ts +74 -76
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +328 -264
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStoreContext.d.ts +39 -13
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +112 -49
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStores.d.ts +28 -4
- package/dist/dataStores.d.ts.map +1 -1
- package/dist/dataStores.js +107 -41
- 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/gc/garbageCollection.d.ts +204 -0
- package/dist/gc/garbageCollection.d.ts.map +1 -0
- package/dist/{garbageCollection.js → gc/garbageCollection.js} +190 -554
- 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/dist/gc/gcSweepReadyUsageDetection.d.ts.map +1 -0
- package/dist/{gcSweepReadyUsageDetection.js → gc/gcSweepReadyUsageDetection.js} +2 -2
- 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 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -9
- package/dist/index.js.map +1 -1
- package/dist/opLifecycle/batchManager.d.ts +11 -13
- package/dist/opLifecycle/batchManager.d.ts.map +1 -1
- package/dist/opLifecycle/batchManager.js +26 -38
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/definitions.d.ts +4 -0
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -1
- package/dist/opLifecycle/index.d.ts +2 -1
- package/dist/opLifecycle/index.d.ts.map +1 -1
- package/dist/opLifecycle/index.js +4 -1
- package/dist/opLifecycle/index.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +25 -10
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts +4 -0
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +43 -4
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts +14 -0
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -0
- package/dist/opLifecycle/opGroupingManager.js +56 -0
- package/dist/opLifecycle/opGroupingManager.js.map +1 -0
- package/dist/opLifecycle/opSplitter.d.ts +16 -4
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +39 -15
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +21 -3
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +90 -51
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts +4 -2
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js +30 -20
- package/dist/opLifecycle/remoteMessageProcessor.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 +3 -3
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +20 -21
- package/dist/pendingStateManager.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 +48 -0
- package/dist/summary/index.js.map +1 -0
- package/dist/summary/orderedClientElection.d.ts.map +1 -0
- package/dist/summary/orderedClientElection.js.map +1 -0
- package/dist/{runWhileConnectedCoordinator.d.ts → 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 +23 -20
- package/dist/summary/runningSummarizer.d.ts.map +1 -0
- package/dist/{runningSummarizer.js → summary/runningSummarizer.js} +191 -74
- package/dist/summary/runningSummarizer.js.map +1 -0
- package/dist/{summarizer.d.ts → summary/summarizer.d.ts} +4 -9
- package/dist/summary/summarizer.d.ts.map +1 -0
- package/dist/{summarizer.js → summary/summarizer.js} +10 -79
- package/dist/summary/summarizer.js.map +1 -0
- package/dist/summary/summarizerClientElection.d.ts.map +1 -0
- package/dist/summary/summarizerClientElection.js.map +1 -0
- package/dist/{summarizerHeuristics.d.ts → summary/summarizerHeuristics.d.ts} +2 -1
- package/dist/summary/summarizerHeuristics.d.ts.map +1 -0
- package/dist/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +6 -3
- 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 +148 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +424 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
- package/{lib → dist/summary}/summarizerTypes.d.ts +21 -19
- 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/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} +1 -10
- package/dist/summary/summaryFormat.js.map +1 -0
- package/{lib → dist/summary}/summaryGenerator.d.ts +28 -2
- package/dist/summary/summaryGenerator.d.ts.map +1 -0
- package/dist/{summaryGenerator.js → summary/summaryGenerator.js} +23 -20
- 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/summary/summaryManager.js.map +1 -0
- package/lib/blobManager.d.ts +29 -24
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +159 -89
- package/lib/blobManager.js.map +1 -1
- package/lib/containerRuntime.d.ts +74 -76
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +301 -237
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStoreContext.d.ts +39 -13
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +101 -38
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStores.d.ts +28 -4
- package/lib/dataStores.d.ts.map +1 -1
- package/lib/dataStores.js +100 -34
- 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/gc/garbageCollection.d.ts +204 -0
- package/lib/gc/garbageCollection.d.ts.map +1 -0
- package/lib/{garbageCollection.js → gc/garbageCollection.js} +172 -535
- 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/lib/gc/gcSweepReadyUsageDetection.d.ts.map +1 -0
- package/lib/{gcSweepReadyUsageDetection.js → gc/gcSweepReadyUsageDetection.js} +1 -1
- 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 -7
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -4
- package/lib/index.js.map +1 -1
- package/lib/opLifecycle/batchManager.d.ts +11 -13
- package/lib/opLifecycle/batchManager.d.ts.map +1 -1
- package/lib/opLifecycle/batchManager.js +24 -37
- package/lib/opLifecycle/batchManager.js.map +1 -1
- package/lib/opLifecycle/definitions.d.ts +4 -0
- package/lib/opLifecycle/definitions.d.ts.map +1 -1
- package/lib/opLifecycle/definitions.js.map +1 -1
- package/lib/opLifecycle/index.d.ts +2 -1
- package/lib/opLifecycle/index.d.ts.map +1 -1
- package/lib/opLifecycle/index.js +2 -1
- package/lib/opLifecycle/index.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js +26 -11
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts +4 -0
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +43 -4
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts +14 -0
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -0
- package/lib/opLifecycle/opGroupingManager.js +52 -0
- package/lib/opLifecycle/opGroupingManager.js.map +1 -0
- package/lib/opLifecycle/opSplitter.d.ts +16 -4
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +39 -15
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +21 -3
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +92 -53
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts +4 -2
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.js +30 -20
- package/lib/opLifecycle/remoteMessageProcessor.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 +3 -3
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +20 -21
- package/lib/pendingStateManager.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 +16 -0
- package/lib/summary/index.js.map +1 -0
- package/lib/summary/orderedClientElection.d.ts.map +1 -0
- package/lib/summary/orderedClientElection.js.map +1 -0
- package/lib/{runWhileConnectedCoordinator.d.ts → 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 +23 -20
- package/lib/summary/runningSummarizer.d.ts.map +1 -0
- package/lib/{runningSummarizer.js → summary/runningSummarizer.js} +192 -75
- package/lib/summary/runningSummarizer.js.map +1 -0
- package/lib/{summarizer.d.ts → summary/summarizer.d.ts} +4 -9
- package/lib/summary/summarizer.d.ts.map +1 -0
- package/lib/{summarizer.js → summary/summarizer.js} +12 -81
- package/lib/summary/summarizer.js.map +1 -0
- package/lib/summary/summarizerClientElection.d.ts.map +1 -0
- package/lib/summary/summarizerClientElection.js.map +1 -0
- package/lib/{summarizerHeuristics.d.ts → summary/summarizerHeuristics.d.ts} +2 -1
- package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
- package/lib/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +6 -3
- 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 +148 -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 +21 -19
- 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/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} +0 -8
- package/lib/summary/summaryFormat.js.map +1 -0
- package/{dist → lib/summary}/summaryGenerator.d.ts +28 -2
- package/lib/summary/summaryGenerator.d.ts.map +1 -0
- package/lib/{summaryGenerator.js → summary/summaryGenerator.js} +21 -19
- 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/summary/summaryManager.js.map +1 -0
- package/package.json +66 -60
- package/src/blobManager.ts +196 -110
- package/src/containerRuntime.ts +491 -391
- package/src/dataStoreContext.ts +140 -49
- package/src/dataStores.ts +139 -41
- package/src/deltaManagerSummarizerProxy.ts +46 -0
- package/{garbageCollection.md → src/gc/garbageCollection.md} +2 -2
- package/src/{garbageCollection.ts → gc/garbageCollection.ts} +245 -890
- package/src/gc/gcConfigs.ts +193 -0
- package/src/gc/gcDefinitions.ts +387 -0
- package/src/gc/gcHelpers.ts +335 -0
- package/src/gc/gcReferenceGraphAlgorithm.ts +52 -0
- package/src/gc/gcSummaryDefinitions.ts +54 -0
- package/src/gc/gcSummaryStateTracker.ts +329 -0
- package/src/{gcSweepReadyUsageDetection.ts → gc/gcSweepReadyUsageDetection.ts} +1 -1
- package/src/gc/gcUnreferencedStateTracker.ts +114 -0
- package/src/gc/index.ts +65 -0
- package/src/index.ts +10 -22
- package/src/opLifecycle/README.md +263 -0
- package/src/opLifecycle/batchManager.ts +26 -55
- package/src/opLifecycle/definitions.ts +4 -0
- package/src/opLifecycle/index.ts +2 -1
- package/src/opLifecycle/opCompressor.ts +32 -12
- package/src/opLifecycle/opDecompressor.ts +50 -5
- package/src/opLifecycle/opGroupingManager.ts +78 -0
- package/src/opLifecycle/opSplitter.ts +56 -17
- package/src/opLifecycle/outbox.ts +126 -62
- package/src/opLifecycle/remoteMessageProcessor.ts +38 -22
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +34 -27
- package/src/storageServiceWithAttachBlobs.ts +38 -0
- package/src/summary/index.ts +105 -0
- package/src/{runWhileConnectedCoordinator.ts → summary/runWhileConnectedCoordinator.ts} +7 -7
- package/src/{runningSummarizer.ts → summary/runningSummarizer.ts} +318 -156
- package/src/{summarizer.ts → summary/summarizer.ts} +12 -105
- package/src/{summarizerHeuristics.ts → summary/summarizerHeuristics.ts} +13 -4
- 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/{summarizerTypes.ts → summary/summarizerTypes.ts} +28 -25
- package/src/{summaryFormat.ts → summary/summaryFormat.ts} +3 -29
- package/src/{summaryGenerator.ts → summary/summaryGenerator.ts} +34 -27
- package/src/{summaryManager.ts → summary/summaryManager.ts} +1 -1
- package/dist/garbageCollection.d.ts +0 -411
- package/dist/garbageCollection.d.ts.map +0 -1
- package/dist/garbageCollection.js.map +0 -1
- package/dist/garbageCollectionConstants.d.ts +0 -23
- package/dist/garbageCollectionConstants.d.ts.map +0 -1
- package/dist/garbageCollectionConstants.js +0 -36
- package/dist/garbageCollectionConstants.js.map +0 -1
- package/dist/garbageCollectionHelpers.d.ts +0 -15
- package/dist/garbageCollectionHelpers.d.ts.map +0 -1
- package/dist/garbageCollectionHelpers.js +0 -27
- package/dist/garbageCollectionHelpers.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 -110
- 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 -411
- package/lib/garbageCollection.d.ts.map +0 -1
- package/lib/garbageCollection.js.map +0 -1
- package/lib/garbageCollectionConstants.d.ts +0 -23
- package/lib/garbageCollectionConstants.d.ts.map +0 -1
- package/lib/garbageCollectionConstants.js +0 -33
- package/lib/garbageCollectionConstants.js.map +0 -1
- package/lib/garbageCollectionHelpers.d.ts +0 -15
- package/lib/garbageCollectionHelpers.d.ts.map +0 -1
- package/lib/garbageCollectionHelpers.js +0 -23
- package/lib/garbageCollectionHelpers.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 -106
- 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/garbageCollectionConstants.ts +0 -38
- package/src/garbageCollectionHelpers.ts +0 -37
- package/src/serializedSnapshotStorage.ts +0 -151
- package/src/summarizerHandle.ts +0 -23
- /package/dist/{gcSweepReadyUsageDetection.d.ts → gc/gcSweepReadyUsageDetection.d.ts} +0 -0
- /package/dist/{orderedClientElection.d.ts → summary/orderedClientElection.d.ts} +0 -0
- /package/dist/{orderedClientElection.js → summary/orderedClientElection.js} +0 -0
- /package/dist/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +0 -0
- /package/dist/{summarizerClientElection.js → summary/summarizerClientElection.js} +0 -0
- /package/dist/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +0 -0
- /package/dist/{summaryCollection.js → summary/summaryCollection.js} +0 -0
- /package/dist/{summaryManager.js → summary/summaryManager.js} +0 -0
- /package/lib/{gcSweepReadyUsageDetection.d.ts → gc/gcSweepReadyUsageDetection.d.ts} +0 -0
- /package/lib/{orderedClientElection.d.ts → summary/orderedClientElection.d.ts} +0 -0
- /package/lib/{orderedClientElection.js → summary/orderedClientElection.js} +0 -0
- /package/lib/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +0 -0
- /package/lib/{summarizerClientElection.js → summary/summarizerClientElection.js} +0 -0
- /package/lib/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +0 -0
- /package/lib/{summaryCollection.js → summary/summaryCollection.js} +0 -0
- /package/lib/{summaryManager.js → summary/summaryManager.js} +0 -0
- /package/src/{orderedClientElection.ts → summary/orderedClientElection.ts} +0 -0
- /package/src/{summarizerClientElection.ts → summary/summarizerClientElection.ts} +0 -0
- /package/src/{summaryCollection.ts → summary/summaryCollection.ts} +0 -0
package/src/dataStoreContext.ts
CHANGED
|
@@ -29,7 +29,6 @@ import {
|
|
|
29
29
|
} from "@fluidframework/protocol-definitions";
|
|
30
30
|
import { IContainerRuntime } from "@fluidframework/container-runtime-definitions";
|
|
31
31
|
import {
|
|
32
|
-
BindState,
|
|
33
32
|
channelsTreeName,
|
|
34
33
|
CreateChildSummarizerNodeFn,
|
|
35
34
|
CreateChildSummarizerNodeParam,
|
|
@@ -49,10 +48,16 @@ import {
|
|
|
49
48
|
ISummarizerNodeWithGC,
|
|
50
49
|
SummarizeInternalFn,
|
|
51
50
|
ITelemetryContext,
|
|
51
|
+
VisibilityState,
|
|
52
52
|
} from "@fluidframework/runtime-definitions";
|
|
53
|
-
import {
|
|
53
|
+
import {
|
|
54
|
+
addBlobToSummary,
|
|
55
|
+
convertSummaryTreeToITree,
|
|
56
|
+
packagePathToTelemetryProperty,
|
|
57
|
+
} from "@fluidframework/runtime-utils";
|
|
54
58
|
import {
|
|
55
59
|
ChildLogger,
|
|
60
|
+
generateStack,
|
|
56
61
|
loggerToMonitoringContext,
|
|
57
62
|
LoggingError,
|
|
58
63
|
MonitoringContext,
|
|
@@ -65,7 +70,6 @@ import {
|
|
|
65
70
|
extractSafePropertiesFromMessage,
|
|
66
71
|
} from "@fluidframework/container-utils";
|
|
67
72
|
|
|
68
|
-
import { ContainerRuntime } from "./containerRuntime";
|
|
69
73
|
import {
|
|
70
74
|
dataStoreAttributesBlobName,
|
|
71
75
|
hasIsolatedChannels,
|
|
@@ -74,10 +78,10 @@ import {
|
|
|
74
78
|
WriteFluidDataStoreAttributes,
|
|
75
79
|
getAttributesFormatVersion,
|
|
76
80
|
getFluidDataStoreAttributes,
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
import {
|
|
80
|
-
import {
|
|
81
|
+
summarizerClientType,
|
|
82
|
+
} from "./summary";
|
|
83
|
+
import { ContainerRuntime } from "./containerRuntime";
|
|
84
|
+
import { sendGCUnexpectedUsageEvent, throwOnTombstoneUsageKey } from "./gc";
|
|
81
85
|
|
|
82
86
|
function createAttributes(
|
|
83
87
|
pkg: readonly string[],
|
|
@@ -131,7 +135,6 @@ export interface ILocalFluidDataStoreContextProps extends IFluidDataStoreContext
|
|
|
131
135
|
/** Properties necessary for creating a remote FluidDataStoreContext */
|
|
132
136
|
export interface IRemoteFluidDataStoreContextProps extends IFluidDataStoreContextProps {
|
|
133
137
|
readonly snapshotTree: ISnapshotTree | undefined;
|
|
134
|
-
readonly getBaseGCDetails: () => Promise<IGarbageCollectionDetailsBase | undefined>;
|
|
135
138
|
}
|
|
136
139
|
|
|
137
140
|
/**
|
|
@@ -206,6 +209,9 @@ export abstract class FluidDataStoreContext
|
|
|
206
209
|
/** If true, throw an error when a tombstone data store is used. */
|
|
207
210
|
private readonly throwOnTombstoneUsage: boolean;
|
|
208
211
|
|
|
212
|
+
/** If true, this means that this data store context and its children have been removed from the runtime */
|
|
213
|
+
private deleted: boolean = false;
|
|
214
|
+
|
|
209
215
|
public get attachState(): AttachState {
|
|
210
216
|
return this._attachState;
|
|
211
217
|
}
|
|
@@ -238,8 +244,6 @@ export abstract class FluidDataStoreContext
|
|
|
238
244
|
protected registry: IFluidDataStoreRegistry | undefined;
|
|
239
245
|
|
|
240
246
|
protected detachedRuntimeCreation = false;
|
|
241
|
-
/** @deprecated - To be replaced by calling makeLocallyVisible directly */
|
|
242
|
-
public readonly bindToContext: () => void;
|
|
243
247
|
protected channel: IFluidDataStoreChannel | undefined;
|
|
244
248
|
private loaded = false;
|
|
245
249
|
protected pending: ISequencedDocumentMessage[] | undefined = [];
|
|
@@ -248,10 +252,17 @@ export abstract class FluidDataStoreContext
|
|
|
248
252
|
protected _attachState: AttachState;
|
|
249
253
|
private _isInMemoryRoot: boolean = false;
|
|
250
254
|
protected readonly summarizerNode: ISummarizerNodeWithGC;
|
|
251
|
-
|
|
255
|
+
protected readonly mc: MonitoringContext;
|
|
252
256
|
private readonly thresholdOpsCounter: ThresholdCounter;
|
|
253
257
|
private static readonly pendingOpsCountThreshold = 1000;
|
|
254
258
|
|
|
259
|
+
/**
|
|
260
|
+
* If the summarizer makes local changes, a telemetry event is logged. This has the potential to be very noisy.
|
|
261
|
+
* So, adding a count of how many telemetry events are logged per data store context. This can be
|
|
262
|
+
* controlled via feature flags.
|
|
263
|
+
*/
|
|
264
|
+
private localChangesTelemetryCount: number;
|
|
265
|
+
|
|
255
266
|
// The used routes of this node as per the last GC run. This is used to update the used routes of the channel
|
|
256
267
|
// if it realizes after GC is run.
|
|
257
268
|
private lastUsedRoutes: string[] | undefined;
|
|
@@ -265,7 +276,6 @@ export abstract class FluidDataStoreContext
|
|
|
265
276
|
constructor(
|
|
266
277
|
props: IFluidDataStoreContextProps,
|
|
267
278
|
private readonly existing: boolean,
|
|
268
|
-
private bindState: BindState, // Used to assert for state tracking purposes
|
|
269
279
|
public readonly isLocalDataStore: boolean,
|
|
270
280
|
private readonly makeLocallyVisibleFn: () => void,
|
|
271
281
|
) {
|
|
@@ -286,20 +296,6 @@ export abstract class FluidDataStoreContext
|
|
|
286
296
|
? this.containerRuntime.attachState
|
|
287
297
|
: AttachState.Detached;
|
|
288
298
|
|
|
289
|
-
this.bindToContext = () => {
|
|
290
|
-
assert(
|
|
291
|
-
this.bindState === BindState.NotBound,
|
|
292
|
-
0x13b /* "datastore context is already in bound state" */,
|
|
293
|
-
);
|
|
294
|
-
this.bindState = BindState.Binding;
|
|
295
|
-
assert(
|
|
296
|
-
this.channel !== undefined,
|
|
297
|
-
0x13c /* "undefined channel on datastore context" */,
|
|
298
|
-
);
|
|
299
|
-
this.makeLocallyVisible();
|
|
300
|
-
this.bindState = BindState.Bound;
|
|
301
|
-
};
|
|
302
|
-
|
|
303
299
|
const thisSummarizeInternal = async (
|
|
304
300
|
fullTree: boolean,
|
|
305
301
|
trackState: boolean,
|
|
@@ -309,7 +305,6 @@ export abstract class FluidDataStoreContext
|
|
|
309
305
|
this.summarizerNode = props.createSummarizerNodeFn(
|
|
310
306
|
thisSummarizeInternal,
|
|
311
307
|
async (fullGC?: boolean) => this.getGCDataInternal(fullGC),
|
|
312
|
-
async () => this.getBaseGCDetails(),
|
|
313
308
|
);
|
|
314
309
|
|
|
315
310
|
this.mc = loggerToMonitoringContext(
|
|
@@ -323,7 +318,12 @@ export abstract class FluidDataStoreContext
|
|
|
323
318
|
// Tombstone should only throw when the feature flag is enabled and the client isn't a summarizer
|
|
324
319
|
this.throwOnTombstoneUsage =
|
|
325
320
|
this.mc.config.getBoolean(throwOnTombstoneUsageKey) === true &&
|
|
321
|
+
this._containerRuntime.gcTombstoneEnforcementAllowed &&
|
|
326
322
|
this.clientDetails.type !== summarizerClientType;
|
|
323
|
+
|
|
324
|
+
// By default, a data store can log maximum 10 local changes telemetry in summarizer.
|
|
325
|
+
this.localChangesTelemetryCount =
|
|
326
|
+
this.mc.config.getNumber("Fluid.Telemetry.LocalChangesTelemetryCount") ?? 10;
|
|
327
327
|
}
|
|
328
328
|
|
|
329
329
|
public dispose(): void {
|
|
@@ -343,6 +343,15 @@ export abstract class FluidDataStoreContext
|
|
|
343
343
|
}
|
|
344
344
|
}
|
|
345
345
|
|
|
346
|
+
/**
|
|
347
|
+
* When delete is called, that means that the data store is permanently removed from the runtime, and will not show up in future summaries
|
|
348
|
+
* This function is called to prevent ops from being generated from this data store once it has been deleted. Furthermore, this data store
|
|
349
|
+
* should not receive any ops/signals.
|
|
350
|
+
*/
|
|
351
|
+
public delete() {
|
|
352
|
+
this.deleted = true;
|
|
353
|
+
}
|
|
354
|
+
|
|
346
355
|
public setTombstone(tombstone: boolean) {
|
|
347
356
|
if (this.tombstoned === tombstone) {
|
|
348
357
|
return;
|
|
@@ -351,9 +360,14 @@ export abstract class FluidDataStoreContext
|
|
|
351
360
|
this._tombstoned = tombstone;
|
|
352
361
|
}
|
|
353
362
|
|
|
354
|
-
private rejectDeferredRealize(
|
|
363
|
+
private rejectDeferredRealize(
|
|
364
|
+
reason: string,
|
|
365
|
+
failedPkgPath?: string,
|
|
366
|
+
fullPackageName?: readonly string[],
|
|
367
|
+
): never {
|
|
355
368
|
throw new LoggingError(reason, {
|
|
356
|
-
|
|
369
|
+
failedPkgPath: { value: failedPkgPath, tag: TelemetryDataTag.CodeArtifact },
|
|
370
|
+
fullPackageName: packagePathToTelemetryProperty(fullPackageName),
|
|
357
371
|
});
|
|
358
372
|
}
|
|
359
373
|
|
|
@@ -371,6 +385,7 @@ export abstract class FluidDataStoreContext
|
|
|
371
385
|
value: this.id,
|
|
372
386
|
tag: TelemetryDataTag.CodeArtifact,
|
|
373
387
|
},
|
|
388
|
+
packageName: packagePathToTelemetryProperty(this.pkg),
|
|
374
389
|
});
|
|
375
390
|
this.channelDeferred?.reject(errorWrapped);
|
|
376
391
|
this.logger.sendErrorEvent({ eventName: "RealizeError" }, errorWrapped);
|
|
@@ -391,18 +406,22 @@ export abstract class FluidDataStoreContext
|
|
|
391
406
|
let lastPkg: string | undefined;
|
|
392
407
|
for (const pkg of packages) {
|
|
393
408
|
if (!registry) {
|
|
394
|
-
this.rejectDeferredRealize("No registry for package", lastPkg);
|
|
409
|
+
this.rejectDeferredRealize("No registry for package", lastPkg, packages);
|
|
395
410
|
}
|
|
396
411
|
lastPkg = pkg;
|
|
397
412
|
entry = await registry.get(pkg);
|
|
398
413
|
if (!entry) {
|
|
399
|
-
this.rejectDeferredRealize(
|
|
414
|
+
this.rejectDeferredRealize(
|
|
415
|
+
"Registry does not contain entry for the package",
|
|
416
|
+
pkg,
|
|
417
|
+
packages,
|
|
418
|
+
);
|
|
400
419
|
}
|
|
401
420
|
registry = entry.IFluidDataStoreRegistry;
|
|
402
421
|
}
|
|
403
422
|
const factory = entry?.IFluidDataStoreFactory;
|
|
404
423
|
if (factory === undefined) {
|
|
405
|
-
this.rejectDeferredRealize("Can't find factory for package", lastPkg);
|
|
424
|
+
this.rejectDeferredRealize("Can't find factory for package", lastPkg, packages);
|
|
406
425
|
}
|
|
407
426
|
|
|
408
427
|
return { factory, registry };
|
|
@@ -658,6 +677,10 @@ export abstract class FluidDataStoreContext
|
|
|
658
677
|
content,
|
|
659
678
|
type,
|
|
660
679
|
};
|
|
680
|
+
|
|
681
|
+
// Summarizer clients should not submit messages.
|
|
682
|
+
this.identifyLocalChangeInSummarizer("DataStoreMessageSubmittedInSummarizer", type);
|
|
683
|
+
|
|
661
684
|
this._containerRuntime.submitDataStoreOp(this.id, fluidDataStoreContent, localOpMetadata);
|
|
662
685
|
}
|
|
663
686
|
|
|
@@ -698,6 +721,15 @@ export abstract class FluidDataStoreContext
|
|
|
698
721
|
*/
|
|
699
722
|
public makeLocallyVisible() {
|
|
700
723
|
assert(this.channel !== undefined, 0x2cf /* "undefined channel on datastore context" */);
|
|
724
|
+
assert(
|
|
725
|
+
this.channel.visibilityState === VisibilityState.LocallyVisible,
|
|
726
|
+
0x590 /* Channel must be locally visible */,
|
|
727
|
+
);
|
|
728
|
+
this.makeLocallyVisibleFn();
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
/** @deprecated - To be replaced by calling makeLocallyVisible directly */
|
|
732
|
+
public bindToContext() {
|
|
701
733
|
this.makeLocallyVisibleFn();
|
|
702
734
|
}
|
|
703
735
|
|
|
@@ -779,7 +811,12 @@ export abstract class FluidDataStoreContext
|
|
|
779
811
|
this._isInMemoryRoot = true;
|
|
780
812
|
}
|
|
781
813
|
|
|
782
|
-
|
|
814
|
+
/**
|
|
815
|
+
* @deprecated - The functionality to get base GC details has been moved to summarizer node.
|
|
816
|
+
*/
|
|
817
|
+
public async getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase> {
|
|
818
|
+
return {};
|
|
819
|
+
}
|
|
783
820
|
|
|
784
821
|
public reSubmit(contents: any, localOpMetadata: unknown) {
|
|
785
822
|
assert(!!this.channel, 0x14b /* "Channel must exist when resubmitting ops" */);
|
|
@@ -812,6 +849,20 @@ export abstract class FluidDataStoreContext
|
|
|
812
849
|
checkTombstone = true,
|
|
813
850
|
safeTelemetryProps: ITelemetryProperties = {},
|
|
814
851
|
) {
|
|
852
|
+
if (this.deleted) {
|
|
853
|
+
const messageString = `Context is deleted! Call site [${callSite}]`;
|
|
854
|
+
const error = new DataCorruptionError(messageString, safeTelemetryProps);
|
|
855
|
+
this.mc.logger.sendErrorEvent(
|
|
856
|
+
{
|
|
857
|
+
eventName: "GC_Deleted_DataStore_Changed",
|
|
858
|
+
callSite,
|
|
859
|
+
},
|
|
860
|
+
error,
|
|
861
|
+
);
|
|
862
|
+
|
|
863
|
+
throw error;
|
|
864
|
+
}
|
|
865
|
+
|
|
815
866
|
if (this._disposed) {
|
|
816
867
|
throw new Error(`Context is closed! Call site [${callSite}]`);
|
|
817
868
|
}
|
|
@@ -825,7 +876,8 @@ export abstract class FluidDataStoreContext
|
|
|
825
876
|
{
|
|
826
877
|
eventName: "GC_Tombstone_DataStore_Changed",
|
|
827
878
|
category: this.throwOnTombstoneUsage ? "error" : "generic",
|
|
828
|
-
|
|
879
|
+
gcTombstoneEnforcementAllowed:
|
|
880
|
+
this._containerRuntime.gcTombstoneEnforcementAllowed,
|
|
829
881
|
callSite,
|
|
830
882
|
},
|
|
831
883
|
this.pkg,
|
|
@@ -837,11 +889,40 @@ export abstract class FluidDataStoreContext
|
|
|
837
889
|
}
|
|
838
890
|
}
|
|
839
891
|
|
|
892
|
+
/**
|
|
893
|
+
* Summarizer client should not have local changes. These changes can become part of the summary and can break
|
|
894
|
+
* eventual consistency. For example, the next summary (say at ref seq# 100) may contain these changes whereas
|
|
895
|
+
* other clients that are up-to-date till seq# 100 may not have them yet.
|
|
896
|
+
*/
|
|
897
|
+
protected identifyLocalChangeInSummarizer(eventName: string, type?: string) {
|
|
898
|
+
if (
|
|
899
|
+
this.clientDetails.type !== summarizerClientType ||
|
|
900
|
+
this.localChangesTelemetryCount <= 0
|
|
901
|
+
) {
|
|
902
|
+
return;
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
// Log a telemetry if there are local changes in the summarizer. This will give us data on how often
|
|
906
|
+
// this is happening and which data stores do this. The eventual goal is to disallow local changes
|
|
907
|
+
// in the summarizer and the data will help us plan this.
|
|
908
|
+
this.mc.logger.sendTelemetryEvent({
|
|
909
|
+
eventName,
|
|
910
|
+
type,
|
|
911
|
+
fluidDataStoreId: {
|
|
912
|
+
value: this.id,
|
|
913
|
+
tag: TelemetryDataTag.CodeArtifact,
|
|
914
|
+
},
|
|
915
|
+
packageName: packagePathToTelemetryProperty(this.pkg),
|
|
916
|
+
isSummaryInProgress: this.summarizerNode.isSummaryInProgress?.(),
|
|
917
|
+
stack: generateStack(),
|
|
918
|
+
});
|
|
919
|
+
this.localChangesTelemetryCount--;
|
|
920
|
+
}
|
|
921
|
+
|
|
840
922
|
public getCreateChildSummarizerNodeFn(id: string, createParam: CreateChildSummarizerNodeParam) {
|
|
841
923
|
return (
|
|
842
924
|
summarizeInternal: SummarizeInternalFn,
|
|
843
925
|
getGCDataFn: (fullGC?: boolean) => Promise<IGarbageCollectionData>,
|
|
844
|
-
getBaseGCDetailsFn?: () => Promise<IGarbageCollectionDetailsBase>,
|
|
845
926
|
) =>
|
|
846
927
|
this.summarizerNode.createChild(
|
|
847
928
|
summarizeInternal,
|
|
@@ -850,7 +931,6 @@ export abstract class FluidDataStoreContext
|
|
|
850
931
|
// DDS will not create failure summaries
|
|
851
932
|
{ throwOnFailure: true },
|
|
852
933
|
getGCDataFn,
|
|
853
|
-
getBaseGCDetailsFn,
|
|
854
934
|
);
|
|
855
935
|
}
|
|
856
936
|
|
|
@@ -861,17 +941,13 @@ export abstract class FluidDataStoreContext
|
|
|
861
941
|
|
|
862
942
|
export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
863
943
|
private readonly initSnapshotValue: ISnapshotTree | undefined;
|
|
864
|
-
private readonly baseGCDetailsP: Promise<IGarbageCollectionDetailsBase>;
|
|
865
944
|
|
|
866
945
|
constructor(props: IRemoteFluidDataStoreContextProps) {
|
|
867
|
-
super(props, true /* existing */,
|
|
946
|
+
super(props, true /* existing */, false /* isLocalDataStore */, () => {
|
|
868
947
|
throw new Error("Already attached");
|
|
869
948
|
});
|
|
870
949
|
|
|
871
950
|
this.initSnapshotValue = props.snapshotTree;
|
|
872
|
-
this.baseGCDetailsP = new LazyPromise<IGarbageCollectionDetailsBase>(async () => {
|
|
873
|
-
return (await props.getBaseGCDetails()) ?? {};
|
|
874
|
-
});
|
|
875
951
|
|
|
876
952
|
if (props.snapshotTree !== undefined) {
|
|
877
953
|
this.summarizerNode.updateBaseSummaryState(props.snapshotTree);
|
|
@@ -931,10 +1007,6 @@ export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
|
931
1007
|
return this.initialSnapshotDetailsP;
|
|
932
1008
|
}
|
|
933
1009
|
|
|
934
|
-
public async getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase> {
|
|
935
|
-
return this.baseGCDetailsP;
|
|
936
|
-
}
|
|
937
|
-
|
|
938
1010
|
public generateAttachMessage(): IAttachMessage {
|
|
939
1011
|
throw new Error("Cannot attach remote store");
|
|
940
1012
|
}
|
|
@@ -954,11 +1026,13 @@ export class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
|
954
1026
|
super(
|
|
955
1027
|
props,
|
|
956
1028
|
props.snapshotTree !== undefined ? true : false /* existing */,
|
|
957
|
-
props.snapshotTree ? BindState.Bound : BindState.NotBound,
|
|
958
1029
|
true /* isLocalDataStore */,
|
|
959
1030
|
props.makeLocallyVisibleFn,
|
|
960
1031
|
);
|
|
961
1032
|
|
|
1033
|
+
// Summarizer client should not create local data stores.
|
|
1034
|
+
this.identifyLocalChangeInSummarizer("DataStoreCreatedInSummarizer");
|
|
1035
|
+
|
|
962
1036
|
this.snapshotTree = props.snapshotTree;
|
|
963
1037
|
if (props.isRootDataStore === true) {
|
|
964
1038
|
this.setInMemoryRoot();
|
|
@@ -1050,9 +1124,26 @@ export class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
|
1050
1124
|
};
|
|
1051
1125
|
}
|
|
1052
1126
|
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1127
|
+
/**
|
|
1128
|
+
* A context should only be marked as deleted when its a remote context.
|
|
1129
|
+
* Session Expiry at the runtime level should have closed the container creating the local data store context
|
|
1130
|
+
* before delete is even possible. Session Expiry is at 30 days, and sweep is done 36+ days later from the time
|
|
1131
|
+
* it was unreferenced. Thus the sweeping container should have loaded from a snapshot and thus creating a remote
|
|
1132
|
+
* context.
|
|
1133
|
+
*/
|
|
1134
|
+
public delete() {
|
|
1135
|
+
// TODO: GC:Validation - potentially prevent this from happening or asserting. Maybe throw here.
|
|
1136
|
+
sendGCUnexpectedUsageEvent(
|
|
1137
|
+
this.mc,
|
|
1138
|
+
{
|
|
1139
|
+
eventName: "GC_Deleted_DataStore_Unexpected_Delete",
|
|
1140
|
+
message: "Unexpected deletion of a local data store context",
|
|
1141
|
+
category: "error",
|
|
1142
|
+
gcTombstoneEnforcementAllowed: undefined,
|
|
1143
|
+
},
|
|
1144
|
+
this.pkg,
|
|
1145
|
+
);
|
|
1146
|
+
super.delete();
|
|
1056
1147
|
}
|
|
1057
1148
|
}
|
|
1058
1149
|
|