@fluidframework/container-runtime 2.0.0-dev-rc.5.0.0.263932 → 2.0.0-dev-rc.5.0.0.267932
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api-report/container-runtime.api.md +43 -53
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager.d.ts +4 -4
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +1 -1
- package/dist/blobManager.js.map +1 -1
- package/dist/channelCollection.d.ts +3 -3
- package/dist/channelCollection.d.ts.map +1 -1
- package/dist/channelCollection.js +3 -3
- package/dist/channelCollection.js.map +1 -1
- package/dist/connectionTelemetry.d.ts +2 -1
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +14 -14
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerHandleContext.d.ts +2 -1
- package/dist/containerHandleContext.d.ts.map +1 -1
- package/dist/containerHandleContext.js.map +1 -1
- package/dist/containerRuntime.d.ts +12 -19
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +74 -120
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.d.ts.map +1 -1
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +7 -8
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +3 -3
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/dataStoreRegistry.js.map +1 -1
- package/dist/deltaManagerProxies.d.ts +4 -3
- package/dist/deltaManagerProxies.d.ts.map +1 -1
- package/dist/deltaManagerProxies.js.map +1 -1
- package/dist/deltaScheduler.d.ts +2 -1
- package/dist/deltaScheduler.d.ts.map +1 -1
- package/dist/deltaScheduler.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts +1 -3
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +18 -21
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.d.ts.map +1 -1
- package/dist/gc/gcConfigs.js +11 -30
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +3 -30
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js +1 -3
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcHelpers.d.ts +2 -3
- package/dist/gc/gcHelpers.d.ts.map +1 -1
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -1
- package/dist/gc/gcSummaryDefinitions.d.ts +1 -1
- package/dist/gc/gcSummaryDefinitions.d.ts.map +1 -1
- package/dist/gc/gcSummaryDefinitions.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts +2 -35
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js +9 -62
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts +1 -1
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +2 -2
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
- package/dist/gc/index.d.ts +1 -1
- package/dist/gc/index.d.ts.map +1 -1
- package/dist/gc/index.js +1 -2
- package/dist/gc/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/legacy.d.ts +1 -1
- package/dist/messageTypes.d.ts +1 -1
- package/dist/messageTypes.d.ts.map +1 -1
- package/dist/messageTypes.js.map +1 -1
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/definitions.d.ts +2 -2
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts +11 -1
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +13 -2
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts +10 -3
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js +7 -0
- package/dist/opLifecycle/opGroupingManager.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts +4 -2
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +12 -7
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +10 -0
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +12 -17
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js +2 -2
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/dist/opProperties.d.ts +1 -1
- package/dist/opProperties.d.ts.map +1 -1
- 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.js.map +1 -1
- package/dist/scheduleManager.d.ts +2 -1
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js.map +1 -1
- package/dist/storageServiceWithAttachBlobs.js.map +1 -1
- package/dist/summary/documentSchema.js +1 -1
- package/dist/summary/documentSchema.js.map +1 -1
- package/dist/summary/index.d.ts +1 -1
- package/dist/summary/index.d.ts.map +1 -1
- package/dist/summary/index.js.map +1 -1
- package/dist/summary/orderedClientElection.d.ts +4 -2
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js +35 -13
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/dist/summary/runningSummarizer.d.ts +1 -6
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +22 -108
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.d.ts +1 -1
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +4 -1
- package/dist/summary/summarizer.js.map +1 -1
- package/dist/summary/summarizerClientElection.d.ts +1 -1
- package/dist/summary/summarizerClientElection.d.ts.map +1 -1
- package/dist/summary/summarizerClientElection.js +2 -2
- package/dist/summary/summarizerClientElection.js.map +1 -1
- package/dist/summary/summarizerHeuristics.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.d.ts +3 -3
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js +16 -16
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -3
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +17 -29
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryCollection.d.ts +2 -1
- package/dist/summary/summaryCollection.d.ts.map +1 -1
- package/dist/summary/summaryCollection.js +11 -11
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +3 -3
- package/dist/summary/summaryFormat.d.ts.map +1 -1
- package/dist/summary/summaryFormat.js +2 -2
- package/dist/summary/summaryFormat.js.map +1 -1
- package/dist/summary/summaryGenerator.d.ts +7 -8
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +26 -22
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryManager.js.map +1 -1
- package/dist/throttler.js.map +1 -1
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager.d.ts +4 -4
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +1 -1
- package/lib/blobManager.js.map +1 -1
- package/lib/channelCollection.d.ts +3 -3
- package/lib/channelCollection.d.ts.map +1 -1
- package/lib/channelCollection.js +3 -3
- package/lib/channelCollection.js.map +1 -1
- package/lib/connectionTelemetry.d.ts +2 -1
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +2 -2
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerHandleContext.d.ts +2 -1
- package/lib/containerHandleContext.d.ts.map +1 -1
- package/lib/containerHandleContext.js.map +1 -1
- package/lib/containerRuntime.d.ts +12 -19
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +68 -114
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStore.d.ts.map +1 -1
- package/lib/dataStore.js.map +1 -1
- package/lib/dataStoreContext.d.ts +7 -8
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +3 -3
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.js.map +1 -1
- package/lib/dataStoreRegistry.js.map +1 -1
- package/lib/deltaManagerProxies.d.ts +4 -3
- package/lib/deltaManagerProxies.d.ts.map +1 -1
- package/lib/deltaManagerProxies.js.map +1 -1
- package/lib/deltaScheduler.d.ts +2 -1
- package/lib/deltaScheduler.d.ts.map +1 -1
- package/lib/deltaScheduler.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts +1 -3
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +18 -21
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcConfigs.d.ts.map +1 -1
- package/lib/gc/gcConfigs.js +12 -31
- package/lib/gc/gcConfigs.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +3 -30
- package/lib/gc/gcDefinitions.d.ts.map +1 -1
- package/lib/gc/gcDefinitions.js +0 -2
- package/lib/gc/gcDefinitions.js.map +1 -1
- package/lib/gc/gcHelpers.d.ts +2 -3
- package/lib/gc/gcHelpers.d.ts.map +1 -1
- package/lib/gc/gcHelpers.js.map +1 -1
- package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -1
- package/lib/gc/gcSummaryDefinitions.d.ts +1 -1
- package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -1
- package/lib/gc/gcSummaryDefinitions.js.map +1 -1
- package/lib/gc/gcSummaryStateTracker.d.ts +2 -35
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/lib/gc/gcSummaryStateTracker.js +4 -57
- package/lib/gc/gcSummaryStateTracker.js.map +1 -1
- package/lib/gc/gcTelemetry.d.ts +1 -1
- package/lib/gc/gcTelemetry.d.ts.map +1 -1
- package/lib/gc/gcTelemetry.js +2 -2
- package/lib/gc/gcTelemetry.js.map +1 -1
- package/lib/gc/gcUnreferencedStateTracker.js.map +1 -1
- package/lib/gc/index.d.ts +1 -1
- package/lib/gc/index.d.ts.map +1 -1
- package/lib/gc/index.js +1 -1
- package/lib/gc/index.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/legacy.d.ts +1 -1
- package/lib/messageTypes.d.ts +1 -1
- package/lib/messageTypes.d.ts.map +1 -1
- package/lib/messageTypes.js.map +1 -1
- package/lib/opLifecycle/batchManager.js.map +1 -1
- package/lib/opLifecycle/definitions.d.ts +2 -2
- package/lib/opLifecycle/definitions.d.ts.map +1 -1
- package/lib/opLifecycle/definitions.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts +11 -1
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js +13 -2
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts +10 -3
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/lib/opLifecycle/opGroupingManager.js +7 -0
- package/lib/opLifecycle/opGroupingManager.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts +4 -2
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +12 -7
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +10 -0
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +12 -17
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.js +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/lib/opProperties.d.ts +1 -1
- package/lib/opProperties.d.ts.map +1 -1
- 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.js.map +1 -1
- package/lib/scheduleManager.d.ts +2 -1
- package/lib/scheduleManager.d.ts.map +1 -1
- package/lib/scheduleManager.js.map +1 -1
- package/lib/storageServiceWithAttachBlobs.js.map +1 -1
- package/lib/summary/documentSchema.js +1 -1
- package/lib/summary/documentSchema.js.map +1 -1
- package/lib/summary/index.d.ts +1 -1
- package/lib/summary/index.d.ts.map +1 -1
- package/lib/summary/index.js.map +1 -1
- package/lib/summary/orderedClientElection.d.ts +4 -2
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js +35 -13
- package/lib/summary/orderedClientElection.js.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/lib/summary/runningSummarizer.d.ts +1 -6
- package/lib/summary/runningSummarizer.d.ts.map +1 -1
- package/lib/summary/runningSummarizer.js +21 -107
- package/lib/summary/runningSummarizer.js.map +1 -1
- package/lib/summary/summarizer.d.ts +1 -1
- package/lib/summary/summarizer.d.ts.map +1 -1
- package/lib/summary/summarizer.js +4 -1
- package/lib/summary/summarizer.js.map +1 -1
- package/lib/summary/summarizerClientElection.d.ts +1 -1
- package/lib/summary/summarizerClientElection.d.ts.map +1 -1
- package/lib/summary/summarizerClientElection.js +1 -1
- package/lib/summary/summarizerClientElection.js.map +1 -1
- package/lib/summary/summarizerHeuristics.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.d.ts +3 -3
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.js +14 -14
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -3
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/lib/summary/summarizerTypes.d.ts +17 -29
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryCollection.d.ts +2 -1
- package/lib/summary/summaryCollection.d.ts.map +1 -1
- package/lib/summary/summaryCollection.js +3 -3
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryFormat.d.ts +3 -3
- package/lib/summary/summaryFormat.d.ts.map +1 -1
- package/lib/summary/summaryFormat.js +2 -2
- package/lib/summary/summaryFormat.js.map +1 -1
- package/lib/summary/summaryGenerator.d.ts +7 -8
- package/lib/summary/summaryGenerator.d.ts.map +1 -1
- package/lib/summary/summaryGenerator.js +25 -21
- package/lib/summary/summaryGenerator.js.map +1 -1
- package/lib/summary/summaryManager.js.map +1 -1
- package/lib/throttler.js.map +1 -1
- package/lib/tsdoc-metadata.json +1 -1
- package/package.json +72 -24
- package/src/batchTracker.ts +1 -1
- package/src/blobManager.ts +7 -7
- package/src/channelCollection.ts +8 -9
- package/src/connectionTelemetry.ts +14 -6
- package/src/containerHandleContext.ts +2 -1
- package/src/containerRuntime.ts +88 -141
- package/src/dataStore.ts +2 -1
- package/src/dataStoreContext.ts +16 -17
- package/src/deltaManagerProxies.ts +7 -5
- package/src/deltaScheduler.ts +2 -1
- package/src/gc/garbageCollection.md +0 -8
- package/src/gc/garbageCollection.ts +20 -25
- package/src/gc/gcConfigs.ts +8 -34
- package/src/gc/gcDefinitions.ts +4 -31
- package/src/gc/gcHelpers.ts +2 -2
- package/src/gc/gcSummaryDefinitions.ts +1 -1
- package/src/gc/gcSummaryStateTracker.ts +7 -73
- package/src/gc/gcTelemetry.ts +2 -2
- package/src/gc/index.ts +0 -1
- package/src/index.ts +1 -1
- package/src/messageTypes.ts +1 -1
- package/src/opLifecycle/README.md +120 -160
- package/src/opLifecycle/definitions.ts +2 -2
- package/src/opLifecycle/opCompressor.ts +13 -2
- package/src/opLifecycle/opDecompressor.ts +1 -1
- package/src/opLifecycle/opGroupingManager.ts +11 -4
- package/src/opLifecycle/opSplitter.ts +13 -8
- package/src/opLifecycle/outbox.ts +12 -27
- package/src/opLifecycle/remoteMessageProcessor.ts +2 -1
- package/src/opProperties.ts +2 -4
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +1 -1
- package/src/scheduleManager.ts +2 -1
- package/src/summary/index.ts +1 -1
- package/src/summary/orderedClientElection.ts +83 -12
- package/src/summary/runningSummarizer.ts +31 -115
- package/src/summary/summarizer.ts +5 -2
- package/src/summary/summarizerClientElection.ts +2 -1
- package/src/summary/summarizerNode/summarizerNode.ts +19 -31
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +2 -1
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +4 -8
- package/src/summary/summarizerTypes.ts +22 -33
- package/src/summary/summaryCollection.ts +2 -2
- package/src/summary/summaryFormat.ts +9 -7
- package/src/summary/summaryGenerator.ts +51 -29
package/dist/containerRuntime.js
CHANGED
|
@@ -9,9 +9,9 @@ const client_utils_1 = require("@fluid-internal/client-utils");
|
|
|
9
9
|
const container_definitions_1 = require("@fluidframework/container-definitions");
|
|
10
10
|
const internal_1 = require("@fluidframework/container-definitions/internal");
|
|
11
11
|
const internal_2 = require("@fluidframework/core-utils/internal");
|
|
12
|
+
const driver_definitions_1 = require("@fluidframework/driver-definitions");
|
|
12
13
|
const internal_3 = require("@fluidframework/driver-definitions/internal");
|
|
13
14
|
const internal_4 = require("@fluidframework/driver-utils/internal");
|
|
14
|
-
const protocol_definitions_1 = require("@fluidframework/protocol-definitions");
|
|
15
15
|
const internal_5 = require("@fluidframework/runtime-definitions/internal");
|
|
16
16
|
const internal_6 = require("@fluidframework/runtime-utils/internal");
|
|
17
17
|
const internal_7 = require("@fluidframework/telemetry-utils/internal");
|
|
@@ -50,13 +50,13 @@ function compatBehaviorAllowsMessageType(_unknownContainerRuntimeMessageType, co
|
|
|
50
50
|
exports.DefaultSummaryConfiguration = {
|
|
51
51
|
state: "enabled",
|
|
52
52
|
minIdleTime: 0,
|
|
53
|
-
maxIdleTime: 30 * 1000,
|
|
54
|
-
maxTime: 60 * 1000,
|
|
55
|
-
maxOps: 100,
|
|
53
|
+
maxIdleTime: 30 * 1000, // 30 secs.
|
|
54
|
+
maxTime: 60 * 1000, // 1 min.
|
|
55
|
+
maxOps: 100, // Summarize if 100 weighted ops received since last snapshot.
|
|
56
56
|
minOpsForLastSummaryAttempt: 10,
|
|
57
|
-
maxAckWaitTime: 3 * 60 * 1000,
|
|
57
|
+
maxAckWaitTime: 3 * 60 * 1000, // 3 mins.
|
|
58
58
|
maxOpsSinceLastSummary: 7000,
|
|
59
|
-
initialSummarizerDelayMs: 5 * 1000,
|
|
59
|
+
initialSummarizerDelayMs: 5 * 1000, // 5 secs.
|
|
60
60
|
nonRuntimeOpWeight: 0.1,
|
|
61
61
|
runtimeOpWeight: 1.0,
|
|
62
62
|
nonRuntimeHeuristicThreshold: 20,
|
|
@@ -155,7 +155,7 @@ exports.getDeviceSpec = getDeviceSpec;
|
|
|
155
155
|
*/
|
|
156
156
|
const makeLegacySendBatchFn = (submitFn, deltaManager) => (batch) => {
|
|
157
157
|
for (const message of batch.content) {
|
|
158
|
-
submitFn(
|
|
158
|
+
submitFn(internal_3.MessageType.Operation,
|
|
159
159
|
// For back-compat (submitFn only works on deserialized content)
|
|
160
160
|
message.contents === undefined ? undefined : JSON.parse(message.contents), true, // batch
|
|
161
161
|
message.metadata);
|
|
@@ -532,7 +532,9 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
532
532
|
return this.garbageCollector.throwOnTombstoneUsage;
|
|
533
533
|
}
|
|
534
534
|
/***/
|
|
535
|
-
constructor(context, registry, metadata, electedSummarizerData, chunks, dataStoreAliasMap, runtimeOptions, containerScope,
|
|
535
|
+
constructor(context, registry, metadata, electedSummarizerData, chunks, dataStoreAliasMap, runtimeOptions, containerScope,
|
|
536
|
+
// Create a custom ITelemetryBaseLogger to output telemetry events.
|
|
537
|
+
baseLogger, existing, blobManagerSnapshot, _storage, createIdCompressor, documentsSchemaController, featureGatesForTelemetry, provideEntryPoint, requestHandler, summaryConfiguration = {
|
|
536
538
|
// the defaults
|
|
537
539
|
...exports.DefaultSummaryConfiguration,
|
|
538
540
|
// the runtime configuration overrides
|
|
@@ -543,7 +545,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
543
545
|
this.metadata = metadata;
|
|
544
546
|
this.runtimeOptions = runtimeOptions;
|
|
545
547
|
this.containerScope = containerScope;
|
|
546
|
-
this.
|
|
548
|
+
this.baseLogger = baseLogger;
|
|
547
549
|
this._storage = _storage;
|
|
548
550
|
this.createIdCompressor = createIdCompressor;
|
|
549
551
|
this.documentsSchemaController = documentsSchemaController;
|
|
@@ -575,6 +577,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
575
577
|
expiry: { policy: "absolute", durationMs: 60000 },
|
|
576
578
|
});
|
|
577
579
|
const { options, clientDetails, connected, baseSnapshot, submitFn, submitBatchFn, submitSummaryFn, submitSignalFn, disposeFn, closeFn, deltaManager, quorum, audience, loader, pendingLocalState, supportedFeatures, snapshotWithContents, } = context;
|
|
580
|
+
this.logger = (0, internal_7.createChildLogger)({ logger: this.baseLogger });
|
|
578
581
|
this.mc = (0, internal_7.createChildMonitoringContext)({
|
|
579
582
|
logger: this.logger,
|
|
580
583
|
namespace: "ContainerRuntime",
|
|
@@ -857,7 +860,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
857
860
|
namespace: "OrderedClientElection",
|
|
858
861
|
});
|
|
859
862
|
const orderedClientCollection = new index_js_3.OrderedClientCollection(orderedClientLogger, this.innerDeltaManager, this._quorum);
|
|
860
|
-
const orderedClientElectionForSummarizer = new index_js_3.OrderedClientElection(orderedClientLogger, orderedClientCollection, electedSummarizerData ?? this.innerDeltaManager.lastSequenceNumber, index_js_3.SummarizerClientElection.isClientEligible);
|
|
863
|
+
const orderedClientElectionForSummarizer = new index_js_3.OrderedClientElection(orderedClientLogger, orderedClientCollection, electedSummarizerData ?? this.innerDeltaManager.lastSequenceNumber, index_js_3.SummarizerClientElection.isClientEligible, this.mc.config.getBoolean("Fluid.ContainerRuntime.OrderedClientElection.EnablePerformanceEvents"));
|
|
861
864
|
this.summarizerClientElection = new index_js_3.SummarizerClientElection(orderedClientLogger, this.summaryCollection, orderedClientElectionForSummarizer, this.maxOpsSinceLastSummary);
|
|
862
865
|
if (this.isSummarizerClient) {
|
|
863
866
|
this._summarizer = new index_js_3.Summarizer(this /* ISummarizerRuntime */, () => this.summaryConfiguration, this /* ISummarizerInternalsProvider */, this.handleContext, this.summaryCollection, async (runtime) => index_js_3.RunWhileConnectedCoordinator.create(runtime,
|
|
@@ -874,7 +877,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
874
877
|
// unregister default to no log on every op after falling behind
|
|
875
878
|
// and register summary ack handler to re-register this handler
|
|
876
879
|
// after successful summary
|
|
877
|
-
this.summaryCollection.once(
|
|
880
|
+
this.summaryCollection.once(internal_3.MessageType.SummaryAck, () => {
|
|
878
881
|
this.mc.logger.sendTelemetryEvent({
|
|
879
882
|
eventName: "SummaryStatus:CaughtUp",
|
|
880
883
|
});
|
|
@@ -901,7 +904,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
901
904
|
}
|
|
902
905
|
}
|
|
903
906
|
// logging hardware telemetry
|
|
904
|
-
logger.sendTelemetryEvent({
|
|
907
|
+
this.logger.sendTelemetryEvent({
|
|
905
908
|
eventName: "DeviceSpec",
|
|
906
909
|
...getDeviceSpec(),
|
|
907
910
|
});
|
|
@@ -1064,7 +1067,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
1064
1067
|
const props = {
|
|
1065
1068
|
eventName: "GroupIdSnapshotCatchup",
|
|
1066
1069
|
loadingGroupIds: sortedLoadingGroupIds.join(","),
|
|
1067
|
-
targetSequenceNumber: snapshotSeqNumber,
|
|
1070
|
+
targetSequenceNumber: snapshotSeqNumber, // This is so we reuse some columns in telemetry
|
|
1068
1071
|
sequenceNumber: this.deltaManager.lastSequenceNumber, // This is so we reuse some columns in telemetry
|
|
1069
1072
|
};
|
|
1070
1073
|
const event = internal_7.PerformanceEvent.start(this.mc.logger, {
|
|
@@ -1182,7 +1185,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
1182
1185
|
this.messageAtLastSummary;
|
|
1183
1186
|
const documentSchema = this.documentsSchemaController.summarizeDocumentSchema(this.deltaManager.lastSequenceNumber);
|
|
1184
1187
|
// Is document schema explicit control on?
|
|
1185
|
-
const
|
|
1188
|
+
const explicitSchemaControl = documentSchema?.runtime.explicitSchemaControl;
|
|
1186
1189
|
const metadata = {
|
|
1187
1190
|
...this.createContainerMetadata,
|
|
1188
1191
|
// Increment the summary number for the next summary that will be generated.
|
|
@@ -1195,10 +1198,10 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
1195
1198
|
// runtimes (that preceed document schema control capabilities) to close container on load due to mismatch in
|
|
1196
1199
|
// last message's sequence number.
|
|
1197
1200
|
// See also lastMessageFromMetadata()
|
|
1198
|
-
message:
|
|
1201
|
+
message: explicitSchemaControl
|
|
1199
1202
|
? { sequenceNumber: -1 }
|
|
1200
1203
|
: message,
|
|
1201
|
-
lastMessage:
|
|
1204
|
+
lastMessage: explicitSchemaControl ? message : undefined,
|
|
1202
1205
|
documentSchema,
|
|
1203
1206
|
};
|
|
1204
1207
|
(0, internal_6.addBlobToSummary)(summaryTree, index_js_3.metadataBlobName, JSON.stringify(metadata));
|
|
@@ -1453,7 +1456,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
1453
1456
|
// Whether or not the message appears to be a runtime message from an up-to-date client.
|
|
1454
1457
|
// It may be a legacy runtime message (ie already unpacked and ContainerMessageType)
|
|
1455
1458
|
// or something different, like a system message.
|
|
1456
|
-
const modernRuntimeMessage = messageArg.type ===
|
|
1459
|
+
const modernRuntimeMessage = messageArg.type === internal_3.MessageType.Operation;
|
|
1457
1460
|
// Do shallow copy of message, as the processing flow will modify it.
|
|
1458
1461
|
// There might be multiple container instances receiving the same message.
|
|
1459
1462
|
// We do not need to make a deep copy. Each layer will just replace message.contents itself,
|
|
@@ -1917,7 +1920,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
1917
1920
|
await this.collectGarbage({ logger: summaryLogger, runSweep, fullGC }, telemetryContext);
|
|
1918
1921
|
}
|
|
1919
1922
|
const { stats, summary } = await this.summarizerNode.summarize(fullTree, trackState, telemetryContext);
|
|
1920
|
-
(0, internal_2.assert)(summary.type ===
|
|
1923
|
+
(0, internal_2.assert)(summary.type === driver_definitions_1.SummaryType.Tree, 0x12f /* "Container Runtime's summarize should always return a tree" */);
|
|
1921
1924
|
return { stats, summary };
|
|
1922
1925
|
}
|
|
1923
1926
|
finally {
|
|
@@ -2080,7 +2083,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2080
2083
|
* @param options - options controlling how the summary is generated or submitted
|
|
2081
2084
|
*/
|
|
2082
2085
|
async submitSummary(options) {
|
|
2083
|
-
const { fullTree = false, finalAttempt = false,
|
|
2086
|
+
const { fullTree = false, finalAttempt = false, summaryLogger, latestSummaryRefSeqNum, } = options;
|
|
2084
2087
|
// The summary number for this summary. This will be updated during the summary process, so get it now and
|
|
2085
2088
|
// use it for all events logged during this summary.
|
|
2086
2089
|
const summaryNumber = this.nextSummaryNumber;
|
|
@@ -2095,13 +2098,6 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2095
2098
|
},
|
|
2096
2099
|
});
|
|
2097
2100
|
(0, internal_2.assert)(this.outbox.isEmpty, 0x3d1 /* Can't trigger summary in the middle of a batch */);
|
|
2098
|
-
// We close the summarizer and download a new snapshot and reload the container
|
|
2099
|
-
if (refreshLatestAck === true) {
|
|
2100
|
-
return this.prefetchLatestSummaryThenClose((0, internal_7.createChildLogger)({
|
|
2101
|
-
logger: summaryNumberLogger,
|
|
2102
|
-
properties: { all: { safeSummary: true } },
|
|
2103
|
-
}));
|
|
2104
|
-
}
|
|
2105
2101
|
// If the container is dirty, i.e., there are pending unacked ops, the summary will not be eventual consistent
|
|
2106
2102
|
// and it may even be incorrect. So, wait for the container to be saved with a timeout. If the container is not
|
|
2107
2103
|
// saved within the timeout, check if it should be failed or can continue.
|
|
@@ -2170,7 +2166,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2170
2166
|
stage: "base",
|
|
2171
2167
|
referenceSequenceNumber: summaryRefSeqNum,
|
|
2172
2168
|
minimumSequenceNumber,
|
|
2173
|
-
error: new
|
|
2169
|
+
error: new index_js_3.RetriableSummaryError(`Summarizer node state inconsistent with summarizer state.`),
|
|
2174
2170
|
};
|
|
2175
2171
|
}
|
|
2176
2172
|
}
|
|
@@ -2213,17 +2209,14 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2213
2209
|
stage: "base",
|
|
2214
2210
|
referenceSequenceNumber: summaryRefSeqNum,
|
|
2215
2211
|
minimumSequenceNumber,
|
|
2216
|
-
error: new
|
|
2212
|
+
error: new index_js_3.RetriableSummaryError(continueResult.error),
|
|
2217
2213
|
};
|
|
2218
2214
|
}
|
|
2219
2215
|
const trace = client_utils_1.Trace.start();
|
|
2220
2216
|
let summarizeResult;
|
|
2221
|
-
// If the GC state needs to be reset, we need to force a full tree summary and update the unreferenced
|
|
2222
|
-
// state of all the nodes.
|
|
2223
|
-
const forcedFullTree = this.garbageCollector.summaryStateNeedsReset;
|
|
2224
2217
|
try {
|
|
2225
2218
|
summarizeResult = await this.summarize({
|
|
2226
|
-
fullTree
|
|
2219
|
+
fullTree,
|
|
2227
2220
|
trackState: true,
|
|
2228
2221
|
summaryLogger: summaryNumberLogger,
|
|
2229
2222
|
runGC: this.garbageCollector.shouldRunGC,
|
|
@@ -2234,7 +2227,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2234
2227
|
stage: "base",
|
|
2235
2228
|
referenceSequenceNumber: summaryRefSeqNum,
|
|
2236
2229
|
minimumSequenceNumber,
|
|
2237
|
-
error: (0, internal_7.wrapError)(error, (msg) => new
|
|
2230
|
+
error: (0, internal_7.wrapError)(error, (msg) => new index_js_3.RetriableSummaryError(msg)),
|
|
2238
2231
|
};
|
|
2239
2232
|
}
|
|
2240
2233
|
// Validate that the summary generated by summarizer nodes is correct before uploading.
|
|
@@ -2262,8 +2255,8 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2262
2255
|
// Because handles are unchanged dataStores in the current logic,
|
|
2263
2256
|
// summarized dataStore count is total dataStore count minus handle count
|
|
2264
2257
|
const dataStoreTree = summaryTree.tree[internal_5.channelsTreeName];
|
|
2265
|
-
(0, internal_2.assert)(dataStoreTree.type ===
|
|
2266
|
-
const handleCount = Object.values(dataStoreTree.tree).filter((value) => value.type ===
|
|
2258
|
+
(0, internal_2.assert)(dataStoreTree.type === driver_definitions_1.SummaryType.Tree, 0x1fc /* "summary is not a tree" */);
|
|
2259
|
+
const handleCount = Object.values(dataStoreTree.tree).filter((value) => value.type === driver_definitions_1.SummaryType.Handle).length;
|
|
2267
2260
|
const gcSummaryTreeStats = summaryTree.tree[internal_5.gcTreeKey]
|
|
2268
2261
|
? (0, internal_6.calculateStats)(summaryTree.tree[internal_5.gcTreeKey])
|
|
2269
2262
|
: undefined;
|
|
@@ -2282,14 +2275,13 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2282
2275
|
summaryTree,
|
|
2283
2276
|
summaryStats,
|
|
2284
2277
|
generateDuration: trace.trace().duration,
|
|
2285
|
-
forcedFullTree,
|
|
2286
2278
|
};
|
|
2287
2279
|
continueResult = checkContinue();
|
|
2288
2280
|
if (!continueResult.continue) {
|
|
2289
2281
|
return {
|
|
2290
2282
|
stage: "generate",
|
|
2291
2283
|
...generateSummaryData,
|
|
2292
|
-
error: new
|
|
2284
|
+
error: new index_js_3.RetriableSummaryError(continueResult.error),
|
|
2293
2285
|
};
|
|
2294
2286
|
}
|
|
2295
2287
|
const summaryContext = lastAck === undefined
|
|
@@ -2311,7 +2303,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2311
2303
|
return {
|
|
2312
2304
|
stage: "generate",
|
|
2313
2305
|
...generateSummaryData,
|
|
2314
|
-
error: (0, internal_7.wrapError)(error, (msg) => new
|
|
2306
|
+
error: (0, internal_7.wrapError)(error, (msg) => new index_js_3.RetriableSummaryError(msg)),
|
|
2315
2307
|
};
|
|
2316
2308
|
}
|
|
2317
2309
|
const parent = summaryContext.ackHandle;
|
|
@@ -2332,7 +2324,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2332
2324
|
return {
|
|
2333
2325
|
stage: "upload",
|
|
2334
2326
|
...uploadData,
|
|
2335
|
-
error: new
|
|
2327
|
+
error: new index_js_3.RetriableSummaryError(continueResult.error),
|
|
2336
2328
|
};
|
|
2337
2329
|
}
|
|
2338
2330
|
let clientSequenceNumber;
|
|
@@ -2343,7 +2335,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2343
2335
|
return {
|
|
2344
2336
|
stage: "upload",
|
|
2345
2337
|
...uploadData,
|
|
2346
|
-
error: (0, internal_7.wrapError)(error, (msg) => new
|
|
2338
|
+
error: (0, internal_7.wrapError)(error, (msg) => new index_js_3.RetriableSummaryError(msg)),
|
|
2347
2339
|
};
|
|
2348
2340
|
}
|
|
2349
2341
|
const submitData = {
|
|
@@ -2359,7 +2351,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2359
2351
|
return {
|
|
2360
2352
|
stage: "upload",
|
|
2361
2353
|
...uploadData,
|
|
2362
|
-
error: (0, internal_7.wrapError)(error, (msg) => new
|
|
2354
|
+
error: (0, internal_7.wrapError)(error, (msg) => new index_js_3.RetriableSummaryError(msg)),
|
|
2363
2355
|
};
|
|
2364
2356
|
}
|
|
2365
2357
|
return submitData;
|
|
@@ -2449,13 +2441,13 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2449
2441
|
this.verifyNotClosed();
|
|
2450
2442
|
return this.blobManager.createBlob(blob, signal);
|
|
2451
2443
|
}
|
|
2452
|
-
submitIdAllocationOpIfNeeded(resubmitOutstandingRanges
|
|
2444
|
+
submitIdAllocationOpIfNeeded(resubmitOutstandingRanges) {
|
|
2453
2445
|
if (this._idCompressor) {
|
|
2454
2446
|
const idRange = resubmitOutstandingRanges
|
|
2455
|
-
? this.
|
|
2447
|
+
? this._idCompressor.takeUnfinalizedCreationRange()
|
|
2456
2448
|
: this._idCompressor.takeNextCreationRange();
|
|
2457
2449
|
// Don't include the idRange if there weren't any Ids allocated
|
|
2458
|
-
if (idRange
|
|
2450
|
+
if (idRange.ids !== undefined) {
|
|
2459
2451
|
const idAllocationMessage = {
|
|
2460
2452
|
type: messageTypes_js_1.ContainerMessageType.IdAllocation,
|
|
2461
2453
|
contents: idRange,
|
|
@@ -2484,6 +2476,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2484
2476
|
});
|
|
2485
2477
|
}
|
|
2486
2478
|
const type = containerRuntimeMessage.type;
|
|
2479
|
+
(0, internal_2.assert)(type !== messageTypes_js_1.ContainerMessageType.IdAllocation, "IdAllocation should be submitted directly to outbox.");
|
|
2487
2480
|
const message = {
|
|
2488
2481
|
contents: serializedContent,
|
|
2489
2482
|
metadata,
|
|
@@ -2491,44 +2484,35 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2491
2484
|
referenceSequenceNumber: this.deltaManager.lastSequenceNumber,
|
|
2492
2485
|
};
|
|
2493
2486
|
try {
|
|
2494
|
-
|
|
2495
|
-
//
|
|
2496
|
-
//
|
|
2497
|
-
//
|
|
2498
|
-
|
|
2499
|
-
|
|
2487
|
+
this.submitIdAllocationOpIfNeeded(false);
|
|
2488
|
+
// Allow document schema controller to send a message if it needs to propose change in document schema.
|
|
2489
|
+
// If it needs to send a message, it will call provided callback with payload of such message and rely
|
|
2490
|
+
// on this callback to do actual sending.
|
|
2491
|
+
const contents = this.documentsSchemaController.maybeSendSchemaMessage();
|
|
2492
|
+
if (contents) {
|
|
2493
|
+
this.logger.sendTelemetryEvent({
|
|
2494
|
+
eventName: "SchemaChangeProposal",
|
|
2495
|
+
refSeq: contents.refSeq,
|
|
2496
|
+
version: contents.version,
|
|
2497
|
+
newRuntimeSchema: JSON.stringify(contents.runtime),
|
|
2498
|
+
sessionRuntimeSchema: JSON.stringify(this.sessionSchema),
|
|
2499
|
+
oldRuntimeSchema: JSON.stringify(this.metadata?.documentSchema?.runtime),
|
|
2500
|
+
});
|
|
2501
|
+
const msg = {
|
|
2502
|
+
type: messageTypes_js_1.ContainerMessageType.DocumentSchemaChange,
|
|
2503
|
+
contents,
|
|
2504
|
+
};
|
|
2505
|
+
this.outbox.submit({
|
|
2506
|
+
contents: JSON.stringify(msg),
|
|
2507
|
+
referenceSequenceNumber: this.deltaManager.lastSequenceNumber,
|
|
2508
|
+
});
|
|
2509
|
+
}
|
|
2510
|
+
if (type === messageTypes_js_1.ContainerMessageType.BlobAttach) {
|
|
2511
|
+
// BlobAttach ops must have their metadata visible and cannot be grouped (see opGroupingManager.ts)
|
|
2512
|
+
this.outbox.submitBlobAttach(message);
|
|
2500
2513
|
}
|
|
2501
2514
|
else {
|
|
2502
|
-
this.
|
|
2503
|
-
// Allow document schema controller to send a message if it needs to propose change in document schema.
|
|
2504
|
-
// If it needs to send a message, it will call provided callback with payload of such message and rely
|
|
2505
|
-
// on this callback to do actual sending.
|
|
2506
|
-
const contents = this.documentsSchemaController.maybeSendSchemaMessage();
|
|
2507
|
-
if (contents) {
|
|
2508
|
-
this.logger.sendTelemetryEvent({
|
|
2509
|
-
eventName: "SchemaChangeProposal",
|
|
2510
|
-
refSeq: contents.refSeq,
|
|
2511
|
-
version: contents.version,
|
|
2512
|
-
newRuntimeSchema: JSON.stringify(contents.runtime),
|
|
2513
|
-
sessionRuntimeSchema: JSON.stringify(this.sessionSchema),
|
|
2514
|
-
oldRuntimeSchema: JSON.stringify(this.metadata?.documentSchema?.runtime),
|
|
2515
|
-
});
|
|
2516
|
-
const msg = {
|
|
2517
|
-
type: messageTypes_js_1.ContainerMessageType.DocumentSchemaChange,
|
|
2518
|
-
contents,
|
|
2519
|
-
};
|
|
2520
|
-
this.outbox.submit({
|
|
2521
|
-
contents: JSON.stringify(msg),
|
|
2522
|
-
referenceSequenceNumber: this.deltaManager.lastSequenceNumber,
|
|
2523
|
-
});
|
|
2524
|
-
}
|
|
2525
|
-
if (type === messageTypes_js_1.ContainerMessageType.BlobAttach) {
|
|
2526
|
-
// BlobAttach ops must have their metadata visible and cannot be grouped (see opGroupingManager.ts)
|
|
2527
|
-
this.outbox.submitBlobAttach(message);
|
|
2528
|
-
}
|
|
2529
|
-
else {
|
|
2530
|
-
this.outbox.submit(message);
|
|
2531
|
-
}
|
|
2515
|
+
this.outbox.submit(message);
|
|
2532
2516
|
}
|
|
2533
2517
|
if (!this.currentlyBatching()) {
|
|
2534
2518
|
this.flush();
|
|
@@ -2586,7 +2570,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2586
2570
|
// back-compat: ADO #1385: Make this call unconditional in the future
|
|
2587
2571
|
return this.submitSummaryFn !== undefined
|
|
2588
2572
|
? this.submitSummaryFn(contents, referenceSequenceNumber)
|
|
2589
|
-
: this.submitFn(
|
|
2573
|
+
: this.submitFn(internal_3.MessageType.Summarize, contents, false);
|
|
2590
2574
|
}
|
|
2591
2575
|
/**
|
|
2592
2576
|
* Throw an error if the runtime is closed. Methods that are expected to potentially
|
|
@@ -2703,51 +2687,23 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2703
2687
|
* and then close as the current main client is likely to be re-elected as the parent summarizer again.
|
|
2704
2688
|
*/
|
|
2705
2689
|
if (!result.isSummaryTracked && result.isSummaryNewer) {
|
|
2706
|
-
await this.
|
|
2690
|
+
await this.fetchLatestSnapshotAndClose(summaryLogger, {
|
|
2707
2691
|
eventName: "RefreshLatestSummaryAckFetch",
|
|
2708
2692
|
ackHandle,
|
|
2709
2693
|
targetSequenceNumber: summaryRefSeq,
|
|
2710
2694
|
}, readAndParseBlob);
|
|
2711
|
-
await this.closeStaleSummarizer();
|
|
2712
2695
|
return;
|
|
2713
2696
|
}
|
|
2714
2697
|
// Notify the garbage collector so it can update its latest summary state.
|
|
2715
2698
|
await this.garbageCollector.refreshLatestSummary(result);
|
|
2716
2699
|
}
|
|
2717
2700
|
/**
|
|
2718
|
-
* Fetches the latest snapshot from storage
|
|
2719
|
-
*
|
|
2720
|
-
*
|
|
2721
|
-
* @returns a generic summarization error
|
|
2701
|
+
* Fetches the latest snapshot from storage and closes the container. This is done in cases where
|
|
2702
|
+
* the last known snapshot is older than the latest one. This will ensure that the latest snapshot
|
|
2703
|
+
* is downloaded and we don't end up loading snapshot from cache.
|
|
2722
2704
|
*/
|
|
2723
|
-
async
|
|
2724
|
-
|
|
2725
|
-
// This is a performance optimization as the same parent is likely to be elected again, and would use its
|
|
2726
|
-
// cache to fetch the snapshot instead of the network.
|
|
2727
|
-
await this.fetchLatestSnapshotFromStorage(summaryLogger, {
|
|
2728
|
-
eventName: "RefreshLatestSummaryFromServerFetch",
|
|
2729
|
-
}, readAndParseBlob);
|
|
2730
|
-
await this.closeStaleSummarizer();
|
|
2731
|
-
return {
|
|
2732
|
-
stage: "base",
|
|
2733
|
-
error: new internal_7.LoggingError("summary state stale - Unsupported option 'refreshLatestAck'"),
|
|
2734
|
-
referenceSequenceNumber: this.deltaManager.lastSequenceNumber,
|
|
2735
|
-
minimumSequenceNumber: this.deltaManager.minimumSequenceNumber,
|
|
2736
|
-
};
|
|
2737
|
-
}
|
|
2738
|
-
async closeStaleSummarizer() {
|
|
2739
|
-
// Delay before restarting summarizer to prevent the summarizer from restarting too frequently.
|
|
2740
|
-
await (0, internal_2.delay)(this.closeSummarizerDelayMs);
|
|
2741
|
-
this._summarizer?.stop("latestSummaryStateStale");
|
|
2742
|
-
this.disposeFn();
|
|
2743
|
-
}
|
|
2744
|
-
/**
|
|
2745
|
-
* Downloads the latest snapshot from storage.
|
|
2746
|
-
* By default, it also closes the container after downloading the snapshot. However, this may be
|
|
2747
|
-
* overridden via options.
|
|
2748
|
-
*/
|
|
2749
|
-
async fetchLatestSnapshotFromStorage(logger, event, readAndParseBlob) {
|
|
2750
|
-
return internal_7.PerformanceEvent.timedExecAsync(logger, event, async (perfEvent) => {
|
|
2705
|
+
async fetchLatestSnapshotAndClose(logger, event, readAndParseBlob) {
|
|
2706
|
+
await internal_7.PerformanceEvent.timedExecAsync(logger, event, async (perfEvent) => {
|
|
2751
2707
|
const stats = {};
|
|
2752
2708
|
const trace = client_utils_1.Trace.start();
|
|
2753
2709
|
const versions = await this.storage.getVersions(null, 1, "prefetchLatestSummaryBeforeClose", internal_3.FetchSource.noCache);
|
|
@@ -2760,12 +2716,10 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2760
2716
|
stats.snapshotRefSeq = latestSnapshotRefSeq;
|
|
2761
2717
|
stats.snapshotVersion = versions[0].id;
|
|
2762
2718
|
perfEvent.end(stats);
|
|
2763
|
-
return {
|
|
2764
|
-
snapshotTree: maybeSnapshot,
|
|
2765
|
-
versionId: versions[0].id,
|
|
2766
|
-
latestSnapshotRefSeq,
|
|
2767
|
-
};
|
|
2768
2719
|
});
|
|
2720
|
+
await (0, internal_2.delay)(this.closeSummarizerDelayMs);
|
|
2721
|
+
this._summarizer?.stop("latestSummaryStateStale");
|
|
2722
|
+
this.disposeFn();
|
|
2769
2723
|
}
|
|
2770
2724
|
getPendingLocalState(props) {
|
|
2771
2725
|
this.verifyNotClosed();
|