@fluidframework/container-runtime 2.0.0-internal.3.0.2 → 2.0.0-internal.3.2.0
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 +19 -19
- package/.mocharc.js +2 -2
- package/api-extractor.json +2 -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 +15 -2
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +109 -37
- 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 +23 -11
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +225 -132
- 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 +27 -13
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +95 -56
- 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 +28 -4
- package/dist/dataStores.d.ts.map +1 -1
- package/dist/dataStores.js +122 -44
- package/dist/dataStores.js.map +1 -1
- package/dist/deltaScheduler.d.ts.map +1 -1
- package/dist/deltaScheduler.js +8 -3
- package/dist/deltaScheduler.js.map +1 -1
- package/dist/{garbageCollection.d.ts → gc/garbageCollection.d.ts} +27 -203
- package/dist/gc/garbageCollection.d.ts.map +1 -0
- package/dist/{garbageCollection.js → gc/garbageCollection.js} +210 -400
- package/dist/gc/garbageCollection.js.map +1 -0
- package/dist/gc/gcDefinitions.d.ts +189 -0
- package/dist/gc/gcDefinitions.d.ts.map +1 -0
- package/dist/{garbageCollectionConstants.js → gc/gcDefinitions.js} +27 -2
- package/dist/gc/gcDefinitions.js.map +1 -0
- package/dist/gc/gcHelpers.d.ts +30 -0
- package/dist/gc/gcHelpers.d.ts.map +1 -0
- package/dist/gc/gcHelpers.js +65 -0
- package/dist/gc/gcHelpers.js.map +1 -0
- package/dist/gc/gcSummaryStateTracker.d.ts +86 -0
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -0
- package/dist/gc/gcSummaryStateTracker.js +246 -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 +11 -0
- package/dist/gc/index.d.ts.map +1 -0
- package/dist/gc/index.js +40 -0
- package/dist/gc/index.js.map +1 -0
- package/dist/index.d.ts +2 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -9
- package/dist/index.js.map +1 -1
- package/dist/opLifecycle/batchManager.d.ts +2 -13
- package/dist/opLifecycle/batchManager.d.ts.map +1 -1
- package/dist/opLifecycle/batchManager.js +19 -41
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/definitions.d.ts +4 -0
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -1
- package/dist/opLifecycle/index.d.ts.map +1 -1
- package/dist/opLifecycle/index.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +1 -0
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +5 -2
- package/dist/opLifecycle/opDecompressor.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 +24 -13
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +19 -3
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +78 -45
- 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/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 +8 -2
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +21 -13
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js +3 -2
- package/dist/scheduleManager.js.map +1 -1
- package/dist/serializedSnapshotStorage.d.ts +2 -2
- package/dist/serializedSnapshotStorage.d.ts.map +1 -1
- package/dist/serializedSnapshotStorage.js +5 -3
- package/dist/serializedSnapshotStorage.js.map +1 -1
- package/dist/summary/index.d.ts +17 -0
- package/dist/summary/index.d.ts.map +1 -0
- package/dist/summary/index.js +47 -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/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
- 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 -76
- package/dist/summary/runningSummarizer.js.map +1 -0
- package/dist/{summarizer.d.ts → summary/summarizer.d.ts} +4 -6
- package/dist/summary/summarizer.d.ts.map +1 -0
- package/dist/{summarizer.js → summary/summarizer.js} +31 -71
- package/dist/summary/summarizer.js.map +1 -0
- package/dist/summary/summarizerClientElection.d.ts.map +1 -0
- package/dist/summary/summarizerClientElection.js.map +1 -0
- package/dist/summary/summarizerHandle.d.ts.map +1 -0
- package/dist/summary/summarizerHandle.js.map +1 -0
- package/{lib → dist/summary}/summarizerHeuristics.d.ts +1 -1
- package/dist/summary/summarizerHeuristics.d.ts.map +1 -0
- package/dist/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +6 -9
- package/dist/summary/summarizerHeuristics.js.map +1 -0
- package/{lib → dist/summary}/summarizerTypes.d.ts +22 -22
- package/dist/summary/summarizerTypes.d.ts.map +1 -0
- 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 +1 -40
- package/dist/summary/summaryFormat.d.ts.map +1 -0
- package/dist/{summaryFormat.js → summary/summaryFormat.js} +19 -20
- package/dist/summary/summaryFormat.js.map +1 -0
- package/dist/summary/summaryGenerator.d.ts.map +1 -0
- package/dist/{summaryGenerator.js → summary/summaryGenerator.js} +33 -15
- 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.map +1 -1
- package/lib/batchTracker.js +2 -1
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager.d.ts +15 -2
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +109 -37
- 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 +23 -11
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +201 -108
- 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 +27 -13
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +84 -45
- 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 +28 -4
- package/lib/dataStores.d.ts.map +1 -1
- package/lib/dataStores.js +120 -42
- package/lib/dataStores.js.map +1 -1
- package/lib/deltaScheduler.d.ts.map +1 -1
- package/lib/deltaScheduler.js +9 -4
- package/lib/deltaScheduler.js.map +1 -1
- package/lib/{garbageCollection.d.ts → gc/garbageCollection.d.ts} +27 -203
- package/lib/gc/garbageCollection.d.ts.map +1 -0
- package/lib/{garbageCollection.js → gc/garbageCollection.js} +190 -379
- package/lib/gc/garbageCollection.js.map +1 -0
- package/lib/gc/gcDefinitions.d.ts +189 -0
- package/lib/gc/gcDefinitions.d.ts.map +1 -0
- package/lib/{garbageCollectionConstants.js → gc/gcDefinitions.js} +26 -1
- package/lib/gc/gcDefinitions.js.map +1 -0
- package/lib/gc/gcHelpers.d.ts +30 -0
- package/lib/gc/gcHelpers.d.ts.map +1 -0
- package/lib/gc/gcHelpers.js +58 -0
- package/lib/gc/gcHelpers.js.map +1 -0
- package/lib/gc/gcSummaryStateTracker.d.ts +86 -0
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
- package/lib/gc/gcSummaryStateTracker.js +242 -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 +11 -0
- package/lib/gc/index.d.ts.map +1 -0
- package/lib/gc/index.js +11 -0
- package/lib/gc/index.js.map +1 -0
- package/lib/index.d.ts +2 -5
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -4
- package/lib/index.js.map +1 -1
- package/lib/opLifecycle/batchManager.d.ts +2 -13
- package/lib/opLifecycle/batchManager.d.ts.map +1 -1
- package/lib/opLifecycle/batchManager.js +19 -41
- package/lib/opLifecycle/batchManager.js.map +1 -1
- package/lib/opLifecycle/definitions.d.ts +4 -0
- package/lib/opLifecycle/definitions.d.ts.map +1 -1
- package/lib/opLifecycle/definitions.js.map +1 -1
- package/lib/opLifecycle/index.d.ts.map +1 -1
- package/lib/opLifecycle/index.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js +1 -0
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +5 -2
- package/lib/opLifecycle/opDecompressor.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 +25 -14
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +19 -3
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +79 -46
- 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/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 +8 -2
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +21 -13
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/scheduleManager.d.ts.map +1 -1
- package/lib/scheduleManager.js +3 -2
- package/lib/scheduleManager.js.map +1 -1
- package/lib/serializedSnapshotStorage.d.ts +2 -2
- package/lib/serializedSnapshotStorage.d.ts.map +1 -1
- package/lib/serializedSnapshotStorage.js +5 -3
- package/lib/serializedSnapshotStorage.js.map +1 -1
- package/lib/summary/index.d.ts +17 -0
- package/lib/summary/index.d.ts.map +1 -0
- package/lib/summary/index.js +16 -0
- package/lib/summary/index.js.map +1 -0
- package/lib/summary/orderedClientElection.d.ts.map +1 -0
- package/lib/{orderedClientElection.js → summary/orderedClientElection.js} +10 -4
- package/lib/summary/orderedClientElection.js.map +1 -0
- package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
- 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 -78
- package/lib/summary/runningSummarizer.js.map +1 -0
- package/lib/{summarizer.d.ts → summary/summarizer.d.ts} +4 -6
- package/lib/summary/summarizer.d.ts.map +1 -0
- package/lib/{summarizer.js → summary/summarizer.js} +33 -73
- package/lib/summary/summarizer.js.map +1 -0
- package/lib/summary/summarizerClientElection.d.ts.map +1 -0
- package/lib/summary/summarizerClientElection.js.map +1 -0
- package/lib/summary/summarizerHandle.d.ts.map +1 -0
- package/lib/summary/summarizerHandle.js.map +1 -0
- package/{dist → lib/summary}/summarizerHeuristics.d.ts +1 -1
- package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
- package/lib/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +6 -9
- package/lib/summary/summarizerHeuristics.js.map +1 -0
- package/{dist → lib/summary}/summarizerTypes.d.ts +22 -22
- package/lib/summary/summarizerTypes.d.ts.map +1 -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 +1 -40
- package/lib/summary/summaryFormat.d.ts.map +1 -0
- package/lib/{summaryFormat.js → summary/summaryFormat.js} +20 -20
- package/lib/summary/summaryFormat.js.map +1 -0
- package/lib/summary/summaryGenerator.d.ts.map +1 -0
- package/lib/{summaryGenerator.js → summary/summaryGenerator.js} +33 -15
- 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 +60 -51
- package/prettier.config.cjs +1 -1
- package/src/batchTracker.ts +54 -49
- package/src/blobManager.ts +825 -674
- package/src/connectionTelemetry.ts +280 -249
- package/src/containerHandleContext.ts +27 -29
- package/src/containerRuntime.ts +3249 -2978
- package/src/dataStore.ts +172 -159
- package/src/dataStoreContext.ts +1141 -1057
- package/src/dataStoreContexts.ts +178 -161
- package/src/dataStoreRegistry.ts +25 -20
- package/src/dataStores.ts +880 -731
- package/src/deltaScheduler.ts +158 -150
- package/{garbageCollection.md → src/gc/garbageCollection.md} +16 -3
- package/src/gc/garbageCollection.ts +1506 -0
- package/src/gc/gcDefinitions.ts +244 -0
- package/src/gc/gcHelpers.ts +86 -0
- package/src/gc/gcSummaryStateTracker.ts +339 -0
- package/src/gc/gcSweepReadyUsageDetection.ts +145 -0
- package/src/gc/gcUnreferencedStateTracker.ts +114 -0
- package/src/gc/index.ts +40 -0
- package/src/index.ts +67 -70
- package/src/opLifecycle/README.md +152 -0
- package/src/opLifecycle/batchManager.ts +101 -144
- package/src/opLifecycle/definitions.ts +33 -29
- package/src/opLifecycle/index.ts +5 -5
- package/src/opLifecycle/opCompressor.ts +55 -53
- package/src/opLifecycle/opDecompressor.ts +100 -81
- package/src/opLifecycle/opSplitter.ts +233 -188
- package/src/opLifecycle/outbox.ts +251 -195
- package/src/opLifecycle/remoteMessageProcessor.ts +62 -62
- package/src/opProperties.ts +11 -9
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +396 -338
- package/src/scheduleManager.ts +299 -269
- package/src/serializedSnapshotStorage.ts +126 -112
- package/src/summary/index.ts +99 -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 +386 -0
- package/src/summary/summarizerClientElection.ts +139 -0
- package/src/{summarizerHandle.ts → summary/summarizerHandle.ts} +11 -9
- package/src/summary/summarizerHeuristics.ts +219 -0
- package/src/summary/summarizerTypes.ts +521 -0
- package/src/summary/summaryCollection.ts +450 -0
- package/src/summary/summaryFormat.ts +226 -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.map +0 -1
- package/dist/garbageCollection.js.map +0 -1
- package/dist/garbageCollectionConstants.d.ts +0 -25
- package/dist/garbageCollectionConstants.d.ts.map +0 -1
- package/dist/garbageCollectionConstants.js.map +0 -1
- package/dist/garbageCollectionTombstoneUtils.d.ts +0 -14
- package/dist/garbageCollectionTombstoneUtils.d.ts.map +0 -1
- package/dist/garbageCollectionTombstoneUtils.js +0 -23
- package/dist/garbageCollectionTombstoneUtils.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/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.map +0 -1
- 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.map +0 -1
- package/lib/garbageCollection.js.map +0 -1
- package/lib/garbageCollectionConstants.d.ts +0 -25
- package/lib/garbageCollectionConstants.d.ts.map +0 -1
- package/lib/garbageCollectionConstants.js.map +0 -1
- package/lib/garbageCollectionTombstoneUtils.d.ts +0 -14
- package/lib/garbageCollectionTombstoneUtils.d.ts.map +0 -1
- package/lib/garbageCollectionTombstoneUtils.js +0 -19
- package/lib/garbageCollectionTombstoneUtils.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/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.map +0 -1
- 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.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 -1800
- package/src/garbageCollectionConstants.ts +0 -41
- package/src/garbageCollectionTombstoneUtils.ts +0 -28
- package/src/gcSweepReadyUsageDetection.ts +0 -139
- package/src/orderedClientElection.ts +0 -532
- package/src/runWhileConnectedCoordinator.ts +0 -106
- package/src/runningSummarizer.ts +0 -610
- package/src/summarizer.ts +0 -421
- package/src/summarizerClientElection.ts +0 -132
- package/src/summarizerHeuristics.ts +0 -222
- package/src/summarizerTypes.ts +0 -507
- package/src/summaryCollection.ts +0 -421
- package/src/summaryFormat.ts +0 -256
- package/src/summaryGenerator.ts +0 -450
- package/src/summaryManager.ts +0 -394
- /package/dist/{orderedClientElection.d.ts → summary/orderedClientElection.d.ts} +0 -0
- /package/dist/{runWhileConnectedCoordinator.d.ts → summary/runWhileConnectedCoordinator.d.ts} +0 -0
- /package/dist/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.js} +0 -0
- /package/dist/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +0 -0
- /package/dist/{summarizerClientElection.js → summary/summarizerClientElection.js} +0 -0
- /package/dist/{summarizerHandle.d.ts → summary/summarizerHandle.d.ts} +0 -0
- /package/dist/{summarizerHandle.js → summary/summarizerHandle.js} +0 -0
- /package/dist/{summarizerTypes.js → summary/summarizerTypes.js} +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/{runWhileConnectedCoordinator.d.ts → summary/runWhileConnectedCoordinator.d.ts} +0 -0
- /package/lib/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.js} +0 -0
- /package/lib/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +0 -0
- /package/lib/{summarizerClientElection.js → summary/summarizerClientElection.js} +0 -0
- /package/lib/{summarizerHandle.d.ts → summary/summarizerHandle.d.ts} +0 -0
- /package/lib/{summarizerHandle.js → summary/summarizerHandle.js} +0 -0
- /package/lib/{summarizerTypes.js → summary/summarizerTypes.js} +0 -0
- /package/lib/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +0 -0
- /package/lib/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +0 -0
package/dist/dataStore.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataStore.d.ts","sourceRoot":"","sources":["../src/dataStore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"dataStore.d.ts","sourceRoot":"","sources":["../src/dataStore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAKtE,OAAO,EAEN,UAAU,EACV,sBAAsB,EACtB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACtC,uCAAuC;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,+BACP,GAAG,yDAM/B,CAAC;AAEF,eAAO,MAAM,kBAAkB,0BACP,sBAAsB,cACjC,MAAM,WACT,gBAAgB,cACb,UAAU,UACd,gBAAgB,KACtB,UAA2F,CAAC"}
|
package/dist/dataStore.js
CHANGED
|
@@ -16,8 +16,8 @@ const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
|
|
|
16
16
|
* @returns True if the {@link IDataStoreAliasMessage} is fully implemented, false otherwise
|
|
17
17
|
*/
|
|
18
18
|
const isDataStoreAliasMessage = (maybeDataStoreAliasMessage) => {
|
|
19
|
-
return typeof (maybeDataStoreAliasMessage === null || maybeDataStoreAliasMessage === void 0 ? void 0 : maybeDataStoreAliasMessage.internalId) === "string"
|
|
20
|
-
|
|
19
|
+
return (typeof (maybeDataStoreAliasMessage === null || maybeDataStoreAliasMessage === void 0 ? void 0 : maybeDataStoreAliasMessage.internalId) === "string" &&
|
|
20
|
+
typeof (maybeDataStoreAliasMessage === null || maybeDataStoreAliasMessage === void 0 ? void 0 : maybeDataStoreAliasMessage.alias) === "string");
|
|
21
21
|
};
|
|
22
22
|
exports.isDataStoreAliasMessage = isDataStoreAliasMessage;
|
|
23
23
|
const channelToDataStore = (fluidDataStoreChannel, internalId, runtime, datastores, logger) => new DataStore(fluidDataStoreChannel, internalId, runtime, datastores, logger);
|
|
@@ -64,7 +64,8 @@ class DataStore {
|
|
|
64
64
|
// or for this alias, so it is safe to continue execution
|
|
65
65
|
break;
|
|
66
66
|
}
|
|
67
|
-
default:
|
|
67
|
+
default:
|
|
68
|
+
(0, common_utils_1.unreachableCase)(this.aliasState);
|
|
68
69
|
}
|
|
69
70
|
this.aliasState = AliasState.Aliasing;
|
|
70
71
|
this.aliasResult = this.trySetAliasInternal(alias);
|
|
@@ -84,8 +85,7 @@ class DataStore {
|
|
|
84
85
|
this.aliasState = AliasState.Aliased;
|
|
85
86
|
return localResult ? "Success" : "Conflict";
|
|
86
87
|
}
|
|
87
|
-
const aliased = await this
|
|
88
|
-
.ackBasedPromise((resolve) => {
|
|
88
|
+
const aliased = await this.ackBasedPromise((resolve) => {
|
|
89
89
|
this.runtime.submitDataStoreAliasOp(message, resolve);
|
|
90
90
|
})
|
|
91
91
|
.catch((error) => {
|
|
@@ -101,7 +101,8 @@ class DataStore {
|
|
|
101
101
|
},
|
|
102
102
|
}, error);
|
|
103
103
|
return false;
|
|
104
|
-
})
|
|
104
|
+
})
|
|
105
|
+
.finally(() => {
|
|
105
106
|
this.pendingAliases.delete(alias);
|
|
106
107
|
});
|
|
107
108
|
if (!aliased) {
|
|
@@ -122,12 +123,13 @@ class DataStore {
|
|
|
122
123
|
get entryPoint() {
|
|
123
124
|
return this.fluidDataStoreChannel.entryPoint;
|
|
124
125
|
}
|
|
125
|
-
get IFluidRouter() {
|
|
126
|
+
get IFluidRouter() {
|
|
127
|
+
return this.fluidDataStoreChannel;
|
|
128
|
+
}
|
|
126
129
|
async ackBasedPromise(executor) {
|
|
127
130
|
let rejectBecauseDispose;
|
|
128
131
|
return new Promise((resolve, reject) => {
|
|
129
|
-
rejectBecauseDispose =
|
|
130
|
-
() => reject(new Error("ContainerRuntime disposed while this ack-based Promise was pending"));
|
|
132
|
+
rejectBecauseDispose = () => reject(new Error("ContainerRuntime disposed while this ack-based Promise was pending"));
|
|
131
133
|
if (this.runtime.disposed) {
|
|
132
134
|
rejectBecauseDispose();
|
|
133
135
|
return;
|
package/dist/dataStore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataStore.js","sourceRoot":"","sources":["../src/dataStore.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { assert, unreachableCase } from \"@fluidframework/common-utils\";\nimport { AttachState } from \"@fluidframework/container-definitions\";\nimport { UsageError } from \"@fluidframework/container-utils\";\nimport {\n FluidObject,\n IFluidHandle,\n IRequest,\n IResponse,\n} from \"@fluidframework/core-interfaces\";\nimport { AliasResult, IDataStore, IFluidDataStoreChannel } from \"@fluidframework/runtime-definitions\";\nimport { TelemetryDataTag } from \"@fluidframework/telemetry-utils\";\nimport { ContainerRuntime } from \"./containerRuntime\";\nimport { DataStores } from \"./dataStores\";\n\n/**\n * Interface for an op to be used for assigning an\n * alias to a datastore\n */\nexport interface IDataStoreAliasMessage {\n /** The internal id of the datastore */\n readonly internalId: string;\n /** The alias name to be assigned to the datastore */\n readonly alias: string;\n}\n\n/**\n * Type guard that returns true if the given alias message is actually an instance of\n * a class which implements {@link IDataStoreAliasMessage}\n * @param maybeDataStoreAliasMessage - message object to be validated\n * @returns True if the {@link IDataStoreAliasMessage} is fully implemented, false otherwise\n */\nexport const isDataStoreAliasMessage = (\n maybeDataStoreAliasMessage: any,\n): maybeDataStoreAliasMessage is IDataStoreAliasMessage => {\n return typeof maybeDataStoreAliasMessage?.internalId === \"string\"\n && typeof maybeDataStoreAliasMessage?.alias === \"string\";\n};\n\nexport const channelToDataStore = (\n fluidDataStoreChannel: IFluidDataStoreChannel,\n internalId: string,\n runtime: ContainerRuntime,\n datastores: DataStores,\n logger: ITelemetryLogger,\n): IDataStore => new DataStore(fluidDataStoreChannel, internalId, runtime, datastores, logger);\n\nenum AliasState {\n Aliased = \"Aliased\",\n Aliasing = \"Aliasing\",\n None = \"None\",\n}\n\nclass DataStore implements IDataStore {\n private aliasState: AliasState = AliasState.None;\n private alias: string | undefined;\n private readonly pendingAliases: Map<string, Promise<AliasResult>>;\n private aliasResult: Promise<AliasResult> | undefined;\n\n async trySetAlias(alias: string): Promise<AliasResult> {\n if (alias.includes(\"/\")) {\n throw new UsageError(`The alias cannot contain slashes: '${alias}'`);\n }\n\n switch (this.aliasState) {\n // If we're already aliasing, check if it's for the same value and return\n // the stored promise, otherwise return 'AlreadyAliased'\n case AliasState.Aliasing:\n assert(this.aliasResult !== undefined,\n 0x316 /* There should be a cached promise of in-progress aliasing */);\n await this.aliasResult;\n return this.alias === alias ? \"Success\" : \"AlreadyAliased\";\n\n // If this datastore is already aliased, return true only if this\n // is a repeated call for the same alias\n case AliasState.Aliased:\n return this.alias === alias ? \"Success\" : \"AlreadyAliased\";\n\n case AliasState.None: {\n const existingAlias = this.pendingAliases.get(alias);\n if (existingAlias !== undefined) {\n // There is already another datastore which will be aliased\n // to the same name\n return \"Conflict\";\n }\n\n // There is no current or past alias operation for this datastore,\n // or for this alias, so it is safe to continue execution\n break;\n }\n\n default: unreachableCase(this.aliasState);\n }\n\n this.aliasState = AliasState.Aliasing;\n this.aliasResult = this.trySetAliasInternal(alias);\n this.pendingAliases.set(alias, this.aliasResult);\n return this.aliasResult;\n }\n\n async trySetAliasInternal(alias: string): Promise<AliasResult> {\n const message: IDataStoreAliasMessage = {\n internalId: this.internalId,\n alias,\n };\n\n this.fluidDataStoreChannel.makeVisibleAndAttachGraph();\n\n if (this.runtime.attachState === AttachState.Detached) {\n const localResult = this.datastores.processAliasMessageCore(message);\n // Explicitly lock-out future attempts of aliasing,\n // regardless of result\n this.aliasState = AliasState.Aliased;\n return localResult ? \"Success\" : \"Conflict\";\n }\n\n const aliased = await this\n .ackBasedPromise<boolean>((resolve) => {\n this.runtime.submitDataStoreAliasOp(message, resolve);\n })\n .catch((error) => {\n this.logger.sendErrorEvent({\n eventName: \"AliasingException\",\n alias: {\n value: alias,\n tag: TelemetryDataTag.UserData,\n },\n internalId: {\n value: this.internalId,\n tag: TelemetryDataTag.CodeArtifact,\n },\n }, error);\n\n return false;\n }).finally(() => {\n this.pendingAliases.delete(alias);\n });\n\n if (!aliased) {\n this.aliasState = AliasState.None;\n this.aliasResult = undefined;\n return \"Conflict\";\n }\n\n this.alias = alias;\n this.aliasState = AliasState.Aliased;\n return \"Success\";\n }\n\n async request(request: IRequest): Promise<IResponse> {\n return this.fluidDataStoreChannel.request(request);\n }\n\n /**\n * {@inheritDoc @fluidframework/runtime-definitions#IDataStore.entryPoint}\n */\n get entryPoint(): IFluidHandle<FluidObject> | undefined {\n return this.fluidDataStoreChannel.entryPoint;\n }\n\n constructor(\n private readonly fluidDataStoreChannel: IFluidDataStoreChannel,\n private readonly internalId: string,\n private readonly runtime: ContainerRuntime,\n private readonly datastores: DataStores,\n private readonly logger: ITelemetryLogger,\n ) {\n this.pendingAliases = datastores.pendingAliases;\n }\n\n public get IFluidRouter() { return this.fluidDataStoreChannel; }\n\n private async ackBasedPromise<T>(\n executor: (resolve: (value: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void) => void,\n ): Promise<T> {\n let rejectBecauseDispose: () => void;\n return new Promise<T>((resolve, reject) => {\n rejectBecauseDispose =\n () => reject(new Error(\"ContainerRuntime disposed while this ack-based Promise was pending\"));\n\n if (this.runtime.disposed) {\n rejectBecauseDispose();\n return;\n }\n\n this.runtime.on(\"dispose\", rejectBecauseDispose);\n executor(resolve, reject);\n }).finally(() => {\n this.runtime.off(\"dispose\", rejectBecauseDispose);\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dataStore.js","sourceRoot":"","sources":["../src/dataStore.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { assert, unreachableCase } from \"@fluidframework/common-utils\";\nimport { AttachState } from \"@fluidframework/container-definitions\";\nimport { UsageError } from \"@fluidframework/container-utils\";\nimport { FluidObject, IFluidHandle, IRequest, IResponse } from \"@fluidframework/core-interfaces\";\nimport {\n\tAliasResult,\n\tIDataStore,\n\tIFluidDataStoreChannel,\n} from \"@fluidframework/runtime-definitions\";\nimport { TelemetryDataTag } from \"@fluidframework/telemetry-utils\";\nimport { ContainerRuntime } from \"./containerRuntime\";\nimport { DataStores } from \"./dataStores\";\n\n/**\n * Interface for an op to be used for assigning an\n * alias to a datastore\n */\nexport interface IDataStoreAliasMessage {\n\t/** The internal id of the datastore */\n\treadonly internalId: string;\n\t/** The alias name to be assigned to the datastore */\n\treadonly alias: string;\n}\n\n/**\n * Type guard that returns true if the given alias message is actually an instance of\n * a class which implements {@link IDataStoreAliasMessage}\n * @param maybeDataStoreAliasMessage - message object to be validated\n * @returns True if the {@link IDataStoreAliasMessage} is fully implemented, false otherwise\n */\nexport const isDataStoreAliasMessage = (\n\tmaybeDataStoreAliasMessage: any,\n): maybeDataStoreAliasMessage is IDataStoreAliasMessage => {\n\treturn (\n\t\ttypeof maybeDataStoreAliasMessage?.internalId === \"string\" &&\n\t\ttypeof maybeDataStoreAliasMessage?.alias === \"string\"\n\t);\n};\n\nexport const channelToDataStore = (\n\tfluidDataStoreChannel: IFluidDataStoreChannel,\n\tinternalId: string,\n\truntime: ContainerRuntime,\n\tdatastores: DataStores,\n\tlogger: ITelemetryLogger,\n): IDataStore => new DataStore(fluidDataStoreChannel, internalId, runtime, datastores, logger);\n\nenum AliasState {\n\tAliased = \"Aliased\",\n\tAliasing = \"Aliasing\",\n\tNone = \"None\",\n}\n\nclass DataStore implements IDataStore {\n\tprivate aliasState: AliasState = AliasState.None;\n\tprivate alias: string | undefined;\n\tprivate readonly pendingAliases: Map<string, Promise<AliasResult>>;\n\tprivate aliasResult: Promise<AliasResult> | undefined;\n\n\tasync trySetAlias(alias: string): Promise<AliasResult> {\n\t\tif (alias.includes(\"/\")) {\n\t\t\tthrow new UsageError(`The alias cannot contain slashes: '${alias}'`);\n\t\t}\n\n\t\tswitch (this.aliasState) {\n\t\t\t// If we're already aliasing, check if it's for the same value and return\n\t\t\t// the stored promise, otherwise return 'AlreadyAliased'\n\t\t\tcase AliasState.Aliasing:\n\t\t\t\tassert(\n\t\t\t\t\tthis.aliasResult !== undefined,\n\t\t\t\t\t0x316 /* There should be a cached promise of in-progress aliasing */,\n\t\t\t\t);\n\t\t\t\tawait this.aliasResult;\n\t\t\t\treturn this.alias === alias ? \"Success\" : \"AlreadyAliased\";\n\n\t\t\t// If this datastore is already aliased, return true only if this\n\t\t\t// is a repeated call for the same alias\n\t\t\tcase AliasState.Aliased:\n\t\t\t\treturn this.alias === alias ? \"Success\" : \"AlreadyAliased\";\n\n\t\t\tcase AliasState.None: {\n\t\t\t\tconst existingAlias = this.pendingAliases.get(alias);\n\t\t\t\tif (existingAlias !== undefined) {\n\t\t\t\t\t// There is already another datastore which will be aliased\n\t\t\t\t\t// to the same name\n\t\t\t\t\treturn \"Conflict\";\n\t\t\t\t}\n\n\t\t\t\t// There is no current or past alias operation for this datastore,\n\t\t\t\t// or for this alias, so it is safe to continue execution\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tunreachableCase(this.aliasState);\n\t\t}\n\n\t\tthis.aliasState = AliasState.Aliasing;\n\t\tthis.aliasResult = this.trySetAliasInternal(alias);\n\t\tthis.pendingAliases.set(alias, this.aliasResult);\n\t\treturn this.aliasResult;\n\t}\n\n\tasync trySetAliasInternal(alias: string): Promise<AliasResult> {\n\t\tconst message: IDataStoreAliasMessage = {\n\t\t\tinternalId: this.internalId,\n\t\t\talias,\n\t\t};\n\n\t\tthis.fluidDataStoreChannel.makeVisibleAndAttachGraph();\n\n\t\tif (this.runtime.attachState === AttachState.Detached) {\n\t\t\tconst localResult = this.datastores.processAliasMessageCore(message);\n\t\t\t// Explicitly lock-out future attempts of aliasing,\n\t\t\t// regardless of result\n\t\t\tthis.aliasState = AliasState.Aliased;\n\t\t\treturn localResult ? \"Success\" : \"Conflict\";\n\t\t}\n\n\t\tconst aliased = await this.ackBasedPromise<boolean>((resolve) => {\n\t\t\tthis.runtime.submitDataStoreAliasOp(message, resolve);\n\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tthis.logger.sendErrorEvent(\n\t\t\t\t\t{\n\t\t\t\t\t\teventName: \"AliasingException\",\n\t\t\t\t\t\talias: {\n\t\t\t\t\t\t\tvalue: alias,\n\t\t\t\t\t\t\ttag: TelemetryDataTag.UserData,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinternalId: {\n\t\t\t\t\t\t\tvalue: this.internalId,\n\t\t\t\t\t\t\ttag: TelemetryDataTag.CodeArtifact,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\terror,\n\t\t\t\t);\n\n\t\t\t\treturn false;\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.pendingAliases.delete(alias);\n\t\t\t});\n\n\t\tif (!aliased) {\n\t\t\tthis.aliasState = AliasState.None;\n\t\t\tthis.aliasResult = undefined;\n\t\t\treturn \"Conflict\";\n\t\t}\n\n\t\tthis.alias = alias;\n\t\tthis.aliasState = AliasState.Aliased;\n\t\treturn \"Success\";\n\t}\n\n\tasync request(request: IRequest): Promise<IResponse> {\n\t\treturn this.fluidDataStoreChannel.request(request);\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/runtime-definitions#IDataStore.entryPoint}\n\t */\n\tget entryPoint(): IFluidHandle<FluidObject> | undefined {\n\t\treturn this.fluidDataStoreChannel.entryPoint;\n\t}\n\n\tconstructor(\n\t\tprivate readonly fluidDataStoreChannel: IFluidDataStoreChannel,\n\t\tprivate readonly internalId: string,\n\t\tprivate readonly runtime: ContainerRuntime,\n\t\tprivate readonly datastores: DataStores,\n\t\tprivate readonly logger: ITelemetryLogger,\n\t) {\n\t\tthis.pendingAliases = datastores.pendingAliases;\n\t}\n\n\tpublic get IFluidRouter() {\n\t\treturn this.fluidDataStoreChannel;\n\t}\n\n\tprivate async ackBasedPromise<T>(\n\t\texecutor: (\n\t\t\tresolve: (value: T | PromiseLike<T>) => void,\n\t\t\treject: (reason?: any) => void,\n\t\t) => void,\n\t): Promise<T> {\n\t\tlet rejectBecauseDispose: () => void;\n\t\treturn new Promise<T>((resolve, reject) => {\n\t\t\trejectBecauseDispose = () =>\n\t\t\t\treject(\n\t\t\t\t\tnew Error(\"ContainerRuntime disposed while this ack-based Promise was pending\"),\n\t\t\t\t);\n\n\t\t\tif (this.runtime.disposed) {\n\t\t\t\trejectBecauseDispose();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.runtime.on(\"dispose\", rejectBecauseDispose);\n\t\t\texecutor(resolve, reject);\n\t\t}).finally(() => {\n\t\t\tthis.runtime.off(\"dispose\", rejectBecauseDispose);\n\t\t});\n\t}\n}\n"]}
|
|
@@ -9,7 +9,8 @@ import { Deferred, TypedEventEmitter } from "@fluidframework/common-utils";
|
|
|
9
9
|
import { IDocumentStorageService } from "@fluidframework/driver-definitions";
|
|
10
10
|
import { IClientDetails, IDocumentMessage, IQuorumClients, ISequencedDocumentMessage, ISnapshotTree, ITreeEntry } from "@fluidframework/protocol-definitions";
|
|
11
11
|
import { IContainerRuntime } from "@fluidframework/container-runtime-definitions";
|
|
12
|
-
import {
|
|
12
|
+
import { CreateChildSummarizerNodeFn, CreateChildSummarizerNodeParam, IAttachMessage, IFluidDataStoreChannel, IFluidDataStoreContext, IFluidDataStoreContextDetached, IFluidDataStoreContextEvents, IFluidDataStoreRegistry, IGarbageCollectionData, IGarbageCollectionDetailsBase, IInboundSignalMessage, IProvideFluidDataStoreFactory, ISummarizeResult, ISummarizerNodeWithGC, SummarizeInternalFn, ITelemetryContext } from "@fluidframework/runtime-definitions";
|
|
13
|
+
import { MonitoringContext } from "@fluidframework/telemetry-utils";
|
|
13
14
|
import { ContainerRuntime } from "./containerRuntime";
|
|
14
15
|
export declare function createAttributesBlob(pkg: readonly string[], isRootDataStore: boolean): ITreeEntry;
|
|
15
16
|
interface ISnapshotDetails {
|
|
@@ -40,14 +41,12 @@ export interface ILocalFluidDataStoreContextProps extends IFluidDataStoreContext
|
|
|
40
41
|
/** Properties necessary for creating a remote FluidDataStoreContext */
|
|
41
42
|
export interface IRemoteFluidDataStoreContextProps extends IFluidDataStoreContextProps {
|
|
42
43
|
readonly snapshotTree: ISnapshotTree | undefined;
|
|
43
|
-
readonly getBaseGCDetails: () => Promise<IGarbageCollectionDetailsBase | undefined>;
|
|
44
44
|
}
|
|
45
45
|
/**
|
|
46
46
|
* Represents the context for the store. This context is passed to the store runtime.
|
|
47
47
|
*/
|
|
48
48
|
export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IFluidDataStoreContextEvents> implements IFluidDataStoreContext, IDisposable {
|
|
49
49
|
private readonly existing;
|
|
50
|
-
private bindState;
|
|
51
50
|
readonly isLocalDataStore: boolean;
|
|
52
51
|
private readonly makeLocallyVisibleFn;
|
|
53
52
|
get packagePath(): readonly string[];
|
|
@@ -72,6 +71,8 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
|
|
|
72
71
|
get tombstoned(): boolean;
|
|
73
72
|
/** If true, throw an error when a tombstone data store is used. */
|
|
74
73
|
private readonly throwOnTombstoneUsage;
|
|
74
|
+
/** If true, this means that this data store context and its children have been removed from the runtime */
|
|
75
|
+
private deleted;
|
|
75
76
|
get attachState(): AttachState;
|
|
76
77
|
get IFluidDataStoreRegistry(): IFluidDataStoreRegistry | undefined;
|
|
77
78
|
/**
|
|
@@ -91,8 +92,6 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
|
|
|
91
92
|
protected isInMemoryRoot(): boolean;
|
|
92
93
|
protected registry: IFluidDataStoreRegistry | undefined;
|
|
93
94
|
protected detachedRuntimeCreation: boolean;
|
|
94
|
-
/** @deprecated - To be replaced by calling makeLocallyVisible directly */
|
|
95
|
-
readonly bindToContext: () => void;
|
|
96
95
|
protected channel: IFluidDataStoreChannel | undefined;
|
|
97
96
|
private loaded;
|
|
98
97
|
protected pending: ISequencedDocumentMessage[] | undefined;
|
|
@@ -101,7 +100,7 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
|
|
|
101
100
|
protected _attachState: AttachState;
|
|
102
101
|
private _isInMemoryRoot;
|
|
103
102
|
protected readonly summarizerNode: ISummarizerNodeWithGC;
|
|
104
|
-
|
|
103
|
+
protected readonly mc: MonitoringContext;
|
|
105
104
|
private readonly thresholdOpsCounter;
|
|
106
105
|
private static readonly pendingOpsCountThreshold;
|
|
107
106
|
/**
|
|
@@ -116,9 +115,14 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
|
|
|
116
115
|
readonly storage: IDocumentStorageService;
|
|
117
116
|
readonly scope: FluidObject;
|
|
118
117
|
protected pkg?: readonly string[];
|
|
119
|
-
constructor(props: IFluidDataStoreContextProps, existing: boolean,
|
|
120
|
-
isLocalDataStore: boolean, makeLocallyVisibleFn: () => void);
|
|
118
|
+
constructor(props: IFluidDataStoreContextProps, existing: boolean, isLocalDataStore: boolean, makeLocallyVisibleFn: () => void);
|
|
121
119
|
dispose(): void;
|
|
120
|
+
/**
|
|
121
|
+
* When delete is called, that means that the data store is permanently removed from the runtime, and will not show up in future summaries
|
|
122
|
+
* This function is called to prevent ops from being generated from this data store once it has been deleted. Furthermore, this data store
|
|
123
|
+
* should not receive any ops/signals.
|
|
124
|
+
*/
|
|
125
|
+
delete(): void;
|
|
122
126
|
setTombstone(tombstone: boolean): void;
|
|
123
127
|
private rejectDeferredRealize;
|
|
124
128
|
realize(): Promise<IFluidDataStoreChannel>;
|
|
@@ -213,6 +217,8 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
|
|
|
213
217
|
* globally visible now.
|
|
214
218
|
*/
|
|
215
219
|
makeLocallyVisible(): void;
|
|
220
|
+
/** @deprecated - To be replaced by calling makeLocallyVisible directly */
|
|
221
|
+
bindToContext(): void;
|
|
216
222
|
protected bindRuntime(channel: IFluidDataStoreChannel): void;
|
|
217
223
|
getAbsoluteUrl(relativeUrl: string): Promise<string | undefined>;
|
|
218
224
|
abstract generateAttachMessage(): IAttachMessage;
|
|
@@ -223,7 +229,10 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
|
|
|
223
229
|
* It will be removed, as the source of truth for this flag will be the aliasing blob.
|
|
224
230
|
*/
|
|
225
231
|
setInMemoryRoot(): void;
|
|
226
|
-
|
|
232
|
+
/**
|
|
233
|
+
* @deprecated - The functionality to get base GC details has been moved to summarizer node.
|
|
234
|
+
*/
|
|
235
|
+
getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase>;
|
|
227
236
|
reSubmit(contents: any, localOpMetadata: unknown): void;
|
|
228
237
|
rollback(contents: any, localOpMetadata: unknown): void;
|
|
229
238
|
applyStashedOp(contents: any): Promise<unknown>;
|
|
@@ -234,16 +243,14 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
|
|
|
234
243
|
* other clients that are up-to-date till seq# 100 may not have them yet.
|
|
235
244
|
*/
|
|
236
245
|
protected identifyLocalChangeInSummarizer(eventName: string, type?: string): void;
|
|
237
|
-
getCreateChildSummarizerNodeFn(id: string, createParam: CreateChildSummarizerNodeParam): (summarizeInternal: SummarizeInternalFn, getGCDataFn: (fullGC?: boolean | undefined) => Promise<IGarbageCollectionData
|
|
246
|
+
getCreateChildSummarizerNodeFn(id: string, createParam: CreateChildSummarizerNodeParam): (summarizeInternal: SummarizeInternalFn, getGCDataFn: (fullGC?: boolean | undefined) => Promise<IGarbageCollectionData>) => ISummarizerNodeWithGC;
|
|
238
247
|
uploadBlob(blob: ArrayBufferLike): Promise<IFluidHandle<ArrayBufferLike>>;
|
|
239
248
|
}
|
|
240
249
|
export declare class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
241
250
|
private readonly initSnapshotValue;
|
|
242
|
-
private readonly baseGCDetailsP;
|
|
243
251
|
constructor(props: IRemoteFluidDataStoreContextProps);
|
|
244
252
|
private readonly initialSnapshotDetailsP;
|
|
245
253
|
getInitialSnapshotDetails(): Promise<ISnapshotDetails>;
|
|
246
|
-
getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase>;
|
|
247
254
|
generateAttachMessage(): IAttachMessage;
|
|
248
255
|
}
|
|
249
256
|
/**
|
|
@@ -259,7 +266,14 @@ export declare class LocalFluidDataStoreContextBase extends FluidDataStoreContex
|
|
|
259
266
|
private attachListeners;
|
|
260
267
|
generateAttachMessage(): IAttachMessage;
|
|
261
268
|
getInitialSnapshotDetails(): Promise<ISnapshotDetails>;
|
|
262
|
-
|
|
269
|
+
/**
|
|
270
|
+
* A context should only be marked as deleted when its a remote context.
|
|
271
|
+
* Session Expiry at the runtime level should have closed the container creating the local data store context
|
|
272
|
+
* before delete is even possible. Session Expiry is at 30 days, and sweep is done 36+ days later from the time
|
|
273
|
+
* it was unreferenced. Thus the sweeping container should have loaded from a snapshot and thus creating a remote
|
|
274
|
+
* context.
|
|
275
|
+
*/
|
|
276
|
+
delete(): void;
|
|
263
277
|
}
|
|
264
278
|
/**
|
|
265
279
|
* context implementation for "attached" data store runtime.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataStoreContext.d.ts","sourceRoot":"","sources":["../src/dataStoreContext.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"dataStoreContext.d.ts","sourceRoot":"","sources":["../src/dataStoreContext.ts"],"names":[],"mappings":"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"}
|
package/dist/dataStoreContext.js
CHANGED
|
@@ -13,10 +13,8 @@ const runtime_definitions_1 = require("@fluidframework/runtime-definitions");
|
|
|
13
13
|
const runtime_utils_1 = require("@fluidframework/runtime-utils");
|
|
14
14
|
const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
|
|
15
15
|
const container_utils_1 = require("@fluidframework/container-utils");
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const garbageCollectionTombstoneUtils_1 = require("./garbageCollectionTombstoneUtils");
|
|
19
|
-
const summarizerClientElection_1 = require("./summarizerClientElection");
|
|
16
|
+
const summary_1 = require("./summary");
|
|
17
|
+
const gc_1 = require("./gc");
|
|
20
18
|
function createAttributes(pkg, isRootDataStore) {
|
|
21
19
|
const stringifiedPkg = JSON.stringify(pkg);
|
|
22
20
|
return {
|
|
@@ -27,19 +25,17 @@ function createAttributes(pkg, isRootDataStore) {
|
|
|
27
25
|
}
|
|
28
26
|
function createAttributesBlob(pkg, isRootDataStore) {
|
|
29
27
|
const attributes = createAttributes(pkg, isRootDataStore);
|
|
30
|
-
return new protocol_base_1.BlobTreeEntry(
|
|
28
|
+
return new protocol_base_1.BlobTreeEntry(summary_1.dataStoreAttributesBlobName, JSON.stringify(attributes));
|
|
31
29
|
}
|
|
32
30
|
exports.createAttributesBlob = createAttributesBlob;
|
|
33
31
|
/**
|
|
34
32
|
* Represents the context for the store. This context is passed to the store runtime.
|
|
35
33
|
*/
|
|
36
34
|
class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
37
|
-
constructor(props, existing,
|
|
38
|
-
isLocalDataStore, makeLocallyVisibleFn) {
|
|
35
|
+
constructor(props, existing, isLocalDataStore, makeLocallyVisibleFn) {
|
|
39
36
|
var _a;
|
|
40
37
|
super();
|
|
41
38
|
this.existing = existing;
|
|
42
|
-
this.bindState = bindState;
|
|
43
39
|
this.isLocalDataStore = isLocalDataStore;
|
|
44
40
|
this.makeLocallyVisibleFn = makeLocallyVisibleFn;
|
|
45
41
|
this._disposed = false;
|
|
@@ -48,6 +44,8 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
48
44
|
* loading.
|
|
49
45
|
*/
|
|
50
46
|
this._tombstoned = false;
|
|
47
|
+
/** If true, this means that this data store context and its children have been removed from the runtime */
|
|
48
|
+
this.deleted = false;
|
|
51
49
|
this.detachedRuntimeCreation = false;
|
|
52
50
|
this.loaded = false;
|
|
53
51
|
this.pending = [];
|
|
@@ -60,23 +58,19 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
60
58
|
// URIs use slashes as delimiters. Handles use URIs.
|
|
61
59
|
// Thus having slashes in types almost guarantees trouble down the road!
|
|
62
60
|
(0, common_utils_1.assert)(!this.id.includes("/"), 0x13a /* Data store ID contains slash */);
|
|
63
|
-
this._attachState =
|
|
64
|
-
this.containerRuntime.attachState
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
this.bindState = runtime_definitions_1.BindState.Binding;
|
|
68
|
-
(0, common_utils_1.assert)(this.channel !== undefined, 0x13c /* "undefined channel on datastore context" */);
|
|
69
|
-
this.makeLocallyVisible();
|
|
70
|
-
this.bindState = runtime_definitions_1.BindState.Bound;
|
|
71
|
-
};
|
|
61
|
+
this._attachState =
|
|
62
|
+
this.containerRuntime.attachState !== container_definitions_1.AttachState.Detached && this.existing
|
|
63
|
+
? this.containerRuntime.attachState
|
|
64
|
+
: container_definitions_1.AttachState.Detached;
|
|
72
65
|
const thisSummarizeInternal = async (fullTree, trackState, telemetryContext) => this.summarizeInternal(fullTree, trackState, telemetryContext);
|
|
73
|
-
this.summarizerNode = props.createSummarizerNodeFn(thisSummarizeInternal, async (fullGC) => this.getGCDataInternal(fullGC)
|
|
66
|
+
this.summarizerNode = props.createSummarizerNodeFn(thisSummarizeInternal, async (fullGC) => this.getGCDataInternal(fullGC));
|
|
74
67
|
this.mc = (0, telemetry_utils_1.loggerToMonitoringContext)(telemetry_utils_1.ChildLogger.create(this.logger, "FluidDataStoreContext"));
|
|
75
68
|
this.thresholdOpsCounter = new telemetry_utils_1.ThresholdCounter(FluidDataStoreContext.pendingOpsCountThreshold, this.mc.logger);
|
|
76
69
|
// Tombstone should only throw when the feature flag is enabled and the client isn't a summarizer
|
|
77
70
|
this.throwOnTombstoneUsage =
|
|
78
|
-
this.mc.config.getBoolean(
|
|
79
|
-
this.
|
|
71
|
+
this.mc.config.getBoolean(gc_1.throwOnTombstoneUsageKey) === true &&
|
|
72
|
+
this._containerRuntime.gcTombstoneEnforcementAllowed &&
|
|
73
|
+
this.clientDetails.type !== summary_1.summarizerClientType;
|
|
80
74
|
// By default, a data store can log maximum 10 local changes telemetry in summarizer.
|
|
81
75
|
this.localChangesTelemetryCount =
|
|
82
76
|
(_a = this.mc.config.getNumber("Fluid.Telemetry.LocalChangesTelemetryCount")) !== null && _a !== void 0 ? _a : 10;
|
|
@@ -118,8 +112,12 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
118
112
|
get baseSnapshot() {
|
|
119
113
|
return this._baseSnapshot;
|
|
120
114
|
}
|
|
121
|
-
get disposed() {
|
|
122
|
-
|
|
115
|
+
get disposed() {
|
|
116
|
+
return this._disposed;
|
|
117
|
+
}
|
|
118
|
+
get tombstoned() {
|
|
119
|
+
return this._tombstoned;
|
|
120
|
+
}
|
|
123
121
|
get attachState() {
|
|
124
122
|
return this._attachState;
|
|
125
123
|
}
|
|
@@ -153,11 +151,21 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
153
151
|
// Dispose any pending runtime after it gets fulfilled
|
|
154
152
|
// Errors are logged where this.channelDeferred is consumed/generated (realizeCore(), bindRuntime())
|
|
155
153
|
if (this.channelDeferred) {
|
|
156
|
-
this.channelDeferred.promise
|
|
154
|
+
this.channelDeferred.promise
|
|
155
|
+
.then((runtime) => {
|
|
157
156
|
runtime.dispose();
|
|
158
|
-
})
|
|
157
|
+
})
|
|
158
|
+
.catch((error) => { });
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
|
+
/**
|
|
162
|
+
* When delete is called, that means that the data store is permanently removed from the runtime, and will not show up in future summaries
|
|
163
|
+
* This function is called to prevent ops from being generated from this data store once it has been deleted. Furthermore, this data store
|
|
164
|
+
* should not receive any ops/signals.
|
|
165
|
+
*/
|
|
166
|
+
delete() {
|
|
167
|
+
this.deleted = true;
|
|
168
|
+
}
|
|
161
169
|
setTombstone(tombstone) {
|
|
162
170
|
if (this.tombstoned === tombstone) {
|
|
163
171
|
return;
|
|
@@ -291,13 +299,13 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
291
299
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
292
300
|
const summarizeResult = await this.channel.summarize(fullTree, trackState, telemetryContext);
|
|
293
301
|
// Wrap dds summaries in .channels subtree.
|
|
294
|
-
(0,
|
|
302
|
+
(0, summary_1.wrapSummaryInChannelsTree)(summarizeResult);
|
|
295
303
|
const pathPartsForChildren = [runtime_definitions_1.channelsTreeName];
|
|
296
304
|
// Add data store's attributes to the summary.
|
|
297
305
|
const { pkg } = await this.getInitialSnapshotDetails();
|
|
298
306
|
const isRoot = await this.isRoot();
|
|
299
307
|
const attributes = createAttributes(pkg, isRoot);
|
|
300
|
-
(0, runtime_utils_1.addBlobToSummary)(summarizeResult,
|
|
308
|
+
(0, runtime_utils_1.addBlobToSummary)(summarizeResult, summary_1.dataStoreAttributesBlobName, JSON.stringify(attributes));
|
|
301
309
|
// If we are not referenced, mark the summary tree as unreferenced. Also, update unreferenced blob
|
|
302
310
|
// size in the summary stats with the blobs size of this data store.
|
|
303
311
|
if (!this.summarizerNode.isReferenced()) {
|
|
@@ -381,7 +389,9 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
381
389
|
return;
|
|
382
390
|
}
|
|
383
391
|
// Remove the route to this data store, if it exists.
|
|
384
|
-
const usedChannelRoutes = this.lastUsedRoutes.filter((id) => {
|
|
392
|
+
const usedChannelRoutes = this.lastUsedRoutes.filter((id) => {
|
|
393
|
+
return id !== "/" && id !== "";
|
|
394
|
+
});
|
|
385
395
|
this.channel.updateUsedRoutes(usedChannelRoutes);
|
|
386
396
|
}
|
|
387
397
|
/**
|
|
@@ -432,6 +442,11 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
432
442
|
*/
|
|
433
443
|
makeLocallyVisible() {
|
|
434
444
|
(0, common_utils_1.assert)(this.channel !== undefined, 0x2cf /* "undefined channel on datastore context" */);
|
|
445
|
+
(0, common_utils_1.assert)(this.channel.visibilityState === runtime_definitions_1.VisibilityState.LocallyVisible, 0x590 /* Channel must be locally visible */);
|
|
446
|
+
this.makeLocallyVisibleFn();
|
|
447
|
+
}
|
|
448
|
+
/** @deprecated - To be replaced by calling makeLocallyVisible directly */
|
|
449
|
+
bindToContext() {
|
|
435
450
|
this.makeLocallyVisibleFn();
|
|
436
451
|
}
|
|
437
452
|
bindRuntime(channel) {
|
|
@@ -471,7 +486,8 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
471
486
|
catch (error) {
|
|
472
487
|
(_a = this.channelDeferred) === null || _a === void 0 ? void 0 : _a.reject(error);
|
|
473
488
|
this.logger.sendErrorEvent({
|
|
474
|
-
eventName: "BindRuntimeError",
|
|
489
|
+
eventName: "BindRuntimeError",
|
|
490
|
+
fluidDataStoreId: {
|
|
475
491
|
value: this.id,
|
|
476
492
|
tag: telemetry_utils_1.TelemetryDataTag.CodeArtifact,
|
|
477
493
|
},
|
|
@@ -492,6 +508,12 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
492
508
|
setInMemoryRoot() {
|
|
493
509
|
this._isInMemoryRoot = true;
|
|
494
510
|
}
|
|
511
|
+
/**
|
|
512
|
+
* @deprecated - The functionality to get base GC details has been moved to summarizer node.
|
|
513
|
+
*/
|
|
514
|
+
async getBaseGCDetails() {
|
|
515
|
+
return {};
|
|
516
|
+
}
|
|
495
517
|
reSubmit(contents, localOpMetadata) {
|
|
496
518
|
(0, common_utils_1.assert)(!!this.channel, 0x14b /* "Channel must exist when resubmitting ops" */);
|
|
497
519
|
const innerContents = contents;
|
|
@@ -516,16 +538,25 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
516
538
|
return this.channel.applyStashedOp(innerContents.content);
|
|
517
539
|
}
|
|
518
540
|
verifyNotClosed(callSite, checkTombstone = true, safeTelemetryProps = {}) {
|
|
541
|
+
if (this.deleted) {
|
|
542
|
+
const messageString = `Context is deleted! Call site [${callSite}]`;
|
|
543
|
+
const error = new container_utils_1.DataCorruptionError(messageString, safeTelemetryProps);
|
|
544
|
+
this.mc.logger.sendErrorEvent({
|
|
545
|
+
eventName: "GC_Deleted_DataStore_Changed",
|
|
546
|
+
callSite,
|
|
547
|
+
}, error);
|
|
548
|
+
throw error;
|
|
549
|
+
}
|
|
519
550
|
if (this._disposed) {
|
|
520
551
|
throw new Error(`Context is closed! Call site [${callSite}]`);
|
|
521
552
|
}
|
|
522
553
|
if (checkTombstone && this.tombstoned) {
|
|
523
554
|
const messageString = `Context is tombstoned! Call site [${callSite}]`;
|
|
524
555
|
const error = new container_utils_1.DataCorruptionError(messageString, safeTelemetryProps);
|
|
525
|
-
(0,
|
|
556
|
+
(0, gc_1.sendGCUnexpectedUsageEvent)(this.mc, {
|
|
526
557
|
eventName: "GC_Tombstone_DataStore_Changed",
|
|
527
558
|
category: this.throwOnTombstoneUsage ? "error" : "generic",
|
|
528
|
-
|
|
559
|
+
gcTombstoneEnforcementAllowed: this._containerRuntime.gcTombstoneEnforcementAllowed,
|
|
529
560
|
callSite,
|
|
530
561
|
}, this.pkg, error);
|
|
531
562
|
if (this.throwOnTombstoneUsage) {
|
|
@@ -540,7 +571,8 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
540
571
|
*/
|
|
541
572
|
identifyLocalChangeInSummarizer(eventName, type) {
|
|
542
573
|
var _a, _b;
|
|
543
|
-
if (this.clientDetails.type !==
|
|
574
|
+
if (this.clientDetails.type !== summary_1.summarizerClientType ||
|
|
575
|
+
this.localChangesTelemetryCount <= 0) {
|
|
544
576
|
return;
|
|
545
577
|
}
|
|
546
578
|
// Log a telemetry if there are local changes in the summarizer. This will give us data on how often
|
|
@@ -560,9 +592,9 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
|
|
|
560
592
|
this.localChangesTelemetryCount--;
|
|
561
593
|
}
|
|
562
594
|
getCreateChildSummarizerNodeFn(id, createParam) {
|
|
563
|
-
return (summarizeInternal, getGCDataFn
|
|
595
|
+
return (summarizeInternal, getGCDataFn) => this.summarizerNode.createChild(summarizeInternal, id, createParam,
|
|
564
596
|
// DDS will not create failure summaries
|
|
565
|
-
{ throwOnFailure: true }, getGCDataFn
|
|
597
|
+
{ throwOnFailure: true }, getGCDataFn);
|
|
566
598
|
}
|
|
567
599
|
async uploadBlob(blob) {
|
|
568
600
|
return this.containerRuntime.uploadBlob(blob);
|
|
@@ -572,24 +604,25 @@ exports.FluidDataStoreContext = FluidDataStoreContext;
|
|
|
572
604
|
FluidDataStoreContext.pendingOpsCountThreshold = 1000;
|
|
573
605
|
class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
574
606
|
constructor(props) {
|
|
575
|
-
super(props, true /* existing */,
|
|
607
|
+
super(props, true /* existing */, false /* isLocalDataStore */, () => {
|
|
576
608
|
throw new Error("Already attached");
|
|
577
609
|
});
|
|
578
610
|
this.initialSnapshotDetailsP = new common_utils_1.LazyPromise(async () => {
|
|
579
611
|
var _a;
|
|
580
612
|
let tree = this.initSnapshotValue;
|
|
581
613
|
let isRootDataStore = true;
|
|
582
|
-
if (!!tree && tree.blobs[
|
|
614
|
+
if (!!tree && tree.blobs[summary_1.dataStoreAttributesBlobName] !== undefined) {
|
|
583
615
|
// Need to get through snapshot and use that to populate extraBlobs
|
|
584
|
-
const attributes = await (0, driver_utils_1.readAndParse)(this.storage, tree.blobs[
|
|
616
|
+
const attributes = await (0, driver_utils_1.readAndParse)(this.storage, tree.blobs[summary_1.dataStoreAttributesBlobName]);
|
|
585
617
|
let pkgFromSnapshot;
|
|
586
618
|
// Use the snapshotFormatVersion to determine how the pkg is encoded in the snapshot.
|
|
587
619
|
// For snapshotFormatVersion = "0.1" (1) or above, pkg is jsonified, otherwise it is just a string.
|
|
588
|
-
const formatVersion = (0,
|
|
620
|
+
const formatVersion = (0, summary_1.getAttributesFormatVersion)(attributes);
|
|
589
621
|
if (formatVersion < 1) {
|
|
590
|
-
pkgFromSnapshot =
|
|
591
|
-
|
|
592
|
-
|
|
622
|
+
pkgFromSnapshot =
|
|
623
|
+
attributes.pkg.startsWith('["') && attributes.pkg.endsWith('"]')
|
|
624
|
+
? JSON.parse(attributes.pkg)
|
|
625
|
+
: [attributes.pkg];
|
|
593
626
|
}
|
|
594
627
|
else {
|
|
595
628
|
pkgFromSnapshot = JSON.parse(attributes.pkg);
|
|
@@ -601,7 +634,7 @@ class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
|
601
634
|
* roots in the document but they won't break.
|
|
602
635
|
*/
|
|
603
636
|
isRootDataStore = (_a = attributes.isRootDataStore) !== null && _a !== void 0 ? _a : true;
|
|
604
|
-
if ((0,
|
|
637
|
+
if ((0, summary_1.hasIsolatedChannels)(attributes)) {
|
|
605
638
|
tree = tree.trees[runtime_definitions_1.channelsTreeName];
|
|
606
639
|
(0, common_utils_1.assert)(tree !== undefined, 0x1fe /* "isolated channels subtree should exist in remote datastore snapshot" */);
|
|
607
640
|
}
|
|
@@ -614,10 +647,6 @@ class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
|
614
647
|
};
|
|
615
648
|
});
|
|
616
649
|
this.initSnapshotValue = props.snapshotTree;
|
|
617
|
-
this.baseGCDetailsP = new common_utils_1.LazyPromise(async () => {
|
|
618
|
-
var _a;
|
|
619
|
-
return (_a = (await props.getBaseGCDetails())) !== null && _a !== void 0 ? _a : {};
|
|
620
|
-
});
|
|
621
650
|
if (props.snapshotTree !== undefined) {
|
|
622
651
|
this.summarizerNode.updateBaseSummaryState(props.snapshotTree);
|
|
623
652
|
}
|
|
@@ -625,9 +654,6 @@ class RemoteFluidDataStoreContext extends FluidDataStoreContext {
|
|
|
625
654
|
async getInitialSnapshotDetails() {
|
|
626
655
|
return this.initialSnapshotDetailsP;
|
|
627
656
|
}
|
|
628
|
-
async getBaseGCDetails() {
|
|
629
|
-
return this.baseGCDetailsP;
|
|
630
|
-
}
|
|
631
657
|
generateAttachMessage() {
|
|
632
658
|
throw new Error("Cannot attach remote store");
|
|
633
659
|
}
|
|
@@ -638,7 +664,7 @@ exports.RemoteFluidDataStoreContext = RemoteFluidDataStoreContext;
|
|
|
638
664
|
*/
|
|
639
665
|
class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
640
666
|
constructor(props) {
|
|
641
|
-
super(props, props.snapshotTree !== undefined ? true : false /* existing */,
|
|
667
|
+
super(props, props.snapshotTree !== undefined ? true : false /* existing */, true /* isLocalDataStore */, props.makeLocallyVisibleFn);
|
|
642
668
|
// Summarizer client should not create local data stores.
|
|
643
669
|
this.identifyLocalChangeInSummarizer("DataStoreCreatedInSummarizer");
|
|
644
670
|
this.snapshotTree = props.snapshotTree;
|
|
@@ -663,10 +689,10 @@ class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
|
663
689
|
(0, common_utils_1.assert)(this.pkg !== undefined, 0x150 /* "pkg should be available in local data store context" */);
|
|
664
690
|
const summarizeResult = this.channel.getAttachSummary();
|
|
665
691
|
// Wrap dds summaries in .channels subtree.
|
|
666
|
-
(0,
|
|
692
|
+
(0, summary_1.wrapSummaryInChannelsTree)(summarizeResult);
|
|
667
693
|
// Add data store's attributes to the summary.
|
|
668
694
|
const attributes = createAttributes(this.pkg, this.isInMemoryRoot());
|
|
669
|
-
(0, runtime_utils_1.addBlobToSummary)(summarizeResult,
|
|
695
|
+
(0, runtime_utils_1.addBlobToSummary)(summarizeResult, summary_1.dataStoreAttributesBlobName, JSON.stringify(attributes));
|
|
670
696
|
// Attach message needs the summary in ITree format. Convert the ISummaryTree into an ITree.
|
|
671
697
|
const snapshot = (0, runtime_utils_1.convertSummaryTreeToITree)(summarizeResult.summary);
|
|
672
698
|
const message = {
|
|
@@ -684,8 +710,8 @@ class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
|
684
710
|
if (snapshot !== undefined) {
|
|
685
711
|
// Get the dataStore attributes.
|
|
686
712
|
// Note: storage can be undefined in special case while detached.
|
|
687
|
-
attributes = await (0,
|
|
688
|
-
if ((0,
|
|
713
|
+
attributes = await (0, summary_1.getFluidDataStoreAttributes)(this.storage, snapshot);
|
|
714
|
+
if ((0, summary_1.hasIsolatedChannels)(attributes)) {
|
|
689
715
|
snapshot = snapshot.trees[runtime_definitions_1.channelsTreeName];
|
|
690
716
|
(0, common_utils_1.assert)(snapshot !== undefined, 0x1ff /* "isolated channels subtree should exist in local datastore snapshot" */);
|
|
691
717
|
}
|
|
@@ -707,9 +733,22 @@ class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
|
707
733
|
snapshot,
|
|
708
734
|
};
|
|
709
735
|
}
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
736
|
+
/**
|
|
737
|
+
* A context should only be marked as deleted when its a remote context.
|
|
738
|
+
* Session Expiry at the runtime level should have closed the container creating the local data store context
|
|
739
|
+
* before delete is even possible. Session Expiry is at 30 days, and sweep is done 36+ days later from the time
|
|
740
|
+
* it was unreferenced. Thus the sweeping container should have loaded from a snapshot and thus creating a remote
|
|
741
|
+
* context.
|
|
742
|
+
*/
|
|
743
|
+
delete() {
|
|
744
|
+
// TODO: GC:Validation - potentially prevent this from happening or asserting. Maybe throw here.
|
|
745
|
+
(0, gc_1.sendGCUnexpectedUsageEvent)(this.mc, {
|
|
746
|
+
eventName: "GC_Deleted_DataStore_Unexpected_Delete",
|
|
747
|
+
message: "Unexpected deletion of a local data store context",
|
|
748
|
+
category: "error",
|
|
749
|
+
gcTombstoneEnforcementAllowed: undefined,
|
|
750
|
+
}, this.pkg);
|
|
751
|
+
super.delete();
|
|
713
752
|
}
|
|
714
753
|
}
|
|
715
754
|
exports.LocalFluidDataStoreContextBase = LocalFluidDataStoreContextBase;
|