@fluidframework/container-runtime 2.0.0-dev-rc.5.0.0.265721 → 2.0.0-dev-rc.5.0.0.268409
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 → container-runtime.alpha.api.md} +13 -482
- package/api-report/container-runtime.beta.api.md +73 -0
- package/api-report/container-runtime.public.api.md +73 -0
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager.d.ts +2 -2
- package/dist/blobManager.d.ts.map +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.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/containerRuntime.d.ts +2 -2
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +12 -16
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStoreContext.d.ts +3 -4
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.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 +0 -1
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +17 -20
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.d.ts.map +1 -1
- package/dist/gc/gcConfigs.js +5 -19
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +1 -10
- 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 +1 -1
- package/dist/gc/gcHelpers.d.ts.map +1 -1
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts +1 -34
- 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.map +1 -1
- package/dist/gc/gcTelemetry.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/messageTypes.d.ts +1 -1
- package/dist/messageTypes.d.ts.map +1 -1
- package/dist/messageTypes.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 +9 -0
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +10 -1
- 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/summary/orderedClientElection.d.ts +1 -1
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runningSummarizer.d.ts +1 -1
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +3 -4
- package/dist/summary/runningSummarizer.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/summarizerNode/summarizerNode.d.ts +2 -1
- 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 +1 -1
- 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 +2 -3
- 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 +9 -9
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +2 -2
- 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.map +1 -1
- package/dist/summary/summaryGenerator.js +3 -4
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager.d.ts +2 -2
- package/lib/blobManager.d.ts.map +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.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/containerRuntime.d.ts +2 -2
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +6 -10
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStoreContext.d.ts +3 -4
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.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 +0 -1
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +17 -20
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcConfigs.d.ts.map +1 -1
- package/lib/gc/gcConfigs.js +6 -20
- package/lib/gc/gcConfigs.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +1 -10
- 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 +1 -1
- package/lib/gc/gcHelpers.d.ts.map +1 -1
- package/lib/gc/gcHelpers.js.map +1 -1
- package/lib/gc/gcSummaryStateTracker.d.ts +1 -34
- 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.map +1 -1
- package/lib/gc/gcTelemetry.js.map +1 -1
- package/lib/gc/index.d.ts +1 -1
- package/lib/gc/index.d.ts.map +1 -1
- package/lib/gc/index.js +1 -1
- package/lib/gc/index.js.map +1 -1
- package/lib/messageTypes.d.ts +1 -1
- package/lib/messageTypes.d.ts.map +1 -1
- package/lib/messageTypes.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 +9 -0
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +10 -1
- 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/summary/orderedClientElection.d.ts +1 -1
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js.map +1 -1
- package/lib/summary/runningSummarizer.d.ts +1 -1
- package/lib/summary/runningSummarizer.d.ts.map +1 -1
- package/lib/summary/runningSummarizer.js +1 -2
- package/lib/summary/runningSummarizer.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/summarizerNode/summarizerNode.d.ts +2 -1
- 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 +1 -1
- 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 +2 -3
- 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 +1 -1
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryFormat.d.ts +2 -2
- package/lib/summary/summaryFormat.d.ts.map +1 -1
- package/lib/summary/summaryFormat.js +1 -1
- package/lib/summary/summaryFormat.js.map +1 -1
- package/lib/summary/summaryGenerator.d.ts.map +1 -1
- package/lib/summary/summaryGenerator.js +2 -3
- package/lib/summary/summaryGenerator.js.map +1 -1
- package/lib/tsdoc-metadata.json +1 -1
- package/package.json +33 -22
- package/src/batchTracker.ts +1 -1
- package/src/blobManager.ts +4 -4
- package/src/channelCollection.ts +4 -3
- package/src/connectionTelemetry.ts +14 -6
- package/src/containerRuntime.ts +17 -21
- package/src/dataStoreContext.ts +10 -10
- package/src/deltaManagerProxies.ts +7 -5
- package/src/deltaScheduler.ts +2 -1
- package/src/gc/garbageCollection.ts +18 -24
- package/src/gc/gcConfigs.ts +5 -24
- package/src/gc/gcDefinitions.ts +1 -10
- package/src/gc/gcHelpers.ts +1 -1
- package/src/gc/gcSummaryStateTracker.ts +6 -72
- package/src/gc/gcTelemetry.ts +1 -1
- package/src/gc/index.ts +0 -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 +10 -1
- 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/images/appTree.png +0 -0
- package/src/summary/images/protocolAndAppTree.png +0 -0
- package/src/summary/images/summaryTree.png +0 -0
- package/src/summary/orderedClientElection.ts +1 -1
- package/src/summary/runningSummarizer.ts +2 -2
- package/src/summary/summarizerClientElection.ts +2 -1
- package/src/summary/summarizerNode/summarizerNode.ts +19 -29
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +2 -1
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +3 -5
- package/src/summary/summarizerTypes.ts +2 -7
- package/src/summary/summaryCollection.ts +2 -2
- package/src/summary/summaryFormat.ts +5 -6
- package/src/summary/summaryFormats.md +160 -0
- package/src/summary/summaryGenerator.ts +2 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluidframework/container-runtime",
|
|
3
|
-
"version": "2.0.0-dev-rc.5.0.0.
|
|
3
|
+
"version": "2.0.0-dev-rc.5.0.0.268409",
|
|
4
4
|
"description": "Fluid container runtime",
|
|
5
5
|
"homepage": "https://fluidframework.com",
|
|
6
6
|
"repository": {
|
|
@@ -127,19 +127,18 @@
|
|
|
127
127
|
"temp-directory": "nyc/.nyc_output"
|
|
128
128
|
},
|
|
129
129
|
"dependencies": {
|
|
130
|
-
"@fluid-internal/client-utils": "2.0.0-dev-rc.5.0.0.
|
|
131
|
-
"@fluidframework/container-definitions": "2.0.0-dev-rc.5.0.0.
|
|
132
|
-
"@fluidframework/container-runtime-definitions": "2.0.0-dev-rc.5.0.0.
|
|
133
|
-
"@fluidframework/core-interfaces": "2.0.0-dev-rc.5.0.0.
|
|
134
|
-
"@fluidframework/core-utils": "2.0.0-dev-rc.5.0.0.
|
|
135
|
-
"@fluidframework/datastore": "2.0.0-dev-rc.5.0.0.
|
|
136
|
-
"@fluidframework/driver-definitions": "2.0.0-dev-rc.5.0.0.
|
|
137
|
-
"@fluidframework/driver-utils": "2.0.0-dev-rc.5.0.0.
|
|
138
|
-
"@fluidframework/id-compressor": "2.0.0-dev-rc.5.0.0.
|
|
139
|
-
"@fluidframework/
|
|
140
|
-
"@fluidframework/runtime-
|
|
141
|
-
"@fluidframework/
|
|
142
|
-
"@fluidframework/telemetry-utils": "2.0.0-dev-rc.5.0.0.265721",
|
|
130
|
+
"@fluid-internal/client-utils": "2.0.0-dev-rc.5.0.0.268409",
|
|
131
|
+
"@fluidframework/container-definitions": "2.0.0-dev-rc.5.0.0.268409",
|
|
132
|
+
"@fluidframework/container-runtime-definitions": "2.0.0-dev-rc.5.0.0.268409",
|
|
133
|
+
"@fluidframework/core-interfaces": "2.0.0-dev-rc.5.0.0.268409",
|
|
134
|
+
"@fluidframework/core-utils": "2.0.0-dev-rc.5.0.0.268409",
|
|
135
|
+
"@fluidframework/datastore": "2.0.0-dev-rc.5.0.0.268409",
|
|
136
|
+
"@fluidframework/driver-definitions": "2.0.0-dev-rc.5.0.0.268409",
|
|
137
|
+
"@fluidframework/driver-utils": "2.0.0-dev-rc.5.0.0.268409",
|
|
138
|
+
"@fluidframework/id-compressor": "2.0.0-dev-rc.5.0.0.268409",
|
|
139
|
+
"@fluidframework/runtime-definitions": "2.0.0-dev-rc.5.0.0.268409",
|
|
140
|
+
"@fluidframework/runtime-utils": "2.0.0-dev-rc.5.0.0.268409",
|
|
141
|
+
"@fluidframework/telemetry-utils": "2.0.0-dev-rc.5.0.0.268409",
|
|
143
142
|
"@tylerbu/sorted-btree-es6": "^1.8.0",
|
|
144
143
|
"double-ended-queue": "^2.1.0-0",
|
|
145
144
|
"lz4js": "^0.2.0",
|
|
@@ -147,18 +146,18 @@
|
|
|
147
146
|
},
|
|
148
147
|
"devDependencies": {
|
|
149
148
|
"@arethetypeswrong/cli": "^0.15.2",
|
|
150
|
-
"@biomejs/biome": "^1.
|
|
151
|
-
"@fluid-internal/mocha-test-setup": "2.0.0-dev-rc.5.0.0.
|
|
152
|
-
"@fluid-private/stochastic-test-utils": "2.0.0-dev-rc.5.0.0.
|
|
153
|
-
"@fluid-private/test-pairwise-generator": "2.0.0-dev-rc.5.0.0.
|
|
149
|
+
"@biomejs/biome": "^1.7.3",
|
|
150
|
+
"@fluid-internal/mocha-test-setup": "2.0.0-dev-rc.5.0.0.268409",
|
|
151
|
+
"@fluid-private/stochastic-test-utils": "2.0.0-dev-rc.5.0.0.268409",
|
|
152
|
+
"@fluid-private/test-pairwise-generator": "2.0.0-dev-rc.5.0.0.268409",
|
|
154
153
|
"@fluid-tools/benchmark": "^0.48.0",
|
|
155
154
|
"@fluid-tools/build-cli": "^0.39.0-264124",
|
|
156
155
|
"@fluidframework/build-common": "^2.0.3",
|
|
157
156
|
"@fluidframework/build-tools": "^0.39.0-264124",
|
|
158
157
|
"@fluidframework/container-runtime-previous": "npm:@fluidframework/container-runtime@2.0.0-rc.4.0.0",
|
|
159
|
-
"@fluidframework/eslint-config-fluid": "^5.
|
|
160
|
-
"@fluidframework/test-runtime-utils": "2.0.0-dev-rc.5.0.0.
|
|
161
|
-
"@microsoft/api-extractor": "^7.
|
|
158
|
+
"@fluidframework/eslint-config-fluid": "^5.3.0",
|
|
159
|
+
"@fluidframework/test-runtime-utils": "2.0.0-dev-rc.5.0.0.268409",
|
|
160
|
+
"@microsoft/api-extractor": "^7.45.1",
|
|
162
161
|
"@types/double-ended-queue": "^2.1.0",
|
|
163
162
|
"@types/mocha": "^9.1.1",
|
|
164
163
|
"@types/node": "^18.19.0",
|
|
@@ -175,7 +174,7 @@
|
|
|
175
174
|
"prettier": "~3.0.3",
|
|
176
175
|
"rimraf": "^4.4.0",
|
|
177
176
|
"sinon": "^17.0.1",
|
|
178
|
-
"typescript": "~5.
|
|
177
|
+
"typescript": "~5.4.5"
|
|
179
178
|
},
|
|
180
179
|
"typeValidation": {
|
|
181
180
|
"broken": {
|
|
@@ -226,6 +225,18 @@
|
|
|
226
225
|
"RemovedInterfaceDeclaration_IRetriableFailureResult": {
|
|
227
226
|
"backCompat": false,
|
|
228
227
|
"forwardCompat": false
|
|
228
|
+
},
|
|
229
|
+
"InterfaceDeclaration_IGenerateSummaryTreeResult": {
|
|
230
|
+
"backCompat": false
|
|
231
|
+
},
|
|
232
|
+
"InterfaceDeclaration_ISubmitSummaryOpResult": {
|
|
233
|
+
"backCompat": false
|
|
234
|
+
},
|
|
235
|
+
"InterfaceDeclaration_IUploadSummaryResult": {
|
|
236
|
+
"backCompat": false
|
|
237
|
+
},
|
|
238
|
+
"TypeAliasDeclaration_SubmitSummaryResult": {
|
|
239
|
+
"backCompat": false
|
|
229
240
|
}
|
|
230
241
|
}
|
|
231
242
|
},
|
package/src/batchTracker.ts
CHANGED
|
@@ -7,7 +7,7 @@ import type { EventEmitter } from "@fluid-internal/client-utils";
|
|
|
7
7
|
import { performance } from "@fluid-internal/client-utils";
|
|
8
8
|
import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
|
|
9
9
|
import { assert } from "@fluidframework/core-utils/internal";
|
|
10
|
-
import { ISequencedDocumentMessage } from "@fluidframework/
|
|
10
|
+
import { ISequencedDocumentMessage } from "@fluidframework/driver-definitions";
|
|
11
11
|
import { ITelemetryLoggerExt, createChildLogger } from "@fluidframework/telemetry-utils/internal";
|
|
12
12
|
|
|
13
13
|
export class BatchTracker {
|
package/src/blobManager.ts
CHANGED
|
@@ -14,13 +14,13 @@ import {
|
|
|
14
14
|
type IFluidHandleInternal,
|
|
15
15
|
} from "@fluidframework/core-interfaces/internal";
|
|
16
16
|
import { assert, Deferred } from "@fluidframework/core-utils/internal";
|
|
17
|
-
import {
|
|
18
|
-
import { canRetryOnError, runWithRetry } from "@fluidframework/driver-utils/internal";
|
|
17
|
+
import { ISequencedDocumentMessage } from "@fluidframework/driver-definitions";
|
|
19
18
|
import {
|
|
19
|
+
IDocumentStorageService,
|
|
20
20
|
ICreateBlobResponse,
|
|
21
|
-
ISequencedDocumentMessage,
|
|
22
21
|
ISnapshotTree,
|
|
23
|
-
} from "@fluidframework/
|
|
22
|
+
} from "@fluidframework/driver-definitions/internal";
|
|
23
|
+
import { canRetryOnError, runWithRetry } from "@fluidframework/driver-utils/internal";
|
|
24
24
|
import {
|
|
25
25
|
IGarbageCollectionData,
|
|
26
26
|
ISummaryTreeWithStats,
|
package/src/channelCollection.ts
CHANGED
|
@@ -14,14 +14,14 @@ import {
|
|
|
14
14
|
import type { IFluidHandleInternal } from "@fluidframework/core-interfaces/internal";
|
|
15
15
|
import { assert, Lazy, LazyPromise } from "@fluidframework/core-utils/internal";
|
|
16
16
|
import { FluidObjectHandle } from "@fluidframework/datastore/internal";
|
|
17
|
+
import { ISequencedDocumentMessage } from "@fluidframework/driver-definitions";
|
|
18
|
+
import type { ISnapshot } from "@fluidframework/driver-definitions/internal";
|
|
19
|
+
import { ISnapshotTree } from "@fluidframework/driver-definitions/internal";
|
|
17
20
|
import {
|
|
18
21
|
buildSnapshotTree,
|
|
19
22
|
getSnapshotTree,
|
|
20
23
|
isInstanceOfISnapshot,
|
|
21
24
|
} from "@fluidframework/driver-utils/internal";
|
|
22
|
-
import type { ISnapshot } from "@fluidframework/driver-definitions/internal";
|
|
23
|
-
import { ISequencedDocumentMessage, ISnapshotTree } from "@fluidframework/protocol-definitions";
|
|
24
|
-
import { IInboundSignalMessage } from "@fluidframework/runtime-definitions";
|
|
25
25
|
import {
|
|
26
26
|
ISummaryTreeWithStats,
|
|
27
27
|
ITelemetryContext,
|
|
@@ -40,6 +40,7 @@ import {
|
|
|
40
40
|
InboundAttachMessage,
|
|
41
41
|
NamedFluidDataStoreRegistryEntries,
|
|
42
42
|
channelsTreeName,
|
|
43
|
+
IInboundSignalMessage,
|
|
43
44
|
} from "@fluidframework/runtime-definitions/internal";
|
|
44
45
|
import {
|
|
45
46
|
GCDataBuilder,
|
|
@@ -8,12 +8,9 @@ import { IDeltaManager } from "@fluidframework/container-definitions/internal";
|
|
|
8
8
|
import { IContainerRuntimeEvents } from "@fluidframework/container-runtime-definitions/internal";
|
|
9
9
|
import { IEventProvider } from "@fluidframework/core-interfaces";
|
|
10
10
|
import { assert } from "@fluidframework/core-utils/internal";
|
|
11
|
+
import { ISequencedDocumentMessage } from "@fluidframework/driver-definitions";
|
|
12
|
+
import { IDocumentMessage, MessageType } from "@fluidframework/driver-definitions/internal";
|
|
11
13
|
import { isRuntimeMessage } from "@fluidframework/driver-utils/internal";
|
|
12
|
-
import {
|
|
13
|
-
IDocumentMessage,
|
|
14
|
-
ISequencedDocumentMessage,
|
|
15
|
-
MessageType,
|
|
16
|
-
} from "@fluidframework/protocol-definitions";
|
|
17
14
|
import {
|
|
18
15
|
IEventSampler,
|
|
19
16
|
ITelemetryLoggerExt,
|
|
@@ -95,6 +92,13 @@ class OpPerfTelemetry {
|
|
|
95
92
|
private readonly deltaLatencyLogger: ISampledTelemetryLogger;
|
|
96
93
|
|
|
97
94
|
private static readonly PROCESSED_OPS_SAMPLE_RATE = 500;
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* A sampled logger to log Ops that have been processed by the current client, the NoOp sent and the
|
|
98
|
+
* size of the ops processed within one sampling window of this log event.
|
|
99
|
+
* The data from this logger will be used to monitor the efficiency of NoOp-heuristics or to get approximate collab window size.
|
|
100
|
+
* Note: no log events are sent when sampling is disabled, because logging at every op will be too noisy.
|
|
101
|
+
*/
|
|
98
102
|
private readonly opsLogger: ISampledTelemetryLogger;
|
|
99
103
|
|
|
100
104
|
/**
|
|
@@ -167,7 +171,11 @@ class OpPerfTelemetry {
|
|
|
167
171
|
},
|
|
168
172
|
};
|
|
169
173
|
})();
|
|
170
|
-
this.opsLogger = createSampledLogger(
|
|
174
|
+
this.opsLogger = createSampledLogger(
|
|
175
|
+
logger,
|
|
176
|
+
opsEventSampler,
|
|
177
|
+
true /* skipLoggingWhenSamplingIsDisabled */,
|
|
178
|
+
);
|
|
171
179
|
|
|
172
180
|
this.deltaManager.on("pong", (latency) => this.recordPingTime(latency));
|
|
173
181
|
this.deltaManager.on("submitOp", (message) => this.beforeOpSubmit(message));
|
package/src/containerRuntime.ts
CHANGED
|
@@ -44,11 +44,23 @@ import {
|
|
|
44
44
|
PromiseCache,
|
|
45
45
|
delay,
|
|
46
46
|
} from "@fluidframework/core-utils/internal";
|
|
47
|
+
import {
|
|
48
|
+
IClientDetails,
|
|
49
|
+
IQuorumClients,
|
|
50
|
+
ISequencedDocumentMessage,
|
|
51
|
+
ISignalMessage,
|
|
52
|
+
ISummaryTree,
|
|
53
|
+
SummaryType,
|
|
54
|
+
} from "@fluidframework/driver-definitions";
|
|
47
55
|
import {
|
|
48
56
|
DriverHeader,
|
|
49
57
|
FetchSource,
|
|
50
58
|
IDocumentStorageService,
|
|
51
59
|
type ISnapshot,
|
|
60
|
+
IDocumentMessage,
|
|
61
|
+
ISnapshotTree,
|
|
62
|
+
ISummaryContent,
|
|
63
|
+
MessageType,
|
|
52
64
|
} from "@fluidframework/driver-definitions/internal";
|
|
53
65
|
import { readAndParse } from "@fluidframework/driver-utils/internal";
|
|
54
66
|
import type { IIdCompressor } from "@fluidframework/id-compressor";
|
|
@@ -58,19 +70,6 @@ import type {
|
|
|
58
70
|
SerializedIdCompressorWithNoSession,
|
|
59
71
|
SerializedIdCompressorWithOngoingSession,
|
|
60
72
|
} from "@fluidframework/id-compressor/internal";
|
|
61
|
-
import {
|
|
62
|
-
IClientDetails,
|
|
63
|
-
IDocumentMessage,
|
|
64
|
-
IQuorumClients,
|
|
65
|
-
ISequencedDocumentMessage,
|
|
66
|
-
ISignalMessage,
|
|
67
|
-
ISnapshotTree,
|
|
68
|
-
ISummaryContent,
|
|
69
|
-
ISummaryTree,
|
|
70
|
-
MessageType,
|
|
71
|
-
SummaryType,
|
|
72
|
-
} from "@fluidframework/protocol-definitions";
|
|
73
|
-
import { IInboundSignalMessage } from "@fluidframework/runtime-definitions";
|
|
74
73
|
import {
|
|
75
74
|
ISummaryTreeWithStats,
|
|
76
75
|
ITelemetryContext,
|
|
@@ -88,6 +87,7 @@ import {
|
|
|
88
87
|
SummarizeInternalFn,
|
|
89
88
|
channelsTreeName,
|
|
90
89
|
gcTreeKey,
|
|
90
|
+
IInboundSignalMessage,
|
|
91
91
|
} from "@fluidframework/runtime-definitions/internal";
|
|
92
92
|
import {
|
|
93
93
|
GCDataBuilder,
|
|
@@ -2227,7 +2227,7 @@ export class ContainerRuntime
|
|
|
2227
2227
|
);
|
|
2228
2228
|
|
|
2229
2229
|
// Is document schema explicit control on?
|
|
2230
|
-
const
|
|
2230
|
+
const explicitSchemaControl = documentSchema?.runtime.explicitSchemaControl;
|
|
2231
2231
|
|
|
2232
2232
|
const metadata: IContainerRuntimeMetadata = {
|
|
2233
2233
|
...this.createContainerMetadata,
|
|
@@ -2241,10 +2241,10 @@ export class ContainerRuntime
|
|
|
2241
2241
|
// runtimes (that preceed document schema control capabilities) to close container on load due to mismatch in
|
|
2242
2242
|
// last message's sequence number.
|
|
2243
2243
|
// See also lastMessageFromMetadata()
|
|
2244
|
-
message:
|
|
2244
|
+
message: explicitSchemaControl
|
|
2245
2245
|
? ({ sequenceNumber: -1 } as any as ISummaryMetadataMessage)
|
|
2246
2246
|
: message,
|
|
2247
|
-
lastMessage:
|
|
2247
|
+
lastMessage: explicitSchemaControl ? message : undefined,
|
|
2248
2248
|
documentSchema,
|
|
2249
2249
|
};
|
|
2250
2250
|
|
|
@@ -3614,12 +3614,9 @@ export class ContainerRuntime
|
|
|
3614
3614
|
|
|
3615
3615
|
const trace = Trace.start();
|
|
3616
3616
|
let summarizeResult: ISummaryTreeWithStats;
|
|
3617
|
-
// If the GC state needs to be reset, we need to force a full tree summary and update the unreferenced
|
|
3618
|
-
// state of all the nodes.
|
|
3619
|
-
const forcedFullTree = this.garbageCollector.summaryStateNeedsReset;
|
|
3620
3617
|
try {
|
|
3621
3618
|
summarizeResult = await this.summarize({
|
|
3622
|
-
fullTree
|
|
3619
|
+
fullTree,
|
|
3623
3620
|
trackState: true,
|
|
3624
3621
|
summaryLogger: summaryNumberLogger,
|
|
3625
3622
|
runGC: this.garbageCollector.shouldRunGC,
|
|
@@ -3696,7 +3693,6 @@ export class ContainerRuntime
|
|
|
3696
3693
|
summaryTree,
|
|
3697
3694
|
summaryStats,
|
|
3698
3695
|
generateDuration: trace.trace().duration,
|
|
3699
|
-
forcedFullTree,
|
|
3700
3696
|
} as const;
|
|
3701
3697
|
|
|
3702
3698
|
continueResult = checkContinue();
|
package/src/dataStoreContext.ts
CHANGED
|
@@ -16,9 +16,17 @@ import {
|
|
|
16
16
|
} from "@fluidframework/core-interfaces";
|
|
17
17
|
import { type IFluidHandleInternal } from "@fluidframework/core-interfaces/internal";
|
|
18
18
|
import { assert, LazyPromise, unreachableCase } from "@fluidframework/core-utils/internal";
|
|
19
|
+
import {
|
|
20
|
+
IClientDetails,
|
|
21
|
+
IQuorumClients,
|
|
22
|
+
ISequencedDocumentMessage,
|
|
23
|
+
} from "@fluidframework/driver-definitions";
|
|
19
24
|
import {
|
|
20
25
|
IDocumentStorageService,
|
|
21
26
|
type ISnapshot,
|
|
27
|
+
IDocumentMessage,
|
|
28
|
+
ISnapshotTree,
|
|
29
|
+
ITreeEntry,
|
|
22
30
|
} from "@fluidframework/driver-definitions/internal";
|
|
23
31
|
import {
|
|
24
32
|
BlobTreeEntry,
|
|
@@ -26,15 +34,6 @@ import {
|
|
|
26
34
|
readAndParse,
|
|
27
35
|
} from "@fluidframework/driver-utils/internal";
|
|
28
36
|
import type { IIdCompressor } from "@fluidframework/id-compressor";
|
|
29
|
-
import {
|
|
30
|
-
IClientDetails,
|
|
31
|
-
IDocumentMessage,
|
|
32
|
-
IQuorumClients,
|
|
33
|
-
ISequencedDocumentMessage,
|
|
34
|
-
ISnapshotTree,
|
|
35
|
-
ITreeEntry,
|
|
36
|
-
} from "@fluidframework/protocol-definitions";
|
|
37
|
-
import { IInboundSignalMessage } from "@fluidframework/runtime-definitions";
|
|
38
37
|
import {
|
|
39
38
|
ISummaryTreeWithStats,
|
|
40
39
|
ITelemetryContext,
|
|
@@ -57,6 +56,7 @@ import {
|
|
|
57
56
|
SummarizeInternalFn,
|
|
58
57
|
channelsTreeName,
|
|
59
58
|
gcDataBlobKey,
|
|
59
|
+
IInboundSignalMessage,
|
|
60
60
|
} from "@fluidframework/runtime-definitions/internal";
|
|
61
61
|
import {
|
|
62
62
|
addBlobToSummary,
|
|
@@ -292,7 +292,7 @@ export abstract class FluidDataStoreContext
|
|
|
292
292
|
// We know that if the base snapshot is omitted, then the isRootDataStore flag is not set.
|
|
293
293
|
// That means we can skip the expensive call to getInitialSnapshotDetails for virtualized datastores,
|
|
294
294
|
// and get the information from the alias map directly.
|
|
295
|
-
if (aliasedDataStores !== undefined && this.baseSnapshot?.omitted === true) {
|
|
295
|
+
if (aliasedDataStores !== undefined && (this.baseSnapshot as any)?.omitted === true) {
|
|
296
296
|
return aliasedDataStores.has(this.id);
|
|
297
297
|
}
|
|
298
298
|
|
|
@@ -13,17 +13,19 @@ import type {
|
|
|
13
13
|
ReadOnlyInfo,
|
|
14
14
|
} from "@fluidframework/container-definitions/internal";
|
|
15
15
|
import type { IErrorBase } from "@fluidframework/core-interfaces";
|
|
16
|
-
import type { IAnyDriverError } from "@fluidframework/driver-definitions/internal";
|
|
17
16
|
import {
|
|
18
|
-
IClientConfiguration,
|
|
19
17
|
IClientDetails,
|
|
20
|
-
IDocumentMessage,
|
|
21
18
|
ISequencedDocumentMessage,
|
|
22
19
|
ISignalMessage,
|
|
23
|
-
} from "@fluidframework/
|
|
20
|
+
} from "@fluidframework/driver-definitions";
|
|
21
|
+
import type { IAnyDriverError } from "@fluidframework/driver-definitions/internal";
|
|
22
|
+
import {
|
|
23
|
+
IClientConfiguration,
|
|
24
|
+
IDocumentMessage,
|
|
25
|
+
} from "@fluidframework/driver-definitions/internal";
|
|
24
26
|
|
|
25
|
-
import { summarizerClientType } from "./summary/index.js";
|
|
26
27
|
import type { PendingStateManager } from "./pendingStateManager.js";
|
|
28
|
+
import { summarizerClientType } from "./summary/index.js";
|
|
27
29
|
|
|
28
30
|
/**
|
|
29
31
|
* Base class for DeltaManager proxy that proxy's access to the real DeltaManager.
|
package/src/deltaScheduler.ts
CHANGED
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
import { performance } from "@fluid-internal/client-utils";
|
|
7
7
|
import { IDeltaManager } from "@fluidframework/container-definitions/internal";
|
|
8
|
-
import {
|
|
8
|
+
import { ISequencedDocumentMessage } from "@fluidframework/driver-definitions";
|
|
9
|
+
import { IDocumentMessage } from "@fluidframework/driver-definitions/internal";
|
|
9
10
|
import { ITelemetryLoggerExt, formatTick } from "@fluidframework/telemetry-utils/internal";
|
|
10
11
|
|
|
11
12
|
/**
|
|
@@ -96,7 +96,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
96
96
|
private readonly configs: IGarbageCollectorConfigs;
|
|
97
97
|
|
|
98
98
|
public get shouldRunGC(): boolean {
|
|
99
|
-
return this.configs.
|
|
99
|
+
return this.configs.gcEnabled;
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
public readonly sessionExpiryTimerStarted: number | undefined;
|
|
@@ -159,10 +159,6 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
159
159
|
|
|
160
160
|
private readonly submitMessage: (message: ContainerRuntimeGCMessage) => void;
|
|
161
161
|
|
|
162
|
-
public get summaryStateNeedsReset(): boolean {
|
|
163
|
-
return this.summaryStateTracker.doesSummaryStateNeedReset;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
162
|
/** Returns the count of data stores whose GC state updated since the last summary. */
|
|
167
163
|
public get updatedDSCountSinceLastSummary(): number {
|
|
168
164
|
return this.summaryStateTracker.updatedDSCountSinceLastSummary;
|
|
@@ -217,10 +213,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
217
213
|
this.sessionExpiryTimerStarted = Date.now();
|
|
218
214
|
}
|
|
219
215
|
|
|
220
|
-
this.summaryStateTracker = new GCSummaryStateTracker(
|
|
221
|
-
this.configs,
|
|
222
|
-
baseSnapshot?.trees[gcTreeKey] !== undefined /* wasGCRunInBaseSnapshot */,
|
|
223
|
-
);
|
|
216
|
+
this.summaryStateTracker = new GCSummaryStateTracker(this.configs);
|
|
224
217
|
|
|
225
218
|
this.telemetryTracker = new GCTelemetryTracker(
|
|
226
219
|
this.mc,
|
|
@@ -334,6 +327,10 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
334
327
|
return {};
|
|
335
328
|
}
|
|
336
329
|
|
|
330
|
+
// Note that the base GC details are returned even if GC is disabled. This is to handle the special scenario
|
|
331
|
+
// where GC is disabled but GC state exists in base snapshot. In this scenario, the nodes which get the GC
|
|
332
|
+
// state will re-summarize to reset any GC specific state in their summaries (like unreferenced flag).
|
|
333
|
+
|
|
337
334
|
const gcNodes: { [id: string]: string[] } = {};
|
|
338
335
|
for (const [nodeId, nodeData] of Object.entries(baseSnapshotData.gcState.gcNodes)) {
|
|
339
336
|
gcNodes[nodeId] = Array.from(nodeData.outboundRoutes);
|
|
@@ -374,7 +371,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
374
371
|
return;
|
|
375
372
|
}
|
|
376
373
|
|
|
377
|
-
// Initialize the deleted nodes from the snapshot. This is done irrespective of whether sweep is enabled
|
|
374
|
+
// Initialize the deleted nodes from the snapshot. This is done irrespective of whether GC / sweep is enabled
|
|
378
375
|
// to identify deleted nodes' usage.
|
|
379
376
|
if (baseSnapshotData.deletedNodes !== undefined) {
|
|
380
377
|
this.deletedNodes = new Set(baseSnapshotData.deletedNodes);
|
|
@@ -440,7 +437,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
440
437
|
* with an older reference timestamp. So, doing this on every connection will keep the unreferenced state
|
|
441
438
|
* tracking up-to-date.
|
|
442
439
|
*/
|
|
443
|
-
if (connected && this.
|
|
440
|
+
if (connected && this.shouldRunGC) {
|
|
444
441
|
this.initializeOrUpdateGCState().catch((error) => {
|
|
445
442
|
this.mc.logger.sendErrorEvent(
|
|
446
443
|
{
|
|
@@ -480,8 +477,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
480
477
|
const fullGC =
|
|
481
478
|
options.fullGC ??
|
|
482
479
|
(this.configs.runFullGC === true ||
|
|
483
|
-
this.summaryStateTracker.autoRecovery.fullGCRequested()
|
|
484
|
-
this.summaryStateTracker.doesSummaryStateNeedReset);
|
|
480
|
+
this.summaryStateTracker.autoRecovery.fullGCRequested());
|
|
485
481
|
|
|
486
482
|
// Add the options that are used to run GC to the telemetry context.
|
|
487
483
|
telemetryContext?.setMultiple("fluid_GC", "Options", {
|
|
@@ -489,14 +485,12 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
489
485
|
runSweep: options.runSweep,
|
|
490
486
|
});
|
|
491
487
|
|
|
492
|
-
const logger =
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
})
|
|
499
|
-
: this.mc.logger;
|
|
488
|
+
const logger = createChildLogger({
|
|
489
|
+
logger: options.logger ?? this.mc.logger,
|
|
490
|
+
properties: {
|
|
491
|
+
all: { completedGCRuns: this.completedRuns, fullGC },
|
|
492
|
+
},
|
|
493
|
+
});
|
|
500
494
|
|
|
501
495
|
/**
|
|
502
496
|
* If there is no current reference timestamp, skip running GC. We need the current timestamp to track
|
|
@@ -855,7 +849,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
855
849
|
trackState: boolean,
|
|
856
850
|
telemetryContext?: ITelemetryContext,
|
|
857
851
|
): ISummarizeResult | undefined {
|
|
858
|
-
if (!this.
|
|
852
|
+
if (!this.shouldRunGC || this.gcDataFromLastRun === undefined) {
|
|
859
853
|
return;
|
|
860
854
|
}
|
|
861
855
|
|
|
@@ -998,7 +992,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
998
992
|
request,
|
|
999
993
|
headerData,
|
|
1000
994
|
}: IGCNodeUpdatedProps) {
|
|
1001
|
-
if (!this.
|
|
995
|
+
if (!this.shouldRunGC) {
|
|
1002
996
|
return;
|
|
1003
997
|
}
|
|
1004
998
|
|
|
@@ -1107,7 +1101,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
1107
1101
|
* @param autorecovery - This reference is added artificially, for autorecovery. Used for logging.
|
|
1108
1102
|
*/
|
|
1109
1103
|
public addedOutboundReference(fromNodePath: string, toNodePath: string, autorecovery?: true) {
|
|
1110
|
-
if (!this.
|
|
1104
|
+
if (!this.shouldRunGC) {
|
|
1111
1105
|
return;
|
|
1112
1106
|
}
|
|
1113
1107
|
|
package/src/gc/gcConfigs.ts
CHANGED
|
@@ -28,7 +28,6 @@ import {
|
|
|
28
28
|
gcTestModeKey,
|
|
29
29
|
maxSnapshotCacheExpiryMs,
|
|
30
30
|
oneDayMs,
|
|
31
|
-
runGCTestKey,
|
|
32
31
|
runSessionExpiryKey,
|
|
33
32
|
runSweepKey,
|
|
34
33
|
throwOnTombstoneLoadOverrideKey,
|
|
@@ -54,7 +53,7 @@ export function generateGCConfigs(
|
|
|
54
53
|
isSummarizerClient: boolean;
|
|
55
54
|
},
|
|
56
55
|
): IGarbageCollectorConfigs {
|
|
57
|
-
let
|
|
56
|
+
let gcEnabled: boolean = true;
|
|
58
57
|
let sessionExpiryTimeoutMs: number | undefined;
|
|
59
58
|
let tombstoneTimeoutMs: number | undefined;
|
|
60
59
|
let persistedGcFeatureMatrix: GCFeatureMatrix | undefined;
|
|
@@ -72,7 +71,7 @@ export function generateGCConfigs(
|
|
|
72
71
|
gcVersionInBaseSnapshot = getGCVersion(metadata);
|
|
73
72
|
// Existing documents which did not have metadata blob or had GC disabled have GC version as 0. GC will be
|
|
74
73
|
// disabled for these documents.
|
|
75
|
-
|
|
74
|
+
gcEnabled = gcVersionInBaseSnapshot !== 0;
|
|
76
75
|
sessionExpiryTimeoutMs = metadata?.sessionExpiryTimeoutMs;
|
|
77
76
|
const legacyPersistedSweepTimeoutMs = (metadata as IGCMetadata_Deprecated)?.sweepTimeoutMs;
|
|
78
77
|
tombstoneTimeoutMs =
|
|
@@ -108,23 +107,6 @@ export function generateGCConfigs(
|
|
|
108
107
|
createParams.gcOptions[gcGenerationOptionName] /* currentGeneration */,
|
|
109
108
|
);
|
|
110
109
|
|
|
111
|
-
const gcVersionInEffect = getGCVersionInEffect(mc.config);
|
|
112
|
-
|
|
113
|
-
// The GC version is up-to-date if the GC version in effect is at least equal to the GC version in base snapshot.
|
|
114
|
-
// If it is not up-to-date, there is a newer version of GC out there which is more reliable than this. So, GC
|
|
115
|
-
// should not run as it may produce incorrect / unreliable state.
|
|
116
|
-
const isGCVersionUpToDate =
|
|
117
|
-
gcVersionInBaseSnapshot === undefined || gcVersionInEffect >= gcVersionInBaseSnapshot;
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Whether GC should run or not. The following conditions have to be met to run sweep:
|
|
121
|
-
* 1. GC should not be disabled for this container.
|
|
122
|
-
* 2. The current GC version should be greater or equal to the GC version in the base snapshot.
|
|
123
|
-
*
|
|
124
|
-
* These conditions can be overridden via the RunGC feature flag for testing.
|
|
125
|
-
*/
|
|
126
|
-
const shouldRunGC = mc.config.getBoolean(runGCTestKey) ?? (!gcDisabled && isGCVersionUpToDate);
|
|
127
|
-
|
|
128
110
|
/**
|
|
129
111
|
* Whether sweep should run or not. This refers to whether Tombstones should fail on load and whether
|
|
130
112
|
* sweep-ready nodes should be deleted.
|
|
@@ -137,7 +119,7 @@ export function generateGCConfigs(
|
|
|
137
119
|
* These conditions can be overridden via the RunSweep feature flag.
|
|
138
120
|
*/
|
|
139
121
|
const sweepEnabled: boolean =
|
|
140
|
-
!
|
|
122
|
+
!gcEnabled || tombstoneTimeoutMs === undefined
|
|
141
123
|
? false
|
|
142
124
|
: mc.config.getBoolean(runSweepKey) ??
|
|
143
125
|
(sweepAllowed && createParams.gcOptions.enableGCSweep === true);
|
|
@@ -188,9 +170,8 @@ export function generateGCConfigs(
|
|
|
188
170
|
!createParams.isSummarizerClient;
|
|
189
171
|
|
|
190
172
|
return {
|
|
191
|
-
gcEnabled
|
|
173
|
+
gcEnabled, // For this document
|
|
192
174
|
sweepEnabled: sweepAllowed, // For this document (based on current GC Generation option)
|
|
193
|
-
shouldRunGC, // For this session
|
|
194
175
|
shouldRunSweep, // For this session
|
|
195
176
|
runFullGC,
|
|
196
177
|
testMode,
|
|
@@ -201,7 +182,7 @@ export function generateGCConfigs(
|
|
|
201
182
|
inactiveTimeoutMs,
|
|
202
183
|
persistedGcFeatureMatrix,
|
|
203
184
|
gcVersionInBaseSnapshot,
|
|
204
|
-
gcVersionInEffect,
|
|
185
|
+
gcVersionInEffect: getGCVersionInEffect(mc.config),
|
|
205
186
|
throwOnInactiveLoad,
|
|
206
187
|
throwOnTombstoneLoad,
|
|
207
188
|
throwOnTombstoneUsage,
|
package/src/gc/gcDefinitions.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import { ICriticalContainerError } from "@fluidframework/container-definitions";
|
|
7
7
|
import { IRequest } from "@fluidframework/core-interfaces";
|
|
8
|
-
import { ISnapshotTree } from "@fluidframework/
|
|
8
|
+
import { ISnapshotTree } from "@fluidframework/driver-definitions/internal";
|
|
9
9
|
import {
|
|
10
10
|
ITelemetryContext,
|
|
11
11
|
IGarbageCollectionData,
|
|
@@ -81,8 +81,6 @@ export const disableDatastoreSweepKey = "Fluid.GarbageCollection.DisableDataStor
|
|
|
81
81
|
export const detectOutboundRoutesViaDDSKey = "Fluid.GarbageCollection.DetectOutboundRoutesViaDDS";
|
|
82
82
|
/** Config key to disable auto-recovery mechanism that protects Tombstones that are loaded from being swept (use true) */
|
|
83
83
|
export const disableAutoRecoveryKey = "Fluid.GarbageCollection.DisableAutoRecovery";
|
|
84
|
-
/** Config key to turn GC on / off for testing. */
|
|
85
|
-
export const runGCTestKey = "Fluid.GarbageCollection.Test.RunGC";
|
|
86
84
|
|
|
87
85
|
// One day in milliseconds.
|
|
88
86
|
export const oneDayMs = 1 * 24 * 60 * 60 * 1000;
|
|
@@ -334,8 +332,6 @@ export interface IGarbageCollector {
|
|
|
334
332
|
readonly sessionExpiryTimerStarted: number | undefined;
|
|
335
333
|
/** Tells whether GC should run or not. */
|
|
336
334
|
readonly shouldRunGC: boolean;
|
|
337
|
-
/** Tells whether the GC state in summary needs to be reset in the next summary. */
|
|
338
|
-
readonly summaryStateNeedsReset: boolean;
|
|
339
335
|
/** The count of data stores whose GC state updated since the last summary. */
|
|
340
336
|
readonly updatedDSCountSinceLastSummary: number;
|
|
341
337
|
/** Tells whether tombstone feature is enabled and enforced. */
|
|
@@ -472,11 +468,6 @@ export interface IGarbageCollectorConfigs {
|
|
|
472
468
|
* throughout its lifetime.
|
|
473
469
|
*/
|
|
474
470
|
readonly sweepEnabled: boolean;
|
|
475
|
-
/**
|
|
476
|
-
* Tracks if GC should run or not. Even if GC is enabled for a document (see gcEnabled), it can be explicitly
|
|
477
|
-
* disabled via runtime options or feature flags.
|
|
478
|
-
*/
|
|
479
|
-
readonly shouldRunGC: boolean;
|
|
480
471
|
/**
|
|
481
472
|
* Tracks if sweep phase should run or not, or if it should run only for attachment blobs.
|
|
482
473
|
* Even if the sweep phase is allowed for a document (see sweepEnabled), it may be disabled or partially enabled
|
package/src/gc/gcHelpers.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { assert } from "@fluidframework/core-utils/internal";
|
|
7
|
-
import { ISnapshotTree } from "@fluidframework/
|
|
7
|
+
import { ISnapshotTree } from "@fluidframework/driver-definitions/internal";
|
|
8
8
|
import {
|
|
9
9
|
IGarbageCollectionDetailsBase,
|
|
10
10
|
gcBlobPrefix,
|