@fluidframework/container-runtime 2.0.0-dev.4.4.0.162574 → 2.0.0-dev.5.3.2.178189
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/CHANGELOG.md +69 -0
- package/dist/batchTracker.d.ts +4 -4
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js +2 -2
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager.d.ts +5 -2
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +53 -24
- package/dist/blobManager.js.map +1 -1
- package/dist/connectionTelemetry.d.ts +2 -2
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +8 -1
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerRuntime.d.ts +19 -7
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +98 -22
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.d.ts +2 -2
- package/dist/dataStore.d.ts.map +1 -1
- package/dist/dataStore.js +1 -1
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +3 -4
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +5 -5
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts +2 -1
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js +2 -1
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/dataStores.d.ts +1 -1
- package/dist/dataStores.d.ts.map +1 -1
- package/dist/dataStores.js +2 -1
- package/dist/dataStores.js.map +1 -1
- package/dist/deltaScheduler.d.ts +2 -2
- package/dist/deltaScheduler.d.ts.map +1 -1
- package/dist/deltaScheduler.js +1 -1
- package/dist/deltaScheduler.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts +2 -2
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +4 -3
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +3 -4
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts +5 -5
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/id-compressor/idCompressor.d.ts +2 -2
- package/dist/id-compressor/idCompressor.d.ts.map +1 -1
- package/dist/id-compressor/idCompressor.js.map +1 -1
- package/dist/id-compressor/uuidUtilities.d.ts +0 -2
- package/dist/id-compressor/uuidUtilities.d.ts.map +1 -1
- package/dist/id-compressor/uuidUtilities.js +1 -3
- package/dist/id-compressor/uuidUtilities.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/metadata.d.ts +18 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +7 -0
- package/dist/metadata.js.map +1 -0
- package/dist/opLifecycle/batchManager.d.ts +2 -1
- package/dist/opLifecycle/batchManager.d.ts.map +1 -1
- package/dist/opLifecycle/batchManager.js +5 -1
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/definitions.d.ts +13 -2
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -1
- package/dist/opLifecycle/index.d.ts +1 -1
- package/dist/opLifecycle/index.d.ts.map +1 -1
- package/dist/opLifecycle/index.js +2 -1
- package/dist/opLifecycle/index.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts +2 -2
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +3 -6
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts +2 -2
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +14 -8
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js +6 -11
- package/dist/opLifecycle/opGroupingManager.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts +2 -2
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +5 -3
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +35 -4
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +135 -45
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js +3 -1
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/pendingStateManager.d.ts +24 -15
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +67 -72
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/scheduleManager.d.ts +2 -2
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js +8 -2
- package/dist/scheduleManager.js.map +1 -1
- package/dist/summary/index.d.ts +2 -2
- package/dist/summary/index.d.ts.map +1 -1
- package/dist/summary/index.js +2 -1
- package/dist/summary/index.js.map +1 -1
- package/dist/summary/orderedClientElection.d.ts +4 -3
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js +3 -18
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runningSummarizer.d.ts +4 -3
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +5 -6
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.d.ts +2 -3
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +2 -3
- package/dist/summary/summarizer.js.map +1 -1
- package/dist/summary/summarizerClientElection.d.ts +3 -2
- package/dist/summary/summarizerClientElection.d.ts.map +1 -1
- package/dist/summary/summarizerClientElection.js.map +1 -1
- package/dist/summary/summarizerHeuristics.d.ts +2 -2
- package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
- package/dist/summary/summarizerHeuristics.js.map +1 -1
- package/dist/summary/summarizerNode/index.d.ts +1 -1
- package/dist/summary/summarizerNode/index.d.ts.map +1 -1
- package/dist/summary/summarizerNode/index.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.d.ts +41 -14
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js +91 -23
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +24 -4
- 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 +23 -8
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +60 -23
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +16 -9
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryCollection.d.ts +4 -2
- package/dist/summary/summaryCollection.d.ts.map +1 -1
- package/dist/summary/summaryCollection.js +4 -0
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +1 -0
- package/dist/summary/summaryFormat.d.ts.map +1 -1
- package/dist/summary/summaryFormat.js +2 -1
- package/dist/summary/summaryFormat.js.map +1 -1
- package/dist/summary/summaryGenerator.d.ts +14 -5
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +23 -9
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryManager.d.ts +4 -2
- package/dist/summary/summaryManager.d.ts.map +1 -1
- package/dist/summary/summaryManager.js.map +1 -1
- package/dist/tsdoc-metadata.json +11 -0
- package/lib/batchTracker.d.ts +4 -4
- package/lib/batchTracker.d.ts.map +1 -1
- package/lib/batchTracker.js +2 -2
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager.d.ts +5 -2
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +53 -24
- package/lib/blobManager.js.map +1 -1
- package/lib/connectionTelemetry.d.ts +2 -2
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +8 -1
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerRuntime.d.ts +19 -7
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +101 -25
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStore.d.ts +2 -2
- package/lib/dataStore.d.ts.map +1 -1
- package/lib/dataStore.js +1 -1
- package/lib/dataStore.js.map +1 -1
- package/lib/dataStoreContext.d.ts +3 -4
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +5 -5
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.d.ts +2 -1
- package/lib/dataStoreContexts.d.ts.map +1 -1
- package/lib/dataStoreContexts.js +2 -1
- package/lib/dataStoreContexts.js.map +1 -1
- package/lib/dataStores.d.ts +1 -1
- package/lib/dataStores.d.ts.map +1 -1
- package/lib/dataStores.js +2 -1
- package/lib/dataStores.js.map +1 -1
- package/lib/deltaScheduler.d.ts +2 -2
- package/lib/deltaScheduler.d.ts.map +1 -1
- package/lib/deltaScheduler.js +1 -1
- package/lib/deltaScheduler.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts +2 -2
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +2 -1
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +3 -4
- package/lib/gc/gcDefinitions.d.ts.map +1 -1
- package/lib/gc/gcDefinitions.js.map +1 -1
- package/lib/gc/gcTelemetry.d.ts +5 -5
- package/lib/gc/gcTelemetry.d.ts.map +1 -1
- package/lib/gc/gcTelemetry.js +1 -1
- package/lib/gc/gcTelemetry.js.map +1 -1
- package/lib/id-compressor/idCompressor.d.ts +2 -2
- package/lib/id-compressor/idCompressor.d.ts.map +1 -1
- package/lib/id-compressor/idCompressor.js.map +1 -1
- package/lib/id-compressor/uuidUtilities.d.ts +0 -2
- package/lib/id-compressor/uuidUtilities.d.ts.map +1 -1
- package/lib/id-compressor/uuidUtilities.js +1 -3
- package/lib/id-compressor/uuidUtilities.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/metadata.d.ts +18 -0
- package/lib/metadata.d.ts.map +1 -0
- package/lib/metadata.js +6 -0
- package/lib/metadata.js.map +1 -0
- package/lib/opLifecycle/batchManager.d.ts +2 -1
- package/lib/opLifecycle/batchManager.d.ts.map +1 -1
- package/lib/opLifecycle/batchManager.js +5 -1
- package/lib/opLifecycle/batchManager.js.map +1 -1
- package/lib/opLifecycle/definitions.d.ts +13 -2
- package/lib/opLifecycle/definitions.d.ts.map +1 -1
- package/lib/opLifecycle/definitions.js.map +1 -1
- package/lib/opLifecycle/index.d.ts +1 -1
- package/lib/opLifecycle/index.d.ts.map +1 -1
- package/lib/opLifecycle/index.js +1 -1
- package/lib/opLifecycle/index.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts +2 -2
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js +3 -6
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts +2 -2
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +14 -8
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/lib/opLifecycle/opGroupingManager.js +6 -11
- package/lib/opLifecycle/opGroupingManager.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts +2 -2
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +5 -3
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +35 -4
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +133 -44
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.js +3 -1
- package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/pendingStateManager.d.ts +24 -15
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +67 -72
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/scheduleManager.d.ts +2 -2
- package/lib/scheduleManager.d.ts.map +1 -1
- package/lib/scheduleManager.js +8 -2
- package/lib/scheduleManager.js.map +1 -1
- package/lib/summary/index.d.ts +2 -2
- package/lib/summary/index.d.ts.map +1 -1
- package/lib/summary/index.js +1 -1
- package/lib/summary/index.js.map +1 -1
- package/lib/summary/orderedClientElection.d.ts +4 -3
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js +3 -18
- package/lib/summary/orderedClientElection.js.map +1 -1
- package/lib/summary/runningSummarizer.d.ts +4 -3
- package/lib/summary/runningSummarizer.d.ts.map +1 -1
- package/lib/summary/runningSummarizer.js +5 -6
- package/lib/summary/runningSummarizer.js.map +1 -1
- package/lib/summary/summarizer.d.ts +2 -3
- package/lib/summary/summarizer.d.ts.map +1 -1
- package/lib/summary/summarizer.js +2 -3
- package/lib/summary/summarizer.js.map +1 -1
- package/lib/summary/summarizerClientElection.d.ts +3 -2
- package/lib/summary/summarizerClientElection.d.ts.map +1 -1
- package/lib/summary/summarizerClientElection.js.map +1 -1
- package/lib/summary/summarizerHeuristics.d.ts +2 -2
- package/lib/summary/summarizerHeuristics.d.ts.map +1 -1
- package/lib/summary/summarizerHeuristics.js.map +1 -1
- package/lib/summary/summarizerNode/index.d.ts +1 -1
- package/lib/summary/summarizerNode/index.d.ts.map +1 -1
- package/lib/summary/summarizerNode/index.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.d.ts +41 -14
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.js +91 -23
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +24 -4
- 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 +23 -8
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +59 -22
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/lib/summary/summarizerTypes.d.ts +16 -9
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryCollection.d.ts +4 -2
- package/lib/summary/summaryCollection.d.ts.map +1 -1
- package/lib/summary/summaryCollection.js +4 -0
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryFormat.d.ts +1 -0
- package/lib/summary/summaryFormat.d.ts.map +1 -1
- package/lib/summary/summaryFormat.js +2 -1
- package/lib/summary/summaryFormat.js.map +1 -1
- package/lib/summary/summaryGenerator.d.ts +14 -5
- package/lib/summary/summaryGenerator.d.ts.map +1 -1
- package/lib/summary/summaryGenerator.js +21 -8
- package/lib/summary/summaryGenerator.js.map +1 -1
- package/lib/summary/summaryManager.d.ts +4 -2
- package/lib/summary/summaryManager.d.ts.map +1 -1
- package/lib/summary/summaryManager.js +1 -1
- package/lib/summary/summaryManager.js.map +1 -1
- package/package.json +25 -41
- package/src/batchTracker.ts +5 -6
- package/src/blobManager.ts +70 -29
- package/src/connectionTelemetry.ts +14 -6
- package/src/containerRuntime.ts +124 -38
- package/src/dataStore.ts +3 -4
- package/src/dataStoreContext.ts +12 -9
- package/src/dataStoreContexts.ts +6 -8
- package/src/dataStores.ts +8 -3
- package/src/deltaScheduler.ts +2 -3
- package/src/gc/garbageCollection.ts +7 -6
- package/src/gc/gcDefinitions.ts +3 -4
- package/src/gc/gcTelemetry.ts +9 -5
- package/src/id-compressor/idCompressor.ts +2 -2
- package/src/id-compressor/uuidUtilities.ts +1 -4
- package/src/index.ts +2 -0
- package/src/metadata.ts +19 -0
- package/src/opLifecycle/README.md +20 -0
- package/src/opLifecycle/batchManager.ts +9 -1
- package/src/opLifecycle/definitions.ts +13 -2
- package/src/opLifecycle/index.ts +1 -1
- package/src/opLifecycle/opCompressor.ts +4 -8
- package/src/opLifecycle/opDecompressor.ts +43 -16
- package/src/opLifecycle/opGroupingManager.ts +19 -13
- package/src/opLifecycle/opSplitter.ts +7 -6
- package/src/opLifecycle/outbox.ts +172 -57
- package/src/opLifecycle/remoteMessageProcessor.ts +5 -1
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +113 -129
- package/src/scheduleManager.ts +18 -10
- package/src/summary/index.ts +3 -1
- package/src/summary/orderedClientElection.ts +7 -20
- package/src/summary/runningSummarizer.ts +11 -10
- package/src/summary/summarizer.ts +8 -8
- package/src/summary/summarizerClientElection.ts +3 -2
- package/src/summary/summarizerHeuristics.ts +2 -2
- package/src/summary/summarizerNode/index.ts +1 -0
- package/src/summary/summarizerNode/summarizerNode.ts +121 -38
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +27 -4
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +73 -27
- package/src/summary/summarizerTypes.ts +19 -14
- package/src/summary/summaryCollection.ts +10 -4
- package/src/summary/summaryFormat.ts +5 -1
- package/src/summary/summaryGenerator.ts +38 -11
- package/src/summary/summaryManager.ts +9 -9
package/src/containerRuntime.ts
CHANGED
|
@@ -5,9 +5,6 @@
|
|
|
5
5
|
import {
|
|
6
6
|
ITelemetryBaseLogger,
|
|
7
7
|
ITelemetryGenericEvent,
|
|
8
|
-
ITelemetryLogger,
|
|
9
|
-
} from "@fluidframework/common-definitions";
|
|
10
|
-
import {
|
|
11
8
|
FluidObject,
|
|
12
9
|
IFluidHandle,
|
|
13
10
|
IFluidHandleContext,
|
|
@@ -32,11 +29,11 @@ import {
|
|
|
32
29
|
import {
|
|
33
30
|
assert,
|
|
34
31
|
delay,
|
|
35
|
-
LazyPromise,
|
|
36
32
|
Trace,
|
|
37
33
|
TypedEventEmitter,
|
|
38
34
|
unreachableCase,
|
|
39
35
|
} from "@fluidframework/common-utils";
|
|
36
|
+
import { LazyPromise } from "@fluidframework/core-utils";
|
|
40
37
|
import {
|
|
41
38
|
ChildLogger,
|
|
42
39
|
raiseConnectedEvent,
|
|
@@ -45,6 +42,7 @@ import {
|
|
|
45
42
|
MonitoringContext,
|
|
46
43
|
loggerToMonitoringContext,
|
|
47
44
|
wrapError,
|
|
45
|
+
ITelemetryLoggerExt,
|
|
48
46
|
} from "@fluidframework/telemetry-utils";
|
|
49
47
|
import {
|
|
50
48
|
DriverHeader,
|
|
@@ -116,7 +114,11 @@ import { v4 as uuid } from "uuid";
|
|
|
116
114
|
import { ContainerFluidHandleContext } from "./containerHandleContext";
|
|
117
115
|
import { FluidDataStoreRegistry } from "./dataStoreRegistry";
|
|
118
116
|
import { ReportOpPerfTelemetry, IPerfSignalReport } from "./connectionTelemetry";
|
|
119
|
-
import {
|
|
117
|
+
import {
|
|
118
|
+
IPendingBatchMessage,
|
|
119
|
+
IPendingLocalState,
|
|
120
|
+
PendingStateManager,
|
|
121
|
+
} from "./pendingStateManager";
|
|
120
122
|
import { pkgVersion } from "./packageVersion";
|
|
121
123
|
import { BlobManager, IBlobManagerLoadInfo, IPendingBlobs } from "./blobManager";
|
|
122
124
|
import { DataStores, getSummaryForDatastores } from "./dataStores";
|
|
@@ -152,6 +154,8 @@ import {
|
|
|
152
154
|
ISummarizerRuntime,
|
|
153
155
|
IRefreshSummaryAckOptions,
|
|
154
156
|
RunWhileConnectedCoordinator,
|
|
157
|
+
IGenerateSummaryTreeResult,
|
|
158
|
+
RetriableSummaryError,
|
|
155
159
|
} from "./summary";
|
|
156
160
|
import { formExponentialFn, Throttler } from "./throttler";
|
|
157
161
|
import {
|
|
@@ -176,8 +180,10 @@ import {
|
|
|
176
180
|
OpSplitter,
|
|
177
181
|
RemoteMessageProcessor,
|
|
178
182
|
OpGroupingManager,
|
|
183
|
+
getLongStack,
|
|
179
184
|
} from "./opLifecycle";
|
|
180
185
|
import { DeltaManagerSummarizerProxy } from "./deltaManagerSummarizerProxy";
|
|
186
|
+
import { IBatchMetadata } from "./metadata";
|
|
181
187
|
|
|
182
188
|
export enum ContainerMessageType {
|
|
183
189
|
// An op to be delivered to store
|
|
@@ -584,9 +590,6 @@ export class ContainerRuntime
|
|
|
584
590
|
extends TypedEventEmitter<IContainerRuntimeEvents>
|
|
585
591
|
implements IContainerRuntime, IRuntime, ISummarizerRuntime, ISummarizerInternalsProvider
|
|
586
592
|
{
|
|
587
|
-
public get IContainerRuntime() {
|
|
588
|
-
return this;
|
|
589
|
-
}
|
|
590
593
|
public get IFluidRouter() {
|
|
591
594
|
return this;
|
|
592
595
|
}
|
|
@@ -828,7 +831,7 @@ export class ContainerRuntime
|
|
|
828
831
|
opMetadata: Record<string, unknown> | undefined,
|
|
829
832
|
) => void {
|
|
830
833
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
831
|
-
return this.
|
|
834
|
+
return this.reSubmitCore;
|
|
832
835
|
}
|
|
833
836
|
|
|
834
837
|
public get disposeFn(): (error?: ICriticalContainerError) => void {
|
|
@@ -837,6 +840,11 @@ export class ContainerRuntime
|
|
|
837
840
|
}
|
|
838
841
|
|
|
839
842
|
public get closeFn(): (error?: ICriticalContainerError) => void {
|
|
843
|
+
if (this._summarizer !== undefined) {
|
|
844
|
+
// In cases of summarizer, we want to dispose instead since consumer doesn't interact with this container
|
|
845
|
+
return this.disposeFn;
|
|
846
|
+
}
|
|
847
|
+
|
|
840
848
|
// Also call disposeFn to retain functionality of runtime being disposed on close
|
|
841
849
|
return (error?: ICriticalContainerError) => {
|
|
842
850
|
this.context.closeFn(error);
|
|
@@ -958,6 +966,12 @@ export class ContainerRuntime
|
|
|
958
966
|
private readonly disableAttachReorder: boolean | undefined;
|
|
959
967
|
private readonly summaryStateUpdateMethod: string | undefined;
|
|
960
968
|
private readonly closeSummarizerDelayMs: number;
|
|
969
|
+
/**
|
|
970
|
+
* If true, summary generated is validate before uploading it to the server. With single commit summaries,
|
|
971
|
+
* summaries will be accepted once uploaded, so they should be validated before upload. However, this can
|
|
972
|
+
* currently be controlled via a feature flag as its a new functionality.
|
|
973
|
+
*/
|
|
974
|
+
private readonly validateSummaryBeforeUpload: boolean;
|
|
961
975
|
|
|
962
976
|
private readonly defaultTelemetrySignalSampleCount = 100;
|
|
963
977
|
private _perfSignalData: IPerfSignalReport = {
|
|
@@ -1054,7 +1068,7 @@ export class ContainerRuntime
|
|
|
1054
1068
|
dataStoreAliasMap: [string, string][],
|
|
1055
1069
|
private readonly runtimeOptions: Readonly<Required<IContainerRuntimeOptions>>,
|
|
1056
1070
|
private readonly containerScope: FluidObject,
|
|
1057
|
-
public readonly logger:
|
|
1071
|
+
public readonly logger: ITelemetryLoggerExt,
|
|
1058
1072
|
existing: boolean,
|
|
1059
1073
|
blobManagerSnapshot: IBlobManagerLoadInfo,
|
|
1060
1074
|
private readonly _storage: IDocumentStorageService,
|
|
@@ -1212,7 +1226,6 @@ export class ContainerRuntime
|
|
|
1212
1226
|
getNodePackagePath: async (nodePath: string) => this.getGCNodePackagePath(nodePath),
|
|
1213
1227
|
getLastSummaryTimestampMs: () => this.messageAtLastSummary?.timestamp,
|
|
1214
1228
|
readAndParseBlob: async <T>(id: string) => readAndParse<T>(this.storage, id),
|
|
1215
|
-
getContainerDiagnosticId: () => this.context.id,
|
|
1216
1229
|
// GC runs in summarizer client and needs access to the real (non-proxy) active information. The proxy
|
|
1217
1230
|
// delta manager would always return false for summarizer client.
|
|
1218
1231
|
activeConnection: () => this.innerDeltaManager.active,
|
|
@@ -1305,8 +1318,7 @@ export class ContainerRuntime
|
|
|
1305
1318
|
close: this.closeFn,
|
|
1306
1319
|
connected: () => this.connected,
|
|
1307
1320
|
reSubmit: this.reSubmit.bind(this),
|
|
1308
|
-
|
|
1309
|
-
orderSequentially: this.orderSequentially.bind(this),
|
|
1321
|
+
reSubmitBatch: this.reSubmitBatch.bind(this),
|
|
1310
1322
|
},
|
|
1311
1323
|
pendingRuntimeState?.pending,
|
|
1312
1324
|
);
|
|
@@ -1335,6 +1347,7 @@ export class ContainerRuntime
|
|
|
1335
1347
|
compressionOptions,
|
|
1336
1348
|
maxBatchSizeInBytes: runtimeOptions.maxBatchSizeInBytes,
|
|
1337
1349
|
disablePartialFlush: disablePartialFlush === true,
|
|
1350
|
+
enableGroupedBatching: this.groupedBatchingEnabled,
|
|
1338
1351
|
},
|
|
1339
1352
|
logger: this.mc.logger,
|
|
1340
1353
|
groupingManager: opGroupingManager,
|
|
@@ -1342,6 +1355,9 @@ export class ContainerRuntime
|
|
|
1342
1355
|
referenceSequenceNumber: this.deltaManager.lastSequenceNumber,
|
|
1343
1356
|
clientSequenceNumber: this._processedClientSequenceNumber,
|
|
1344
1357
|
}),
|
|
1358
|
+
reSubmit: this.reSubmit.bind(this),
|
|
1359
|
+
opReentrancy: () => this.ensureNoDataModelChangesCalls > 0,
|
|
1360
|
+
closeContainer: this.closeFn,
|
|
1345
1361
|
});
|
|
1346
1362
|
|
|
1347
1363
|
this.context.quorum.on("removeMember", (clientId: string) => {
|
|
@@ -1349,12 +1365,15 @@ export class ContainerRuntime
|
|
|
1349
1365
|
});
|
|
1350
1366
|
|
|
1351
1367
|
this.summaryStateUpdateMethod = this.mc.config.getString(
|
|
1352
|
-
"Fluid.ContainerRuntime.Test.
|
|
1368
|
+
"Fluid.ContainerRuntime.Test.SummaryStateUpdateMethodV2",
|
|
1353
1369
|
);
|
|
1354
1370
|
const closeSummarizerDelayOverride = this.mc.config.getNumber(
|
|
1355
1371
|
"Fluid.ContainerRuntime.Test.CloseSummarizerDelayOverrideMs",
|
|
1356
1372
|
);
|
|
1357
1373
|
this.closeSummarizerDelayMs = closeSummarizerDelayOverride ?? defaultCloseSummarizerDelayMs;
|
|
1374
|
+
this.validateSummaryBeforeUpload =
|
|
1375
|
+
this.mc.config.getBoolean("Fluid.ContainerRuntime.Test.ValidateSummaryBeforeUpload") ??
|
|
1376
|
+
false;
|
|
1358
1377
|
|
|
1359
1378
|
this.summaryCollection = new SummaryCollection(this.deltaManager, this.logger);
|
|
1360
1379
|
|
|
@@ -1762,8 +1781,14 @@ export class ContainerRuntime
|
|
|
1762
1781
|
return this.consecutiveReconnects < this.maxConsecutiveReconnects;
|
|
1763
1782
|
}
|
|
1764
1783
|
|
|
1765
|
-
private resetReconnectCount() {
|
|
1766
|
-
|
|
1784
|
+
private resetReconnectCount(message?: ISequencedDocumentMessage) {
|
|
1785
|
+
// Chunked ops don't count towards making progress as they are sent
|
|
1786
|
+
// in their own batches before the originating batch is sent.
|
|
1787
|
+
// Therefore, receiving them while attempting to send the originating batch
|
|
1788
|
+
// does not mean that the container is making any progress.
|
|
1789
|
+
if (message?.type !== ContainerMessageType.ChunkedOp) {
|
|
1790
|
+
this.consecutiveReconnects = 0;
|
|
1791
|
+
}
|
|
1767
1792
|
}
|
|
1768
1793
|
|
|
1769
1794
|
private replayPendingStates() {
|
|
@@ -1812,7 +1837,23 @@ export class ContainerRuntime
|
|
|
1812
1837
|
this.idCompressor = IdCompressor.deserialize(op.stashedState);
|
|
1813
1838
|
}
|
|
1814
1839
|
|
|
1815
|
-
|
|
1840
|
+
/**
|
|
1841
|
+
* Parse an op's type and actual content from given serialized content
|
|
1842
|
+
* ! Note: this format needs to be in-line with what is set in the "ContainerRuntime.submit(...)" method
|
|
1843
|
+
*/
|
|
1844
|
+
private parseOpContent(serializedContent?: string): {
|
|
1845
|
+
type: ContainerMessageType;
|
|
1846
|
+
contents: unknown;
|
|
1847
|
+
} {
|
|
1848
|
+
assert(serializedContent !== undefined, 0x6d5 /* content must be defined */);
|
|
1849
|
+
const parsed = JSON.parse(serializedContent);
|
|
1850
|
+
assert(parsed.type !== undefined, 0x6d6 /* incorrect op content format */);
|
|
1851
|
+
return { type: parsed.type as ContainerMessageType, contents: parsed.contents };
|
|
1852
|
+
}
|
|
1853
|
+
|
|
1854
|
+
private async applyStashedOp(op: string): Promise<unknown> {
|
|
1855
|
+
// Need to parse from string for back-compat
|
|
1856
|
+
const { type, contents } = this.parseOpContent(op);
|
|
1816
1857
|
switch (type) {
|
|
1817
1858
|
case ContainerMessageType.FluidDataStoreOp:
|
|
1818
1859
|
return this.dataStores.applyStashedOp(contents as IEnvelope);
|
|
@@ -2009,7 +2050,7 @@ export class ContainerRuntime
|
|
|
2009
2050
|
local,
|
|
2010
2051
|
type: message.type,
|
|
2011
2052
|
contentType: typeof message.contents,
|
|
2012
|
-
batch: message.metadata?.batch,
|
|
2053
|
+
batch: (message.metadata as IBatchMetadata | undefined)?.batch,
|
|
2013
2054
|
compression: message.compression,
|
|
2014
2055
|
},
|
|
2015
2056
|
);
|
|
@@ -2028,7 +2069,7 @@ export class ContainerRuntime
|
|
|
2028
2069
|
// If we have processed a local op, this means that the container is
|
|
2029
2070
|
// making progress and we can reset the counter for how many times
|
|
2030
2071
|
// we have consecutively replayed the pending states
|
|
2031
|
-
this.resetReconnectCount();
|
|
2072
|
+
this.resetReconnectCount(message);
|
|
2032
2073
|
}
|
|
2033
2074
|
} catch (e) {
|
|
2034
2075
|
this.scheduleManager.afterOpProcessing(e, message);
|
|
@@ -2152,11 +2193,7 @@ export class ContainerRuntime
|
|
|
2152
2193
|
// This will throw and close the container if rollback fails
|
|
2153
2194
|
try {
|
|
2154
2195
|
checkpoint.rollback((message: BatchMessage) =>
|
|
2155
|
-
this.rollback(
|
|
2156
|
-
message.deserializedContent.type,
|
|
2157
|
-
message.deserializedContent.contents,
|
|
2158
|
-
message.localOpMetadata,
|
|
2159
|
-
),
|
|
2196
|
+
this.rollback(message.contents, message.localOpMetadata),
|
|
2160
2197
|
);
|
|
2161
2198
|
} catch (err) {
|
|
2162
2199
|
const error2 = wrapError(err, (message) => {
|
|
@@ -2409,7 +2446,7 @@ export class ContainerRuntime
|
|
|
2409
2446
|
/** True to track the state for this summary in the SummarizerNodes; defaults to true */
|
|
2410
2447
|
trackState?: boolean;
|
|
2411
2448
|
/** Logger to use for correlated summary events */
|
|
2412
|
-
summaryLogger?:
|
|
2449
|
+
summaryLogger?: ITelemetryLoggerExt;
|
|
2413
2450
|
/** True to run garbage collection before summarizing; defaults to true */
|
|
2414
2451
|
runGC?: boolean;
|
|
2415
2452
|
/** True to generate full GC data */
|
|
@@ -2626,7 +2663,7 @@ export class ContainerRuntime
|
|
|
2626
2663
|
public async collectGarbage(
|
|
2627
2664
|
options: {
|
|
2628
2665
|
/** Logger to use for logging GC events */
|
|
2629
|
-
logger?:
|
|
2666
|
+
logger?: ITelemetryLoggerExt;
|
|
2630
2667
|
/** True to run GC sweep phase after the mark phase */
|
|
2631
2668
|
runSweep?: boolean;
|
|
2632
2669
|
/** True to generate full GC data */
|
|
@@ -2797,7 +2834,7 @@ export class ContainerRuntime
|
|
|
2797
2834
|
summaryNumber,
|
|
2798
2835
|
...partialStats,
|
|
2799
2836
|
};
|
|
2800
|
-
const generateSummaryData = {
|
|
2837
|
+
const generateSummaryData: Omit<IGenerateSummaryTreeResult, "stage" | "error"> = {
|
|
2801
2838
|
referenceSequenceNumber: summaryRefSeqNum,
|
|
2802
2839
|
minimumSequenceNumber,
|
|
2803
2840
|
summaryTree,
|
|
@@ -2806,6 +2843,21 @@ export class ContainerRuntime
|
|
|
2806
2843
|
forcedFullTree,
|
|
2807
2844
|
} as const;
|
|
2808
2845
|
|
|
2846
|
+
// If validateSummaryBeforeUpload is true, validate that the summary generated by the summarizer nodes is
|
|
2847
|
+
// correct before this summary is uploaded.
|
|
2848
|
+
if (this.validateSummaryBeforeUpload) {
|
|
2849
|
+
const validateResult = this.summarizerNode.validateSummary();
|
|
2850
|
+
if (!validateResult.success) {
|
|
2851
|
+
const { success, ...loggingProps } = validateResult;
|
|
2852
|
+
const error = new RetriableSummaryError(
|
|
2853
|
+
validateResult.reason,
|
|
2854
|
+
validateResult.retryAfterSeconds,
|
|
2855
|
+
{ ...loggingProps },
|
|
2856
|
+
);
|
|
2857
|
+
return { stage: "base", ...generateSummaryData, error };
|
|
2858
|
+
}
|
|
2859
|
+
}
|
|
2860
|
+
|
|
2809
2861
|
continueResult = checkContinue();
|
|
2810
2862
|
if (!continueResult.continue) {
|
|
2811
2863
|
return { stage: "generate", ...generateSummaryData, error: continueResult.error };
|
|
@@ -2883,7 +2935,15 @@ export class ContainerRuntime
|
|
|
2883
2935
|
submitOpDuration: trace.trace().duration,
|
|
2884
2936
|
} as const;
|
|
2885
2937
|
|
|
2886
|
-
|
|
2938
|
+
try {
|
|
2939
|
+
// If validateSummaryBeforeUpload is false, the summary should be validated in this step.
|
|
2940
|
+
this.summarizerNode.completeSummary(
|
|
2941
|
+
handle,
|
|
2942
|
+
!this.validateSummaryBeforeUpload /* validate */,
|
|
2943
|
+
);
|
|
2944
|
+
} catch (error) {
|
|
2945
|
+
return { stage: "upload", ...uploadData, error };
|
|
2946
|
+
}
|
|
2887
2947
|
return submitData;
|
|
2888
2948
|
} finally {
|
|
2889
2949
|
// Cleanup wip summary in case of failure
|
|
@@ -2973,10 +3033,10 @@ export class ContainerRuntime
|
|
|
2973
3033
|
};
|
|
2974
3034
|
idAllocationBatchMessage = {
|
|
2975
3035
|
contents: JSON.stringify(idAllocationMessage),
|
|
2976
|
-
deserializedContent: idAllocationMessage,
|
|
2977
3036
|
referenceSequenceNumber: this.deltaManager.lastSequenceNumber,
|
|
2978
3037
|
metadata: undefined,
|
|
2979
3038
|
localOpMetadata: this.idCompressor?.serialize(true),
|
|
3039
|
+
type: ContainerMessageType.IdAllocation,
|
|
2980
3040
|
};
|
|
2981
3041
|
}
|
|
2982
3042
|
|
|
@@ -3014,7 +3074,7 @@ export class ContainerRuntime
|
|
|
3014
3074
|
|
|
3015
3075
|
const message: BatchMessage = {
|
|
3016
3076
|
contents: serializedContent,
|
|
3017
|
-
|
|
3077
|
+
type,
|
|
3018
3078
|
metadata,
|
|
3019
3079
|
localOpMetadata,
|
|
3020
3080
|
referenceSequenceNumber: this.deltaManager.lastSequenceNumber,
|
|
@@ -3053,6 +3113,9 @@ export class ContainerRuntime
|
|
|
3053
3113
|
this.disableAttachReorder !== true
|
|
3054
3114
|
) {
|
|
3055
3115
|
this.outbox.submitAttach(message);
|
|
3116
|
+
} else if (type === ContainerMessageType.BlobAttach) {
|
|
3117
|
+
// BlobAttach ops must have their metadata visible and cannot be grouped (see opGroupingManager.ts)
|
|
3118
|
+
this.outbox.submitBlobAttach(message);
|
|
3056
3119
|
} else {
|
|
3057
3120
|
this.outbox.submit(message);
|
|
3058
3121
|
}
|
|
@@ -3146,7 +3209,7 @@ export class ContainerRuntime
|
|
|
3146
3209
|
this.mc.logger.sendTelemetryEvent(
|
|
3147
3210
|
{ eventName: "OpReentry" },
|
|
3148
3211
|
// We need to capture the call stack in order to inspect the source of this usage pattern
|
|
3149
|
-
new UsageError(errorMessage),
|
|
3212
|
+
getLongStack(() => new UsageError(errorMessage)),
|
|
3150
3213
|
);
|
|
3151
3214
|
this.opReentryCallsToReport--;
|
|
3152
3215
|
}
|
|
@@ -3169,13 +3232,28 @@ export class ContainerRuntime
|
|
|
3169
3232
|
}
|
|
3170
3233
|
}
|
|
3171
3234
|
|
|
3235
|
+
private reSubmitBatch(batch: IPendingBatchMessage[]) {
|
|
3236
|
+
this.orderSequentially(() => {
|
|
3237
|
+
for (const message of batch) {
|
|
3238
|
+
this.reSubmit(message);
|
|
3239
|
+
}
|
|
3240
|
+
});
|
|
3241
|
+
this.flush();
|
|
3242
|
+
}
|
|
3243
|
+
|
|
3244
|
+
private reSubmit(message: IPendingBatchMessage) {
|
|
3245
|
+
// Need to parse from string for back-compat
|
|
3246
|
+
const { contents, type } = this.parseOpContent(message.content);
|
|
3247
|
+
this.reSubmitCore(type, contents, message.localOpMetadata, message.opMetadata);
|
|
3248
|
+
}
|
|
3249
|
+
|
|
3172
3250
|
/**
|
|
3173
3251
|
* Finds the right store and asks it to resubmit the message. This typically happens when we
|
|
3174
3252
|
* reconnect and there are pending messages.
|
|
3175
3253
|
* @param content - The content of the original message.
|
|
3176
3254
|
* @param localOpMetadata - The local metadata associated with the original message.
|
|
3177
3255
|
*/
|
|
3178
|
-
private
|
|
3256
|
+
private reSubmitCore(
|
|
3179
3257
|
type: ContainerMessageType,
|
|
3180
3258
|
content: any,
|
|
3181
3259
|
localOpMetadata: unknown,
|
|
@@ -3189,7 +3267,13 @@ export class ContainerRuntime
|
|
|
3189
3267
|
break;
|
|
3190
3268
|
case ContainerMessageType.Attach:
|
|
3191
3269
|
case ContainerMessageType.Alias:
|
|
3270
|
+
this.submit(type, content, localOpMetadata);
|
|
3271
|
+
break;
|
|
3192
3272
|
case ContainerMessageType.IdAllocation:
|
|
3273
|
+
// Remove the stashedState from the op if it's a stashed op
|
|
3274
|
+
if (content.stashedState !== undefined) {
|
|
3275
|
+
delete content.stashedState;
|
|
3276
|
+
}
|
|
3193
3277
|
this.submit(type, content, localOpMetadata);
|
|
3194
3278
|
break;
|
|
3195
3279
|
case ContainerMessageType.ChunkedOp:
|
|
@@ -3205,12 +3289,14 @@ export class ContainerRuntime
|
|
|
3205
3289
|
}
|
|
3206
3290
|
}
|
|
3207
3291
|
|
|
3208
|
-
private rollback(
|
|
3292
|
+
private rollback(content: string | undefined, localOpMetadata: unknown) {
|
|
3293
|
+
// Need to parse from string for back-compat
|
|
3294
|
+
const { type, contents } = this.parseOpContent(content);
|
|
3209
3295
|
switch (type) {
|
|
3210
3296
|
case ContainerMessageType.FluidDataStoreOp:
|
|
3211
3297
|
// For operations, call rollbackDataStoreOp which will find the right store
|
|
3212
3298
|
// and trigger rollback on it.
|
|
3213
|
-
this.dataStores.rollbackDataStoreOp(
|
|
3299
|
+
this.dataStores.rollbackDataStoreOp(contents as IEnvelope, localOpMetadata);
|
|
3214
3300
|
break;
|
|
3215
3301
|
default:
|
|
3216
3302
|
throw new Error(`Can't rollback ${type}`);
|
|
@@ -3219,7 +3305,7 @@ export class ContainerRuntime
|
|
|
3219
3305
|
|
|
3220
3306
|
private async waitForDeltaManagerToCatchup(
|
|
3221
3307
|
latestSnapshotRefSeq: number,
|
|
3222
|
-
summaryLogger:
|
|
3308
|
+
summaryLogger: ITelemetryLoggerExt,
|
|
3223
3309
|
): Promise<void> {
|
|
3224
3310
|
if (latestSnapshotRefSeq > this.deltaManager.lastSequenceNumber) {
|
|
3225
3311
|
// We need to catch up to the latest summary's reference sequence number before proceeding.
|
|
@@ -3331,7 +3417,7 @@ export class ContainerRuntime
|
|
|
3331
3417
|
* @returns downloaded snapshot's reference sequence number
|
|
3332
3418
|
*/
|
|
3333
3419
|
private async refreshLatestSummaryAckFromServer(
|
|
3334
|
-
summaryLogger:
|
|
3420
|
+
summaryLogger: ITelemetryLoggerExt,
|
|
3335
3421
|
): Promise<{ latestSnapshotRefSeq: number; latestSnapshotVersionId: string | undefined }> {
|
|
3336
3422
|
const readAndParseBlob = async <T>(id: string) => readAndParse<T>(this.storage, id);
|
|
3337
3423
|
const { snapshotTree, versionId, latestSnapshotRefSeq } =
|
|
@@ -3365,7 +3451,7 @@ export class ContainerRuntime
|
|
|
3365
3451
|
}
|
|
3366
3452
|
|
|
3367
3453
|
private async fetchLatestSnapshotFromStorage(
|
|
3368
|
-
logger:
|
|
3454
|
+
logger: ITelemetryLoggerExt,
|
|
3369
3455
|
event: ITelemetryGenericEvent,
|
|
3370
3456
|
readAndParseBlob: ReadAndParseBlob,
|
|
3371
3457
|
): Promise<{ snapshotTree: ISnapshotTree; versionId: string; latestSnapshotRefSeq: number }> {
|
|
@@ -3373,7 +3459,7 @@ export class ContainerRuntime
|
|
|
3373
3459
|
}
|
|
3374
3460
|
|
|
3375
3461
|
private async fetchSnapshotFromStorage(
|
|
3376
|
-
logger:
|
|
3462
|
+
logger: ITelemetryLoggerExt,
|
|
3377
3463
|
event: ITelemetryGenericEvent,
|
|
3378
3464
|
readAndParseBlob: ReadAndParseBlob,
|
|
3379
3465
|
versionId: string | null,
|
package/src/dataStore.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import { ITelemetryLoggerExt, TelemetryDataTag } from "@fluidframework/telemetry-utils";
|
|
7
7
|
import { assert, unreachableCase } from "@fluidframework/common-utils";
|
|
8
8
|
import { AttachState } from "@fluidframework/container-definitions";
|
|
9
9
|
import { UsageError } from "@fluidframework/container-utils";
|
|
@@ -13,7 +13,6 @@ import {
|
|
|
13
13
|
IDataStore,
|
|
14
14
|
IFluidDataStoreChannel,
|
|
15
15
|
} from "@fluidframework/runtime-definitions";
|
|
16
|
-
import { TelemetryDataTag } from "@fluidframework/telemetry-utils";
|
|
17
16
|
import { ContainerRuntime } from "./containerRuntime";
|
|
18
17
|
import { DataStores } from "./dataStores";
|
|
19
18
|
|
|
@@ -48,7 +47,7 @@ export const channelToDataStore = (
|
|
|
48
47
|
internalId: string,
|
|
49
48
|
runtime: ContainerRuntime,
|
|
50
49
|
datastores: DataStores,
|
|
51
|
-
logger:
|
|
50
|
+
logger: ITelemetryLoggerExt,
|
|
52
51
|
): IDataStore => new DataStore(fluidDataStoreChannel, internalId, runtime, datastores, logger);
|
|
53
52
|
|
|
54
53
|
enum AliasState {
|
|
@@ -175,7 +174,7 @@ class DataStore implements IDataStore {
|
|
|
175
174
|
private readonly internalId: string,
|
|
176
175
|
private readonly runtime: ContainerRuntime,
|
|
177
176
|
private readonly datastores: DataStores,
|
|
178
|
-
private readonly logger:
|
|
177
|
+
private readonly logger: ITelemetryLoggerExt,
|
|
179
178
|
) {
|
|
180
179
|
this.pendingAliases = datastores.pendingAliases;
|
|
181
180
|
}
|
package/src/dataStoreContext.ts
CHANGED
|
@@ -5,20 +5,22 @@
|
|
|
5
5
|
|
|
6
6
|
import {
|
|
7
7
|
IDisposable,
|
|
8
|
-
|
|
8
|
+
FluidObject,
|
|
9
|
+
IRequest,
|
|
10
|
+
IResponse,
|
|
11
|
+
IFluidHandle,
|
|
9
12
|
ITelemetryProperties,
|
|
10
|
-
} from "@fluidframework/
|
|
11
|
-
import { FluidObject, IRequest, IResponse, IFluidHandle } from "@fluidframework/core-interfaces";
|
|
13
|
+
} from "@fluidframework/core-interfaces";
|
|
12
14
|
import {
|
|
13
15
|
IAudience,
|
|
14
16
|
IDeltaManager,
|
|
15
17
|
AttachState,
|
|
16
18
|
ILoaderOptions,
|
|
17
19
|
} from "@fluidframework/container-definitions";
|
|
18
|
-
import { assert, Deferred,
|
|
20
|
+
import { assert, Deferred, TypedEventEmitter } from "@fluidframework/common-utils";
|
|
21
|
+
import { LazyPromise } from "@fluidframework/core-utils";
|
|
19
22
|
import { IDocumentStorageService } from "@fluidframework/driver-definitions";
|
|
20
|
-
import { readAndParse } from "@fluidframework/driver-utils";
|
|
21
|
-
import { BlobTreeEntry } from "@fluidframework/protocol-base";
|
|
23
|
+
import { BlobTreeEntry, readAndParse } from "@fluidframework/driver-utils";
|
|
22
24
|
import {
|
|
23
25
|
IClientDetails,
|
|
24
26
|
IDocumentMessage,
|
|
@@ -60,6 +62,7 @@ import {
|
|
|
60
62
|
import {
|
|
61
63
|
ChildLogger,
|
|
62
64
|
generateStack,
|
|
65
|
+
ITelemetryLoggerExt,
|
|
63
66
|
loggerToMonitoringContext,
|
|
64
67
|
LoggingError,
|
|
65
68
|
MonitoringContext,
|
|
@@ -163,7 +166,7 @@ export abstract class FluidDataStoreContext
|
|
|
163
166
|
return this._containerRuntime.clientDetails;
|
|
164
167
|
}
|
|
165
168
|
|
|
166
|
-
public get logger():
|
|
169
|
+
public get logger(): ITelemetryLoggerExt {
|
|
167
170
|
return this._containerRuntime.logger;
|
|
168
171
|
}
|
|
169
172
|
|
|
@@ -394,7 +397,7 @@ export abstract class FluidDataStoreContext
|
|
|
394
397
|
packageName: packagePathToTelemetryProperty(this.pkg),
|
|
395
398
|
});
|
|
396
399
|
this.channelDeferred?.reject(errorWrapped);
|
|
397
|
-
this.logger.sendErrorEvent({ eventName: "RealizeError" }, errorWrapped);
|
|
400
|
+
this.mc.logger.sendErrorEvent({ eventName: "RealizeError" }, errorWrapped);
|
|
398
401
|
});
|
|
399
402
|
}
|
|
400
403
|
return this.channelDeferred.promise;
|
|
@@ -784,7 +787,7 @@ export abstract class FluidDataStoreContext
|
|
|
784
787
|
this.channelDeferred.resolve(this.channel);
|
|
785
788
|
} catch (error) {
|
|
786
789
|
this.channelDeferred?.reject(error);
|
|
787
|
-
this.logger.sendErrorEvent(
|
|
790
|
+
this.mc.logger.sendErrorEvent(
|
|
788
791
|
{
|
|
789
792
|
eventName: "BindRuntimeError",
|
|
790
793
|
fluidDataStoreId: {
|
package/src/dataStoreContexts.ts
CHANGED
|
@@ -3,13 +3,11 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
} from "@fluidframework/
|
|
11
|
-
import { assert, Deferred, Lazy } from "@fluidframework/common-utils";
|
|
12
|
-
import { ChildLogger } from "@fluidframework/telemetry-utils";
|
|
6
|
+
import { ITelemetryBaseLogger } from "@fluidframework/common-definitions";
|
|
7
|
+
import { assert, Deferred } from "@fluidframework/common-utils";
|
|
8
|
+
import { Lazy } from "@fluidframework/core-utils";
|
|
9
|
+
import { IDisposable } from "@fluidframework/core-interfaces";
|
|
10
|
+
import { ChildLogger, ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
|
|
13
11
|
import { FluidDataStoreContext, LocalFluidDataStoreContext } from "./dataStoreContext";
|
|
14
12
|
|
|
15
13
|
export class DataStoreContexts implements Iterable<[string, FluidDataStoreContext]>, IDisposable {
|
|
@@ -46,7 +44,7 @@ export class DataStoreContexts implements Iterable<[string, FluidDataStoreContex
|
|
|
46
44
|
}
|
|
47
45
|
});
|
|
48
46
|
|
|
49
|
-
private readonly _logger:
|
|
47
|
+
private readonly _logger: ITelemetryLoggerExt;
|
|
50
48
|
|
|
51
49
|
constructor(baseLogger: ITelemetryBaseLogger) {
|
|
52
50
|
this._logger = ChildLogger.create(baseLogger);
|
package/src/dataStores.ts
CHANGED
|
@@ -3,12 +3,16 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { ITelemetryBaseLogger, IDisposable } from "@fluidframework/common-definitions";
|
|
7
6
|
import {
|
|
8
7
|
DataCorruptionError,
|
|
9
8
|
extractSafePropertiesFromMessage,
|
|
10
9
|
} from "@fluidframework/container-utils";
|
|
11
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
ITelemetryBaseLogger,
|
|
12
|
+
IDisposable,
|
|
13
|
+
IFluidHandle,
|
|
14
|
+
IRequest,
|
|
15
|
+
} from "@fluidframework/core-interfaces";
|
|
12
16
|
import { FluidObjectHandle } from "@fluidframework/datastore";
|
|
13
17
|
import { ISequencedDocumentMessage, ISnapshotTree } from "@fluidframework/protocol-definitions";
|
|
14
18
|
import {
|
|
@@ -46,7 +50,8 @@ import {
|
|
|
46
50
|
} from "@fluidframework/telemetry-utils";
|
|
47
51
|
import { AttachState } from "@fluidframework/container-definitions";
|
|
48
52
|
import { buildSnapshotTree } from "@fluidframework/driver-utils";
|
|
49
|
-
import { assert
|
|
53
|
+
import { assert } from "@fluidframework/common-utils";
|
|
54
|
+
import { Lazy } from "@fluidframework/core-utils";
|
|
50
55
|
import { v4 as uuid } from "uuid";
|
|
51
56
|
import { DataStoreContexts } from "./dataStoreContexts";
|
|
52
57
|
import {
|
package/src/deltaScheduler.ts
CHANGED
|
@@ -3,12 +3,11 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import { ITelemetryLoggerExt, TelemetryLogger } from "@fluidframework/telemetry-utils";
|
|
7
7
|
import { performance } from "@fluidframework/common-utils";
|
|
8
8
|
import { IDeltaManager } from "@fluidframework/container-definitions";
|
|
9
9
|
import { IDocumentMessage, ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
|
|
10
10
|
|
|
11
|
-
import { TelemetryLogger } from "@fluidframework/telemetry-utils";
|
|
12
11
|
/**
|
|
13
12
|
* DeltaScheduler is responsible for the scheduling of inbound delta queue in cases where there
|
|
14
13
|
* is more than one op a particular run of the queue. It does not schedule if there is just one
|
|
@@ -52,7 +51,7 @@ export class DeltaScheduler {
|
|
|
52
51
|
|
|
53
52
|
constructor(
|
|
54
53
|
deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
|
|
55
|
-
private readonly logger:
|
|
54
|
+
private readonly logger: ITelemetryLoggerExt,
|
|
56
55
|
) {
|
|
57
56
|
this.deltaManager = deltaManager;
|
|
58
57
|
this.deltaManager.inbound.on("idle", () => {
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
7
|
-
import { LazyPromise
|
|
6
|
+
import { Timer } from "@fluidframework/common-utils";
|
|
7
|
+
import { LazyPromise } from "@fluidframework/core-utils";
|
|
8
8
|
import { ClientSessionExpiredError, DataProcessingError } from "@fluidframework/container-utils";
|
|
9
9
|
import { IRequestHeader } from "@fluidframework/core-interfaces";
|
|
10
10
|
import {
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
import { ReadAndParseBlob } from "@fluidframework/runtime-utils";
|
|
18
18
|
import {
|
|
19
19
|
ChildLogger,
|
|
20
|
+
ITelemetryLoggerExt,
|
|
20
21
|
loggerToMonitoringContext,
|
|
21
22
|
MonitoringContext,
|
|
22
23
|
PerformanceEvent,
|
|
@@ -446,7 +447,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
446
447
|
public async collectGarbage(
|
|
447
448
|
options: {
|
|
448
449
|
/** Logger to use for logging GC events */
|
|
449
|
-
logger?:
|
|
450
|
+
logger?: ITelemetryLoggerExt;
|
|
450
451
|
/** True to run GC sweep phase after the mark phase */
|
|
451
452
|
runSweep?: boolean;
|
|
452
453
|
/** True to generate full GC data */
|
|
@@ -528,7 +529,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
528
529
|
private async runGC(
|
|
529
530
|
fullGC: boolean,
|
|
530
531
|
currentReferenceTimestampMs: number,
|
|
531
|
-
logger:
|
|
532
|
+
logger: ITelemetryLoggerExt,
|
|
532
533
|
): Promise<IGCStats> {
|
|
533
534
|
// 1. Generate / analyze the runtime's reference graph.
|
|
534
535
|
// Get the reference graph (gcData) and run GC algorithm to get referenced / unreferenced nodes.
|
|
@@ -641,7 +642,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
641
642
|
gcResult: IGCResult,
|
|
642
643
|
sweepReadyNodes: string[],
|
|
643
644
|
currentReferenceTimestampMs: number,
|
|
644
|
-
logger:
|
|
645
|
+
logger: ITelemetryLoggerExt,
|
|
645
646
|
): string[] {
|
|
646
647
|
// Log events for objects that are ready to be deleted by sweep. This will give us data on sweep when
|
|
647
648
|
// its not enabled.
|
|
@@ -719,7 +720,7 @@ export class GarbageCollector implements IGarbageCollector {
|
|
|
719
720
|
private findAllNodesReferencedBetweenGCs(
|
|
720
721
|
currentGCData: IGarbageCollectionData,
|
|
721
722
|
previousGCData: IGarbageCollectionData | undefined,
|
|
722
|
-
logger:
|
|
723
|
+
logger: ITelemetryLoggerExt,
|
|
723
724
|
): string[] | undefined {
|
|
724
725
|
// If we haven't run GC before there is nothing to do.
|
|
725
726
|
// No previousGCData, means nothing is unreferenced, and there are no reference state trackers to clear
|