@fluidframework/container-runtime 2.0.0-dev-rc.3.0.0.250606 → 2.0.0-dev-rc.3.0.0.254274
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/api-report/container-runtime.api.md +35 -34
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js +4 -4
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager.d.ts +31 -23
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +81 -99
- package/dist/blobManager.js.map +1 -1
- package/dist/channelCollection.d.ts +4 -2
- package/dist/channelCollection.d.ts.map +1 -1
- package/dist/channelCollection.js +75 -72
- package/dist/channelCollection.js.map +1 -1
- package/dist/connectionTelemetry.d.ts +1 -1
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +16 -16
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/container-runtime-alpha.d.ts +64 -36
- package/dist/container-runtime-beta.d.ts +28 -28
- package/dist/container-runtime-public.d.ts +28 -28
- package/dist/container-runtime-untrimmed.d.ts +68 -39
- package/dist/containerHandleContext.d.ts.map +1 -1
- package/dist/containerHandleContext.js +2 -2
- package/dist/containerHandleContext.js.map +1 -1
- package/dist/containerRuntime.d.ts +12 -8
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +197 -162
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.d.ts +1 -1
- package/dist/dataStore.d.ts.map +1 -1
- package/dist/dataStore.js +7 -7
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +9 -9
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +72 -62
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js +11 -11
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/dataStoreRegistry.d.ts +1 -1
- package/dist/dataStoreRegistry.d.ts.map +1 -1
- package/dist/dataStoreRegistry.js +2 -2
- package/dist/dataStoreRegistry.js.map +1 -1
- package/dist/deltaManagerSummarizerProxy.d.ts +1 -1
- package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
- package/dist/deltaManagerSummarizerProxy.js.map +1 -1
- package/dist/deltaScheduler.d.ts.map +1 -1
- package/dist/deltaScheduler.js +6 -6
- package/dist/deltaScheduler.js.map +1 -1
- package/dist/error.d.ts +1 -1
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +4 -4
- package/dist/error.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts +2 -1
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +20 -20
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.d.ts +1 -1
- package/dist/gc/gcConfigs.d.ts.map +1 -1
- package/dist/gc/gcConfigs.js +4 -5
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +3 -2
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcHelpers.d.ts +5 -1
- package/dist/gc/gcHelpers.d.ts.map +1 -1
- package/dist/gc/gcHelpers.js +21 -12
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js +11 -11
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts +2 -1
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +11 -9
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.js +6 -6
- package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
- package/dist/gc/index.d.ts +1 -1
- package/dist/gc/index.d.ts.map +1 -1
- package/dist/gc/index.js +2 -1
- package/dist/gc/index.js.map +1 -1
- package/dist/messageTypes.d.ts +2 -2
- package/dist/messageTypes.d.ts.map +1 -1
- package/dist/messageTypes.js.map +1 -1
- package/dist/opLifecycle/batchManager.d.ts.map +1 -1
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/definitions.d.ts +1 -1
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +5 -5
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +12 -12
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js +7 -7
- package/dist/opLifecycle/opGroupingManager.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts +1 -1
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +17 -17
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +2 -1
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +13 -13
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +18 -18
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js +24 -24
- package/dist/scheduleManager.js.map +1 -1
- package/dist/storageServiceWithAttachBlobs.d.ts +2 -2
- package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -1
- package/dist/storageServiceWithAttachBlobs.js +2 -2
- package/dist/storageServiceWithAttachBlobs.js.map +1 -1
- package/dist/summary/documentSchema.d.ts +37 -6
- package/dist/summary/documentSchema.d.ts.map +1 -1
- package/dist/summary/documentSchema.js +58 -21
- package/dist/summary/documentSchema.js.map +1 -1
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js +7 -7
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.js +3 -3
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/dist/summary/runningSummarizer.d.ts +1 -1
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +16 -16
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.d.ts +2 -1
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +12 -12
- package/dist/summary/summarizer.js.map +1 -1
- package/dist/summary/summarizerClientElection.d.ts.map +1 -1
- package/dist/summary/summarizerClientElection.js.map +1 -1
- package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
- package/dist/summary/summarizerHeuristics.js +2 -2
- package/dist/summary/summarizerHeuristics.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.d.ts +2 -1
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js +28 -28
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.js +3 -3
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +14 -14
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +4 -2
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryCollection.js +7 -7
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +1 -1
- package/dist/summary/summaryFormat.d.ts.map +1 -1
- package/dist/summary/summaryFormat.js +8 -8
- package/dist/summary/summaryFormat.js.map +1 -1
- package/dist/summary/summaryGenerator.d.ts +3 -2
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +16 -16
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryManager.d.ts.map +1 -1
- package/dist/summary/summaryManager.js +15 -14
- package/dist/summary/summaryManager.js.map +1 -1
- package/lib/batchTracker.d.ts.map +1 -1
- package/lib/batchTracker.js +2 -2
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager.d.ts +31 -23
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +46 -64
- package/lib/blobManager.js.map +1 -1
- package/lib/channelCollection.d.ts +4 -2
- package/lib/channelCollection.d.ts.map +1 -1
- package/lib/channelCollection.js +10 -7
- package/lib/channelCollection.js.map +1 -1
- package/lib/connectionTelemetry.d.ts +1 -1
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +2 -2
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/container-runtime-alpha.d.ts +64 -36
- package/lib/container-runtime-beta.d.ts +28 -28
- package/lib/container-runtime-public.d.ts +28 -28
- package/lib/container-runtime-untrimmed.d.ts +68 -39
- package/lib/containerHandleContext.d.ts.map +1 -1
- package/lib/containerHandleContext.js +1 -1
- package/lib/containerHandleContext.js.map +1 -1
- package/lib/containerRuntime.d.ts +12 -8
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +76 -39
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStore.d.ts +1 -1
- package/lib/dataStore.d.ts.map +1 -1
- package/lib/dataStore.js +2 -2
- package/lib/dataStore.js.map +1 -1
- package/lib/dataStoreContext.d.ts +9 -9
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +18 -8
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.d.ts.map +1 -1
- package/lib/dataStoreContexts.js +2 -2
- package/lib/dataStoreContexts.js.map +1 -1
- package/lib/dataStoreRegistry.d.ts +1 -1
- package/lib/dataStoreRegistry.d.ts.map +1 -1
- package/lib/dataStoreRegistry.js +1 -1
- package/lib/dataStoreRegistry.js.map +1 -1
- package/lib/deltaManagerSummarizerProxy.d.ts +1 -1
- package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -1
- package/lib/deltaManagerSummarizerProxy.js.map +1 -1
- package/lib/deltaScheduler.d.ts.map +1 -1
- package/lib/deltaScheduler.js +1 -1
- package/lib/deltaScheduler.js.map +1 -1
- package/lib/error.d.ts +1 -1
- package/lib/error.d.ts.map +1 -1
- package/lib/error.js +2 -2
- package/lib/error.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts +2 -1
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +4 -4
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcConfigs.d.ts +1 -1
- package/lib/gc/gcConfigs.d.ts.map +1 -1
- package/lib/gc/gcConfigs.js +4 -5
- package/lib/gc/gcConfigs.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +3 -2
- package/lib/gc/gcDefinitions.d.ts.map +1 -1
- package/lib/gc/gcDefinitions.js.map +1 -1
- package/lib/gc/gcHelpers.d.ts +5 -1
- package/lib/gc/gcHelpers.d.ts.map +1 -1
- package/lib/gc/gcHelpers.js +10 -2
- package/lib/gc/gcHelpers.js.map +1 -1
- package/lib/gc/gcSummaryStateTracker.d.ts +1 -1
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/lib/gc/gcSummaryStateTracker.js +2 -2
- package/lib/gc/gcSummaryStateTracker.js.map +1 -1
- package/lib/gc/gcTelemetry.d.ts +2 -1
- package/lib/gc/gcTelemetry.d.ts.map +1 -1
- package/lib/gc/gcTelemetry.js +3 -1
- package/lib/gc/gcTelemetry.js.map +1 -1
- package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
- package/lib/gc/gcUnreferencedStateTracker.js +2 -2
- package/lib/gc/gcUnreferencedStateTracker.js.map +1 -1
- package/lib/gc/index.d.ts +1 -1
- package/lib/gc/index.d.ts.map +1 -1
- package/lib/gc/index.js +1 -1
- package/lib/gc/index.js.map +1 -1
- package/lib/messageTypes.d.ts +2 -2
- package/lib/messageTypes.d.ts.map +1 -1
- package/lib/messageTypes.js.map +1 -1
- package/lib/opLifecycle/batchManager.d.ts.map +1 -1
- package/lib/opLifecycle/batchManager.js.map +1 -1
- package/lib/opLifecycle/definitions.d.ts +1 -1
- package/lib/opLifecycle/definitions.d.ts.map +1 -1
- package/lib/opLifecycle/definitions.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js +2 -2
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +2 -2
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/lib/opLifecycle/opGroupingManager.js +2 -2
- package/lib/opLifecycle/opGroupingManager.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts +1 -1
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +2 -2
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +2 -1
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +2 -2
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +2 -2
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/scheduleManager.d.ts.map +1 -1
- package/lib/scheduleManager.js +3 -3
- package/lib/scheduleManager.js.map +1 -1
- package/lib/storageServiceWithAttachBlobs.d.ts +2 -2
- package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -1
- package/lib/storageServiceWithAttachBlobs.js +1 -1
- package/lib/storageServiceWithAttachBlobs.js.map +1 -1
- package/lib/summary/documentSchema.d.ts +37 -6
- package/lib/summary/documentSchema.d.ts.map +1 -1
- package/lib/summary/documentSchema.js +48 -11
- package/lib/summary/documentSchema.js.map +1 -1
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js +2 -2
- package/lib/summary/orderedClientElection.js.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/lib/summary/runningSummarizer.d.ts +1 -1
- package/lib/summary/runningSummarizer.d.ts.map +1 -1
- package/lib/summary/runningSummarizer.js +2 -2
- package/lib/summary/runningSummarizer.js.map +1 -1
- package/lib/summary/summarizer.d.ts +2 -1
- package/lib/summary/summarizer.d.ts.map +1 -1
- package/lib/summary/summarizer.js +2 -2
- package/lib/summary/summarizer.js.map +1 -1
- package/lib/summary/summarizerClientElection.d.ts.map +1 -1
- package/lib/summary/summarizerClientElection.js.map +1 -1
- package/lib/summary/summarizerHeuristics.d.ts.map +1 -1
- package/lib/summary/summarizerHeuristics.js +1 -1
- package/lib/summary/summarizerHeuristics.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.d.ts +2 -1
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.js +4 -4
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.js +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +3 -3
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/lib/summary/summarizerTypes.d.ts +4 -2
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryCollection.js +1 -1
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryFormat.d.ts +1 -1
- package/lib/summary/summaryFormat.d.ts.map +1 -1
- package/lib/summary/summaryFormat.js +3 -3
- package/lib/summary/summaryFormat.js.map +1 -1
- package/lib/summary/summaryGenerator.d.ts +3 -2
- package/lib/summary/summaryGenerator.d.ts.map +1 -1
- package/lib/summary/summaryGenerator.js +3 -3
- package/lib/summary/summaryGenerator.js.map +1 -1
- package/lib/summary/summaryManager.d.ts.map +1 -1
- package/lib/summary/summaryManager.js +9 -8
- package/lib/summary/summaryManager.js.map +1 -1
- package/lib/tsdoc-metadata.json +11 -0
- package/package.json +25 -37
- package/src/batchTracker.ts +3 -2
- package/src/blobManager.ts +87 -56
- package/src/channelCollection.ts +19 -12
- package/src/connectionTelemetry.ts +4 -4
- package/src/containerHandleContext.ts +2 -1
- package/src/containerRuntime.ts +115 -70
- package/src/dataStore.ts +5 -3
- package/src/dataStoreContext.ts +30 -15
- package/src/dataStoreContexts.ts +4 -2
- package/src/dataStoreRegistry.ts +2 -2
- package/src/deltaManagerSummarizerProxy.ts +1 -1
- package/src/deltaScheduler.ts +2 -1
- package/src/error.ts +2 -2
- package/src/gc/garbageCollection.ts +8 -7
- package/src/gc/gcConfigs.ts +5 -8
- package/src/gc/gcDefinitions.ts +4 -4
- package/src/gc/gcHelpers.ts +21 -4
- package/src/gc/gcSummaryStateTracker.ts +5 -3
- package/src/gc/gcTelemetry.ts +7 -1
- package/src/gc/gcUnreferencedStateTracker.ts +3 -2
- package/src/gc/index.ts +1 -0
- package/src/messageTypes.ts +3 -2
- package/src/opLifecycle/batchManager.ts +1 -0
- package/src/opLifecycle/definitions.ts +2 -1
- package/src/opLifecycle/opCompressor.ts +4 -2
- package/src/opLifecycle/opDecompressor.ts +3 -2
- package/src/opLifecycle/opGroupingManager.ts +3 -2
- package/src/opLifecycle/opSplitter.ts +5 -3
- package/src/opLifecycle/outbox.ts +6 -3
- package/src/opLifecycle/remoteMessageProcessor.ts +2 -0
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +4 -4
- package/src/scheduleManager.ts +5 -4
- package/src/storageServiceWithAttachBlobs.ts +2 -2
- package/src/summary/documentSchema.ts +71 -12
- package/src/summary/orderedClientElection.ts +4 -6
- package/src/summary/runWhileConnectedCoordinator.ts +2 -1
- package/src/summary/runningSummarizer.ts +4 -2
- package/src/summary/summarizer.ts +5 -3
- package/src/summary/summarizerClientElection.ts +1 -0
- package/src/summary/summarizerHeuristics.ts +3 -1
- package/src/summary/summarizerNode/summarizerNode.ts +10 -8
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +3 -2
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +14 -6
- package/src/summary/summarizerTypes.ts +6 -2
- package/src/summary/summaryCollection.ts +1 -1
- package/src/summary/summaryFormat.ts +7 -8
- package/src/summary/summaryGenerator.ts +5 -8
- package/src/summary/summaryManager.ts +14 -11
- package/lib/test/batchTracker.spec.js +0 -88
- package/lib/test/batchTracker.spec.js.map +0 -1
- package/lib/test/blobManager.spec.js +0 -835
- package/lib/test/blobManager.spec.js.map +0 -1
- package/lib/test/channelCollection.spec.js +0 -138
- package/lib/test/channelCollection.spec.js.map +0 -1
- package/lib/test/containerRuntime.spec.js +0 -1750
- package/lib/test/containerRuntime.spec.js.map +0 -1
- package/lib/test/dataStoreContext.spec.js +0 -771
- package/lib/test/dataStoreContext.spec.js.map +0 -1
- package/lib/test/dataStoreCreation.spec.js +0 -303
- package/lib/test/dataStoreCreation.spec.js.map +0 -1
- package/lib/test/dataStoreRegistry.spec.js +0 -26
- package/lib/test/dataStoreRegistry.spec.js.map +0 -1
- package/lib/test/documentSchema.spec.js +0 -282
- package/lib/test/documentSchema.spec.js.map +0 -1
- package/lib/test/fuzz/fuzzUtils.js +0 -70
- package/lib/test/fuzz/fuzzUtils.js.map +0 -1
- package/lib/test/fuzz/summarizer.fuzz.spec.js +0 -33
- package/lib/test/fuzz/summarizer.fuzz.spec.js.map +0 -1
- package/lib/test/fuzz/summarizerFuzzMocks.js +0 -180
- package/lib/test/fuzz/summarizerFuzzMocks.js.map +0 -1
- package/lib/test/fuzz/summarizerFuzzSuite.js +0 -109
- package/lib/test/fuzz/summarizerFuzzSuite.js.map +0 -1
- package/lib/test/gc/garbageCollection.spec.js +0 -1464
- package/lib/test/gc/garbageCollection.spec.js.map +0 -1
- package/lib/test/gc/gcConfigs.spec.js +0 -689
- package/lib/test/gc/gcConfigs.spec.js.map +0 -1
- package/lib/test/gc/gcHelpers.spec.js +0 -110
- package/lib/test/gc/gcHelpers.spec.js.map +0 -1
- package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +0 -68
- package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +0 -1
- package/lib/test/gc/gcStats.spec.js +0 -390
- package/lib/test/gc/gcStats.spec.js.map +0 -1
- package/lib/test/gc/gcSummaryStateTracker.spec.js +0 -228
- package/lib/test/gc/gcSummaryStateTracker.spec.js.map +0 -1
- package/lib/test/gc/gcTelemetry.spec.js +0 -530
- package/lib/test/gc/gcTelemetry.spec.js.map +0 -1
- package/lib/test/gc/gcUnitTestHelpers.js +0 -29
- package/lib/test/gc/gcUnitTestHelpers.js.map +0 -1
- package/lib/test/gc/gcUnreferencedStateTracker.spec.js +0 -192
- package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +0 -1
- package/lib/test/getPendingBlobs.spec.js +0 -193
- package/lib/test/getPendingBlobs.spec.js.map +0 -1
- package/lib/test/hardwareStats.spec.js +0 -93
- package/lib/test/hardwareStats.spec.js.map +0 -1
- package/lib/test/index.js +0 -6
- package/lib/test/index.js.map +0 -1
- package/lib/test/opLifecycle/OpGroupingManager.spec.js +0 -202
- package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +0 -1
- package/lib/test/opLifecycle/batchManager.spec.js +0 -189
- package/lib/test/opLifecycle/batchManager.spec.js.map +0 -1
- package/lib/test/opLifecycle/opCompressor.spec.js +0 -73
- package/lib/test/opLifecycle/opCompressor.spec.js.map +0 -1
- package/lib/test/opLifecycle/opDecompressor.spec.js +0 -223
- package/lib/test/opLifecycle/opDecompressor.spec.js.map +0 -1
- package/lib/test/opLifecycle/opSplitter.spec.js +0 -287
- package/lib/test/opLifecycle/opSplitter.spec.js.map +0 -1
- package/lib/test/opLifecycle/outbox.spec.js +0 -783
- package/lib/test/opLifecycle/outbox.spec.js.map +0 -1
- package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +0 -220
- package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +0 -1
- package/lib/test/pendingStateManager.spec.js +0 -329
- package/lib/test/pendingStateManager.spec.js.map +0 -1
- package/lib/test/scheduleManager.spec.js +0 -270
- package/lib/test/scheduleManager.spec.js.map +0 -1
- package/lib/test/summarizerNode.spec.js +0 -326
- package/lib/test/summarizerNode.spec.js.map +0 -1
- package/lib/test/summarizerNodeWithGc.spec.js +0 -318
- package/lib/test/summarizerNodeWithGc.spec.js.map +0 -1
- package/lib/test/summary/orderedClientElection.spec.js +0 -535
- package/lib/test/summary/orderedClientElection.spec.js.map +0 -1
- package/lib/test/summary/runningSummarizer.spec.js +0 -1349
- package/lib/test/summary/runningSummarizer.spec.js.map +0 -1
- package/lib/test/summary/summarizer.spec.js +0 -29
- package/lib/test/summary/summarizer.spec.js.map +0 -1
- package/lib/test/summary/summarizerClientElection.spec.js +0 -436
- package/lib/test/summary/summarizerClientElection.spec.js.map +0 -1
- package/lib/test/summary/summarizerHeuristics.spec.js +0 -289
- package/lib/test/summary/summarizerHeuristics.spec.js.map +0 -1
- package/lib/test/summary/summaryCollection.spec.js +0 -200
- package/lib/test/summary/summaryCollection.spec.js.map +0 -1
- package/lib/test/summary/summaryManager.spec.js +0 -430
- package/lib/test/summary/summaryManager.spec.js.map +0 -1
- package/lib/test/summary/testQuorumClients.js +0 -34
- package/lib/test/summary/testQuorumClients.js.map +0 -1
- package/lib/test/throttler.spec.js +0 -175
- package/lib/test/throttler.spec.js.map +0 -1
- package/lib/test/types/validateContainerRuntimePrevious.generated.js +0 -182
- package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +0 -1
package/dist/blobManager.js
CHANGED
|
@@ -7,11 +7,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
exports.BlobManager = exports.BlobHandle = void 0;
|
|
8
8
|
const client_utils_1 = require("@fluid-internal/client-utils");
|
|
9
9
|
const container_definitions_1 = require("@fluidframework/container-definitions");
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
10
|
+
const internal_1 = require("@fluidframework/core-utils/internal");
|
|
11
|
+
const internal_2 = require("@fluidframework/driver-utils/internal");
|
|
12
|
+
const internal_3 = require("@fluidframework/runtime-utils/internal");
|
|
13
|
+
const internal_4 = require("@fluidframework/telemetry-utils/internal");
|
|
13
14
|
const uuid_1 = require("uuid");
|
|
14
|
-
const driver_utils_1 = require("@fluidframework/driver-utils");
|
|
15
15
|
/**
|
|
16
16
|
* This class represents blob (long string)
|
|
17
17
|
* This object is used only when creating (writing) new blob and serialization purposes.
|
|
@@ -32,7 +32,7 @@ class BlobHandle {
|
|
|
32
32
|
this.get = get;
|
|
33
33
|
this.onAttachGraph = onAttachGraph;
|
|
34
34
|
this.attached = false;
|
|
35
|
-
this.absolutePath = (0,
|
|
35
|
+
this.absolutePath = (0, internal_3.generateHandleContextPath)(path, this.routeContext);
|
|
36
36
|
}
|
|
37
37
|
attachGraph() {
|
|
38
38
|
if (!this.attached) {
|
|
@@ -45,32 +45,15 @@ class BlobHandle {
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
exports.BlobHandle = BlobHandle;
|
|
48
|
+
const stashedPendingBlobOverrides = {
|
|
49
|
+
stashedUpload: true,
|
|
50
|
+
storageId: undefined,
|
|
51
|
+
minTTLInSeconds: undefined,
|
|
52
|
+
uploadTime: undefined,
|
|
53
|
+
};
|
|
48
54
|
class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
49
|
-
constructor(
|
|
50
|
-
/**
|
|
51
|
-
* Submit a BlobAttach op. When a blob is uploaded, there is a short grace period before which the blob is
|
|
52
|
-
* deleted. The BlobAttach op notifies the server that blob is in use. The server will then not delete the
|
|
53
|
-
* the blob as long as it is listed as referenced in future summaries. The summarizing client will know to
|
|
54
|
-
* include the storage ID in the summary when it sees the op.
|
|
55
|
-
*
|
|
56
|
-
* The op will also include a local ID to inform all clients of the relation to the storage ID, without
|
|
57
|
-
* knowledge of which they cannot request the blob from storage. It's important that this op is sequenced
|
|
58
|
-
* before any ops that reference the local ID, otherwise, an invalid handle could be added to the document.
|
|
59
|
-
*/
|
|
60
|
-
sendBlobAttachOp,
|
|
61
|
-
// Called when a blob node is requested. blobPath is the path of the blob's node in GC's graph.
|
|
62
|
-
// blobPath's format - `/<BlobManager.basePath>/<blobId>`.
|
|
63
|
-
blobRequested,
|
|
64
|
-
// Called to check if a blob has been deleted by GC.
|
|
65
|
-
// blobPath's format - `/<BlobManager.basePath>/<blobId>`.
|
|
66
|
-
isBlobDeleted, runtime, stashedBlobs = {}, closeContainer) {
|
|
55
|
+
constructor(props) {
|
|
67
56
|
super();
|
|
68
|
-
this.routeContext = routeContext;
|
|
69
|
-
this.getStorage = getStorage;
|
|
70
|
-
this.blobRequested = blobRequested;
|
|
71
|
-
this.isBlobDeleted = isBlobDeleted;
|
|
72
|
-
this.runtime = runtime;
|
|
73
|
-
this.closeContainer = closeContainer;
|
|
74
57
|
/**
|
|
75
58
|
* Blobs which we have not yet seen a BlobAttach op round-trip and not yet attached to a DDS.
|
|
76
59
|
*/
|
|
@@ -89,50 +72,50 @@ class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
|
89
72
|
*/
|
|
90
73
|
this.tombstonedBlobs = new Set();
|
|
91
74
|
this.stopAttaching = false;
|
|
92
|
-
|
|
75
|
+
const { routeContext, snapshot, getStorage, sendBlobAttachOp, blobRequested, isBlobDeleted, runtime, stashedBlobs, closeContainer, } = props;
|
|
76
|
+
this.routeContext = routeContext;
|
|
77
|
+
this.getStorage = getStorage;
|
|
78
|
+
this.blobRequested = blobRequested;
|
|
79
|
+
this.isBlobDeleted = isBlobDeleted;
|
|
80
|
+
this.runtime = runtime;
|
|
81
|
+
this.closeContainer = closeContainer;
|
|
82
|
+
this.mc = (0, internal_4.createChildMonitoringContext)({
|
|
93
83
|
logger: this.runtime.logger,
|
|
94
84
|
namespace: "BlobManager",
|
|
95
85
|
});
|
|
96
86
|
this.redirectTable = this.load(snapshot);
|
|
97
87
|
// Begin uploading stashed blobs from previous container instance
|
|
98
|
-
Object.entries(stashedBlobs).forEach(([localId, entry]) => {
|
|
88
|
+
Object.entries(stashedBlobs ?? {}).forEach(([localId, entry]) => {
|
|
89
|
+
const { acked, storageId, minTTLInSeconds, uploadTime } = entry;
|
|
99
90
|
const blob = (0, client_utils_1.stringToBuffer)(entry.blob, "base64");
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
91
|
+
const pendingEntry = {
|
|
92
|
+
blob,
|
|
93
|
+
opsent: true,
|
|
94
|
+
handleP: new internal_1.Deferred(),
|
|
95
|
+
storageId,
|
|
96
|
+
uploadP: undefined,
|
|
97
|
+
uploadTime,
|
|
98
|
+
minTTLInSeconds,
|
|
99
|
+
attached: true,
|
|
100
|
+
acked,
|
|
101
|
+
};
|
|
102
|
+
this.pendingBlobs.set(localId, pendingEntry);
|
|
103
|
+
if (storageId !== undefined && minTTLInSeconds && uploadTime) {
|
|
104
|
+
const timeLapseSinceLocalUpload = (Date.now() - uploadTime) / 1000;
|
|
105
105
|
// stashed entries with more than half-life in storage will not be reuploaded
|
|
106
|
-
if (
|
|
107
|
-
this.pendingBlobs.set(localId, {
|
|
108
|
-
blob,
|
|
109
|
-
uploading: false,
|
|
110
|
-
opsent: true,
|
|
111
|
-
handleP: new core_utils_1.Deferred(),
|
|
112
|
-
storageId,
|
|
113
|
-
uploadP: undefined,
|
|
114
|
-
uploadTime: entry.uploadTime,
|
|
115
|
-
minTTLInSeconds: entry.minTTLInSeconds,
|
|
116
|
-
attached,
|
|
117
|
-
acked,
|
|
118
|
-
});
|
|
106
|
+
if (minTTLInSeconds - timeLapseSinceLocalUpload > minTTLInSeconds / 2) {
|
|
119
107
|
return;
|
|
120
108
|
}
|
|
121
109
|
}
|
|
122
110
|
this.pendingBlobs.set(localId, {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
handleP: new core_utils_1.Deferred(),
|
|
111
|
+
...pendingEntry,
|
|
112
|
+
...stashedPendingBlobOverrides,
|
|
126
113
|
uploadP: this.uploadBlob(localId, blob),
|
|
127
|
-
attached,
|
|
128
|
-
acked,
|
|
129
|
-
opsent: true,
|
|
130
|
-
pendingStashed: true,
|
|
131
114
|
});
|
|
132
115
|
});
|
|
133
116
|
this.sendBlobAttachOp = (localId, blobId) => {
|
|
134
117
|
const pendingEntry = this.pendingBlobs.get(localId);
|
|
135
|
-
(0,
|
|
118
|
+
(0, internal_1.assert)(pendingEntry !== undefined, 0x725 /* Must have pending blob entry for upcoming op */);
|
|
136
119
|
if (pendingEntry?.uploadTime && pendingEntry?.minTTLInSeconds) {
|
|
137
120
|
const secondsSinceUpload = (Date.now() - pendingEntry.uploadTime) / 1000;
|
|
138
121
|
const expired = pendingEntry.minTTLInSeconds - secondsSinceUpload < 0;
|
|
@@ -144,7 +127,7 @@ class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
|
144
127
|
});
|
|
145
128
|
if (expired) {
|
|
146
129
|
// we want to avoid submitting ops with broken handles
|
|
147
|
-
this.closeContainer(new
|
|
130
|
+
this.closeContainer(new internal_4.GenericError("Trying to submit a BlobAttach for expired blob", undefined, {
|
|
148
131
|
localId,
|
|
149
132
|
blobId,
|
|
150
133
|
secondsSinceUpload,
|
|
@@ -168,22 +151,25 @@ class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
|
168
151
|
this.pendingBlobs.size > 0);
|
|
169
152
|
}
|
|
170
153
|
createAbortError(pending) {
|
|
171
|
-
return new
|
|
154
|
+
return new internal_4.LoggingError("uploadBlob aborted", {
|
|
172
155
|
acked: pending?.acked,
|
|
173
156
|
uploadTime: pending?.uploadTime,
|
|
174
157
|
});
|
|
175
158
|
}
|
|
176
|
-
|
|
177
|
-
return Array.from(this.pendingBlobs.values()).some((e) => e.
|
|
159
|
+
hasPendingStashedUploads() {
|
|
160
|
+
return Array.from(this.pendingBlobs.values()).some((e) => e.stashedUpload === true);
|
|
178
161
|
}
|
|
179
162
|
/**
|
|
180
163
|
* Upload blobs added while offline. This must be completed before connecting and resubmitting ops.
|
|
181
164
|
*/
|
|
182
|
-
async
|
|
165
|
+
async trackPendingStashedUploads() {
|
|
183
166
|
const pendingUploads = Array.from(this.pendingBlobs.values())
|
|
184
|
-
.filter((e) => e.
|
|
167
|
+
.filter((e) => e.stashedUpload === true)
|
|
185
168
|
.map(async (e) => e.uploadP);
|
|
186
|
-
|
|
169
|
+
if (pendingUploads.length === 0) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
await internal_4.PerformanceEvent.timedExecAsync(this.mc.logger, {
|
|
187
173
|
eventName: "BlobUploadProcessStashedChanges",
|
|
188
174
|
count: pendingUploads.length,
|
|
189
175
|
}, async () => Promise.all(pendingUploads), { start: true, end: true });
|
|
@@ -198,7 +184,7 @@ class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
|
198
184
|
const undefinedValueInTable = ids.delete(undefined);
|
|
199
185
|
// For a detached container, entries are inserted into the redirect table with an undefined storage ID.
|
|
200
186
|
// For an attached container, entries are inserted w/storage ID after the BlobAttach op round-trips.
|
|
201
|
-
(0,
|
|
187
|
+
(0, internal_1.assert)(!undefinedValueInTable ||
|
|
202
188
|
(this.runtime.attachState === container_definitions_1.AttachState.Detached && ids.size === 0), 0x382 /* 'redirectTable' must contain only undefined while detached / defined values while attached */);
|
|
203
189
|
return ids;
|
|
204
190
|
}
|
|
@@ -216,22 +202,22 @@ class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
|
216
202
|
}
|
|
217
203
|
let storageId;
|
|
218
204
|
if (this.runtime.attachState === container_definitions_1.AttachState.Detached) {
|
|
219
|
-
(0,
|
|
205
|
+
(0, internal_1.assert)(this.redirectTable.has(blobId), 0x383 /* requesting unknown blobs */);
|
|
220
206
|
// Blobs created while the container is detached are stored in IDetachedBlobStorage.
|
|
221
207
|
// The 'IDocumentStorageService.readBlob()' call below will retrieve these via localId.
|
|
222
208
|
storageId = blobId;
|
|
223
209
|
}
|
|
224
210
|
else {
|
|
225
211
|
const attachedStorageId = this.redirectTable.get(blobId);
|
|
226
|
-
(0,
|
|
212
|
+
(0, internal_1.assert)(!!attachedStorageId, 0x11f /* "requesting unknown blobs" */);
|
|
227
213
|
storageId = attachedStorageId;
|
|
228
214
|
}
|
|
229
|
-
return
|
|
215
|
+
return internal_4.PerformanceEvent.timedExecAsync(this.mc.logger, { eventName: "AttachmentReadBlob", id: storageId }, async () => {
|
|
230
216
|
return this.getStorage().readBlob(storageId);
|
|
231
217
|
}, { end: true, cancel: "error" });
|
|
232
218
|
}
|
|
233
219
|
getBlobHandle(id) {
|
|
234
|
-
(0,
|
|
220
|
+
(0, internal_1.assert)(this.redirectTable.has(id) || this.pendingBlobs.has(id), 0x384 /* requesting handle for unknown blob */);
|
|
235
221
|
const pending = this.pendingBlobs.get(id);
|
|
236
222
|
const callback = pending
|
|
237
223
|
? () => {
|
|
@@ -258,7 +244,7 @@ class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
|
258
244
|
this.mc.logger.sendTelemetryEvent({ eventName: "CreateBlobWhileAttaching" });
|
|
259
245
|
await new Promise((resolve) => this.runtime.once("attached", resolve));
|
|
260
246
|
}
|
|
261
|
-
(0,
|
|
247
|
+
(0, internal_1.assert)(this.runtime.attachState === container_definitions_1.AttachState.Attached, 0x385 /* For clarity and paranoid defense against adding future attachment states */);
|
|
262
248
|
if (signal?.aborted) {
|
|
263
249
|
throw this.createAbortError();
|
|
264
250
|
}
|
|
@@ -267,8 +253,7 @@ class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
|
267
253
|
const localId = (0, uuid_1.v4)();
|
|
268
254
|
const pendingEntry = {
|
|
269
255
|
blob,
|
|
270
|
-
|
|
271
|
-
handleP: new core_utils_1.Deferred(),
|
|
256
|
+
handleP: new internal_1.Deferred(),
|
|
272
257
|
uploadP: this.uploadBlob(localId, blob),
|
|
273
258
|
attached: false,
|
|
274
259
|
acked: false,
|
|
@@ -287,15 +272,15 @@ class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
|
287
272
|
});
|
|
288
273
|
}
|
|
289
274
|
async uploadBlob(localId, blob) {
|
|
290
|
-
return (0,
|
|
275
|
+
return (0, internal_2.runWithRetry)(async () => {
|
|
291
276
|
try {
|
|
292
277
|
return await this.getStorage().createBlob(blob);
|
|
293
278
|
}
|
|
294
279
|
catch (error) {
|
|
295
280
|
const entry = this.pendingBlobs.get(localId);
|
|
296
|
-
(0,
|
|
297
|
-
if (entry.opsent && !(0,
|
|
298
|
-
throw (0,
|
|
281
|
+
(0, internal_1.assert)(!!entry, 0x387 /* Must have pending blob entry for blob which failed to upload */);
|
|
282
|
+
if (entry.opsent && !(0, internal_2.canRetryOnError)(error)) {
|
|
283
|
+
throw (0, internal_4.wrapError)(error, () => new internal_4.LoggingError(`uploadBlob error`, { canRetry: true }));
|
|
299
284
|
}
|
|
300
285
|
throw error;
|
|
301
286
|
}
|
|
@@ -331,12 +316,13 @@ class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
|
331
316
|
}
|
|
332
317
|
onUploadResolve(localId, response) {
|
|
333
318
|
const entry = this.pendingBlobs.get(localId);
|
|
334
|
-
(0,
|
|
319
|
+
(0, internal_1.assert)(entry !== undefined, 0x6c8 /* pending blob entry not found for uploaded blob */);
|
|
335
320
|
if ((entry.abortSignal?.aborted === true && !entry.opsent) || this.stopAttaching) {
|
|
336
321
|
this.deletePendingBlob(localId);
|
|
337
322
|
return;
|
|
338
323
|
}
|
|
339
|
-
(0,
|
|
324
|
+
(0, internal_1.assert)(entry.storageId === undefined, 0x386 /* Must have pending blob entry for uploaded blob */);
|
|
325
|
+
entry.stashedUpload = undefined;
|
|
340
326
|
entry.storageId = response.id;
|
|
341
327
|
entry.uploadTime = Date.now();
|
|
342
328
|
entry.minTTLInSeconds = response.minTTLInSeconds;
|
|
@@ -370,13 +356,13 @@ class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
|
370
356
|
* @param metadata - op metadata containing storage and/or local IDs
|
|
371
357
|
*/
|
|
372
358
|
reSubmit(metadata) {
|
|
373
|
-
(0,
|
|
359
|
+
(0, internal_1.assert)(!!metadata, 0x38b /* Resubmitted ops must have metadata */);
|
|
374
360
|
const { localId, blobId } = metadata;
|
|
375
|
-
(0,
|
|
361
|
+
(0, internal_1.assert)(localId !== undefined, 0x50d /* local ID not available on reSubmit */);
|
|
376
362
|
const pendingEntry = this.pendingBlobs.get(localId);
|
|
377
363
|
if (!blobId) {
|
|
378
364
|
// We submitted this op while offline. The blob should have been uploaded by now.
|
|
379
|
-
(0,
|
|
365
|
+
(0, internal_1.assert)(pendingEntry?.opsent === true && !!pendingEntry?.storageId, 0x38d /* blob must be uploaded before resubmitting BlobAttach op */);
|
|
380
366
|
return this.sendBlobAttachOp(localId, pendingEntry?.storageId);
|
|
381
367
|
}
|
|
382
368
|
return this.sendBlobAttachOp(localId, blobId);
|
|
@@ -390,11 +376,8 @@ class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
|
390
376
|
this.deletePendingBlob(localId);
|
|
391
377
|
return;
|
|
392
378
|
}
|
|
393
|
-
if (pendingEntry?.pendingStashed) {
|
|
394
|
-
pendingEntry.pendingStashed = false;
|
|
395
|
-
}
|
|
396
379
|
}
|
|
397
|
-
(0,
|
|
380
|
+
(0, internal_1.assert)(blobId !== undefined, 0x12a /* "Missing blob id on metadata" */);
|
|
398
381
|
// Set up a mapping from local ID to storage ID. This is crucial since without this the blob cannot be
|
|
399
382
|
// requested from the server.
|
|
400
383
|
// Note: The check for undefined is needed for back-compat when localId was not part of the BlobAttach op that
|
|
@@ -405,7 +388,7 @@ class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
|
405
388
|
// set identity (id -> id) entry
|
|
406
389
|
this.setRedirection(blobId, blobId);
|
|
407
390
|
if (local) {
|
|
408
|
-
(0,
|
|
391
|
+
(0, internal_1.assert)(localId !== undefined, 0x50e /* local ID not present in blob attach message */);
|
|
409
392
|
const waitingBlobs = this.opsInFlight.get(blobId);
|
|
410
393
|
if (waitingBlobs !== undefined) {
|
|
411
394
|
// For each op corresponding to this storage ID that we are waiting for, resolve the pending blob.
|
|
@@ -413,7 +396,7 @@ class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
|
413
396
|
// storage ID is already in flight and any op containing this local ID will be sequenced after that.
|
|
414
397
|
waitingBlobs.forEach((pendingLocalId) => {
|
|
415
398
|
const entry = this.pendingBlobs.get(pendingLocalId);
|
|
416
|
-
(0,
|
|
399
|
+
(0, internal_1.assert)(entry !== undefined, 0x38f /* local online BlobAttach op with no pending blob entry */);
|
|
417
400
|
this.setRedirection(pendingLocalId, blobId);
|
|
418
401
|
entry.acked = true;
|
|
419
402
|
entry.handleP.resolve(this.getBlobHandle(pendingLocalId));
|
|
@@ -472,7 +455,7 @@ class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
|
472
455
|
const blobIds = this.storageIds.size > 0
|
|
473
456
|
? Array.from(this.storageIds)
|
|
474
457
|
: Array.from(this.redirectTable.keys());
|
|
475
|
-
const builder = new
|
|
458
|
+
const builder = new internal_3.SummaryTreeBuilder();
|
|
476
459
|
blobIds.forEach((blobId) => {
|
|
477
460
|
builder.addAttachment(blobId);
|
|
478
461
|
});
|
|
@@ -493,7 +476,7 @@ class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
|
493
476
|
getGCData(fullGC = false) {
|
|
494
477
|
const gcData = { gcNodes: {} };
|
|
495
478
|
for (const [localId, storageId] of this.redirectTable) {
|
|
496
|
-
(0,
|
|
479
|
+
(0, internal_1.assert)(!!storageId, 0x390 /* Must be attached to get GC data */);
|
|
497
480
|
// Only return local ids as GC nodes because a blob can only be referenced via its local id. The storage
|
|
498
481
|
// id entries have the same key and value, ignore them.
|
|
499
482
|
// The outbound routes are empty because a blob node cannot reference other nodes. It can only be referenced
|
|
@@ -548,14 +531,14 @@ class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
|
548
531
|
continue;
|
|
549
532
|
}
|
|
550
533
|
const storageId = this.redirectTable.get(blobId);
|
|
551
|
-
(0,
|
|
534
|
+
(0, internal_1.assert)(!!storageId, 0x5bb /* Must be attached to run GC */);
|
|
552
535
|
maybeUnusedStorageIds.add(storageId);
|
|
553
536
|
this.redirectTable.delete(blobId);
|
|
554
537
|
}
|
|
555
538
|
// Find out storage ids that are in-use and remove them from maybeUnusedStorageIds. A storage id is in-use if
|
|
556
539
|
// the redirect table has a local id -> storage id entry for it.
|
|
557
540
|
for (const [localId, storageId] of this.redirectTable.entries()) {
|
|
558
|
-
(0,
|
|
541
|
+
(0, internal_1.assert)(!!storageId, 0x5bc /* Must be attached to run GC */);
|
|
559
542
|
// For every storage id, the redirect table has a id -> id entry. These do not make the storage id in-use.
|
|
560
543
|
if (maybeUnusedStorageIds.has(storageId) && localId !== storageId) {
|
|
561
544
|
maybeUnusedStorageIds.delete(storageId);
|
|
@@ -603,7 +586,7 @@ class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
|
603
586
|
return;
|
|
604
587
|
}
|
|
605
588
|
const request = { url: blobId };
|
|
606
|
-
const error = (0,
|
|
589
|
+
const error = (0, internal_3.responseToException)((0, internal_3.createResponseError)(404, `Blob was deleted`, request), request);
|
|
607
590
|
// Only log deleted events. Tombstone events are logged by garbage collector.
|
|
608
591
|
this.mc.logger.sendErrorEvent({
|
|
609
592
|
eventName: "GC_Deleted_Blob_Requested",
|
|
@@ -612,17 +595,17 @@ class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
|
612
595
|
throw error;
|
|
613
596
|
}
|
|
614
597
|
setRedirectTable(table) {
|
|
615
|
-
(0,
|
|
616
|
-
(0,
|
|
598
|
+
(0, internal_1.assert)(this.runtime.attachState === container_definitions_1.AttachState.Detached, 0x252 /* "redirect table can only be set in detached container" */);
|
|
599
|
+
(0, internal_1.assert)(this.redirectTable.size === table.size, 0x391 /* Redirect table size must match BlobManager's local ID count */);
|
|
617
600
|
for (const [localId, storageId] of table) {
|
|
618
|
-
(0,
|
|
601
|
+
(0, internal_1.assert)(this.redirectTable.has(localId), 0x254 /* "unrecognized id in redirect table" */);
|
|
619
602
|
this.setRedirection(localId, storageId);
|
|
620
603
|
// set identity (id -> id) entry
|
|
621
604
|
this.setRedirection(storageId, storageId);
|
|
622
605
|
}
|
|
623
606
|
}
|
|
624
607
|
async attachAndGetPendingBlobs(stopBlobAttachingSignal) {
|
|
625
|
-
return
|
|
608
|
+
return internal_4.PerformanceEvent.timedExecAsync(this.mc.logger, { eventName: "GetPendingBlobs" }, async () => {
|
|
626
609
|
if (this.pendingBlobs.size === 0) {
|
|
627
610
|
return;
|
|
628
611
|
}
|
|
@@ -664,14 +647,13 @@ class BlobManager extends client_utils_1.TypedEventEmitter {
|
|
|
664
647
|
});
|
|
665
648
|
continue;
|
|
666
649
|
}
|
|
667
|
-
(0,
|
|
650
|
+
(0, internal_1.assert)(entry.attached === true, 0x790 /* stashed blob should be attached */);
|
|
668
651
|
if (!entry.opsent) {
|
|
669
652
|
this.sendBlobAttachOp(id, entry.storageId);
|
|
670
653
|
}
|
|
671
654
|
blobs[id] = {
|
|
672
655
|
blob: (0, client_utils_1.bufferToString)(entry.blob, "base64"),
|
|
673
656
|
storageId: entry.storageId,
|
|
674
|
-
attached: entry.attached,
|
|
675
657
|
acked: entry.acked,
|
|
676
658
|
minTTLInSeconds: entry.minTTLInSeconds,
|
|
677
659
|
uploadTime: entry.uploadTime,
|
|
@@ -697,7 +679,7 @@ function getGCNodePathFromBlobId(blobId) {
|
|
|
697
679
|
*/
|
|
698
680
|
function getBlobIdFromGCNodePath(nodePath) {
|
|
699
681
|
const pathParts = nodePath.split("/");
|
|
700
|
-
(0,
|
|
682
|
+
(0, internal_1.assert)(pathParts.length === 3 && pathParts[1] === BlobManager.basePath, 0x5bd /* Invalid blob node path */);
|
|
701
683
|
return pathParts[2];
|
|
702
684
|
}
|
|
703
685
|
//# sourceMappingURL=blobManager.js.map
|