@fluidframework/container-runtime 2.0.0-dev.2.3.0.115467 → 2.0.0-dev.4.1.0.148229
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +21 -10
- package/.mocharc.js +2 -2
- package/api-extractor.json +2 -2
- package/dist/batchTracker.d.ts +1 -2
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js +2 -1
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager.d.ts +74 -42
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +321 -152
- package/dist/blobManager.js.map +1 -1
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +11 -9
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerHandleContext.d.ts.map +1 -1
- package/dist/containerHandleContext.js +3 -1
- package/dist/containerHandleContext.js.map +1 -1
- package/dist/containerRuntime.d.ts +148 -114
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +534 -342
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.d.ts.map +1 -1
- package/dist/dataStore.js +11 -9
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +40 -13
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +146 -66
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js +7 -3
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/dataStoreRegistry.d.ts.map +1 -1
- package/dist/dataStoreRegistry.js +3 -1
- package/dist/dataStoreRegistry.js.map +1 -1
- package/dist/dataStores.d.ts +39 -12
- package/dist/dataStores.d.ts.map +1 -1
- package/dist/dataStores.js +164 -76
- package/dist/dataStores.js.map +1 -1
- package/dist/deltaManagerSummarizerProxy.d.ts +19 -0
- package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -0
- package/dist/deltaManagerSummarizerProxy.js +40 -0
- package/dist/deltaManagerSummarizerProxy.js.map +1 -0
- package/dist/deltaScheduler.d.ts.map +1 -1
- package/dist/deltaScheduler.js +8 -3
- package/dist/deltaScheduler.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts +204 -0
- package/dist/gc/garbageCollection.d.ts.map +1 -0
- package/dist/gc/garbageCollection.js +926 -0
- package/dist/gc/garbageCollection.js.map +1 -0
- package/dist/gc/gcConfigs.d.ts +22 -0
- package/dist/gc/gcConfigs.d.ts.map +1 -0
- package/dist/gc/gcConfigs.js +143 -0
- package/dist/gc/gcConfigs.js.map +1 -0
- package/dist/gc/gcDefinitions.d.ts +320 -0
- package/dist/gc/gcDefinitions.d.ts.map +1 -0
- package/dist/gc/gcDefinitions.js +81 -0
- package/dist/gc/gcDefinitions.js.map +1 -0
- package/dist/gc/gcHelpers.d.ts +86 -0
- package/dist/gc/gcHelpers.d.ts.map +1 -0
- package/dist/gc/gcHelpers.js +268 -0
- package/dist/gc/gcHelpers.js.map +1 -0
- package/dist/gc/gcReferenceGraphAlgorithm.d.ts +16 -0
- package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
- package/dist/gc/gcReferenceGraphAlgorithm.js +49 -0
- package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -0
- package/dist/gc/gcSummaryDefinitions.d.ts +52 -0
- package/dist/gc/gcSummaryDefinitions.d.ts.map +1 -0
- package/dist/gc/gcSummaryDefinitions.js +7 -0
- package/dist/gc/gcSummaryDefinitions.js.map +1 -0
- package/dist/gc/gcSummaryStateTracker.d.ts +93 -0
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -0
- package/dist/gc/gcSummaryStateTracker.js +239 -0
- package/dist/gc/gcSummaryStateTracker.js.map +1 -0
- package/{lib → dist/gc}/gcSweepReadyUsageDetection.d.ts +5 -5
- package/dist/gc/gcSweepReadyUsageDetection.d.ts.map +1 -0
- package/dist/{gcSweepReadyUsageDetection.js → gc/gcSweepReadyUsageDetection.js} +15 -11
- package/dist/gc/gcSweepReadyUsageDetection.js.map +1 -0
- package/dist/gc/gcUnreferencedStateTracker.d.ts +34 -0
- package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
- package/dist/gc/gcUnreferencedStateTracker.js +94 -0
- package/dist/gc/gcUnreferencedStateTracker.js.map +1 -0
- package/dist/gc/index.d.ts +13 -0
- package/dist/gc/index.d.ts.map +1 -0
- package/dist/gc/index.js +50 -0
- package/dist/gc/index.js.map +1 -0
- package/dist/index.d.ts +3 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -13
- package/dist/index.js.map +1 -1
- package/dist/opLifecycle/batchManager.d.ts +10 -0
- package/dist/opLifecycle/batchManager.d.ts.map +1 -1
- package/dist/opLifecycle/batchManager.js +37 -8
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/definitions.d.ts +29 -1
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -1
- package/dist/opLifecycle/index.d.ts +3 -3
- package/dist/opLifecycle/index.d.ts.map +1 -1
- package/dist/opLifecycle/index.js +3 -1
- package/dist/opLifecycle/index.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts +1 -1
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +46 -17
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts +6 -1
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +72 -18
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts +46 -2
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +142 -5
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +23 -2
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +101 -51
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js +17 -2
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/dist/opProperties.d.ts.map +1 -1
- package/dist/opProperties.js +1 -3
- package/dist/opProperties.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/pendingStateManager.d.ts +6 -15
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +137 -165
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/scheduleManager.d.ts +0 -1
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js +11 -21
- package/dist/scheduleManager.js.map +1 -1
- package/dist/storageServiceWithAttachBlobs.d.ts +17 -0
- package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -0
- package/dist/storageServiceWithAttachBlobs.js +32 -0
- package/dist/storageServiceWithAttachBlobs.js.map +1 -0
- package/dist/summary/index.d.ts +17 -0
- package/dist/summary/index.d.ts.map +1 -0
- package/dist/summary/index.js +46 -0
- package/dist/summary/index.js.map +1 -0
- package/dist/summary/orderedClientElection.d.ts.map +1 -0
- package/dist/{orderedClientElection.js → summary/orderedClientElection.js} +10 -4
- package/dist/summary/orderedClientElection.js.map +1 -0
- package/{lib → dist/summary}/runWhileConnectedCoordinator.d.ts +3 -2
- package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
- package/dist/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.js} +5 -4
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -0
- package/{lib → dist/summary}/runningSummarizer.d.ts +19 -18
- package/dist/summary/runningSummarizer.d.ts.map +1 -0
- package/dist/{runningSummarizer.js → summary/runningSummarizer.js} +191 -77
- package/dist/summary/runningSummarizer.js.map +1 -0
- package/dist/{summarizer.d.ts → summary/summarizer.d.ts} +6 -12
- package/dist/summary/summarizer.d.ts.map +1 -0
- package/dist/{summarizer.js → summary/summarizer.js} +32 -76
- package/dist/summary/summarizer.js.map +1 -0
- package/dist/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +1 -2
- package/dist/summary/summarizerClientElection.d.ts.map +1 -0
- package/dist/{summarizerClientElection.js → summary/summarizerClientElection.js} +3 -30
- package/dist/summary/summarizerClientElection.js.map +1 -0
- package/dist/{summarizerHeuristics.d.ts → summary/summarizerHeuristics.d.ts} +1 -1
- package/dist/summary/summarizerHeuristics.d.ts.map +1 -0
- package/dist/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +9 -12
- package/dist/summary/summarizerHeuristics.js.map +1 -0
- package/dist/summary/summarizerNode/index.d.ts +8 -0
- package/dist/summary/summarizerNode/index.d.ts.map +1 -0
- package/dist/summary/summarizerNode/index.js +12 -0
- package/dist/summary/summarizerNode/index.js.map +1 -0
- package/dist/summary/summarizerNode/summarizerNode.d.ts +149 -0
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
- package/dist/summary/summarizerNode/summarizerNode.js +531 -0
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +125 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.js +132 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +22 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +423 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
- package/{lib → dist/summary}/summarizerTypes.d.ts +29 -42
- package/dist/summary/summarizerTypes.d.ts.map +1 -0
- package/dist/{summarizerTypes.js → summary/summarizerTypes.js} +0 -5
- package/dist/summary/summarizerTypes.js.map +1 -0
- package/dist/summary/summaryCollection.d.ts.map +1 -0
- package/dist/{summaryCollection.js → summary/summaryCollection.js} +18 -8
- package/dist/summary/summaryCollection.js.map +1 -0
- package/{lib → dist/summary}/summaryFormat.d.ts +3 -21
- package/dist/summary/summaryFormat.d.ts.map +1 -0
- package/dist/{summaryFormat.js → summary/summaryFormat.js} +19 -21
- package/dist/summary/summaryFormat.js.map +1 -0
- package/dist/summary/summaryGenerator.d.ts.map +1 -0
- package/dist/{summaryGenerator.js → summary/summaryGenerator.js} +34 -16
- package/dist/summary/summaryGenerator.js.map +1 -0
- package/dist/{summaryManager.d.ts → summary/summaryManager.d.ts} +1 -1
- package/dist/summary/summaryManager.d.ts.map +1 -0
- package/dist/{summaryManager.js → summary/summaryManager.js} +21 -9
- package/dist/summary/summaryManager.js.map +1 -0
- package/dist/throttler.d.ts +2 -2
- package/dist/throttler.d.ts.map +1 -1
- package/dist/throttler.js +4 -4
- package/dist/throttler.js.map +1 -1
- package/lib/batchTracker.d.ts +1 -2
- package/lib/batchTracker.d.ts.map +1 -1
- package/lib/batchTracker.js +2 -1
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager.d.ts +74 -42
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +322 -153
- package/lib/blobManager.js.map +1 -1
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +11 -9
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerHandleContext.d.ts.map +1 -1
- package/lib/containerHandleContext.js +3 -1
- package/lib/containerHandleContext.js.map +1 -1
- package/lib/containerRuntime.d.ts +148 -114
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +506 -314
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStore.d.ts.map +1 -1
- package/lib/dataStore.js +11 -9
- package/lib/dataStore.js.map +1 -1
- package/lib/dataStoreContext.d.ts +40 -13
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +136 -56
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.d.ts.map +1 -1
- package/lib/dataStoreContexts.js +7 -3
- package/lib/dataStoreContexts.js.map +1 -1
- package/lib/dataStoreRegistry.d.ts.map +1 -1
- package/lib/dataStoreRegistry.js +3 -1
- package/lib/dataStoreRegistry.js.map +1 -1
- package/lib/dataStores.d.ts +39 -12
- package/lib/dataStores.d.ts.map +1 -1
- package/lib/dataStores.js +162 -74
- package/lib/dataStores.js.map +1 -1
- package/lib/deltaManagerSummarizerProxy.d.ts +19 -0
- package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -0
- package/lib/deltaManagerSummarizerProxy.js +36 -0
- package/lib/deltaManagerSummarizerProxy.js.map +1 -0
- package/lib/deltaScheduler.d.ts.map +1 -1
- package/lib/deltaScheduler.js +9 -4
- package/lib/deltaScheduler.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts +204 -0
- package/lib/gc/garbageCollection.d.ts.map +1 -0
- package/lib/gc/garbageCollection.js +922 -0
- package/lib/gc/garbageCollection.js.map +1 -0
- package/lib/gc/gcConfigs.d.ts +22 -0
- package/lib/gc/gcConfigs.d.ts.map +1 -0
- package/lib/gc/gcConfigs.js +139 -0
- package/lib/gc/gcConfigs.js.map +1 -0
- package/lib/gc/gcDefinitions.d.ts +320 -0
- package/lib/gc/gcDefinitions.d.ts.map +1 -0
- package/lib/gc/gcDefinitions.js +78 -0
- package/lib/gc/gcDefinitions.js.map +1 -0
- package/lib/gc/gcHelpers.d.ts +86 -0
- package/lib/gc/gcHelpers.d.ts.map +1 -0
- package/lib/gc/gcHelpers.js +254 -0
- package/lib/gc/gcHelpers.js.map +1 -0
- package/lib/gc/gcReferenceGraphAlgorithm.d.ts +16 -0
- package/lib/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
- package/lib/gc/gcReferenceGraphAlgorithm.js +45 -0
- package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -0
- package/lib/gc/gcSummaryDefinitions.d.ts +52 -0
- package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -0
- package/lib/gc/gcSummaryDefinitions.js +6 -0
- package/lib/gc/gcSummaryDefinitions.js.map +1 -0
- package/lib/gc/gcSummaryStateTracker.d.ts +93 -0
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
- package/lib/gc/gcSummaryStateTracker.js +235 -0
- package/lib/gc/gcSummaryStateTracker.js.map +1 -0
- package/{dist → lib/gc}/gcSweepReadyUsageDetection.d.ts +5 -5
- package/lib/gc/gcSweepReadyUsageDetection.d.ts.map +1 -0
- package/lib/{gcSweepReadyUsageDetection.js → gc/gcSweepReadyUsageDetection.js} +15 -11
- package/lib/gc/gcSweepReadyUsageDetection.js.map +1 -0
- package/lib/gc/gcUnreferencedStateTracker.d.ts +34 -0
- package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
- package/lib/gc/gcUnreferencedStateTracker.js +90 -0
- package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
- package/lib/gc/index.d.ts +13 -0
- package/lib/gc/index.d.ts.map +1 -0
- package/lib/gc/index.js +12 -0
- package/lib/gc/index.js.map +1 -0
- package/lib/index.d.ts +3 -8
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -6
- package/lib/index.js.map +1 -1
- package/lib/opLifecycle/batchManager.d.ts +10 -0
- package/lib/opLifecycle/batchManager.d.ts.map +1 -1
- package/lib/opLifecycle/batchManager.js +35 -7
- package/lib/opLifecycle/batchManager.js.map +1 -1
- package/lib/opLifecycle/definitions.d.ts +29 -1
- package/lib/opLifecycle/definitions.d.ts.map +1 -1
- package/lib/opLifecycle/definitions.js.map +1 -1
- package/lib/opLifecycle/index.d.ts +3 -3
- package/lib/opLifecycle/index.d.ts.map +1 -1
- package/lib/opLifecycle/index.js +2 -2
- package/lib/opLifecycle/index.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts +1 -1
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js +47 -18
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts +6 -1
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +72 -18
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts +46 -2
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +141 -5
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +23 -2
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +103 -53
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.js +17 -2
- package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/lib/opProperties.d.ts.map +1 -1
- package/lib/opProperties.js +1 -3
- package/lib/opProperties.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/pendingStateManager.d.ts +6 -15
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +137 -165
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/scheduleManager.d.ts +0 -1
- package/lib/scheduleManager.d.ts.map +1 -1
- package/lib/scheduleManager.js +11 -21
- package/lib/scheduleManager.js.map +1 -1
- package/lib/storageServiceWithAttachBlobs.d.ts +17 -0
- package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -0
- package/lib/storageServiceWithAttachBlobs.js +28 -0
- package/lib/storageServiceWithAttachBlobs.js.map +1 -0
- package/lib/summary/index.d.ts +17 -0
- package/lib/summary/index.d.ts.map +1 -0
- package/lib/summary/index.js +15 -0
- package/lib/summary/index.js.map +1 -0
- package/lib/summary/orderedClientElection.d.ts.map +1 -0
- package/lib/{orderedClientElection.js → summary/orderedClientElection.js} +10 -4
- package/lib/summary/orderedClientElection.js.map +1 -0
- package/{dist → lib/summary}/runWhileConnectedCoordinator.d.ts +3 -2
- package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
- package/lib/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.js} +5 -4
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
- package/{dist → lib/summary}/runningSummarizer.d.ts +19 -18
- package/lib/summary/runningSummarizer.d.ts.map +1 -0
- package/lib/{runningSummarizer.js → summary/runningSummarizer.js} +193 -79
- package/lib/summary/runningSummarizer.js.map +1 -0
- package/lib/{summarizer.d.ts → summary/summarizer.d.ts} +6 -12
- package/lib/summary/summarizer.d.ts.map +1 -0
- package/lib/{summarizer.js → summary/summarizer.js} +34 -78
- package/lib/summary/summarizer.js.map +1 -0
- package/lib/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +1 -2
- package/lib/summary/summarizerClientElection.d.ts.map +1 -0
- package/lib/{summarizerClientElection.js → summary/summarizerClientElection.js} +3 -30
- package/lib/summary/summarizerClientElection.js.map +1 -0
- package/lib/{summarizerHeuristics.d.ts → summary/summarizerHeuristics.d.ts} +1 -1
- package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
- package/lib/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +9 -12
- package/lib/summary/summarizerHeuristics.js.map +1 -0
- package/lib/summary/summarizerNode/index.d.ts +8 -0
- package/lib/summary/summarizerNode/index.d.ts.map +1 -0
- package/lib/summary/summarizerNode/index.js +7 -0
- package/lib/summary/summarizerNode/index.js.map +1 -0
- package/lib/summary/summarizerNode/summarizerNode.d.ts +149 -0
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
- package/lib/summary/summarizerNode/summarizerNode.js +526 -0
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +125 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.js +125 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +22 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +419 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
- package/{dist → lib/summary}/summarizerTypes.d.ts +29 -42
- package/lib/summary/summarizerTypes.d.ts.map +1 -0
- package/lib/summary/summarizerTypes.js +6 -0
- package/lib/summary/summarizerTypes.js.map +1 -0
- package/lib/summary/summaryCollection.d.ts.map +1 -0
- package/lib/{summaryCollection.js → summary/summaryCollection.js} +18 -8
- package/lib/summary/summaryCollection.js.map +1 -0
- package/{dist → lib/summary}/summaryFormat.d.ts +3 -21
- package/lib/summary/summaryFormat.d.ts.map +1 -0
- package/lib/{summaryFormat.js → summary/summaryFormat.js} +20 -21
- package/lib/summary/summaryFormat.js.map +1 -0
- package/lib/summary/summaryGenerator.d.ts.map +1 -0
- package/lib/{summaryGenerator.js → summary/summaryGenerator.js} +34 -16
- package/lib/summary/summaryGenerator.js.map +1 -0
- package/lib/{summaryManager.d.ts → summary/summaryManager.d.ts} +1 -1
- package/lib/summary/summaryManager.d.ts.map +1 -0
- package/lib/{summaryManager.js → summary/summaryManager.js} +21 -9
- package/lib/summary/summaryManager.js.map +1 -0
- package/lib/throttler.d.ts +2 -2
- package/lib/throttler.d.ts.map +1 -1
- package/lib/throttler.js +4 -4
- package/lib/throttler.js.map +1 -1
- package/package.json +67 -61
- package/prettier.config.cjs +1 -1
- package/src/batchTracker.ts +55 -50
- package/src/blobManager.ts +863 -594
- package/src/connectionTelemetry.ts +280 -249
- package/src/containerHandleContext.ts +27 -29
- package/src/containerRuntime.ts +3174 -2805
- package/src/dataStore.ts +172 -159
- package/src/dataStoreContext.ts +1141 -993
- package/src/dataStoreContexts.ts +178 -161
- package/src/dataStoreRegistry.ts +25 -20
- package/src/dataStores.ts +887 -716
- package/src/deltaManagerSummarizerProxy.ts +46 -0
- package/src/deltaScheduler.ts +158 -150
- package/{garbageCollection.md → src/gc/garbageCollection.md} +16 -3
- package/src/gc/garbageCollection.ts +1250 -0
- package/src/gc/gcConfigs.ts +193 -0
- package/src/gc/gcDefinitions.ts +387 -0
- package/src/gc/gcHelpers.ts +332 -0
- package/src/gc/gcReferenceGraphAlgorithm.ts +52 -0
- package/src/gc/gcSummaryDefinitions.ts +54 -0
- package/src/gc/gcSummaryStateTracker.ts +329 -0
- package/src/gc/gcSweepReadyUsageDetection.ts +145 -0
- package/src/gc/gcUnreferencedStateTracker.ts +114 -0
- package/src/gc/index.ts +65 -0
- package/src/index.ts +61 -75
- package/src/opLifecycle/README.md +157 -0
- package/src/opLifecycle/batchManager.ts +119 -86
- package/src/opLifecycle/definitions.ts +49 -19
- package/src/opLifecycle/index.ts +7 -6
- package/src/opLifecycle/opCompressor.ts +78 -40
- package/src/opLifecycle/opDecompressor.ts +148 -64
- package/src/opLifecycle/opSplitter.ts +269 -66
- package/src/opLifecycle/outbox.ts +268 -184
- package/src/opLifecycle/remoteMessageProcessor.ts +63 -47
- package/src/opProperties.ts +11 -9
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +386 -381
- package/src/scheduleManager.ts +299 -280
- package/src/storageServiceWithAttachBlobs.ts +38 -0
- package/src/summary/index.ts +105 -0
- package/src/summary/orderedClientElection.ts +564 -0
- package/src/summary/runWhileConnectedCoordinator.ts +113 -0
- package/src/summary/runningSummarizer.ts +788 -0
- package/src/summary/summarizer.ts +372 -0
- package/src/summary/summarizerClientElection.ts +139 -0
- package/src/summary/summarizerHeuristics.ts +224 -0
- package/src/summary/summarizerNode/index.ts +12 -0
- package/src/summary/summarizerNode/summarizerNode.ts +766 -0
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +214 -0
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +644 -0
- package/src/summary/summarizerTypes.ts +507 -0
- package/src/summary/summaryCollection.ts +450 -0
- package/src/summary/summaryFormat.ts +228 -0
- package/src/summary/summaryGenerator.ts +505 -0
- package/src/summary/summaryManager.ts +423 -0
- package/src/throttler.ts +131 -122
- package/tsconfig.esnext.json +6 -6
- package/tsconfig.json +9 -13
- package/dist/garbageCollection.d.ts +0 -387
- package/dist/garbageCollection.d.ts.map +0 -1
- package/dist/garbageCollection.js +0 -1138
- package/dist/garbageCollection.js.map +0 -1
- package/dist/garbageCollectionConstants.d.ts +0 -19
- package/dist/garbageCollectionConstants.d.ts.map +0 -1
- package/dist/garbageCollectionConstants.js +0 -34
- package/dist/garbageCollectionConstants.js.map +0 -1
- package/dist/gcSweepReadyUsageDetection.d.ts.map +0 -1
- package/dist/gcSweepReadyUsageDetection.js.map +0 -1
- package/dist/orderedClientElection.d.ts.map +0 -1
- package/dist/orderedClientElection.js.map +0 -1
- package/dist/runWhileConnectedCoordinator.d.ts.map +0 -1
- package/dist/runWhileConnectedCoordinator.js.map +0 -1
- package/dist/runningSummarizer.d.ts.map +0 -1
- package/dist/runningSummarizer.js.map +0 -1
- package/dist/serializedSnapshotStorage.d.ts +0 -58
- package/dist/serializedSnapshotStorage.d.ts.map +0 -1
- package/dist/serializedSnapshotStorage.js +0 -108
- package/dist/serializedSnapshotStorage.js.map +0 -1
- package/dist/summarizer.d.ts.map +0 -1
- package/dist/summarizer.js.map +0 -1
- package/dist/summarizerClientElection.d.ts.map +0 -1
- package/dist/summarizerClientElection.js.map +0 -1
- package/dist/summarizerHandle.d.ts +0 -12
- package/dist/summarizerHandle.d.ts.map +0 -1
- package/dist/summarizerHandle.js +0 -22
- package/dist/summarizerHandle.js.map +0 -1
- package/dist/summarizerHeuristics.d.ts.map +0 -1
- package/dist/summarizerHeuristics.js.map +0 -1
- package/dist/summarizerTypes.d.ts.map +0 -1
- package/dist/summarizerTypes.js.map +0 -1
- package/dist/summaryCollection.d.ts.map +0 -1
- package/dist/summaryCollection.js.map +0 -1
- package/dist/summaryFormat.d.ts.map +0 -1
- package/dist/summaryFormat.js.map +0 -1
- package/dist/summaryGenerator.d.ts.map +0 -1
- package/dist/summaryGenerator.js.map +0 -1
- package/dist/summaryManager.d.ts.map +0 -1
- package/dist/summaryManager.js.map +0 -1
- package/lib/garbageCollection.d.ts +0 -387
- package/lib/garbageCollection.d.ts.map +0 -1
- package/lib/garbageCollection.js +0 -1133
- package/lib/garbageCollection.js.map +0 -1
- package/lib/garbageCollectionConstants.d.ts +0 -19
- package/lib/garbageCollectionConstants.d.ts.map +0 -1
- package/lib/garbageCollectionConstants.js +0 -31
- package/lib/garbageCollectionConstants.js.map +0 -1
- package/lib/gcSweepReadyUsageDetection.d.ts.map +0 -1
- package/lib/gcSweepReadyUsageDetection.js.map +0 -1
- package/lib/orderedClientElection.d.ts.map +0 -1
- package/lib/orderedClientElection.js.map +0 -1
- package/lib/runWhileConnectedCoordinator.d.ts.map +0 -1
- package/lib/runWhileConnectedCoordinator.js.map +0 -1
- package/lib/runningSummarizer.d.ts.map +0 -1
- package/lib/runningSummarizer.js.map +0 -1
- package/lib/serializedSnapshotStorage.d.ts +0 -58
- package/lib/serializedSnapshotStorage.d.ts.map +0 -1
- package/lib/serializedSnapshotStorage.js +0 -104
- package/lib/serializedSnapshotStorage.js.map +0 -1
- package/lib/summarizer.d.ts.map +0 -1
- package/lib/summarizer.js.map +0 -1
- package/lib/summarizerClientElection.d.ts.map +0 -1
- package/lib/summarizerClientElection.js.map +0 -1
- package/lib/summarizerHandle.d.ts +0 -12
- package/lib/summarizerHandle.d.ts.map +0 -1
- package/lib/summarizerHandle.js +0 -18
- package/lib/summarizerHandle.js.map +0 -1
- package/lib/summarizerHeuristics.d.ts.map +0 -1
- package/lib/summarizerHeuristics.js.map +0 -1
- package/lib/summarizerTypes.d.ts.map +0 -1
- package/lib/summarizerTypes.js +0 -9
- package/lib/summarizerTypes.js.map +0 -1
- package/lib/summaryCollection.d.ts.map +0 -1
- package/lib/summaryCollection.js.map +0 -1
- package/lib/summaryFormat.d.ts.map +0 -1
- package/lib/summaryFormat.js.map +0 -1
- package/lib/summaryGenerator.d.ts.map +0 -1
- package/lib/summaryGenerator.js.map +0 -1
- package/lib/summaryManager.d.ts.map +0 -1
- package/lib/summaryManager.js.map +0 -1
- package/src/garbageCollection.ts +0 -1646
- package/src/garbageCollectionConstants.ts +0 -35
- package/src/gcSweepReadyUsageDetection.ts +0 -139
- package/src/orderedClientElection.ts +0 -532
- package/src/runWhileConnectedCoordinator.ts +0 -106
- package/src/runningSummarizer.ts +0 -611
- package/src/serializedSnapshotStorage.ts +0 -146
- package/src/summarizer.ts +0 -421
- package/src/summarizerClientElection.ts +0 -161
- package/src/summarizerHandle.ts +0 -21
- package/src/summarizerHeuristics.ts +0 -222
- package/src/summarizerTypes.ts +0 -510
- package/src/summaryCollection.ts +0 -421
- package/src/summaryFormat.ts +0 -235
- package/src/summaryGenerator.ts +0 -446
- package/src/summaryManager.ts +0 -394
- /package/dist/{orderedClientElection.d.ts → summary/orderedClientElection.d.ts} +0 -0
- /package/dist/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +0 -0
- /package/dist/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +0 -0
- /package/lib/{orderedClientElection.d.ts → summary/orderedClientElection.d.ts} +0 -0
- /package/lib/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +0 -0
- /package/lib/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +0 -0
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { IEvent, IEventProvider, ITelemetryLogger } from "@fluidframework/common-definitions";
|
|
7
|
-
import { TypedEventEmitter } from "@fluidframework/common-utils";
|
|
8
|
-
import { IClientDetails, MessageType } from "@fluidframework/protocol-definitions";
|
|
9
|
-
import { IOrderedClientElection, ISerializedElection, ITrackedClient } from "./orderedClientElection";
|
|
10
|
-
import { ISummaryCollectionOpEvents } from "./summaryCollection";
|
|
11
|
-
|
|
12
|
-
export const summarizerClientType = "summarizer";
|
|
13
|
-
|
|
14
|
-
export interface ISummarizerClientElectionEvents extends IEvent {
|
|
15
|
-
(event: "electedSummarizerChanged", handler: () => void): void;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export interface ISummarizerClientElection extends IEventProvider<ISummarizerClientElectionEvents> {
|
|
19
|
-
readonly electedClientId: string | undefined;
|
|
20
|
-
readonly electedParentId: string | undefined;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* This class encapsulates logic around tracking the elected summarizer client.
|
|
25
|
-
* It will handle updating the elected client when a summary ack hasn't been seen
|
|
26
|
-
* for some configured number of ops.
|
|
27
|
-
*/
|
|
28
|
-
export class SummarizerClientElection
|
|
29
|
-
extends TypedEventEmitter<ISummarizerClientElectionEvents>
|
|
30
|
-
implements ISummarizerClientElection {
|
|
31
|
-
/**
|
|
32
|
-
* Used to calculate number of ops since last summary ack for the current elected client.
|
|
33
|
-
* This will be undefined if there is no elected summarizer, or no summary ack has been
|
|
34
|
-
* observed since this client was elected.
|
|
35
|
-
* When a summary ack comes in, this will be set to the sequence number of the summary ack.
|
|
36
|
-
*/
|
|
37
|
-
private lastSummaryAckSeqForClient: number | undefined;
|
|
38
|
-
/**
|
|
39
|
-
* Used to prevent excess logging by recording the sequence number that we last reported at,
|
|
40
|
-
* and making sure we don't report another event to telemetry. If things work as intended,
|
|
41
|
-
* this is not needed, otherwise it could report an event on every op in worst case scenario.
|
|
42
|
-
*/
|
|
43
|
-
private lastReportedSeq = 0;
|
|
44
|
-
|
|
45
|
-
public get electedClientId() {
|
|
46
|
-
return this.clientElection.electedClient?.clientId;
|
|
47
|
-
}
|
|
48
|
-
public get electedParentId() {
|
|
49
|
-
return this.clientElection.electedParent?.clientId;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
constructor(
|
|
53
|
-
private readonly logger: ITelemetryLogger,
|
|
54
|
-
private readonly summaryCollection: IEventProvider<ISummaryCollectionOpEvents>,
|
|
55
|
-
public readonly clientElection: IOrderedClientElection,
|
|
56
|
-
private readonly maxOpsSinceLastSummary: number,
|
|
57
|
-
private readonly electionEnabled: boolean,
|
|
58
|
-
) {
|
|
59
|
-
super();
|
|
60
|
-
// On every inbound op, if enough ops pass without seeing a summary ack (per elected client),
|
|
61
|
-
// elect a new client and log to telemetry.
|
|
62
|
-
this.summaryCollection.on("default", ({ sequenceNumber }) => {
|
|
63
|
-
const electedClientId = this.electedClientId;
|
|
64
|
-
if (electedClientId === undefined) {
|
|
65
|
-
// Reset election if no elected client, but eligible clients are connected.
|
|
66
|
-
// This should be uncommon, but is possible if the initial state of the
|
|
67
|
-
// ordered client election contains an undefined client id or one not found
|
|
68
|
-
// in the quorum (the latter would already log an error).
|
|
69
|
-
if (this.clientElection.eligibleCount > 0) {
|
|
70
|
-
this.clientElection.resetElectedClient(sequenceNumber);
|
|
71
|
-
}
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
let electionSequenceNumber = this.clientElection.electionSequenceNumber;
|
|
75
|
-
const opsWithoutSummary = sequenceNumber - (this.lastSummaryAckSeqForClient ?? electionSequenceNumber);
|
|
76
|
-
if (opsWithoutSummary > this.maxOpsSinceLastSummary) {
|
|
77
|
-
// Log and elect a new summarizer client.
|
|
78
|
-
const opsSinceLastReport = sequenceNumber - this.lastReportedSeq;
|
|
79
|
-
if (opsSinceLastReport > this.maxOpsSinceLastSummary) {
|
|
80
|
-
this.logger.sendTelemetryEvent({
|
|
81
|
-
eventName: "ElectedClientNotSummarizing",
|
|
82
|
-
electedClientId,
|
|
83
|
-
lastSummaryAckSeqForClient: this.lastSummaryAckSeqForClient,
|
|
84
|
-
electionSequenceNumber,
|
|
85
|
-
nextElectedClientId: this.clientElection.peekNextElectedClient()?.clientId,
|
|
86
|
-
electionEnabled: this.electionEnabled,
|
|
87
|
-
});
|
|
88
|
-
this.lastReportedSeq = sequenceNumber;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
if (this.electionEnabled) {
|
|
92
|
-
const previousParentId = this.electedParentId;
|
|
93
|
-
this.clientElection.incrementElectedClient(sequenceNumber);
|
|
94
|
-
|
|
95
|
-
// Verify that state incremented as expected. This should be reliable,
|
|
96
|
-
// since all of OrderedClientElection is synchronous.
|
|
97
|
-
electionSequenceNumber = this.clientElection.electionSequenceNumber;
|
|
98
|
-
if (sequenceNumber > (this.lastSummaryAckSeqForClient ?? electionSequenceNumber)) {
|
|
99
|
-
if (opsSinceLastReport > this.maxOpsSinceLastSummary) {
|
|
100
|
-
this.logger.sendErrorEvent({
|
|
101
|
-
eventName: "UnexpectedElectionSequenceNumber",
|
|
102
|
-
// Expected to be undefined
|
|
103
|
-
lastSummaryAckSeqForClient: this.lastSummaryAckSeqForClient,
|
|
104
|
-
// Expected to be same as op sequenceNumber
|
|
105
|
-
electionSequenceNumber,
|
|
106
|
-
sequenceNumber,
|
|
107
|
-
previousClientId: electedClientId,
|
|
108
|
-
previousParentId,
|
|
109
|
-
electedParentId: this.electedParentId,
|
|
110
|
-
electedClientId: this.electedClientId,
|
|
111
|
-
opsSinceLastReport,
|
|
112
|
-
maxOpsSinceLastSummary,
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
// When a summary ack comes in, reset our op seq counter.
|
|
121
|
-
this.summaryCollection.on(MessageType.SummaryAck, (op) => {
|
|
122
|
-
this.lastSummaryAckSeqForClient = op.sequenceNumber;
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
// Use oldest client election for unanimously and deterministically deciding
|
|
126
|
-
// which client should summarize.
|
|
127
|
-
this.clientElection.on("election", (client, sequenceNumber) => {
|
|
128
|
-
this.lastSummaryAckSeqForClient = undefined;
|
|
129
|
-
if (client === undefined && this.clientElection.eligibleCount > 0) {
|
|
130
|
-
// If no client is valid for election, reset to the oldest again.
|
|
131
|
-
// Also make extra sure not to get stuck in an infinite loop here:
|
|
132
|
-
// If there are no eligible clients, just wait until a client joins
|
|
133
|
-
// and will be auto-elected.
|
|
134
|
-
this.clientElection.resetElectedClient(sequenceNumber);
|
|
135
|
-
}
|
|
136
|
-
// Election can trigger a change in SummaryManager state.
|
|
137
|
-
this.emit("electedSummarizerChanged");
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
public serialize(): ISerializedElection {
|
|
142
|
-
const { electedClientId, electedParentId, electionSequenceNumber } = this.clientElection.serialize();
|
|
143
|
-
return {
|
|
144
|
-
electedClientId,
|
|
145
|
-
electedParentId,
|
|
146
|
-
electionSequenceNumber: this.lastSummaryAckSeqForClient ?? electionSequenceNumber,
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
public static isClientEligible(client: ITrackedClient): boolean {
|
|
151
|
-
const details = client.client.details;
|
|
152
|
-
if (details === undefined) {
|
|
153
|
-
// Very old clients back-compat
|
|
154
|
-
return true;
|
|
155
|
-
}
|
|
156
|
-
return SummarizerClientElection.clientDetailsPermitElection(details);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
public static readonly clientDetailsPermitElection = (details: IClientDetails): boolean =>
|
|
160
|
-
details.capabilities.interactive || details.type === summarizerClientType;
|
|
161
|
-
}
|
package/src/summarizerHandle.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
import { FluidObjectHandle } from "@fluidframework/datastore";
|
|
6
|
-
import { IFluidHandle } from "@fluidframework/core-interfaces";
|
|
7
|
-
|
|
8
|
-
// TODO #2425 Expose Summarizer handle as FluidObjectHandle w/ tests
|
|
9
|
-
export class SummarizerHandle extends FluidObjectHandle {
|
|
10
|
-
public async get(): Promise<any> {
|
|
11
|
-
throw Error("Do not try to get a summarizer object from the handle. Reference it directly.");
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
public attach(): void {
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
public bind(handle: IFluidHandle) {
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { ITelemetryLogger } from "@fluidframework/common-definitions";
|
|
7
|
-
import { Timer } from "@fluidframework/common-utils";
|
|
8
|
-
import { ISummaryConfigurationHeuristics } from "./containerRuntime";
|
|
9
|
-
import {
|
|
10
|
-
ISummarizeHeuristicData,
|
|
11
|
-
ISummarizeHeuristicRunner,
|
|
12
|
-
ISummarizeAttempt,
|
|
13
|
-
ISummaryHeuristicStrategy,
|
|
14
|
-
} from "./summarizerTypes";
|
|
15
|
-
import { SummarizeReason } from "./summaryGenerator";
|
|
16
|
-
|
|
17
|
-
/** Simple implementation of class for tracking summarize heuristic data. */
|
|
18
|
-
export class SummarizeHeuristicData implements ISummarizeHeuristicData {
|
|
19
|
-
protected _lastAttempt: ISummarizeAttempt;
|
|
20
|
-
public get lastAttempt(): ISummarizeAttempt {
|
|
21
|
-
return this._lastAttempt;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
protected _lastSuccessfulSummary: Readonly<ISummarizeAttempt>;
|
|
25
|
-
public get lastSuccessfulSummary(): Readonly<ISummarizeAttempt> {
|
|
26
|
-
return this._lastSuccessfulSummary;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
public numNonRuntimeOps: number = 0;
|
|
30
|
-
public totalOpsSize: number = 0;
|
|
31
|
-
public hasMissingOpData: boolean = false;
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Cumulative size in bytes of all the ops at the beginning of the summarization attempt.
|
|
35
|
-
* Is used to adjust totalOpsSize appropriately after successful summarization.
|
|
36
|
-
*/
|
|
37
|
-
/** */
|
|
38
|
-
private totalOpsSizeBefore: number = 0;
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Number of system ops at beginning of attempting to summarize.
|
|
42
|
-
* Is used to adjust numSystemOps appropriately after successful summarization.
|
|
43
|
-
*/
|
|
44
|
-
private numSystemOpsBefore: number = 0;
|
|
45
|
-
|
|
46
|
-
public numRuntimeOps: number = 0;
|
|
47
|
-
/**
|
|
48
|
-
* Number of non-system ops at beginning of attempting to summarize.
|
|
49
|
-
* Is used to adjust numNonSystemOps appropriately after successful summarization.
|
|
50
|
-
*/
|
|
51
|
-
private numNonSystemOpsBefore: number = 0;
|
|
52
|
-
|
|
53
|
-
constructor(
|
|
54
|
-
public lastOpSequenceNumber: number,
|
|
55
|
-
/** Baseline attempt data used for comparisons with subsequent attempts/calculations. */
|
|
56
|
-
attemptBaseline: ISummarizeAttempt,
|
|
57
|
-
) {
|
|
58
|
-
this._lastAttempt = attemptBaseline;
|
|
59
|
-
this._lastSuccessfulSummary = { ...attemptBaseline };
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
public updateWithLastSummaryAckInfo(lastSummary: Readonly<ISummarizeAttempt>) {
|
|
63
|
-
this._lastAttempt = lastSummary;
|
|
64
|
-
this._lastSuccessfulSummary = { ...lastSummary };
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
public recordAttempt(refSequenceNumber?: number) {
|
|
68
|
-
this._lastAttempt = {
|
|
69
|
-
refSequenceNumber: refSequenceNumber ?? this.lastOpSequenceNumber,
|
|
70
|
-
summaryTime: Date.now(),
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
this.numSystemOpsBefore = this.numNonRuntimeOps;
|
|
74
|
-
this.numNonSystemOpsBefore = this.numRuntimeOps;
|
|
75
|
-
this.totalOpsSizeBefore = this.totalOpsSize;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
public markLastAttemptAsSuccessful() {
|
|
79
|
-
this._lastSuccessfulSummary = { ...this.lastAttempt };
|
|
80
|
-
|
|
81
|
-
this.numNonRuntimeOps -= this.numSystemOpsBefore;
|
|
82
|
-
this.numSystemOpsBefore = 0;
|
|
83
|
-
|
|
84
|
-
this.numRuntimeOps -= this.numNonSystemOpsBefore;
|
|
85
|
-
this.numNonSystemOpsBefore = 0;
|
|
86
|
-
|
|
87
|
-
this.totalOpsSize -= this.totalOpsSizeBefore;
|
|
88
|
-
this.totalOpsSizeBefore = 0;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* This class contains the heuristics for when to summarize.
|
|
94
|
-
*/
|
|
95
|
-
export class SummarizeHeuristicRunner implements ISummarizeHeuristicRunner {
|
|
96
|
-
private readonly idleTimer: Timer | undefined;
|
|
97
|
-
private readonly runSummarize: (reason: SummarizeReason) => void;
|
|
98
|
-
|
|
99
|
-
public constructor(
|
|
100
|
-
private readonly heuristicData: ISummarizeHeuristicData,
|
|
101
|
-
private readonly configuration: ISummaryConfigurationHeuristics,
|
|
102
|
-
trySummarize: (reason: SummarizeReason) => void,
|
|
103
|
-
private readonly logger: ITelemetryLogger,
|
|
104
|
-
private readonly summarizeStrategies: ISummaryHeuristicStrategy[] = getDefaultSummaryHeuristicStrategies(),
|
|
105
|
-
) {
|
|
106
|
-
this.idleTimer = new Timer(
|
|
107
|
-
this.idleTime,
|
|
108
|
-
() => this.runSummarize("idle"));
|
|
109
|
-
|
|
110
|
-
this.runSummarize = (reason: SummarizeReason) => {
|
|
111
|
-
this.idleTimer?.clear();
|
|
112
|
-
|
|
113
|
-
// We shouldn't attempt a summary if there are no new processed ops
|
|
114
|
-
const opsSinceLastAck = this.opsSinceLastAck;
|
|
115
|
-
if (opsSinceLastAck > 0) {
|
|
116
|
-
trySummarize(reason);
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
public get idleTime(): number {
|
|
122
|
-
const maxIdleTime = this.configuration.maxIdleTime;
|
|
123
|
-
const minIdleTime = this.configuration.minIdleTime;
|
|
124
|
-
const weightedNumOfOps = getWeightedNumberOfOps(
|
|
125
|
-
this.heuristicData.numRuntimeOps,
|
|
126
|
-
this.heuristicData.numNonRuntimeOps,
|
|
127
|
-
this.configuration.runtimeOpWeight,
|
|
128
|
-
this.configuration.nonRuntimeOpWeight,
|
|
129
|
-
);
|
|
130
|
-
const pToMaxOps = weightedNumOfOps * 1.0 / this.configuration.maxOps;
|
|
131
|
-
|
|
132
|
-
if (pToMaxOps >= 1) {
|
|
133
|
-
return minIdleTime;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// Return a ratioed idle time based on the percentage of ops
|
|
137
|
-
return maxIdleTime - ((maxIdleTime - minIdleTime) * pToMaxOps);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
public get opsSinceLastAck(): number {
|
|
141
|
-
return this.heuristicData.lastOpSequenceNumber - this.heuristicData.lastSuccessfulSummary.refSequenceNumber;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
public start() {
|
|
145
|
-
this.idleTimer?.start(this.idleTime);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
public run() {
|
|
149
|
-
for (const strategy of this.summarizeStrategies) {
|
|
150
|
-
if (strategy.shouldRunSummary(this.configuration, this.heuristicData)) {
|
|
151
|
-
return this.runSummarize(strategy.summarizeReason);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
this.idleTimer?.restart(this.idleTime);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
public shouldRunLastSummary(): boolean {
|
|
159
|
-
const opsSinceLastAck = this.opsSinceLastAck;
|
|
160
|
-
const minOpsForLastSummaryAttempt = this.configuration.minOpsForLastSummaryAttempt;
|
|
161
|
-
|
|
162
|
-
this.logger.sendTelemetryEvent({
|
|
163
|
-
eventName: "ShouldRunLastSummary",
|
|
164
|
-
opsSinceLastAck,
|
|
165
|
-
minOpsForLastSummaryAttempt,
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
return opsSinceLastAck >= minOpsForLastSummaryAttempt;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
public dispose() {
|
|
172
|
-
this.idleTimer?.clear();
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
/** Strategy used to run a summary when it's been a while since our last successful summary */
|
|
177
|
-
class MaxTimeSummaryHeuristicStrategy implements ISummaryHeuristicStrategy {
|
|
178
|
-
public readonly summarizeReason: Readonly<SummarizeReason> = "maxTime";
|
|
179
|
-
|
|
180
|
-
public shouldRunSummary(
|
|
181
|
-
configuration: ISummaryConfigurationHeuristics,
|
|
182
|
-
heuristicData: ISummarizeHeuristicData,
|
|
183
|
-
): boolean {
|
|
184
|
-
const timeSinceLastSummary = Date.now() - heuristicData.lastSuccessfulSummary.summaryTime;
|
|
185
|
-
return timeSinceLastSummary > configuration.maxTime;
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
function getWeightedNumberOfOps(
|
|
190
|
-
runtimeOpCount: number,
|
|
191
|
-
nonRuntimeOpCount: number,
|
|
192
|
-
runtimeOpWeight: number,
|
|
193
|
-
nonRuntimeOpWeight: number,
|
|
194
|
-
): number {
|
|
195
|
-
return (runtimeOpWeight * runtimeOpCount)
|
|
196
|
-
+ (nonRuntimeOpWeight * nonRuntimeOpCount);
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
/** Strategy used to do a weighted analysis on the ops we've processed since the last successful summary */
|
|
200
|
-
class WeightedOpsSummaryHeuristicStrategy implements ISummaryHeuristicStrategy {
|
|
201
|
-
public readonly summarizeReason: Readonly<SummarizeReason> = "maxOps";
|
|
202
|
-
|
|
203
|
-
public shouldRunSummary(
|
|
204
|
-
configuration: ISummaryConfigurationHeuristics,
|
|
205
|
-
heuristicData: ISummarizeHeuristicData,
|
|
206
|
-
): boolean {
|
|
207
|
-
const weightedNumOfOps = getWeightedNumberOfOps(
|
|
208
|
-
heuristicData.numRuntimeOps,
|
|
209
|
-
heuristicData.numNonRuntimeOps,
|
|
210
|
-
configuration.runtimeOpWeight,
|
|
211
|
-
configuration.nonRuntimeOpWeight,
|
|
212
|
-
);
|
|
213
|
-
return weightedNumOfOps > configuration.maxOps;
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
function getDefaultSummaryHeuristicStrategies() {
|
|
218
|
-
return [
|
|
219
|
-
new MaxTimeSummaryHeuristicStrategy(),
|
|
220
|
-
new WeightedOpsSummaryHeuristicStrategy(),
|
|
221
|
-
];
|
|
222
|
-
}
|