@fluidframework/container-runtime 2.0.0-dev.3.1.0.125672 → 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/dist/blobManager.d.ts +24 -11
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +112 -55
- package/dist/blobManager.js.map +1 -1
- package/dist/containerRuntime.d.ts +60 -75
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +295 -256
- 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 +1 -1
- package/dist/opLifecycle/index.d.ts.map +1 -1
- package/dist/opLifecycle/index.js +2 -1
- package/dist/opLifecycle/index.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts.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 +42 -4
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts +15 -3
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +35 -10
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +19 -3
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +88 -49
- package/dist/opLifecycle/outbox.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 +46 -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 +19 -18
- package/dist/summary/runningSummarizer.d.ts.map +1 -0
- package/dist/{runningSummarizer.js → summary/runningSummarizer.js} +158 -56
- 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} +9 -74
- 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/{lib → dist/summary}/summarizerHeuristics.d.ts +1 -1
- package/dist/summary/summarizerHeuristics.d.ts.map +1 -0
- package/dist/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +3 -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 +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 +7 -17
- 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/dist/summary/summaryGenerator.d.ts.map +1 -0
- package/dist/{summaryGenerator.js → summary/summaryGenerator.js} +4 -4
- 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 +24 -11
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +109 -52
- package/lib/blobManager.js.map +1 -1
- package/lib/containerRuntime.d.ts +60 -75
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +267 -228
- 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 +1 -1
- package/lib/opLifecycle/index.d.ts.map +1 -1
- package/lib/opLifecycle/index.js +1 -1
- package/lib/opLifecycle/index.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts.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 +42 -4
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts +15 -3
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +35 -10
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +19 -3
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +90 -51
- package/lib/opLifecycle/outbox.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 +15 -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 +19 -18
- package/lib/summary/runningSummarizer.d.ts.map +1 -0
- package/lib/{runningSummarizer.js → summary/runningSummarizer.js} +159 -57
- 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} +11 -76
- 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/{dist → lib/summary}/summarizerHeuristics.d.ts +1 -1
- package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
- package/lib/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +3 -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 +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 +7 -17
- package/lib/summary/summarizerTypes.d.ts.map +1 -0
- package/lib/summary/summarizerTypes.js +6 -0
- package/{dist → lib/summary}/summarizerTypes.js.map +1 -1
- 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/lib/summary/summaryGenerator.d.ts.map +1 -0
- package/lib/{summaryGenerator.js → summary/summaryGenerator.js} +4 -4
- 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 +63 -60
- package/src/blobManager.ts +132 -69
- package/src/containerRuntime.ts +421 -382
- 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 +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/{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 +157 -0
- package/src/opLifecycle/batchManager.ts +26 -55
- package/src/opLifecycle/definitions.ts +4 -0
- package/src/opLifecycle/index.ts +1 -1
- package/src/opLifecycle/opCompressor.ts +32 -12
- package/src/opLifecycle/opDecompressor.ts +49 -5
- package/src/opLifecycle/opSplitter.ts +55 -12
- package/src/opLifecycle/outbox.ts +120 -60
- 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} +279 -139
- package/src/{summarizer.ts → summary/summarizer.ts} +12 -97
- package/src/{summarizerHeuristics.ts → summary/summarizerHeuristics.ts} +9 -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} +8 -22
- package/src/{summaryFormat.ts → summary/summaryFormat.ts} +3 -29
- package/src/{summaryGenerator.ts → summary/summaryGenerator.ts} +12 -11
- 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/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/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +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/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +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
|
@@ -9,7 +9,8 @@ import { Deferred, TypedEventEmitter } from "@fluidframework/common-utils";
|
|
|
9
9
|
import { IDocumentStorageService } from "@fluidframework/driver-definitions";
|
|
10
10
|
import { IClientDetails, IDocumentMessage, IQuorumClients, ISequencedDocumentMessage, ISnapshotTree, ITreeEntry } from "@fluidframework/protocol-definitions";
|
|
11
11
|
import { IContainerRuntime } from "@fluidframework/container-runtime-definitions";
|
|
12
|
-
import {
|
|
12
|
+
import { CreateChildSummarizerNodeFn, CreateChildSummarizerNodeParam, IAttachMessage, IFluidDataStoreChannel, IFluidDataStoreContext, IFluidDataStoreContextDetached, IFluidDataStoreContextEvents, IFluidDataStoreRegistry, IGarbageCollectionData, IGarbageCollectionDetailsBase, IInboundSignalMessage, IProvideFluidDataStoreFactory, ISummarizeResult, ISummarizerNodeWithGC, SummarizeInternalFn, ITelemetryContext } from "@fluidframework/runtime-definitions";
|
|
13
|
+
import { MonitoringContext } from "@fluidframework/telemetry-utils";
|
|
13
14
|
import { ContainerRuntime } from "./containerRuntime";
|
|
14
15
|
export declare function createAttributesBlob(pkg: readonly string[], isRootDataStore: boolean): ITreeEntry;
|
|
15
16
|
interface ISnapshotDetails {
|
|
@@ -40,14 +41,12 @@ export interface ILocalFluidDataStoreContextProps extends IFluidDataStoreContext
|
|
|
40
41
|
/** Properties necessary for creating a remote FluidDataStoreContext */
|
|
41
42
|
export interface IRemoteFluidDataStoreContextProps extends IFluidDataStoreContextProps {
|
|
42
43
|
readonly snapshotTree: ISnapshotTree | undefined;
|
|
43
|
-
readonly getBaseGCDetails: () => Promise<IGarbageCollectionDetailsBase | undefined>;
|
|
44
44
|
}
|
|
45
45
|
/**
|
|
46
46
|
* Represents the context for the store. This context is passed to the store runtime.
|
|
47
47
|
*/
|
|
48
48
|
export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IFluidDataStoreContextEvents> implements IFluidDataStoreContext, IDisposable {
|
|
49
49
|
private readonly existing;
|
|
50
|
-
private bindState;
|
|
51
50
|
readonly isLocalDataStore: boolean;
|
|
52
51
|
private readonly makeLocallyVisibleFn;
|
|
53
52
|
get packagePath(): readonly string[];
|
|
@@ -72,6 +71,8 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
|
|
|
72
71
|
get tombstoned(): boolean;
|
|
73
72
|
/** If true, throw an error when a tombstone data store is used. */
|
|
74
73
|
private readonly throwOnTombstoneUsage;
|
|
74
|
+
/** If true, this means that this data store context and its children have been removed from the runtime */
|
|
75
|
+
private deleted;
|
|
75
76
|
get attachState(): AttachState;
|
|
76
77
|
get IFluidDataStoreRegistry(): IFluidDataStoreRegistry | undefined;
|
|
77
78
|
/**
|
|
@@ -91,8 +92,6 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
|
|
|
91
92
|
protected isInMemoryRoot(): boolean;
|
|
92
93
|
protected registry: IFluidDataStoreRegistry | undefined;
|
|
93
94
|
protected detachedRuntimeCreation: boolean;
|
|
94
|
-
/** @deprecated - To be replaced by calling makeLocallyVisible directly */
|
|
95
|
-
readonly bindToContext: () => void;
|
|
96
95
|
protected channel: IFluidDataStoreChannel | undefined;
|
|
97
96
|
private loaded;
|
|
98
97
|
protected pending: ISequencedDocumentMessage[] | undefined;
|
|
@@ -101,18 +100,29 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
|
|
|
101
100
|
protected _attachState: AttachState;
|
|
102
101
|
private _isInMemoryRoot;
|
|
103
102
|
protected readonly summarizerNode: ISummarizerNodeWithGC;
|
|
104
|
-
|
|
103
|
+
protected readonly mc: MonitoringContext;
|
|
105
104
|
private readonly thresholdOpsCounter;
|
|
106
105
|
private static readonly pendingOpsCountThreshold;
|
|
106
|
+
/**
|
|
107
|
+
* If the summarizer makes local changes, a telemetry event is logged. This has the potential to be very noisy.
|
|
108
|
+
* So, adding a count of how many telemetry events are logged per data store context. This can be
|
|
109
|
+
* controlled via feature flags.
|
|
110
|
+
*/
|
|
111
|
+
private localChangesTelemetryCount;
|
|
107
112
|
private lastUsedRoutes;
|
|
108
113
|
readonly id: string;
|
|
109
114
|
private readonly _containerRuntime;
|
|
110
115
|
readonly storage: IDocumentStorageService;
|
|
111
116
|
readonly scope: FluidObject;
|
|
112
117
|
protected pkg?: readonly string[];
|
|
113
|
-
constructor(props: IFluidDataStoreContextProps, existing: boolean,
|
|
114
|
-
isLocalDataStore: boolean, makeLocallyVisibleFn: () => void);
|
|
118
|
+
constructor(props: IFluidDataStoreContextProps, existing: boolean, isLocalDataStore: boolean, makeLocallyVisibleFn: () => void);
|
|
115
119
|
dispose(): void;
|
|
120
|
+
/**
|
|
121
|
+
* When delete is called, that means that the data store is permanently removed from the runtime, and will not show up in future summaries
|
|
122
|
+
* This function is called to prevent ops from being generated from this data store once it has been deleted. Furthermore, this data store
|
|
123
|
+
* should not receive any ops/signals.
|
|
124
|
+
*/
|
|
125
|
+
delete(): void;
|
|
116
126
|
setTombstone(tombstone: boolean): void;
|
|
117
127
|
private rejectDeferredRealize;
|
|
118
128
|
realize(): Promise<IFluidDataStoreChannel>;
|
|
@@ -207,6 +217,8 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
|
|
|
207
217
|
* globally visible now.
|
|
208
218
|
*/
|
|
209
219
|
makeLocallyVisible(): void;
|
|
220
|
+
/** @deprecated - To be replaced by calling makeLocallyVisible directly */
|
|
221
|
+
bindToContext(): void;
|
|
210
222
|
protected bindRuntime(channel: IFluidDataStoreChannel): void;
|
|
211
223
|
getAbsoluteUrl(relativeUrl: string): Promise<string | undefined>;
|
|
212
224
|
abstract generateAttachMessage(): IAttachMessage;
|
|
@@ -217,21 +229,28 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
|
|
|
217
229
|
* It will be removed, as the source of truth for this flag will be the aliasing blob.
|
|
218
230
|
*/
|
|
219
231
|
setInMemoryRoot(): void;
|
|
220
|
-
|
|
232
|
+
/**
|
|
233
|
+
* @deprecated - The functionality to get base GC details has been moved to summarizer node.
|
|
234
|
+
*/
|
|
235
|
+
getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase>;
|
|
221
236
|
reSubmit(contents: any, localOpMetadata: unknown): void;
|
|
222
237
|
rollback(contents: any, localOpMetadata: unknown): void;
|
|
223
238
|
applyStashedOp(contents: any): Promise<unknown>;
|
|
224
239
|
private verifyNotClosed;
|
|
225
|
-
|
|
240
|
+
/**
|
|
241
|
+
* Summarizer client should not have local changes. These changes can become part of the summary and can break
|
|
242
|
+
* eventual consistency. For example, the next summary (say at ref seq# 100) may contain these changes whereas
|
|
243
|
+
* other clients that are up-to-date till seq# 100 may not have them yet.
|
|
244
|
+
*/
|
|
245
|
+
protected identifyLocalChangeInSummarizer(eventName: string, type?: string): void;
|
|
246
|
+
getCreateChildSummarizerNodeFn(id: string, createParam: CreateChildSummarizerNodeParam): (summarizeInternal: SummarizeInternalFn, getGCDataFn: (fullGC?: boolean | undefined) => Promise<IGarbageCollectionData>) => ISummarizerNodeWithGC;
|
|
226
247
|
uploadBlob(blob: ArrayBufferLike): Promise<IFluidHandle<ArrayBufferLike>>;
|
|
227
248
|
}
|
|
228
249
|
export declare class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
229
250
|
private readonly initSnapshotValue;
|
|
230
|
-
private readonly baseGCDetailsP;
|
|
231
251
|
constructor(props: IRemoteFluidDataStoreContextProps);
|
|
232
252
|
private readonly initialSnapshotDetailsP;
|
|
233
253
|
getInitialSnapshotDetails(): Promise<ISnapshotDetails>;
|
|
234
|
-
getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase>;
|
|
235
254
|
generateAttachMessage(): IAttachMessage;
|
|
236
255
|
}
|
|
237
256
|
/**
|
|
@@ -247,7 +266,14 @@ export declare class LocalFluidDataStoreContextBase extends FluidDataStoreContex
|
|
|
247
266
|
private attachListeners;
|
|
248
267
|
generateAttachMessage(): IAttachMessage;
|
|
249
268
|
getInitialSnapshotDetails(): Promise<ISnapshotDetails>;
|
|
250
|
-
|
|
269
|
+
/**
|
|
270
|
+
* A context should only be marked as deleted when its a remote context.
|
|
271
|
+
* Session Expiry at the runtime level should have closed the container creating the local data store context
|
|
272
|
+
* before delete is even possible. Session Expiry is at 30 days, and sweep is done 36+ days later from the time
|
|
273
|
+
* it was unreferenced. Thus the sweeping container should have loaded from a snapshot and thus creating a remote
|
|
274
|
+
* context.
|
|
275
|
+
*/
|
|
276
|
+
delete(): void;
|
|
251
277
|
}
|
|
252
278
|
/**
|
|
253
279
|
* context implementation for "attached" data store runtime.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataStoreContext.d.ts","sourceRoot":"","sources":["../src/dataStoreContext.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,WAAW,EACX,gBAAgB,EAEhB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACjG,OAAO,EACN,SAAS,EACT,aAAa,EACb,WAAW,EACX,cAAc,EACd,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAU,QAAQ,EAAe,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAChG,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAG7E,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,yBAAyB,EACzB,aAAa,EACb,UAAU,EACV,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,
|
|
1
|
+
{"version":3,"file":"dataStoreContext.d.ts","sourceRoot":"","sources":["../src/dataStoreContext.ts"],"names":[],"mappings":"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"}
|
package/dist/dataStoreContext.js
CHANGED
|
@@ -13,10 +13,8 @@ const runtime_definitions_1 = require("@fluidframework/runtime-definitions");
|
|
|
13
13
|
const runtime_utils_1 = require("@fluidframework/runtime-utils");
|
|
14
14
|
const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
|
|
15
15
|
const container_utils_1 = require("@fluidframework/container-utils");
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const garbageCollectionHelpers_1 = require("./garbageCollectionHelpers");
|
|
19
|
-
const summarizerClientElection_1 = require("./summarizerClientElection");
|
|
16
|
+
const summary_1 = require("./summary");
|
|
17
|
+
const gc_1 = require("./gc");
|
|
20
18
|
function createAttributes(pkg, isRootDataStore) {
|
|
21
19
|
const stringifiedPkg = JSON.stringify(pkg);
|
|
22
20
|
return {
|
|
@@ -27,18 +25,17 @@ function createAttributes(pkg, isRootDataStore) {
|
|
|
27
25
|
}
|
|
28
26
|
function createAttributesBlob(pkg, isRootDataStore) {
|
|
29
27
|
const attributes = createAttributes(pkg, isRootDataStore);
|
|
30
|
-
return new protocol_base_1.BlobTreeEntry(
|
|
28
|
+
return new protocol_base_1.BlobTreeEntry(summary_1.dataStoreAttributesBlobName, JSON.stringify(attributes));
|
|
31
29
|
}
|
|
32
30
|
exports.createAttributesBlob = createAttributesBlob;
|
|
33
31
|
/**
|
|
34
32
|
* Represents the context for the store. This context is passed to the store runtime.
|
|
35
33
|
*/
|
|
36
34
|
class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
37
|
-
constructor(props, existing,
|
|
38
|
-
|
|
35
|
+
constructor(props, existing, isLocalDataStore, makeLocallyVisibleFn) {
|
|
36
|
+
var _a;
|
|
39
37
|
super();
|
|
40
38
|
this.existing = existing;
|
|
41
|
-
this.bindState = bindState;
|
|
42
39
|
this.isLocalDataStore = isLocalDataStore;
|
|
43
40
|
this.makeLocallyVisibleFn = makeLocallyVisibleFn;
|
|
44
41
|
this._disposed = false;
|
|
@@ -47,6 +44,8 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
47
44
|
* loading.
|
|
48
45
|
*/
|
|
49
46
|
this._tombstoned = false;
|
|
47
|
+
/** If true, this means that this data store context and its children have been removed from the runtime */
|
|
48
|
+
this.deleted = false;
|
|
50
49
|
this.detachedRuntimeCreation = false;
|
|
51
50
|
this.loaded = false;
|
|
52
51
|
this.pending = [];
|
|
@@ -63,21 +62,18 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
63
62
|
this.containerRuntime.attachState !== container_definitions_1.AttachState.Detached && this.existing
|
|
64
63
|
? this.containerRuntime.attachState
|
|
65
64
|
: container_definitions_1.AttachState.Detached;
|
|
66
|
-
this.bindToContext = () => {
|
|
67
|
-
(0, common_utils_1.assert)(this.bindState === runtime_definitions_1.BindState.NotBound, 0x13b /* "datastore context is already in bound state" */);
|
|
68
|
-
this.bindState = runtime_definitions_1.BindState.Binding;
|
|
69
|
-
(0, common_utils_1.assert)(this.channel !== undefined, 0x13c /* "undefined channel on datastore context" */);
|
|
70
|
-
this.makeLocallyVisible();
|
|
71
|
-
this.bindState = runtime_definitions_1.BindState.Bound;
|
|
72
|
-
};
|
|
73
65
|
const thisSummarizeInternal = async (fullTree, trackState, telemetryContext) => this.summarizeInternal(fullTree, trackState, telemetryContext);
|
|
74
|
-
this.summarizerNode = props.createSummarizerNodeFn(thisSummarizeInternal, async (fullGC) => this.getGCDataInternal(fullGC)
|
|
66
|
+
this.summarizerNode = props.createSummarizerNodeFn(thisSummarizeInternal, async (fullGC) => this.getGCDataInternal(fullGC));
|
|
75
67
|
this.mc = (0, telemetry_utils_1.loggerToMonitoringContext)(telemetry_utils_1.ChildLogger.create(this.logger, "FluidDataStoreContext"));
|
|
76
68
|
this.thresholdOpsCounter = new telemetry_utils_1.ThresholdCounter(FluidDataStoreContext.pendingOpsCountThreshold, this.mc.logger);
|
|
77
69
|
// Tombstone should only throw when the feature flag is enabled and the client isn't a summarizer
|
|
78
70
|
this.throwOnTombstoneUsage =
|
|
79
|
-
this.mc.config.getBoolean(
|
|
80
|
-
this.
|
|
71
|
+
this.mc.config.getBoolean(gc_1.throwOnTombstoneUsageKey) === true &&
|
|
72
|
+
this._containerRuntime.gcTombstoneEnforcementAllowed &&
|
|
73
|
+
this.clientDetails.type !== summary_1.summarizerClientType;
|
|
74
|
+
// By default, a data store can log maximum 10 local changes telemetry in summarizer.
|
|
75
|
+
this.localChangesTelemetryCount =
|
|
76
|
+
(_a = this.mc.config.getNumber("Fluid.Telemetry.LocalChangesTelemetryCount")) !== null && _a !== void 0 ? _a : 10;
|
|
81
77
|
}
|
|
82
78
|
get packagePath() {
|
|
83
79
|
(0, common_utils_1.assert)(this.pkg !== undefined, 0x139 /* "Undefined package path" */);
|
|
@@ -162,15 +158,24 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
162
158
|
.catch((error) => { });
|
|
163
159
|
}
|
|
164
160
|
}
|
|
161
|
+
/**
|
|
162
|
+
* When delete is called, that means that the data store is permanently removed from the runtime, and will not show up in future summaries
|
|
163
|
+
* This function is called to prevent ops from being generated from this data store once it has been deleted. Furthermore, this data store
|
|
164
|
+
* should not receive any ops/signals.
|
|
165
|
+
*/
|
|
166
|
+
delete() {
|
|
167
|
+
this.deleted = true;
|
|
168
|
+
}
|
|
165
169
|
setTombstone(tombstone) {
|
|
166
170
|
if (this.tombstoned === tombstone) {
|
|
167
171
|
return;
|
|
168
172
|
}
|
|
169
173
|
this._tombstoned = tombstone;
|
|
170
174
|
}
|
|
171
|
-
rejectDeferredRealize(reason,
|
|
175
|
+
rejectDeferredRealize(reason, failedPkgPath, fullPackageName) {
|
|
172
176
|
throw new telemetry_utils_1.LoggingError(reason, {
|
|
173
|
-
|
|
177
|
+
failedPkgPath: { value: failedPkgPath, tag: telemetry_utils_1.TelemetryDataTag.CodeArtifact },
|
|
178
|
+
fullPackageName: (0, runtime_utils_1.packagePathToTelemetryProperty)(fullPackageName),
|
|
174
179
|
});
|
|
175
180
|
}
|
|
176
181
|
async realize() {
|
|
@@ -185,6 +190,7 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
185
190
|
value: this.id,
|
|
186
191
|
tag: telemetry_utils_1.TelemetryDataTag.CodeArtifact,
|
|
187
192
|
},
|
|
193
|
+
packageName: (0, runtime_utils_1.packagePathToTelemetryProperty)(this.pkg),
|
|
188
194
|
});
|
|
189
195
|
(_a = this.channelDeferred) === null || _a === void 0 ? void 0 : _a.reject(errorWrapped);
|
|
190
196
|
this.logger.sendErrorEvent({ eventName: "RealizeError" }, errorWrapped);
|
|
@@ -202,18 +208,18 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
202
208
|
let lastPkg;
|
|
203
209
|
for (const pkg of packages) {
|
|
204
210
|
if (!registry) {
|
|
205
|
-
this.rejectDeferredRealize("No registry for package", lastPkg);
|
|
211
|
+
this.rejectDeferredRealize("No registry for package", lastPkg, packages);
|
|
206
212
|
}
|
|
207
213
|
lastPkg = pkg;
|
|
208
214
|
entry = await registry.get(pkg);
|
|
209
215
|
if (!entry) {
|
|
210
|
-
this.rejectDeferredRealize("Registry does not contain entry for the package", pkg);
|
|
216
|
+
this.rejectDeferredRealize("Registry does not contain entry for the package", pkg, packages);
|
|
211
217
|
}
|
|
212
218
|
registry = entry.IFluidDataStoreRegistry;
|
|
213
219
|
}
|
|
214
220
|
const factory = entry === null || entry === void 0 ? void 0 : entry.IFluidDataStoreFactory;
|
|
215
221
|
if (factory === undefined) {
|
|
216
|
-
this.rejectDeferredRealize("Can't find factory for package", lastPkg);
|
|
222
|
+
this.rejectDeferredRealize("Can't find factory for package", lastPkg, packages);
|
|
217
223
|
}
|
|
218
224
|
return { factory, registry };
|
|
219
225
|
}
|
|
@@ -293,13 +299,13 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
293
299
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
294
300
|
const summarizeResult = await this.channel.summarize(fullTree, trackState, telemetryContext);
|
|
295
301
|
// Wrap dds summaries in .channels subtree.
|
|
296
|
-
(0,
|
|
302
|
+
(0, summary_1.wrapSummaryInChannelsTree)(summarizeResult);
|
|
297
303
|
const pathPartsForChildren = [runtime_definitions_1.channelsTreeName];
|
|
298
304
|
// Add data store's attributes to the summary.
|
|
299
305
|
const { pkg } = await this.getInitialSnapshotDetails();
|
|
300
306
|
const isRoot = await this.isRoot();
|
|
301
307
|
const attributes = createAttributes(pkg, isRoot);
|
|
302
|
-
(0, runtime_utils_1.addBlobToSummary)(summarizeResult,
|
|
308
|
+
(0, runtime_utils_1.addBlobToSummary)(summarizeResult, summary_1.dataStoreAttributesBlobName, JSON.stringify(attributes));
|
|
303
309
|
// If we are not referenced, mark the summary tree as unreferenced. Also, update unreferenced blob
|
|
304
310
|
// size in the summary stats with the blobs size of this data store.
|
|
305
311
|
if (!this.summarizerNode.isReferenced()) {
|
|
@@ -402,6 +408,8 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
402
408
|
content,
|
|
403
409
|
type,
|
|
404
410
|
};
|
|
411
|
+
// Summarizer clients should not submit messages.
|
|
412
|
+
this.identifyLocalChangeInSummarizer("DataStoreMessageSubmittedInSummarizer", type);
|
|
405
413
|
this._containerRuntime.submitDataStoreOp(this.id, fluidDataStoreContent, localOpMetadata);
|
|
406
414
|
}
|
|
407
415
|
/**
|
|
@@ -434,6 +442,11 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
434
442
|
*/
|
|
435
443
|
makeLocallyVisible() {
|
|
436
444
|
(0, common_utils_1.assert)(this.channel !== undefined, 0x2cf /* "undefined channel on datastore context" */);
|
|
445
|
+
(0, common_utils_1.assert)(this.channel.visibilityState === runtime_definitions_1.VisibilityState.LocallyVisible, 0x590 /* Channel must be locally visible */);
|
|
446
|
+
this.makeLocallyVisibleFn();
|
|
447
|
+
}
|
|
448
|
+
/** @deprecated - To be replaced by calling makeLocallyVisible directly */
|
|
449
|
+
bindToContext() {
|
|
437
450
|
this.makeLocallyVisibleFn();
|
|
438
451
|
}
|
|
439
452
|
bindRuntime(channel) {
|
|
@@ -495,6 +508,12 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
495
508
|
setInMemoryRoot() {
|
|
496
509
|
this._isInMemoryRoot = true;
|
|
497
510
|
}
|
|
511
|
+
/**
|
|
512
|
+
* @deprecated - The functionality to get base GC details has been moved to summarizer node.
|
|
513
|
+
*/
|
|
514
|
+
async getBaseGCDetails() {
|
|
515
|
+
return {};
|
|
516
|
+
}
|
|
498
517
|
reSubmit(contents, localOpMetadata) {
|
|
499
518
|
(0, common_utils_1.assert)(!!this.channel, 0x14b /* "Channel must exist when resubmitting ops" */);
|
|
500
519
|
const innerContents = contents;
|
|
@@ -519,16 +538,25 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
519
538
|
return this.channel.applyStashedOp(innerContents.content);
|
|
520
539
|
}
|
|
521
540
|
verifyNotClosed(callSite, checkTombstone = true, safeTelemetryProps = {}) {
|
|
541
|
+
if (this.deleted) {
|
|
542
|
+
const messageString = `Context is deleted! Call site [${callSite}]`;
|
|
543
|
+
const error = new container_utils_1.DataCorruptionError(messageString, safeTelemetryProps);
|
|
544
|
+
this.mc.logger.sendErrorEvent({
|
|
545
|
+
eventName: "GC_Deleted_DataStore_Changed",
|
|
546
|
+
callSite,
|
|
547
|
+
}, error);
|
|
548
|
+
throw error;
|
|
549
|
+
}
|
|
522
550
|
if (this._disposed) {
|
|
523
551
|
throw new Error(`Context is closed! Call site [${callSite}]`);
|
|
524
552
|
}
|
|
525
553
|
if (checkTombstone && this.tombstoned) {
|
|
526
554
|
const messageString = `Context is tombstoned! Call site [${callSite}]`;
|
|
527
555
|
const error = new container_utils_1.DataCorruptionError(messageString, safeTelemetryProps);
|
|
528
|
-
(0,
|
|
556
|
+
(0, gc_1.sendGCUnexpectedUsageEvent)(this.mc, {
|
|
529
557
|
eventName: "GC_Tombstone_DataStore_Changed",
|
|
530
558
|
category: this.throwOnTombstoneUsage ? "error" : "generic",
|
|
531
|
-
|
|
559
|
+
gcTombstoneEnforcementAllowed: this._containerRuntime.gcTombstoneEnforcementAllowed,
|
|
532
560
|
callSite,
|
|
533
561
|
}, this.pkg, error);
|
|
534
562
|
if (this.throwOnTombstoneUsage) {
|
|
@@ -536,10 +564,37 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
536
564
|
}
|
|
537
565
|
}
|
|
538
566
|
}
|
|
567
|
+
/**
|
|
568
|
+
* Summarizer client should not have local changes. These changes can become part of the summary and can break
|
|
569
|
+
* eventual consistency. For example, the next summary (say at ref seq# 100) may contain these changes whereas
|
|
570
|
+
* other clients that are up-to-date till seq# 100 may not have them yet.
|
|
571
|
+
*/
|
|
572
|
+
identifyLocalChangeInSummarizer(eventName, type) {
|
|
573
|
+
var _a, _b;
|
|
574
|
+
if (this.clientDetails.type !== summary_1.summarizerClientType ||
|
|
575
|
+
this.localChangesTelemetryCount <= 0) {
|
|
576
|
+
return;
|
|
577
|
+
}
|
|
578
|
+
// Log a telemetry if there are local changes in the summarizer. This will give us data on how often
|
|
579
|
+
// this is happening and which data stores do this. The eventual goal is to disallow local changes
|
|
580
|
+
// in the summarizer and the data will help us plan this.
|
|
581
|
+
this.mc.logger.sendTelemetryEvent({
|
|
582
|
+
eventName,
|
|
583
|
+
type,
|
|
584
|
+
fluidDataStoreId: {
|
|
585
|
+
value: this.id,
|
|
586
|
+
tag: telemetry_utils_1.TelemetryDataTag.CodeArtifact,
|
|
587
|
+
},
|
|
588
|
+
packageName: (0, runtime_utils_1.packagePathToTelemetryProperty)(this.pkg),
|
|
589
|
+
isSummaryInProgress: (_b = (_a = this.summarizerNode).isSummaryInProgress) === null || _b === void 0 ? void 0 : _b.call(_a),
|
|
590
|
+
stack: (0, telemetry_utils_1.generateStack)(),
|
|
591
|
+
});
|
|
592
|
+
this.localChangesTelemetryCount--;
|
|
593
|
+
}
|
|
539
594
|
getCreateChildSummarizerNodeFn(id, createParam) {
|
|
540
|
-
return (summarizeInternal, getGCDataFn
|
|
595
|
+
return (summarizeInternal, getGCDataFn) => this.summarizerNode.createChild(summarizeInternal, id, createParam,
|
|
541
596
|
// DDS will not create failure summaries
|
|
542
|
-
{ throwOnFailure: true }, getGCDataFn
|
|
597
|
+
{ throwOnFailure: true }, getGCDataFn);
|
|
543
598
|
}
|
|
544
599
|
async uploadBlob(blob) {
|
|
545
600
|
return this.containerRuntime.uploadBlob(blob);
|
|
@@ -549,20 +604,20 @@ exports.FluidDataStoreContext = FluidDataStoreContext;
|
|
|
549
604
|
FluidDataStoreContext.pendingOpsCountThreshold = 1000;
|
|
550
605
|
class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
551
606
|
constructor(props) {
|
|
552
|
-
super(props, true /* existing */,
|
|
607
|
+
super(props, true /* existing */, false /* isLocalDataStore */, () => {
|
|
553
608
|
throw new Error("Already attached");
|
|
554
609
|
});
|
|
555
610
|
this.initialSnapshotDetailsP = new common_utils_1.LazyPromise(async () => {
|
|
556
611
|
var _a;
|
|
557
612
|
let tree = this.initSnapshotValue;
|
|
558
613
|
let isRootDataStore = true;
|
|
559
|
-
if (!!tree && tree.blobs[
|
|
614
|
+
if (!!tree && tree.blobs[summary_1.dataStoreAttributesBlobName] !== undefined) {
|
|
560
615
|
// Need to get through snapshot and use that to populate extraBlobs
|
|
561
|
-
const attributes = await (0, driver_utils_1.readAndParse)(this.storage, tree.blobs[
|
|
616
|
+
const attributes = await (0, driver_utils_1.readAndParse)(this.storage, tree.blobs[summary_1.dataStoreAttributesBlobName]);
|
|
562
617
|
let pkgFromSnapshot;
|
|
563
618
|
// Use the snapshotFormatVersion to determine how the pkg is encoded in the snapshot.
|
|
564
619
|
// For snapshotFormatVersion = "0.1" (1) or above, pkg is jsonified, otherwise it is just a string.
|
|
565
|
-
const formatVersion = (0,
|
|
620
|
+
const formatVersion = (0, summary_1.getAttributesFormatVersion)(attributes);
|
|
566
621
|
if (formatVersion < 1) {
|
|
567
622
|
pkgFromSnapshot =
|
|
568
623
|
attributes.pkg.startsWith('["') && attributes.pkg.endsWith('"]')
|
|
@@ -579,7 +634,7 @@ class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
|
579
634
|
* roots in the document but they won't break.
|
|
580
635
|
*/
|
|
581
636
|
isRootDataStore = (_a = attributes.isRootDataStore) !== null && _a !== void 0 ? _a : true;
|
|
582
|
-
if ((0,
|
|
637
|
+
if ((0, summary_1.hasIsolatedChannels)(attributes)) {
|
|
583
638
|
tree = tree.trees[runtime_definitions_1.channelsTreeName];
|
|
584
639
|
(0, common_utils_1.assert)(tree !== undefined, 0x1fe /* "isolated channels subtree should exist in remote datastore snapshot" */);
|
|
585
640
|
}
|
|
@@ -592,10 +647,6 @@ class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
|
592
647
|
};
|
|
593
648
|
});
|
|
594
649
|
this.initSnapshotValue = props.snapshotTree;
|
|
595
|
-
this.baseGCDetailsP = new common_utils_1.LazyPromise(async () => {
|
|
596
|
-
var _a;
|
|
597
|
-
return (_a = (await props.getBaseGCDetails())) !== null && _a !== void 0 ? _a : {};
|
|
598
|
-
});
|
|
599
650
|
if (props.snapshotTree !== undefined) {
|
|
600
651
|
this.summarizerNode.updateBaseSummaryState(props.snapshotTree);
|
|
601
652
|
}
|
|
@@ -603,9 +654,6 @@ class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
|
603
654
|
async getInitialSnapshotDetails() {
|
|
604
655
|
return this.initialSnapshotDetailsP;
|
|
605
656
|
}
|
|
606
|
-
async getBaseGCDetails() {
|
|
607
|
-
return this.baseGCDetailsP;
|
|
608
|
-
}
|
|
609
657
|
generateAttachMessage() {
|
|
610
658
|
throw new Error("Cannot attach remote store");
|
|
611
659
|
}
|
|
@@ -616,7 +664,9 @@ exports.RemoteFluidDataStoreContext = RemoteFluidDataStoreContext;
|
|
|
616
664
|
*/
|
|
617
665
|
class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
618
666
|
constructor(props) {
|
|
619
|
-
super(props, props.snapshotTree !== undefined ? true : false /* existing */,
|
|
667
|
+
super(props, props.snapshotTree !== undefined ? true : false /* existing */, true /* isLocalDataStore */, props.makeLocallyVisibleFn);
|
|
668
|
+
// Summarizer client should not create local data stores.
|
|
669
|
+
this.identifyLocalChangeInSummarizer("DataStoreCreatedInSummarizer");
|
|
620
670
|
this.snapshotTree = props.snapshotTree;
|
|
621
671
|
if (props.isRootDataStore === true) {
|
|
622
672
|
this.setInMemoryRoot();
|
|
@@ -639,10 +689,10 @@ class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
|
639
689
|
(0, common_utils_1.assert)(this.pkg !== undefined, 0x150 /* "pkg should be available in local data store context" */);
|
|
640
690
|
const summarizeResult = this.channel.getAttachSummary();
|
|
641
691
|
// Wrap dds summaries in .channels subtree.
|
|
642
|
-
(0,
|
|
692
|
+
(0, summary_1.wrapSummaryInChannelsTree)(summarizeResult);
|
|
643
693
|
// Add data store's attributes to the summary.
|
|
644
694
|
const attributes = createAttributes(this.pkg, this.isInMemoryRoot());
|
|
645
|
-
(0, runtime_utils_1.addBlobToSummary)(summarizeResult,
|
|
695
|
+
(0, runtime_utils_1.addBlobToSummary)(summarizeResult, summary_1.dataStoreAttributesBlobName, JSON.stringify(attributes));
|
|
646
696
|
// Attach message needs the summary in ITree format. Convert the ISummaryTree into an ITree.
|
|
647
697
|
const snapshot = (0, runtime_utils_1.convertSummaryTreeToITree)(summarizeResult.summary);
|
|
648
698
|
const message = {
|
|
@@ -660,8 +710,8 @@ class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
|
660
710
|
if (snapshot !== undefined) {
|
|
661
711
|
// Get the dataStore attributes.
|
|
662
712
|
// Note: storage can be undefined in special case while detached.
|
|
663
|
-
attributes = await (0,
|
|
664
|
-
if ((0,
|
|
713
|
+
attributes = await (0, summary_1.getFluidDataStoreAttributes)(this.storage, snapshot);
|
|
714
|
+
if ((0, summary_1.hasIsolatedChannels)(attributes)) {
|
|
665
715
|
snapshot = snapshot.trees[runtime_definitions_1.channelsTreeName];
|
|
666
716
|
(0, common_utils_1.assert)(snapshot !== undefined, 0x1ff /* "isolated channels subtree should exist in local datastore snapshot" */);
|
|
667
717
|
}
|
|
@@ -683,9 +733,22 @@ class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
|
683
733
|
snapshot,
|
|
684
734
|
};
|
|
685
735
|
}
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
736
|
+
/**
|
|
737
|
+
* A context should only be marked as deleted when its a remote context.
|
|
738
|
+
* Session Expiry at the runtime level should have closed the container creating the local data store context
|
|
739
|
+
* before delete is even possible. Session Expiry is at 30 days, and sweep is done 36+ days later from the time
|
|
740
|
+
* it was unreferenced. Thus the sweeping container should have loaded from a snapshot and thus creating a remote
|
|
741
|
+
* context.
|
|
742
|
+
*/
|
|
743
|
+
delete() {
|
|
744
|
+
// TODO: GC:Validation - potentially prevent this from happening or asserting. Maybe throw here.
|
|
745
|
+
(0, gc_1.sendGCUnexpectedUsageEvent)(this.mc, {
|
|
746
|
+
eventName: "GC_Deleted_DataStore_Unexpected_Delete",
|
|
747
|
+
message: "Unexpected deletion of a local data store context",
|
|
748
|
+
category: "error",
|
|
749
|
+
gcTombstoneEnforcementAllowed: undefined,
|
|
750
|
+
}, this.pkg);
|
|
751
|
+
super.delete();
|
|
689
752
|
}
|
|
690
753
|
}
|
|
691
754
|
exports.LocalFluidDataStoreContextBase = LocalFluidDataStoreContextBase;
|