@fluidframework/container-runtime 2.0.0-dev.2.3.0.115467 → 2.0.0-dev.4.1.0.148229
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +21 -10
- package/.mocharc.js +2 -2
- package/api-extractor.json +2 -2
- package/dist/batchTracker.d.ts +1 -2
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js +2 -1
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager.d.ts +74 -42
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +321 -152
- package/dist/blobManager.js.map +1 -1
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +11 -9
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerHandleContext.d.ts.map +1 -1
- package/dist/containerHandleContext.js +3 -1
- package/dist/containerHandleContext.js.map +1 -1
- package/dist/containerRuntime.d.ts +148 -114
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +534 -342
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.d.ts.map +1 -1
- package/dist/dataStore.js +11 -9
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +40 -13
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +146 -66
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js +7 -3
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/dataStoreRegistry.d.ts.map +1 -1
- package/dist/dataStoreRegistry.js +3 -1
- package/dist/dataStoreRegistry.js.map +1 -1
- package/dist/dataStores.d.ts +39 -12
- package/dist/dataStores.d.ts.map +1 -1
- package/dist/dataStores.js +164 -76
- package/dist/dataStores.js.map +1 -1
- package/dist/deltaManagerSummarizerProxy.d.ts +19 -0
- package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -0
- package/dist/deltaManagerSummarizerProxy.js +40 -0
- package/dist/deltaManagerSummarizerProxy.js.map +1 -0
- package/dist/deltaScheduler.d.ts.map +1 -1
- package/dist/deltaScheduler.js +8 -3
- package/dist/deltaScheduler.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts +204 -0
- package/dist/gc/garbageCollection.d.ts.map +1 -0
- package/dist/gc/garbageCollection.js +926 -0
- package/dist/gc/garbageCollection.js.map +1 -0
- package/dist/gc/gcConfigs.d.ts +22 -0
- package/dist/gc/gcConfigs.d.ts.map +1 -0
- package/dist/gc/gcConfigs.js +143 -0
- package/dist/gc/gcConfigs.js.map +1 -0
- package/dist/gc/gcDefinitions.d.ts +320 -0
- package/dist/gc/gcDefinitions.d.ts.map +1 -0
- package/dist/gc/gcDefinitions.js +81 -0
- package/dist/gc/gcDefinitions.js.map +1 -0
- package/dist/gc/gcHelpers.d.ts +86 -0
- package/dist/gc/gcHelpers.d.ts.map +1 -0
- package/dist/gc/gcHelpers.js +268 -0
- package/dist/gc/gcHelpers.js.map +1 -0
- package/dist/gc/gcReferenceGraphAlgorithm.d.ts +16 -0
- package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
- package/dist/gc/gcReferenceGraphAlgorithm.js +49 -0
- package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -0
- package/dist/gc/gcSummaryDefinitions.d.ts +52 -0
- package/dist/gc/gcSummaryDefinitions.d.ts.map +1 -0
- package/dist/gc/gcSummaryDefinitions.js +7 -0
- package/dist/gc/gcSummaryDefinitions.js.map +1 -0
- package/dist/gc/gcSummaryStateTracker.d.ts +93 -0
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -0
- package/dist/gc/gcSummaryStateTracker.js +239 -0
- package/dist/gc/gcSummaryStateTracker.js.map +1 -0
- package/{lib → dist/gc}/gcSweepReadyUsageDetection.d.ts +5 -5
- package/dist/gc/gcSweepReadyUsageDetection.d.ts.map +1 -0
- package/dist/{gcSweepReadyUsageDetection.js → gc/gcSweepReadyUsageDetection.js} +15 -11
- package/dist/gc/gcSweepReadyUsageDetection.js.map +1 -0
- package/dist/gc/gcUnreferencedStateTracker.d.ts +34 -0
- package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
- package/dist/gc/gcUnreferencedStateTracker.js +94 -0
- package/dist/gc/gcUnreferencedStateTracker.js.map +1 -0
- package/dist/gc/index.d.ts +13 -0
- package/dist/gc/index.d.ts.map +1 -0
- package/dist/gc/index.js +50 -0
- package/dist/gc/index.js.map +1 -0
- package/dist/index.d.ts +3 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -13
- package/dist/index.js.map +1 -1
- package/dist/opLifecycle/batchManager.d.ts +10 -0
- package/dist/opLifecycle/batchManager.d.ts.map +1 -1
- package/dist/opLifecycle/batchManager.js +37 -8
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/definitions.d.ts +29 -1
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -1
- package/dist/opLifecycle/index.d.ts +3 -3
- package/dist/opLifecycle/index.d.ts.map +1 -1
- package/dist/opLifecycle/index.js +3 -1
- package/dist/opLifecycle/index.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts +1 -1
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +46 -17
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts +6 -1
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +72 -18
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts +46 -2
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +142 -5
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +23 -2
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +101 -51
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js +17 -2
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/dist/opProperties.d.ts.map +1 -1
- package/dist/opProperties.js +1 -3
- package/dist/opProperties.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/pendingStateManager.d.ts +6 -15
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +137 -165
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/scheduleManager.d.ts +0 -1
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js +11 -21
- package/dist/scheduleManager.js.map +1 -1
- package/dist/storageServiceWithAttachBlobs.d.ts +17 -0
- package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -0
- package/dist/storageServiceWithAttachBlobs.js +32 -0
- package/dist/storageServiceWithAttachBlobs.js.map +1 -0
- package/dist/summary/index.d.ts +17 -0
- package/dist/summary/index.d.ts.map +1 -0
- package/dist/summary/index.js +46 -0
- package/dist/summary/index.js.map +1 -0
- package/dist/summary/orderedClientElection.d.ts.map +1 -0
- package/dist/{orderedClientElection.js → summary/orderedClientElection.js} +10 -4
- package/dist/summary/orderedClientElection.js.map +1 -0
- package/{lib → dist/summary}/runWhileConnectedCoordinator.d.ts +3 -2
- package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
- package/dist/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.js} +5 -4
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -0
- package/{lib → dist/summary}/runningSummarizer.d.ts +19 -18
- package/dist/summary/runningSummarizer.d.ts.map +1 -0
- package/dist/{runningSummarizer.js → summary/runningSummarizer.js} +191 -77
- package/dist/summary/runningSummarizer.js.map +1 -0
- package/dist/{summarizer.d.ts → summary/summarizer.d.ts} +6 -12
- package/dist/summary/summarizer.d.ts.map +1 -0
- package/dist/{summarizer.js → summary/summarizer.js} +32 -76
- package/dist/summary/summarizer.js.map +1 -0
- package/dist/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +1 -2
- package/dist/summary/summarizerClientElection.d.ts.map +1 -0
- package/dist/{summarizerClientElection.js → summary/summarizerClientElection.js} +3 -30
- package/dist/summary/summarizerClientElection.js.map +1 -0
- package/dist/{summarizerHeuristics.d.ts → summary/summarizerHeuristics.d.ts} +1 -1
- package/dist/summary/summarizerHeuristics.d.ts.map +1 -0
- package/dist/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +9 -12
- package/dist/summary/summarizerHeuristics.js.map +1 -0
- package/dist/summary/summarizerNode/index.d.ts +8 -0
- package/dist/summary/summarizerNode/index.d.ts.map +1 -0
- package/dist/summary/summarizerNode/index.js +12 -0
- package/dist/summary/summarizerNode/index.js.map +1 -0
- package/dist/summary/summarizerNode/summarizerNode.d.ts +149 -0
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
- package/dist/summary/summarizerNode/summarizerNode.js +531 -0
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +125 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.js +132 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +22 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +423 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
- package/{lib → dist/summary}/summarizerTypes.d.ts +29 -42
- package/dist/summary/summarizerTypes.d.ts.map +1 -0
- package/dist/{summarizerTypes.js → summary/summarizerTypes.js} +0 -5
- package/dist/summary/summarizerTypes.js.map +1 -0
- package/dist/summary/summaryCollection.d.ts.map +1 -0
- package/dist/{summaryCollection.js → summary/summaryCollection.js} +18 -8
- package/dist/summary/summaryCollection.js.map +1 -0
- package/{lib → dist/summary}/summaryFormat.d.ts +3 -21
- package/dist/summary/summaryFormat.d.ts.map +1 -0
- package/dist/{summaryFormat.js → summary/summaryFormat.js} +19 -21
- package/dist/summary/summaryFormat.js.map +1 -0
- package/dist/summary/summaryGenerator.d.ts.map +1 -0
- package/dist/{summaryGenerator.js → summary/summaryGenerator.js} +34 -16
- package/dist/summary/summaryGenerator.js.map +1 -0
- package/dist/{summaryManager.d.ts → summary/summaryManager.d.ts} +1 -1
- package/dist/summary/summaryManager.d.ts.map +1 -0
- package/dist/{summaryManager.js → summary/summaryManager.js} +21 -9
- package/dist/summary/summaryManager.js.map +1 -0
- package/dist/throttler.d.ts +2 -2
- package/dist/throttler.d.ts.map +1 -1
- package/dist/throttler.js +4 -4
- package/dist/throttler.js.map +1 -1
- package/lib/batchTracker.d.ts +1 -2
- package/lib/batchTracker.d.ts.map +1 -1
- package/lib/batchTracker.js +2 -1
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager.d.ts +74 -42
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +322 -153
- package/lib/blobManager.js.map +1 -1
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +11 -9
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerHandleContext.d.ts.map +1 -1
- package/lib/containerHandleContext.js +3 -1
- package/lib/containerHandleContext.js.map +1 -1
- package/lib/containerRuntime.d.ts +148 -114
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +506 -314
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStore.d.ts.map +1 -1
- package/lib/dataStore.js +11 -9
- package/lib/dataStore.js.map +1 -1
- package/lib/dataStoreContext.d.ts +40 -13
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +136 -56
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.d.ts.map +1 -1
- package/lib/dataStoreContexts.js +7 -3
- package/lib/dataStoreContexts.js.map +1 -1
- package/lib/dataStoreRegistry.d.ts.map +1 -1
- package/lib/dataStoreRegistry.js +3 -1
- package/lib/dataStoreRegistry.js.map +1 -1
- package/lib/dataStores.d.ts +39 -12
- package/lib/dataStores.d.ts.map +1 -1
- package/lib/dataStores.js +162 -74
- package/lib/dataStores.js.map +1 -1
- package/lib/deltaManagerSummarizerProxy.d.ts +19 -0
- package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -0
- package/lib/deltaManagerSummarizerProxy.js +36 -0
- package/lib/deltaManagerSummarizerProxy.js.map +1 -0
- package/lib/deltaScheduler.d.ts.map +1 -1
- package/lib/deltaScheduler.js +9 -4
- package/lib/deltaScheduler.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts +204 -0
- package/lib/gc/garbageCollection.d.ts.map +1 -0
- package/lib/gc/garbageCollection.js +922 -0
- package/lib/gc/garbageCollection.js.map +1 -0
- package/lib/gc/gcConfigs.d.ts +22 -0
- package/lib/gc/gcConfigs.d.ts.map +1 -0
- package/lib/gc/gcConfigs.js +139 -0
- package/lib/gc/gcConfigs.js.map +1 -0
- package/lib/gc/gcDefinitions.d.ts +320 -0
- package/lib/gc/gcDefinitions.d.ts.map +1 -0
- package/lib/gc/gcDefinitions.js +78 -0
- package/lib/gc/gcDefinitions.js.map +1 -0
- package/lib/gc/gcHelpers.d.ts +86 -0
- package/lib/gc/gcHelpers.d.ts.map +1 -0
- package/lib/gc/gcHelpers.js +254 -0
- package/lib/gc/gcHelpers.js.map +1 -0
- package/lib/gc/gcReferenceGraphAlgorithm.d.ts +16 -0
- package/lib/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
- package/lib/gc/gcReferenceGraphAlgorithm.js +45 -0
- package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -0
- package/lib/gc/gcSummaryDefinitions.d.ts +52 -0
- package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -0
- package/lib/gc/gcSummaryDefinitions.js +6 -0
- package/lib/gc/gcSummaryDefinitions.js.map +1 -0
- package/lib/gc/gcSummaryStateTracker.d.ts +93 -0
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
- package/lib/gc/gcSummaryStateTracker.js +235 -0
- package/lib/gc/gcSummaryStateTracker.js.map +1 -0
- package/{dist → lib/gc}/gcSweepReadyUsageDetection.d.ts +5 -5
- package/lib/gc/gcSweepReadyUsageDetection.d.ts.map +1 -0
- package/lib/{gcSweepReadyUsageDetection.js → gc/gcSweepReadyUsageDetection.js} +15 -11
- package/lib/gc/gcSweepReadyUsageDetection.js.map +1 -0
- package/lib/gc/gcUnreferencedStateTracker.d.ts +34 -0
- package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
- package/lib/gc/gcUnreferencedStateTracker.js +90 -0
- package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
- package/lib/gc/index.d.ts +13 -0
- package/lib/gc/index.d.ts.map +1 -0
- package/lib/gc/index.js +12 -0
- package/lib/gc/index.js.map +1 -0
- package/lib/index.d.ts +3 -8
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -6
- package/lib/index.js.map +1 -1
- package/lib/opLifecycle/batchManager.d.ts +10 -0
- package/lib/opLifecycle/batchManager.d.ts.map +1 -1
- package/lib/opLifecycle/batchManager.js +35 -7
- package/lib/opLifecycle/batchManager.js.map +1 -1
- package/lib/opLifecycle/definitions.d.ts +29 -1
- package/lib/opLifecycle/definitions.d.ts.map +1 -1
- package/lib/opLifecycle/definitions.js.map +1 -1
- package/lib/opLifecycle/index.d.ts +3 -3
- package/lib/opLifecycle/index.d.ts.map +1 -1
- package/lib/opLifecycle/index.js +2 -2
- package/lib/opLifecycle/index.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts +1 -1
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js +47 -18
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts +6 -1
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +72 -18
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts +46 -2
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +141 -5
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +23 -2
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +103 -53
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.js +17 -2
- package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/lib/opProperties.d.ts.map +1 -1
- package/lib/opProperties.js +1 -3
- package/lib/opProperties.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/pendingStateManager.d.ts +6 -15
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +137 -165
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/scheduleManager.d.ts +0 -1
- package/lib/scheduleManager.d.ts.map +1 -1
- package/lib/scheduleManager.js +11 -21
- package/lib/scheduleManager.js.map +1 -1
- package/lib/storageServiceWithAttachBlobs.d.ts +17 -0
- package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -0
- package/lib/storageServiceWithAttachBlobs.js +28 -0
- package/lib/storageServiceWithAttachBlobs.js.map +1 -0
- package/lib/summary/index.d.ts +17 -0
- package/lib/summary/index.d.ts.map +1 -0
- package/lib/summary/index.js +15 -0
- package/lib/summary/index.js.map +1 -0
- package/lib/summary/orderedClientElection.d.ts.map +1 -0
- package/lib/{orderedClientElection.js → summary/orderedClientElection.js} +10 -4
- package/lib/summary/orderedClientElection.js.map +1 -0
- package/{dist → lib/summary}/runWhileConnectedCoordinator.d.ts +3 -2
- package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
- package/lib/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.js} +5 -4
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
- package/{dist → lib/summary}/runningSummarizer.d.ts +19 -18
- package/lib/summary/runningSummarizer.d.ts.map +1 -0
- package/lib/{runningSummarizer.js → summary/runningSummarizer.js} +193 -79
- package/lib/summary/runningSummarizer.js.map +1 -0
- package/lib/{summarizer.d.ts → summary/summarizer.d.ts} +6 -12
- package/lib/summary/summarizer.d.ts.map +1 -0
- package/lib/{summarizer.js → summary/summarizer.js} +34 -78
- package/lib/summary/summarizer.js.map +1 -0
- package/lib/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +1 -2
- package/lib/summary/summarizerClientElection.d.ts.map +1 -0
- package/lib/{summarizerClientElection.js → summary/summarizerClientElection.js} +3 -30
- package/lib/summary/summarizerClientElection.js.map +1 -0
- package/lib/{summarizerHeuristics.d.ts → summary/summarizerHeuristics.d.ts} +1 -1
- package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
- package/lib/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +9 -12
- package/lib/summary/summarizerHeuristics.js.map +1 -0
- package/lib/summary/summarizerNode/index.d.ts +8 -0
- package/lib/summary/summarizerNode/index.d.ts.map +1 -0
- package/lib/summary/summarizerNode/index.js +7 -0
- package/lib/summary/summarizerNode/index.js.map +1 -0
- package/lib/summary/summarizerNode/summarizerNode.d.ts +149 -0
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
- package/lib/summary/summarizerNode/summarizerNode.js +526 -0
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +125 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.js +125 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +22 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +419 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
- package/{dist → lib/summary}/summarizerTypes.d.ts +29 -42
- package/lib/summary/summarizerTypes.d.ts.map +1 -0
- package/lib/summary/summarizerTypes.js +6 -0
- package/lib/summary/summarizerTypes.js.map +1 -0
- package/lib/summary/summaryCollection.d.ts.map +1 -0
- package/lib/{summaryCollection.js → summary/summaryCollection.js} +18 -8
- package/lib/summary/summaryCollection.js.map +1 -0
- package/{dist → lib/summary}/summaryFormat.d.ts +3 -21
- package/lib/summary/summaryFormat.d.ts.map +1 -0
- package/lib/{summaryFormat.js → summary/summaryFormat.js} +20 -21
- package/lib/summary/summaryFormat.js.map +1 -0
- package/lib/summary/summaryGenerator.d.ts.map +1 -0
- package/lib/{summaryGenerator.js → summary/summaryGenerator.js} +34 -16
- package/lib/summary/summaryGenerator.js.map +1 -0
- package/lib/{summaryManager.d.ts → summary/summaryManager.d.ts} +1 -1
- package/lib/summary/summaryManager.d.ts.map +1 -0
- package/lib/{summaryManager.js → summary/summaryManager.js} +21 -9
- package/lib/summary/summaryManager.js.map +1 -0
- package/lib/throttler.d.ts +2 -2
- package/lib/throttler.d.ts.map +1 -1
- package/lib/throttler.js +4 -4
- package/lib/throttler.js.map +1 -1
- package/package.json +67 -61
- package/prettier.config.cjs +1 -1
- package/src/batchTracker.ts +55 -50
- package/src/blobManager.ts +863 -594
- package/src/connectionTelemetry.ts +280 -249
- package/src/containerHandleContext.ts +27 -29
- package/src/containerRuntime.ts +3174 -2805
- package/src/dataStore.ts +172 -159
- package/src/dataStoreContext.ts +1141 -993
- package/src/dataStoreContexts.ts +178 -161
- package/src/dataStoreRegistry.ts +25 -20
- package/src/dataStores.ts +887 -716
- package/src/deltaManagerSummarizerProxy.ts +46 -0
- package/src/deltaScheduler.ts +158 -150
- package/{garbageCollection.md → src/gc/garbageCollection.md} +16 -3
- package/src/gc/garbageCollection.ts +1250 -0
- package/src/gc/gcConfigs.ts +193 -0
- package/src/gc/gcDefinitions.ts +387 -0
- package/src/gc/gcHelpers.ts +332 -0
- package/src/gc/gcReferenceGraphAlgorithm.ts +52 -0
- package/src/gc/gcSummaryDefinitions.ts +54 -0
- package/src/gc/gcSummaryStateTracker.ts +329 -0
- package/src/gc/gcSweepReadyUsageDetection.ts +145 -0
- package/src/gc/gcUnreferencedStateTracker.ts +114 -0
- package/src/gc/index.ts +65 -0
- package/src/index.ts +61 -75
- package/src/opLifecycle/README.md +157 -0
- package/src/opLifecycle/batchManager.ts +119 -86
- package/src/opLifecycle/definitions.ts +49 -19
- package/src/opLifecycle/index.ts +7 -6
- package/src/opLifecycle/opCompressor.ts +78 -40
- package/src/opLifecycle/opDecompressor.ts +148 -64
- package/src/opLifecycle/opSplitter.ts +269 -66
- package/src/opLifecycle/outbox.ts +268 -184
- package/src/opLifecycle/remoteMessageProcessor.ts +63 -47
- package/src/opProperties.ts +11 -9
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +386 -381
- package/src/scheduleManager.ts +299 -280
- package/src/storageServiceWithAttachBlobs.ts +38 -0
- package/src/summary/index.ts +105 -0
- package/src/summary/orderedClientElection.ts +564 -0
- package/src/summary/runWhileConnectedCoordinator.ts +113 -0
- package/src/summary/runningSummarizer.ts +788 -0
- package/src/summary/summarizer.ts +372 -0
- package/src/summary/summarizerClientElection.ts +139 -0
- package/src/summary/summarizerHeuristics.ts +224 -0
- package/src/summary/summarizerNode/index.ts +12 -0
- package/src/summary/summarizerNode/summarizerNode.ts +766 -0
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +214 -0
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +644 -0
- package/src/summary/summarizerTypes.ts +507 -0
- package/src/summary/summaryCollection.ts +450 -0
- package/src/summary/summaryFormat.ts +228 -0
- package/src/summary/summaryGenerator.ts +505 -0
- package/src/summary/summaryManager.ts +423 -0
- package/src/throttler.ts +131 -122
- package/tsconfig.esnext.json +6 -6
- package/tsconfig.json +9 -13
- package/dist/garbageCollection.d.ts +0 -387
- package/dist/garbageCollection.d.ts.map +0 -1
- package/dist/garbageCollection.js +0 -1138
- package/dist/garbageCollection.js.map +0 -1
- package/dist/garbageCollectionConstants.d.ts +0 -19
- package/dist/garbageCollectionConstants.d.ts.map +0 -1
- package/dist/garbageCollectionConstants.js +0 -34
- package/dist/garbageCollectionConstants.js.map +0 -1
- package/dist/gcSweepReadyUsageDetection.d.ts.map +0 -1
- package/dist/gcSweepReadyUsageDetection.js.map +0 -1
- package/dist/orderedClientElection.d.ts.map +0 -1
- package/dist/orderedClientElection.js.map +0 -1
- package/dist/runWhileConnectedCoordinator.d.ts.map +0 -1
- package/dist/runWhileConnectedCoordinator.js.map +0 -1
- package/dist/runningSummarizer.d.ts.map +0 -1
- package/dist/runningSummarizer.js.map +0 -1
- package/dist/serializedSnapshotStorage.d.ts +0 -58
- package/dist/serializedSnapshotStorage.d.ts.map +0 -1
- package/dist/serializedSnapshotStorage.js +0 -108
- package/dist/serializedSnapshotStorage.js.map +0 -1
- package/dist/summarizer.d.ts.map +0 -1
- package/dist/summarizer.js.map +0 -1
- package/dist/summarizerClientElection.d.ts.map +0 -1
- package/dist/summarizerClientElection.js.map +0 -1
- package/dist/summarizerHandle.d.ts +0 -12
- package/dist/summarizerHandle.d.ts.map +0 -1
- package/dist/summarizerHandle.js +0 -22
- package/dist/summarizerHandle.js.map +0 -1
- package/dist/summarizerHeuristics.d.ts.map +0 -1
- package/dist/summarizerHeuristics.js.map +0 -1
- package/dist/summarizerTypes.d.ts.map +0 -1
- package/dist/summarizerTypes.js.map +0 -1
- package/dist/summaryCollection.d.ts.map +0 -1
- package/dist/summaryCollection.js.map +0 -1
- package/dist/summaryFormat.d.ts.map +0 -1
- package/dist/summaryFormat.js.map +0 -1
- package/dist/summaryGenerator.d.ts.map +0 -1
- package/dist/summaryGenerator.js.map +0 -1
- package/dist/summaryManager.d.ts.map +0 -1
- package/dist/summaryManager.js.map +0 -1
- package/lib/garbageCollection.d.ts +0 -387
- package/lib/garbageCollection.d.ts.map +0 -1
- package/lib/garbageCollection.js +0 -1133
- package/lib/garbageCollection.js.map +0 -1
- package/lib/garbageCollectionConstants.d.ts +0 -19
- package/lib/garbageCollectionConstants.d.ts.map +0 -1
- package/lib/garbageCollectionConstants.js +0 -31
- package/lib/garbageCollectionConstants.js.map +0 -1
- package/lib/gcSweepReadyUsageDetection.d.ts.map +0 -1
- package/lib/gcSweepReadyUsageDetection.js.map +0 -1
- package/lib/orderedClientElection.d.ts.map +0 -1
- package/lib/orderedClientElection.js.map +0 -1
- package/lib/runWhileConnectedCoordinator.d.ts.map +0 -1
- package/lib/runWhileConnectedCoordinator.js.map +0 -1
- package/lib/runningSummarizer.d.ts.map +0 -1
- package/lib/runningSummarizer.js.map +0 -1
- package/lib/serializedSnapshotStorage.d.ts +0 -58
- package/lib/serializedSnapshotStorage.d.ts.map +0 -1
- package/lib/serializedSnapshotStorage.js +0 -104
- package/lib/serializedSnapshotStorage.js.map +0 -1
- package/lib/summarizer.d.ts.map +0 -1
- package/lib/summarizer.js.map +0 -1
- package/lib/summarizerClientElection.d.ts.map +0 -1
- package/lib/summarizerClientElection.js.map +0 -1
- package/lib/summarizerHandle.d.ts +0 -12
- package/lib/summarizerHandle.d.ts.map +0 -1
- package/lib/summarizerHandle.js +0 -18
- package/lib/summarizerHandle.js.map +0 -1
- package/lib/summarizerHeuristics.d.ts.map +0 -1
- package/lib/summarizerHeuristics.js.map +0 -1
- package/lib/summarizerTypes.d.ts.map +0 -1
- package/lib/summarizerTypes.js +0 -9
- package/lib/summarizerTypes.js.map +0 -1
- package/lib/summaryCollection.d.ts.map +0 -1
- package/lib/summaryCollection.js.map +0 -1
- package/lib/summaryFormat.d.ts.map +0 -1
- package/lib/summaryFormat.js.map +0 -1
- package/lib/summaryGenerator.d.ts.map +0 -1
- package/lib/summaryGenerator.js.map +0 -1
- package/lib/summaryManager.d.ts.map +0 -1
- package/lib/summaryManager.js.map +0 -1
- package/src/garbageCollection.ts +0 -1646
- package/src/garbageCollectionConstants.ts +0 -35
- package/src/gcSweepReadyUsageDetection.ts +0 -139
- package/src/orderedClientElection.ts +0 -532
- package/src/runWhileConnectedCoordinator.ts +0 -106
- package/src/runningSummarizer.ts +0 -611
- package/src/serializedSnapshotStorage.ts +0 -146
- package/src/summarizer.ts +0 -421
- package/src/summarizerClientElection.ts +0 -161
- package/src/summarizerHandle.ts +0 -21
- package/src/summarizerHeuristics.ts +0 -222
- package/src/summarizerTypes.ts +0 -510
- package/src/summaryCollection.ts +0 -421
- package/src/summaryFormat.ts +0 -235
- package/src/summaryGenerator.ts +0 -446
- package/src/summaryManager.ts +0 -394
- /package/dist/{orderedClientElection.d.ts → summary/orderedClientElection.d.ts} +0 -0
- /package/dist/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +0 -0
- /package/dist/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +0 -0
- /package/lib/{orderedClientElection.d.ts → summary/orderedClientElection.d.ts} +0 -0
- /package/lib/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +0 -0
- /package/lib/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +0 -0
package/lib/dataStoreContext.js
CHANGED
|
@@ -3,16 +3,15 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
import { AttachState, } from "@fluidframework/container-definitions";
|
|
6
|
-
import { assert, Deferred, LazyPromise, TypedEventEmitter
|
|
6
|
+
import { assert, Deferred, LazyPromise, TypedEventEmitter } from "@fluidframework/common-utils";
|
|
7
7
|
import { readAndParse } from "@fluidframework/driver-utils";
|
|
8
8
|
import { BlobTreeEntry } from "@fluidframework/protocol-base";
|
|
9
|
-
import {
|
|
9
|
+
import { channelsTreeName, VisibilityState, } from "@fluidframework/runtime-definitions";
|
|
10
10
|
import { addBlobToSummary, convertSummaryTreeToITree, packagePathToTelemetryProperty, } from "@fluidframework/runtime-utils";
|
|
11
|
-
import { ChildLogger, loggerToMonitoringContext, LoggingError, TelemetryDataTag, ThresholdCounter, } from "@fluidframework/telemetry-utils";
|
|
11
|
+
import { ChildLogger, generateStack, loggerToMonitoringContext, LoggingError, TelemetryDataTag, ThresholdCounter, } from "@fluidframework/telemetry-utils";
|
|
12
12
|
import { DataCorruptionError, DataProcessingError, extractSafePropertiesFromMessage, } from "@fluidframework/container-utils";
|
|
13
|
-
import { dataStoreAttributesBlobName, hasIsolatedChannels, wrapSummaryInChannelsTree, getAttributesFormatVersion, getFluidDataStoreAttributes, } from "./
|
|
14
|
-
import { throwOnTombstoneUsageKey } from "./
|
|
15
|
-
import { summarizerClientType } from "./summarizerClientElection";
|
|
13
|
+
import { dataStoreAttributesBlobName, hasIsolatedChannels, wrapSummaryInChannelsTree, getAttributesFormatVersion, getFluidDataStoreAttributes, summarizerClientType, } from "./summary";
|
|
14
|
+
import { sendGCUnexpectedUsageEvent, throwOnTombstoneUsageKey } from "./gc";
|
|
16
15
|
function createAttributes(pkg, isRootDataStore) {
|
|
17
16
|
const stringifiedPkg = JSON.stringify(pkg);
|
|
18
17
|
return {
|
|
@@ -29,11 +28,10 @@ export function createAttributesBlob(pkg, isRootDataStore) {
|
|
|
29
28
|
* Represents the context for the store. This context is passed to the store runtime.
|
|
30
29
|
*/
|
|
31
30
|
export class FluidDataStoreContext extends TypedEventEmitter {
|
|
32
|
-
constructor(props, existing,
|
|
33
|
-
|
|
31
|
+
constructor(props, existing, isLocalDataStore, makeLocallyVisibleFn) {
|
|
32
|
+
var _a;
|
|
34
33
|
super();
|
|
35
34
|
this.existing = existing;
|
|
36
|
-
this.bindState = bindState;
|
|
37
35
|
this.isLocalDataStore = isLocalDataStore;
|
|
38
36
|
this.makeLocallyVisibleFn = makeLocallyVisibleFn;
|
|
39
37
|
this._disposed = false;
|
|
@@ -42,6 +40,8 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
42
40
|
* loading.
|
|
43
41
|
*/
|
|
44
42
|
this._tombstoned = false;
|
|
43
|
+
/** If true, this means that this data store context and its children have been removed from the runtime */
|
|
44
|
+
this.deleted = false;
|
|
45
45
|
this.detachedRuntimeCreation = false;
|
|
46
46
|
this.loaded = false;
|
|
47
47
|
this.pending = [];
|
|
@@ -54,23 +54,22 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
54
54
|
// URIs use slashes as delimiters. Handles use URIs.
|
|
55
55
|
// Thus having slashes in types almost guarantees trouble down the road!
|
|
56
56
|
assert(!this.id.includes("/"), 0x13a /* Data store ID contains slash */);
|
|
57
|
-
this._attachState =
|
|
58
|
-
this.containerRuntime.attachState
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
this.bindState = BindState.Binding;
|
|
62
|
-
assert(this.channel !== undefined, 0x13c /* "undefined channel on datastore context" */);
|
|
63
|
-
this.makeLocallyVisible();
|
|
64
|
-
this.bindState = BindState.Bound;
|
|
65
|
-
};
|
|
57
|
+
this._attachState =
|
|
58
|
+
this.containerRuntime.attachState !== AttachState.Detached && this.existing
|
|
59
|
+
? this.containerRuntime.attachState
|
|
60
|
+
: AttachState.Detached;
|
|
66
61
|
const thisSummarizeInternal = async (fullTree, trackState, telemetryContext) => this.summarizeInternal(fullTree, trackState, telemetryContext);
|
|
67
|
-
this.summarizerNode = props.createSummarizerNodeFn(thisSummarizeInternal, async (fullGC) => this.getGCDataInternal(fullGC)
|
|
62
|
+
this.summarizerNode = props.createSummarizerNodeFn(thisSummarizeInternal, async (fullGC) => this.getGCDataInternal(fullGC));
|
|
68
63
|
this.mc = loggerToMonitoringContext(ChildLogger.create(this.logger, "FluidDataStoreContext"));
|
|
69
64
|
this.thresholdOpsCounter = new ThresholdCounter(FluidDataStoreContext.pendingOpsCountThreshold, this.mc.logger);
|
|
70
65
|
// Tombstone should only throw when the feature flag is enabled and the client isn't a summarizer
|
|
71
66
|
this.throwOnTombstoneUsage =
|
|
72
67
|
this.mc.config.getBoolean(throwOnTombstoneUsageKey) === true &&
|
|
68
|
+
this._containerRuntime.gcTombstoneEnforcementAllowed &&
|
|
73
69
|
this.clientDetails.type !== summarizerClientType;
|
|
70
|
+
// By default, a data store can log maximum 10 local changes telemetry in summarizer.
|
|
71
|
+
this.localChangesTelemetryCount =
|
|
72
|
+
(_a = this.mc.config.getNumber("Fluid.Telemetry.LocalChangesTelemetryCount")) !== null && _a !== void 0 ? _a : 10;
|
|
74
73
|
}
|
|
75
74
|
get packagePath() {
|
|
76
75
|
assert(this.pkg !== undefined, 0x139 /* "Undefined package path" */);
|
|
@@ -100,14 +99,21 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
100
99
|
get containerRuntime() {
|
|
101
100
|
return this._containerRuntime;
|
|
102
101
|
}
|
|
102
|
+
ensureNoDataModelChanges(callback) {
|
|
103
|
+
return this._containerRuntime.ensureNoDataModelChanges(callback);
|
|
104
|
+
}
|
|
103
105
|
get isLoaded() {
|
|
104
106
|
return this.loaded;
|
|
105
107
|
}
|
|
106
108
|
get baseSnapshot() {
|
|
107
109
|
return this._baseSnapshot;
|
|
108
110
|
}
|
|
109
|
-
get disposed() {
|
|
110
|
-
|
|
111
|
+
get disposed() {
|
|
112
|
+
return this._disposed;
|
|
113
|
+
}
|
|
114
|
+
get tombstoned() {
|
|
115
|
+
return this._tombstoned;
|
|
116
|
+
}
|
|
111
117
|
get attachState() {
|
|
112
118
|
return this._attachState;
|
|
113
119
|
}
|
|
@@ -141,19 +147,32 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
141
147
|
// Dispose any pending runtime after it gets fulfilled
|
|
142
148
|
// Errors are logged where this.channelDeferred is consumed/generated (realizeCore(), bindRuntime())
|
|
143
149
|
if (this.channelDeferred) {
|
|
144
|
-
this.channelDeferred.promise
|
|
150
|
+
this.channelDeferred.promise
|
|
151
|
+
.then((runtime) => {
|
|
145
152
|
runtime.dispose();
|
|
146
|
-
})
|
|
153
|
+
})
|
|
154
|
+
.catch((error) => { });
|
|
147
155
|
}
|
|
148
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* When delete is called, that means that the data store is permanently removed from the runtime, and will not show up in future summaries
|
|
159
|
+
* This function is called to prevent ops from being generated from this data store once it has been deleted. Furthermore, this data store
|
|
160
|
+
* should not receive any ops/signals.
|
|
161
|
+
*/
|
|
162
|
+
delete() {
|
|
163
|
+
this.deleted = true;
|
|
164
|
+
}
|
|
149
165
|
setTombstone(tombstone) {
|
|
150
166
|
if (this.tombstoned === tombstone) {
|
|
151
167
|
return;
|
|
152
168
|
}
|
|
153
169
|
this._tombstoned = tombstone;
|
|
154
170
|
}
|
|
155
|
-
rejectDeferredRealize(reason,
|
|
156
|
-
throw new LoggingError(reason, {
|
|
171
|
+
rejectDeferredRealize(reason, failedPkgPath, fullPackageName) {
|
|
172
|
+
throw new LoggingError(reason, {
|
|
173
|
+
failedPkgPath: { value: failedPkgPath, tag: TelemetryDataTag.CodeArtifact },
|
|
174
|
+
fullPackageName: packagePathToTelemetryProperty(fullPackageName),
|
|
175
|
+
});
|
|
157
176
|
}
|
|
158
177
|
async realize() {
|
|
159
178
|
assert(!this.detachedRuntimeCreation, 0x13d /* "Detached runtime creation on realize()" */);
|
|
@@ -167,6 +186,7 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
167
186
|
value: this.id,
|
|
168
187
|
tag: TelemetryDataTag.CodeArtifact,
|
|
169
188
|
},
|
|
189
|
+
packageName: packagePathToTelemetryProperty(this.pkg),
|
|
170
190
|
});
|
|
171
191
|
(_a = this.channelDeferred) === null || _a === void 0 ? void 0 : _a.reject(errorWrapped);
|
|
172
192
|
this.logger.sendErrorEvent({ eventName: "RealizeError" }, errorWrapped);
|
|
@@ -184,18 +204,18 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
184
204
|
let lastPkg;
|
|
185
205
|
for (const pkg of packages) {
|
|
186
206
|
if (!registry) {
|
|
187
|
-
this.rejectDeferredRealize("No registry for package", lastPkg);
|
|
207
|
+
this.rejectDeferredRealize("No registry for package", lastPkg, packages);
|
|
188
208
|
}
|
|
189
209
|
lastPkg = pkg;
|
|
190
210
|
entry = await registry.get(pkg);
|
|
191
211
|
if (!entry) {
|
|
192
|
-
this.rejectDeferredRealize("Registry does not contain entry for the package", pkg);
|
|
212
|
+
this.rejectDeferredRealize("Registry does not contain entry for the package", pkg, packages);
|
|
193
213
|
}
|
|
194
214
|
registry = entry.IFluidDataStoreRegistry;
|
|
195
215
|
}
|
|
196
216
|
const factory = entry === null || entry === void 0 ? void 0 : entry.IFluidDataStoreFactory;
|
|
197
217
|
if (factory === undefined) {
|
|
198
|
-
this.rejectDeferredRealize("Can't find factory for package", lastPkg);
|
|
218
|
+
this.rejectDeferredRealize("Can't find factory for package", lastPkg, packages);
|
|
199
219
|
}
|
|
200
220
|
return { factory, registry };
|
|
201
221
|
}
|
|
@@ -365,7 +385,9 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
365
385
|
return;
|
|
366
386
|
}
|
|
367
387
|
// Remove the route to this data store, if it exists.
|
|
368
|
-
const usedChannelRoutes = this.lastUsedRoutes.filter((id) => {
|
|
388
|
+
const usedChannelRoutes = this.lastUsedRoutes.filter((id) => {
|
|
389
|
+
return id !== "/" && id !== "";
|
|
390
|
+
});
|
|
369
391
|
this.channel.updateUsedRoutes(usedChannelRoutes);
|
|
370
392
|
}
|
|
371
393
|
/**
|
|
@@ -382,6 +404,8 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
382
404
|
content,
|
|
383
405
|
type,
|
|
384
406
|
};
|
|
407
|
+
// Summarizer clients should not submit messages.
|
|
408
|
+
this.identifyLocalChangeInSummarizer("DataStoreMessageSubmittedInSummarizer", type);
|
|
385
409
|
this._containerRuntime.submitDataStoreOp(this.id, fluidDataStoreContent, localOpMetadata);
|
|
386
410
|
}
|
|
387
411
|
/**
|
|
@@ -414,6 +438,11 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
414
438
|
*/
|
|
415
439
|
makeLocallyVisible() {
|
|
416
440
|
assert(this.channel !== undefined, 0x2cf /* "undefined channel on datastore context" */);
|
|
441
|
+
assert(this.channel.visibilityState === VisibilityState.LocallyVisible, 0x590 /* Channel must be locally visible */);
|
|
442
|
+
this.makeLocallyVisibleFn();
|
|
443
|
+
}
|
|
444
|
+
/** @deprecated - To be replaced by calling makeLocallyVisible directly */
|
|
445
|
+
bindToContext() {
|
|
417
446
|
this.makeLocallyVisibleFn();
|
|
418
447
|
}
|
|
419
448
|
bindRuntime(channel) {
|
|
@@ -452,10 +481,13 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
452
481
|
}
|
|
453
482
|
catch (error) {
|
|
454
483
|
(_a = this.channelDeferred) === null || _a === void 0 ? void 0 : _a.reject(error);
|
|
455
|
-
this.logger.sendErrorEvent({
|
|
484
|
+
this.logger.sendErrorEvent({
|
|
485
|
+
eventName: "BindRuntimeError",
|
|
486
|
+
fluidDataStoreId: {
|
|
456
487
|
value: this.id,
|
|
457
488
|
tag: TelemetryDataTag.CodeArtifact,
|
|
458
|
-
}
|
|
489
|
+
},
|
|
490
|
+
}, error);
|
|
459
491
|
}
|
|
460
492
|
}
|
|
461
493
|
async getAbsoluteUrl(relativeUrl) {
|
|
@@ -472,6 +504,12 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
472
504
|
setInMemoryRoot() {
|
|
473
505
|
this._isInMemoryRoot = true;
|
|
474
506
|
}
|
|
507
|
+
/**
|
|
508
|
+
* @deprecated - The functionality to get base GC details has been moved to summarizer node.
|
|
509
|
+
*/
|
|
510
|
+
async getBaseGCDetails() {
|
|
511
|
+
return {};
|
|
512
|
+
}
|
|
475
513
|
reSubmit(contents, localOpMetadata) {
|
|
476
514
|
assert(!!this.channel, 0x14b /* "Channel must exist when resubmitting ops" */);
|
|
477
515
|
const innerContents = contents;
|
|
@@ -496,30 +534,63 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
496
534
|
return this.channel.applyStashedOp(innerContents.content);
|
|
497
535
|
}
|
|
498
536
|
verifyNotClosed(callSite, checkTombstone = true, safeTelemetryProps = {}) {
|
|
537
|
+
if (this.deleted) {
|
|
538
|
+
const messageString = `Context is deleted! Call site [${callSite}]`;
|
|
539
|
+
const error = new DataCorruptionError(messageString, safeTelemetryProps);
|
|
540
|
+
this.mc.logger.sendErrorEvent({
|
|
541
|
+
eventName: "GC_Deleted_DataStore_Changed",
|
|
542
|
+
callSite,
|
|
543
|
+
}, error);
|
|
544
|
+
throw error;
|
|
545
|
+
}
|
|
499
546
|
if (this._disposed) {
|
|
500
547
|
throw new Error(`Context is closed! Call site [${callSite}]`);
|
|
501
548
|
}
|
|
502
549
|
if (checkTombstone && this.tombstoned) {
|
|
503
550
|
const messageString = `Context is tombstoned! Call site [${callSite}]`;
|
|
504
|
-
const error = new DataCorruptionError(messageString,
|
|
505
|
-
|
|
506
|
-
// throwOnTombstoneUsage is set.
|
|
507
|
-
this.mc.logger.sendErrorEvent({
|
|
551
|
+
const error = new DataCorruptionError(messageString, safeTelemetryProps);
|
|
552
|
+
sendGCUnexpectedUsageEvent(this.mc, {
|
|
508
553
|
eventName: "GC_Tombstone_DataStore_Changed",
|
|
554
|
+
category: this.throwOnTombstoneUsage ? "error" : "generic",
|
|
555
|
+
gcTombstoneEnforcementAllowed: this._containerRuntime.gcTombstoneEnforcementAllowed,
|
|
509
556
|
callSite,
|
|
510
|
-
|
|
511
|
-
}, error);
|
|
512
|
-
// Always log an error when tombstoned data store is used. However, throw an error only if
|
|
513
|
-
// throwOnTombstoneUsage is set and the client is not a summarizer.
|
|
557
|
+
}, this.pkg, error);
|
|
514
558
|
if (this.throwOnTombstoneUsage) {
|
|
515
559
|
throw error;
|
|
516
560
|
}
|
|
517
561
|
}
|
|
518
562
|
}
|
|
563
|
+
/**
|
|
564
|
+
* Summarizer client should not have local changes. These changes can become part of the summary and can break
|
|
565
|
+
* eventual consistency. For example, the next summary (say at ref seq# 100) may contain these changes whereas
|
|
566
|
+
* other clients that are up-to-date till seq# 100 may not have them yet.
|
|
567
|
+
*/
|
|
568
|
+
identifyLocalChangeInSummarizer(eventName, type) {
|
|
569
|
+
var _a, _b;
|
|
570
|
+
if (this.clientDetails.type !== summarizerClientType ||
|
|
571
|
+
this.localChangesTelemetryCount <= 0) {
|
|
572
|
+
return;
|
|
573
|
+
}
|
|
574
|
+
// Log a telemetry if there are local changes in the summarizer. This will give us data on how often
|
|
575
|
+
// this is happening and which data stores do this. The eventual goal is to disallow local changes
|
|
576
|
+
// in the summarizer and the data will help us plan this.
|
|
577
|
+
this.mc.logger.sendTelemetryEvent({
|
|
578
|
+
eventName,
|
|
579
|
+
type,
|
|
580
|
+
fluidDataStoreId: {
|
|
581
|
+
value: this.id,
|
|
582
|
+
tag: TelemetryDataTag.CodeArtifact,
|
|
583
|
+
},
|
|
584
|
+
packageName: packagePathToTelemetryProperty(this.pkg),
|
|
585
|
+
isSummaryInProgress: (_b = (_a = this.summarizerNode).isSummaryInProgress) === null || _b === void 0 ? void 0 : _b.call(_a),
|
|
586
|
+
stack: generateStack(),
|
|
587
|
+
});
|
|
588
|
+
this.localChangesTelemetryCount--;
|
|
589
|
+
}
|
|
519
590
|
getCreateChildSummarizerNodeFn(id, createParam) {
|
|
520
|
-
return (summarizeInternal, getGCDataFn
|
|
591
|
+
return (summarizeInternal, getGCDataFn) => this.summarizerNode.createChild(summarizeInternal, id, createParam,
|
|
521
592
|
// DDS will not create failure summaries
|
|
522
|
-
{ throwOnFailure: true }, getGCDataFn
|
|
593
|
+
{ throwOnFailure: true }, getGCDataFn);
|
|
523
594
|
}
|
|
524
595
|
async uploadBlob(blob) {
|
|
525
596
|
return this.containerRuntime.uploadBlob(blob);
|
|
@@ -528,7 +599,7 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
528
599
|
FluidDataStoreContext.pendingOpsCountThreshold = 1000;
|
|
529
600
|
export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
530
601
|
constructor(props) {
|
|
531
|
-
super(props, true /* existing */,
|
|
602
|
+
super(props, true /* existing */, false /* isLocalDataStore */, () => {
|
|
532
603
|
throw new Error("Already attached");
|
|
533
604
|
});
|
|
534
605
|
this.initialSnapshotDetailsP = new LazyPromise(async () => {
|
|
@@ -543,9 +614,10 @@ export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
|
543
614
|
// For snapshotFormatVersion = "0.1" (1) or above, pkg is jsonified, otherwise it is just a string.
|
|
544
615
|
const formatVersion = getAttributesFormatVersion(attributes);
|
|
545
616
|
if (formatVersion < 1) {
|
|
546
|
-
pkgFromSnapshot =
|
|
547
|
-
|
|
548
|
-
|
|
617
|
+
pkgFromSnapshot =
|
|
618
|
+
attributes.pkg.startsWith('["') && attributes.pkg.endsWith('"]')
|
|
619
|
+
? JSON.parse(attributes.pkg)
|
|
620
|
+
: [attributes.pkg];
|
|
549
621
|
}
|
|
550
622
|
else {
|
|
551
623
|
pkgFromSnapshot = JSON.parse(attributes.pkg);
|
|
@@ -570,10 +642,6 @@ export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
|
570
642
|
};
|
|
571
643
|
});
|
|
572
644
|
this.initSnapshotValue = props.snapshotTree;
|
|
573
|
-
this.baseGCDetailsP = new LazyPromise(async () => {
|
|
574
|
-
var _a;
|
|
575
|
-
return (_a = (await props.getBaseGCDetails())) !== null && _a !== void 0 ? _a : {};
|
|
576
|
-
});
|
|
577
645
|
if (props.snapshotTree !== undefined) {
|
|
578
646
|
this.summarizerNode.updateBaseSummaryState(props.snapshotTree);
|
|
579
647
|
}
|
|
@@ -581,9 +649,6 @@ export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
|
581
649
|
async getInitialSnapshotDetails() {
|
|
582
650
|
return this.initialSnapshotDetailsP;
|
|
583
651
|
}
|
|
584
|
-
async getBaseGCDetails() {
|
|
585
|
-
return this.baseGCDetailsP;
|
|
586
|
-
}
|
|
587
652
|
generateAttachMessage() {
|
|
588
653
|
throw new Error("Cannot attach remote store");
|
|
589
654
|
}
|
|
@@ -593,7 +658,9 @@ export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
|
593
658
|
*/
|
|
594
659
|
export class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
595
660
|
constructor(props) {
|
|
596
|
-
super(props, props.snapshotTree !== undefined ? true : false /* existing */,
|
|
661
|
+
super(props, props.snapshotTree !== undefined ? true : false /* existing */, true /* isLocalDataStore */, props.makeLocallyVisibleFn);
|
|
662
|
+
// Summarizer client should not create local data stores.
|
|
663
|
+
this.identifyLocalChangeInSummarizer("DataStoreCreatedInSummarizer");
|
|
597
664
|
this.snapshotTree = props.snapshotTree;
|
|
598
665
|
if (props.isRootDataStore === true) {
|
|
599
666
|
this.setInMemoryRoot();
|
|
@@ -660,9 +727,22 @@ export class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
|
660
727
|
snapshot,
|
|
661
728
|
};
|
|
662
729
|
}
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
730
|
+
/**
|
|
731
|
+
* A context should only be marked as deleted when its a remote context.
|
|
732
|
+
* Session Expiry at the runtime level should have closed the container creating the local data store context
|
|
733
|
+
* before delete is even possible. Session Expiry is at 30 days, and sweep is done 36+ days later from the time
|
|
734
|
+
* it was unreferenced. Thus the sweeping container should have loaded from a snapshot and thus creating a remote
|
|
735
|
+
* context.
|
|
736
|
+
*/
|
|
737
|
+
delete() {
|
|
738
|
+
// TODO: GC:Validation - potentially prevent this from happening or asserting. Maybe throw here.
|
|
739
|
+
sendGCUnexpectedUsageEvent(this.mc, {
|
|
740
|
+
eventName: "GC_Deleted_DataStore_Unexpected_Delete",
|
|
741
|
+
message: "Unexpected deletion of a local data store context",
|
|
742
|
+
category: "error",
|
|
743
|
+
gcTombstoneEnforcementAllowed: undefined,
|
|
744
|
+
}, this.pkg);
|
|
745
|
+
super.delete();
|
|
666
746
|
}
|
|
667
747
|
}
|
|
668
748
|
/**
|