@fluidframework/container-runtime 2.0.0-internal.5.3.2 → 2.0.0-internal.6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/dist/batchTracker.d.ts +2 -1
  3. package/dist/batchTracker.d.ts.map +1 -1
  4. package/dist/batchTracker.js +1 -1
  5. package/dist/batchTracker.js.map +1 -1
  6. package/dist/blobManager.d.ts +13 -2
  7. package/dist/blobManager.d.ts.map +1 -1
  8. package/dist/blobManager.js +103 -25
  9. package/dist/blobManager.js.map +1 -1
  10. package/dist/connectionTelemetry.d.ts.map +1 -1
  11. package/dist/connectionTelemetry.js +12 -4
  12. package/dist/connectionTelemetry.js.map +1 -1
  13. package/dist/containerRuntime.d.ts +69 -22
  14. package/dist/containerRuntime.d.ts.map +1 -1
  15. package/dist/containerRuntime.js +344 -238
  16. package/dist/containerRuntime.js.map +1 -1
  17. package/dist/dataStore.js +11 -2
  18. package/dist/dataStore.js.map +1 -1
  19. package/dist/dataStoreContext.d.ts +1 -1
  20. package/dist/dataStoreContext.d.ts.map +1 -1
  21. package/dist/dataStoreContext.js +40 -44
  22. package/dist/dataStoreContext.js.map +1 -1
  23. package/dist/dataStoreContexts.js +1 -1
  24. package/dist/dataStoreContexts.js.map +1 -1
  25. package/dist/dataStores.d.ts +21 -5
  26. package/dist/dataStores.d.ts.map +1 -1
  27. package/dist/dataStores.js +102 -58
  28. package/dist/dataStores.js.map +1 -1
  29. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
  30. package/dist/deltaManagerSummarizerProxy.js +2 -0
  31. package/dist/deltaManagerSummarizerProxy.js.map +1 -1
  32. package/dist/deltaScheduler.d.ts.map +1 -1
  33. package/dist/deltaScheduler.js +5 -5
  34. package/dist/deltaScheduler.js.map +1 -1
  35. package/dist/gc/garbageCollection.d.ts.map +1 -1
  36. package/dist/gc/garbageCollection.js +29 -25
  37. package/dist/gc/garbageCollection.js.map +1 -1
  38. package/dist/gc/gcConfigs.js +13 -11
  39. package/dist/gc/gcConfigs.js.map +1 -1
  40. package/dist/gc/gcHelpers.d.ts +1 -0
  41. package/dist/gc/gcHelpers.d.ts.map +1 -1
  42. package/dist/gc/gcHelpers.js +5 -6
  43. package/dist/gc/gcHelpers.js.map +1 -1
  44. package/dist/gc/gcSummaryStateTracker.js +4 -6
  45. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  46. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  47. package/dist/gc/gcTelemetry.js +44 -33
  48. package/dist/gc/gcTelemetry.js.map +1 -1
  49. package/dist/id-compressor/idCompressor.d.ts +3 -3
  50. package/dist/id-compressor/idCompressor.d.ts.map +1 -1
  51. package/dist/id-compressor/idCompressor.js +52 -52
  52. package/dist/id-compressor/idCompressor.js.map +1 -1
  53. package/dist/id-compressor/idRange.js +2 -2
  54. package/dist/id-compressor/idRange.js.map +1 -1
  55. package/dist/id-compressor/sessionIdNormalizer.js +11 -16
  56. package/dist/id-compressor/sessionIdNormalizer.js.map +1 -1
  57. package/dist/index.d.ts +1 -1
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js.map +1 -1
  60. package/dist/opLifecycle/batchManager.js +10 -6
  61. package/dist/opLifecycle/batchManager.js.map +1 -1
  62. package/dist/opLifecycle/opCompressor.d.ts +2 -2
  63. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  64. package/dist/opLifecycle/opCompressor.js +7 -2
  65. package/dist/opLifecycle/opCompressor.js.map +1 -1
  66. package/dist/opLifecycle/opDecompressor.d.ts +2 -2
  67. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  68. package/dist/opLifecycle/opDecompressor.js +12 -10
  69. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  70. package/dist/opLifecycle/opGroupingManager.js +13 -5
  71. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  72. package/dist/opLifecycle/opSplitter.d.ts +2 -2
  73. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  74. package/dist/opLifecycle/opSplitter.js +11 -7
  75. package/dist/opLifecycle/opSplitter.js.map +1 -1
  76. package/dist/opLifecycle/outbox.d.ts +6 -5
  77. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  78. package/dist/opLifecycle/outbox.js +6 -14
  79. package/dist/opLifecycle/outbox.js.map +1 -1
  80. package/dist/opLifecycle/remoteMessageProcessor.d.ts +6 -1
  81. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  82. package/dist/opLifecycle/remoteMessageProcessor.js +8 -2
  83. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  84. package/dist/opProperties.js +1 -2
  85. package/dist/opProperties.js.map +1 -1
  86. package/dist/packageVersion.d.ts +1 -1
  87. package/dist/packageVersion.js +1 -1
  88. package/dist/packageVersion.js.map +1 -1
  89. package/dist/pendingStateManager.d.ts +6 -3
  90. package/dist/pendingStateManager.d.ts.map +1 -1
  91. package/dist/pendingStateManager.js +41 -32
  92. package/dist/pendingStateManager.js.map +1 -1
  93. package/dist/scheduleManager.d.ts.map +1 -1
  94. package/dist/scheduleManager.js +15 -11
  95. package/dist/scheduleManager.js.map +1 -1
  96. package/dist/summary/orderedClientElection.d.ts +2 -1
  97. package/dist/summary/orderedClientElection.d.ts.map +1 -1
  98. package/dist/summary/orderedClientElection.js +18 -19
  99. package/dist/summary/orderedClientElection.js.map +1 -1
  100. package/dist/summary/runningSummarizer.d.ts +3 -5
  101. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  102. package/dist/summary/runningSummarizer.js +42 -66
  103. package/dist/summary/runningSummarizer.js.map +1 -1
  104. package/dist/summary/summarizer.js +5 -8
  105. package/dist/summary/summarizer.js.map +1 -1
  106. package/dist/summary/summarizerClientElection.js +5 -9
  107. package/dist/summary/summarizerClientElection.js.map +1 -1
  108. package/dist/summary/summarizerHeuristics.js +8 -12
  109. package/dist/summary/summarizerHeuristics.js.map +1 -1
  110. package/dist/summary/summarizerNode/summarizerNode.d.ts +5 -5
  111. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  112. package/dist/summary/summarizerNode/summarizerNode.js +26 -22
  113. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  114. package/dist/summary/summarizerNode/summarizerNodeUtils.js +2 -4
  115. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  116. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +4 -3
  117. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  118. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +13 -16
  119. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  120. package/dist/summary/summaryCollection.js +3 -5
  121. package/dist/summary/summaryCollection.js.map +1 -1
  122. package/dist/summary/summaryFormat.js +1 -2
  123. package/dist/summary/summaryFormat.js.map +1 -1
  124. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  125. package/dist/summary/summaryGenerator.js +67 -21
  126. package/dist/summary/summaryGenerator.js.map +1 -1
  127. package/dist/summary/summaryManager.d.ts +2 -3
  128. package/dist/summary/summaryManager.d.ts.map +1 -1
  129. package/dist/summary/summaryManager.js +9 -7
  130. package/dist/summary/summaryManager.js.map +1 -1
  131. package/lib/batchTracker.d.ts +2 -1
  132. package/lib/batchTracker.d.ts.map +1 -1
  133. package/lib/batchTracker.js +2 -2
  134. package/lib/batchTracker.js.map +1 -1
  135. package/lib/blobManager.d.ts +13 -2
  136. package/lib/blobManager.d.ts.map +1 -1
  137. package/lib/blobManager.js +103 -25
  138. package/lib/blobManager.js.map +1 -1
  139. package/lib/connectionTelemetry.d.ts.map +1 -1
  140. package/lib/connectionTelemetry.js +13 -5
  141. package/lib/connectionTelemetry.js.map +1 -1
  142. package/lib/containerRuntime.d.ts +69 -22
  143. package/lib/containerRuntime.d.ts.map +1 -1
  144. package/lib/containerRuntime.js +343 -238
  145. package/lib/containerRuntime.js.map +1 -1
  146. package/lib/dataStore.js +11 -2
  147. package/lib/dataStore.js.map +1 -1
  148. package/lib/dataStoreContext.d.ts +1 -1
  149. package/lib/dataStoreContext.d.ts.map +1 -1
  150. package/lib/dataStoreContext.js +42 -46
  151. package/lib/dataStoreContext.js.map +1 -1
  152. package/lib/dataStoreContexts.js +2 -2
  153. package/lib/dataStoreContexts.js.map +1 -1
  154. package/lib/dataStores.d.ts +21 -5
  155. package/lib/dataStores.d.ts.map +1 -1
  156. package/lib/dataStores.js +103 -59
  157. package/lib/dataStores.js.map +1 -1
  158. package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -1
  159. package/lib/deltaManagerSummarizerProxy.js +2 -0
  160. package/lib/deltaManagerSummarizerProxy.js.map +1 -1
  161. package/lib/deltaScheduler.d.ts.map +1 -1
  162. package/lib/deltaScheduler.js +6 -6
  163. package/lib/deltaScheduler.js.map +1 -1
  164. package/lib/gc/garbageCollection.d.ts.map +1 -1
  165. package/lib/gc/garbageCollection.js +30 -26
  166. package/lib/gc/garbageCollection.js.map +1 -1
  167. package/lib/gc/gcConfigs.js +13 -11
  168. package/lib/gc/gcConfigs.js.map +1 -1
  169. package/lib/gc/gcHelpers.d.ts +1 -0
  170. package/lib/gc/gcHelpers.d.ts.map +1 -1
  171. package/lib/gc/gcHelpers.js +5 -6
  172. package/lib/gc/gcHelpers.js.map +1 -1
  173. package/lib/gc/gcSummaryStateTracker.js +4 -6
  174. package/lib/gc/gcSummaryStateTracker.js.map +1 -1
  175. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  176. package/lib/gc/gcTelemetry.js +45 -34
  177. package/lib/gc/gcTelemetry.js.map +1 -1
  178. package/lib/id-compressor/idCompressor.d.ts +3 -3
  179. package/lib/id-compressor/idCompressor.d.ts.map +1 -1
  180. package/lib/id-compressor/idCompressor.js +52 -52
  181. package/lib/id-compressor/idCompressor.js.map +1 -1
  182. package/lib/id-compressor/idRange.js +2 -2
  183. package/lib/id-compressor/idRange.js.map +1 -1
  184. package/lib/id-compressor/sessionIdNormalizer.js +11 -16
  185. package/lib/id-compressor/sessionIdNormalizer.js.map +1 -1
  186. package/lib/index.d.ts +1 -1
  187. package/lib/index.d.ts.map +1 -1
  188. package/lib/index.js.map +1 -1
  189. package/lib/opLifecycle/batchManager.js +10 -6
  190. package/lib/opLifecycle/batchManager.js.map +1 -1
  191. package/lib/opLifecycle/opCompressor.d.ts +2 -2
  192. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  193. package/lib/opLifecycle/opCompressor.js +8 -3
  194. package/lib/opLifecycle/opCompressor.js.map +1 -1
  195. package/lib/opLifecycle/opDecompressor.d.ts +2 -2
  196. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  197. package/lib/opLifecycle/opDecompressor.js +13 -11
  198. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  199. package/lib/opLifecycle/opGroupingManager.js +13 -5
  200. package/lib/opLifecycle/opGroupingManager.js.map +1 -1
  201. package/lib/opLifecycle/opSplitter.d.ts +2 -2
  202. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  203. package/lib/opLifecycle/opSplitter.js +12 -8
  204. package/lib/opLifecycle/opSplitter.js.map +1 -1
  205. package/lib/opLifecycle/outbox.d.ts +6 -5
  206. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  207. package/lib/opLifecycle/outbox.js +7 -15
  208. package/lib/opLifecycle/outbox.js.map +1 -1
  209. package/lib/opLifecycle/remoteMessageProcessor.d.ts +6 -1
  210. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  211. package/lib/opLifecycle/remoteMessageProcessor.js +8 -2
  212. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  213. package/lib/opProperties.js +1 -2
  214. package/lib/opProperties.js.map +1 -1
  215. package/lib/packageVersion.d.ts +1 -1
  216. package/lib/packageVersion.js +1 -1
  217. package/lib/packageVersion.js.map +1 -1
  218. package/lib/pendingStateManager.d.ts +6 -3
  219. package/lib/pendingStateManager.d.ts.map +1 -1
  220. package/lib/pendingStateManager.js +41 -32
  221. package/lib/pendingStateManager.js.map +1 -1
  222. package/lib/scheduleManager.d.ts.map +1 -1
  223. package/lib/scheduleManager.js +16 -12
  224. package/lib/scheduleManager.js.map +1 -1
  225. package/lib/summary/orderedClientElection.d.ts +2 -1
  226. package/lib/summary/orderedClientElection.d.ts.map +1 -1
  227. package/lib/summary/orderedClientElection.js +19 -20
  228. package/lib/summary/orderedClientElection.js.map +1 -1
  229. package/lib/summary/runningSummarizer.d.ts +3 -5
  230. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  231. package/lib/summary/runningSummarizer.js +43 -67
  232. package/lib/summary/runningSummarizer.js.map +1 -1
  233. package/lib/summary/summarizer.js +6 -9
  234. package/lib/summary/summarizer.js.map +1 -1
  235. package/lib/summary/summarizerClientElection.js +5 -9
  236. package/lib/summary/summarizerClientElection.js.map +1 -1
  237. package/lib/summary/summarizerHeuristics.js +8 -12
  238. package/lib/summary/summarizerHeuristics.js.map +1 -1
  239. package/lib/summary/summarizerNode/summarizerNode.d.ts +5 -5
  240. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  241. package/lib/summary/summarizerNode/summarizerNode.js +27 -23
  242. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  243. package/lib/summary/summarizerNode/summarizerNodeUtils.js +2 -4
  244. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  245. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +4 -3
  246. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  247. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +14 -17
  248. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  249. package/lib/summary/summaryCollection.js +3 -5
  250. package/lib/summary/summaryCollection.js.map +1 -1
  251. package/lib/summary/summaryFormat.js +1 -2
  252. package/lib/summary/summaryFormat.js.map +1 -1
  253. package/lib/summary/summaryGenerator.d.ts.map +1 -1
  254. package/lib/summary/summaryGenerator.js +68 -22
  255. package/lib/summary/summaryGenerator.js.map +1 -1
  256. package/lib/summary/summaryManager.d.ts +2 -3
  257. package/lib/summary/summaryManager.d.ts.map +1 -1
  258. package/lib/summary/summaryManager.js +10 -8
  259. package/lib/summary/summaryManager.js.map +1 -1
  260. package/package.json +30 -18
  261. package/src/batchTracker.ts +4 -3
  262. package/src/blobManager.ts +113 -15
  263. package/src/connectionTelemetry.ts +7 -3
  264. package/src/containerRuntime.ts +354 -194
  265. package/src/dataStore.ts +10 -1
  266. package/src/dataStoreContext.ts +31 -33
  267. package/src/dataStoreContexts.ts +2 -2
  268. package/src/dataStores.ts +108 -71
  269. package/src/deltaManagerSummarizerProxy.ts +2 -0
  270. package/src/deltaScheduler.ts +6 -10
  271. package/src/gc/garbageCollection.ts +13 -8
  272. package/src/gc/gcHelpers.ts +1 -0
  273. package/src/gc/gcTelemetry.ts +13 -10
  274. package/src/id-compressor/idCompressor.ts +6 -5
  275. package/src/index.ts +0 -1
  276. package/src/opLifecycle/opCompressor.ts +4 -3
  277. package/src/opLifecycle/opDecompressor.ts +4 -3
  278. package/src/opLifecycle/opSplitter.ts +4 -3
  279. package/src/opLifecycle/outbox.ts +13 -25
  280. package/src/opLifecycle/remoteMessageProcessor.ts +8 -2
  281. package/src/packageVersion.ts +1 -1
  282. package/src/pendingStateManager.ts +34 -25
  283. package/src/scheduleManager.ts +2 -2
  284. package/src/summary/orderedClientElection.ts +4 -3
  285. package/src/summary/runningSummarizer.ts +18 -44
  286. package/src/summary/summarizer.ts +2 -2
  287. package/src/summary/summarizerNode/summarizerNode.ts +13 -15
  288. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +8 -7
  289. package/src/summary/summaryGenerator.ts +6 -2
  290. package/src/summary/summaryManager.ts +9 -5
package/src/index.ts CHANGED
@@ -12,7 +12,6 @@ export {
12
12
  ISummaryConfigurationDisableSummarizer,
13
13
  ISummaryConfigurationDisableHeuristics,
14
14
  IContainerRuntimeOptions,
15
- IRootSummaryTreeWithStats,
16
15
  isRuntimeMessage,
17
16
  RuntimeMessage,
18
17
  agentSchedulerId,
@@ -3,10 +3,11 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ITelemetryLoggerExt, ChildLogger } from "@fluidframework/telemetry-utils";
6
+ import { createChildLogger } from "@fluidframework/telemetry-utils";
7
7
  import { assert, IsoBuffer } from "@fluidframework/common-utils";
8
8
  import { UsageError } from "@fluidframework/container-utils";
9
9
  import { compress } from "lz4js";
10
+ import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
10
11
  import { CompressionAlgorithms } from "../containerRuntime";
11
12
  import { estimateSocketSize } from "./batchManager";
12
13
  import { IBatch, BatchMessage } from "./definitions";
@@ -19,8 +20,8 @@ import { IBatch, BatchMessage } from "./definitions";
19
20
  export class OpCompressor {
20
21
  private readonly logger;
21
22
 
22
- constructor(logger: ITelemetryLoggerExt) {
23
- this.logger = ChildLogger.create(logger, "OpCompressor");
23
+ constructor(logger: ITelemetryBaseLogger) {
24
+ this.logger = createChildLogger({ logger, namespace: "OpCompressor" });
24
25
  }
25
26
 
26
27
  public compressBatch(batch: IBatch): IBatch {
@@ -6,7 +6,8 @@
6
6
  import { decompress } from "lz4js";
7
7
  import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
8
8
  import { assert, IsoBuffer, Uint8ArrayToString } from "@fluidframework/common-utils";
9
- import { ChildLogger, ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
9
+ import { createChildLogger } from "@fluidframework/telemetry-utils";
10
+ import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
10
11
  import { CompressionAlgorithms } from "../containerRuntime";
11
12
  import { IBatchMetadata } from "../metadata";
12
13
  import { IMessageProcessingResult } from "./definitions";
@@ -32,8 +33,8 @@ export class OpDecompressor {
32
33
  private processedCount = 0;
33
34
  private readonly logger;
34
35
 
35
- constructor(logger: ITelemetryLoggerExt) {
36
- this.logger = ChildLogger.create(logger, "OpDecompressor");
36
+ constructor(logger: ITelemetryBaseLogger) {
37
+ this.logger = createChildLogger({ logger, namespace: "OpDecompressor" });
37
38
  }
38
39
 
39
40
  public processMessage(message: ISequencedDocumentMessage): IMessageProcessingResult {
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ITelemetryLoggerExt, ChildLogger } from "@fluidframework/telemetry-utils";
6
+ import { createChildLogger } from "@fluidframework/telemetry-utils";
7
7
  import { assert } from "@fluidframework/common-utils";
8
8
  import { IBatchMessage } from "@fluidframework/container-definitions";
9
9
  import {
@@ -11,6 +11,7 @@ import {
11
11
  extractSafePropertiesFromMessage,
12
12
  } from "@fluidframework/container-utils";
13
13
  import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
14
+ import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
14
15
  import { ContainerMessageType, ContainerRuntimeMessage } from "../containerRuntime";
15
16
  import { estimateSocketSize } from "./batchManager";
16
17
  import { BatchMessage, IBatch, IChunkedOp, IMessageProcessingResult } from "./definitions";
@@ -30,10 +31,10 @@ export class OpSplitter {
30
31
  | undefined,
31
32
  public readonly chunkSizeInBytes: number,
32
33
  private readonly maxBatchSizeInBytes: number,
33
- logger: ITelemetryLoggerExt,
34
+ logger: ITelemetryBaseLogger,
34
35
  ) {
35
36
  this.chunkMap = new Map<string, string[]>(chunks);
36
- this.logger = ChildLogger.create(logger, "OpSplitter");
37
+ this.logger = createChildLogger({ logger, namespace: "OpSplitter" });
37
38
  }
38
39
 
39
40
  public get isBatchChunkingEnabled(): boolean {
@@ -3,16 +3,11 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import {
7
- ITelemetryLoggerExt,
8
- ChildLogger,
9
- loggerToMonitoringContext,
10
- MonitoringContext,
11
- } from "@fluidframework/telemetry-utils";
6
+ import { createChildMonitoringContext, MonitoringContext } from "@fluidframework/telemetry-utils";
12
7
  import { assert } from "@fluidframework/common-utils";
13
- import { IContainerContext, ICriticalContainerError } from "@fluidframework/container-definitions";
8
+ import { IBatchMessage, ICriticalContainerError } from "@fluidframework/container-definitions";
14
9
  import { GenericError, UsageError } from "@fluidframework/container-utils";
15
- import { MessageType } from "@fluidframework/protocol-definitions";
10
+ import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
16
11
  import { ICompressionRuntimeOptions } from "../containerRuntime";
17
12
  import { IPendingBatchMessage, PendingStateManager } from "../pendingStateManager";
18
13
  import {
@@ -37,11 +32,14 @@ export interface IOutboxConfig {
37
32
  export interface IOutboxParameters {
38
33
  readonly shouldSend: () => boolean;
39
34
  readonly pendingStateManager: PendingStateManager;
40
- readonly containerContext: IContainerContext;
35
+ readonly submitBatchFn:
36
+ | ((batch: IBatchMessage[], referenceSequenceNumber?: number) => number)
37
+ | undefined;
38
+ readonly legacySendBatchFn: (batch: IBatch) => void;
41
39
  readonly config: IOutboxConfig;
42
40
  readonly compressor: OpCompressor;
43
41
  readonly splitter: OpSplitter;
44
- readonly logger: ITelemetryLoggerExt;
42
+ readonly logger: ITelemetryBaseLogger;
45
43
  readonly groupingManager: OpGroupingManager;
46
44
  readonly getCurrentSequenceNumbers: () => BatchSequenceNumbers;
47
45
  readonly reSubmit: (message: IPendingBatchMessage) => void;
@@ -100,7 +98,7 @@ export class Outbox {
100
98
  private mismatchedOpsReported = 0;
101
99
 
102
100
  constructor(private readonly params: IOutboxParameters) {
103
- this.mc = loggerToMonitoringContext(ChildLogger.create(params.logger, "Outbox"));
101
+ this.mc = createChildMonitoringContext({ logger: params.logger, namespace: "Outbox" });
104
102
  const isCompressionEnabled =
105
103
  this.params.config.compressionOptions.minimumBatchSizeInBytes !==
106
104
  Number.POSITIVE_INFINITY;
@@ -326,7 +324,7 @@ export class Outbox {
326
324
  this.params.config.compressionOptions === undefined ||
327
325
  this.params.config.compressionOptions.minimumBatchSizeInBytes >
328
326
  batch.contentSizeInBytes ||
329
- this.params.containerContext.submitBatchFn === undefined
327
+ this.params.submitBatchFn === undefined
330
328
  ) {
331
329
  // Nothing to do if the batch is empty or if compression is disabled or not supported, or if we don't need to compress
332
330
  return disableGroupedBatching ? batch : this.params.groupingManager.groupBatch(batch);
@@ -381,7 +379,7 @@ export class Outbox {
381
379
  });
382
380
  }
383
381
 
384
- if (this.params.containerContext.submitBatchFn === undefined) {
382
+ if (this.params.submitBatchFn === undefined) {
385
383
  // Legacy path - supporting old loader versions. Can be removed only when LTS moves above
386
384
  // version that has support for batches (submitBatchFn)
387
385
  assert(
@@ -389,23 +387,13 @@ export class Outbox {
389
387
  0x5a6 /* Compression should not have happened if the loader does not support it */,
390
388
  );
391
389
 
392
- for (const message of batch.content) {
393
- this.params.containerContext.submitFn(
394
- MessageType.Operation,
395
- // For back-compat (submitFn only works on deserialized content)
396
- message.contents === undefined ? undefined : JSON.parse(message.contents),
397
- true, // batch
398
- message.metadata,
399
- );
400
- }
401
-
402
- this.params.containerContext.deltaManager.flush();
390
+ this.params.legacySendBatchFn(batch);
403
391
  } else {
404
392
  assert(
405
393
  batch.referenceSequenceNumber !== undefined,
406
394
  0x58e /* Batch must not be empty */,
407
395
  );
408
- this.params.containerContext.submitBatchFn(
396
+ this.params.submitBatchFn(
409
397
  batch.content.map((message) => ({
410
398
  contents: message.contents,
411
399
  metadata: message.metadata,
@@ -24,6 +24,11 @@ export class RemoteMessageProcessor {
24
24
  this.opSplitter.clearPartialChunks(clientId);
25
25
  }
26
26
 
27
+ /**
28
+ * Ungroups and Unchunks the runtime ops encapsulated by the single remoteMessage received over the wire
29
+ * @param remoteMessage - A message from another client, likely a chunked/grouped op
30
+ * @returns the ungrouped, unchunked, unpacked SequencedContainerRuntimeMessage encapsulated in the remote message
31
+ */
27
32
  public process(remoteMessage: ISequencedDocumentMessage): ISequencedDocumentMessage[] {
28
33
  const result: ISequencedDocumentMessage[] = [];
29
34
 
@@ -32,11 +37,12 @@ export class RemoteMessageProcessor {
32
37
  const message = this.opDecompressor.processMessage(ungroupedMessage).message;
33
38
 
34
39
  for (let ungroupedMessage2 of this.opGroupingManager.ungroupOp(message)) {
40
+ // unpack and unchunk the ungrouped message in place
35
41
  unpackRuntimeMessage(ungroupedMessage2);
36
-
37
42
  const chunkProcessingResult =
38
43
  this.opSplitter.processRemoteMessage(ungroupedMessage2);
39
44
  ungroupedMessage2 = chunkProcessingResult.message;
45
+
40
46
  if (chunkProcessingResult.state !== "Processed") {
41
47
  // If the message is not chunked or if the splitter is still rebuilding the original message,
42
48
  // there is no need to continue processing
@@ -106,7 +112,7 @@ const unpack = (message: ISequencedDocumentMessage) => {
106
112
  *
107
113
  * @remarks This API makes no promises regarding backward-compatibility. This is internal API.
108
114
  * @param message - message (as it observed in storage / service)
109
- * @returns unpacked runtime message
115
+ * @returns whether the given message was unpacked
110
116
  *
111
117
  * @internal
112
118
  */
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/container-runtime";
9
- export const pkgVersion = "2.0.0-internal.5.3.2";
9
+ export const pkgVersion = "2.0.0-internal.6.0.0";
@@ -9,13 +9,14 @@ import { ICriticalContainerError } from "@fluidframework/container-definitions";
9
9
  import { DataProcessingError } from "@fluidframework/container-utils";
10
10
  import { Lazy } from "@fluidframework/core-utils";
11
11
  import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
12
+ import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
12
13
  import Deque from "double-ended-queue";
13
14
  import { ContainerMessageType } from "./containerRuntime";
14
15
  import { pkgVersion } from "./packageVersion";
15
16
  import { IBatchMetadata } from "./metadata";
16
17
 
17
18
  /**
18
- * ! TODO: Remove this interface in "2.0.0-internal.7.0.0" once we only read IPendingMessageNew
19
+ * ! TODO: Remove this interface in "2.0.0-internal.7.0.0" once we only read IPendingMessageNew (AB#4763)
19
20
  */
20
21
  export interface IPendingMessageOld {
21
22
  type: "message";
@@ -41,7 +42,7 @@ export interface IPendingMessageNew {
41
42
  }
42
43
 
43
44
  /**
44
- * ! TODO: Remove this type in "2.0.0-internal.7.0.0"
45
+ * ! TODO: Remove this type in "2.0.0-internal.7.0.0" (AB#4763)
45
46
  */
46
47
  export type IPendingState = IPendingMessageOld | IPendingMessageNew;
47
48
 
@@ -65,6 +66,7 @@ export interface IRuntimeStateHandler {
65
66
  applyStashedOp(content: string): Promise<unknown>;
66
67
  reSubmit(message: IPendingBatchMessage): void;
67
68
  reSubmitBatch(batch: IPendingBatchMessage[]): void;
69
+ isActiveConnection: () => boolean;
68
70
  }
69
71
 
70
72
  /**
@@ -113,21 +115,18 @@ export class PendingStateManager implements IDisposable {
113
115
  if (!this.pendingMessages.isEmpty()) {
114
116
  return {
115
117
  pendingStates: this.pendingMessages.toArray().map((message) => {
116
- // ! TODO: Remove conversion to IPendingMessageOld in "2.0.0-internal.6.0.0" AB#3826
117
- const content = JSON.parse(message.content);
118
+ let content = message.content;
119
+ const parsedContent = JSON.parse(content);
118
120
  // IdAllocations need their localOpMetadata stashed in the contents
119
121
  // of the op to correctly resume the session when processing stashed ops
120
- if (content.type === ContainerMessageType.IdAllocation) {
121
- content.contents.stashedState = message.localOpMetadata;
122
+ if (parsedContent.type === ContainerMessageType.IdAllocation) {
123
+ parsedContent.contents.stashedState = message.localOpMetadata;
124
+ content = JSON.stringify(parsedContent);
122
125
  }
123
- return {
124
- ...message,
125
- messageType: content.type,
126
- content: content.contents,
127
- // delete localOpMetadata since it may not be serializable
128
- // and will be regenerated by applyStashedOp()
129
- localOpMetadata: undefined,
130
- };
126
+
127
+ // delete localOpMetadata since it may not be serializable
128
+ // and will be regenerated by applyStashedOp()
129
+ return { ...message, content, localOpMetadata: undefined };
131
130
  }),
132
131
  };
133
132
  }
@@ -136,10 +135,11 @@ export class PendingStateManager implements IDisposable {
136
135
  constructor(
137
136
  private readonly stateHandler: IRuntimeStateHandler,
138
137
  initialLocalState: IPendingLocalState | undefined,
138
+ private readonly logger: ITelemetryLoggerExt | undefined,
139
139
  ) {
140
140
  /**
141
141
  * Convert old local state format to the new format (IPendingMessageOld to IPendingMessageNew)
142
- * ! TODO: Remove this conversion in "2.0.0-internal.7.0.0"
142
+ * ! TODO: Remove this conversion in "2.0.0-internal.7.0.0" (AB#4763)
143
143
  */
144
144
  if (initialLocalState?.pendingStates) {
145
145
  for (const initialState of initialLocalState.pendingStates) {
@@ -364,18 +364,16 @@ export class PendingStateManager implements IDisposable {
364
364
  0x174 /* "initial states should be empty before replaying pending" */,
365
365
  );
366
366
 
367
- let pendingMessagesCount = this.pendingMessages.length;
368
- if (pendingMessagesCount === 0) {
369
- return;
370
- }
367
+ const initialPendingMessagesCount = this.pendingMessages.length;
368
+ let remainingPendingMessagesCount = this.pendingMessages.length;
371
369
 
372
370
  // Process exactly `pendingMessagesCount` items in the queue as it represents the number of messages that were
373
371
  // pending when we connected. This is important because the `reSubmitFn` might add more items in the queue
374
372
  // which must not be replayed.
375
- while (pendingMessagesCount > 0) {
373
+ while (remainingPendingMessagesCount > 0) {
376
374
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
377
375
  let pendingMessage = this.pendingMessages.shift()!;
378
- pendingMessagesCount--;
376
+ remainingPendingMessagesCount--;
379
377
  assert(
380
378
  pendingMessage.opMetadata?.batch !== false,
381
379
  0x41b /* We cannot process batches in chunks */,
@@ -388,14 +386,14 @@ export class PendingStateManager implements IDisposable {
388
386
  */
389
387
  if (pendingMessage.opMetadata?.batch) {
390
388
  assert(
391
- pendingMessagesCount > 0,
389
+ remainingPendingMessagesCount > 0,
392
390
  0x554 /* Last pending message cannot be a batch begin */,
393
391
  );
394
392
 
395
393
  const batch: IPendingBatchMessage[] = [];
396
394
 
397
395
  // check is >= because batch end may be last pending message
398
- while (pendingMessagesCount >= 0) {
396
+ while (remainingPendingMessagesCount >= 0) {
399
397
  batch.push({
400
398
  content: pendingMessage.content,
401
399
  localOpMetadata: pendingMessage.localOpMetadata,
@@ -405,11 +403,11 @@ export class PendingStateManager implements IDisposable {
405
403
  if (pendingMessage.opMetadata?.batch === false) {
406
404
  break;
407
405
  }
408
- assert(pendingMessagesCount > 0, 0x555 /* No batch end found */);
406
+ assert(remainingPendingMessagesCount > 0, 0x555 /* No batch end found */);
409
407
 
410
408
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
411
409
  pendingMessage = this.pendingMessages.shift()!;
412
- pendingMessagesCount--;
410
+ remainingPendingMessagesCount--;
413
411
  assert(
414
412
  pendingMessage.opMetadata?.batch !== true,
415
413
  0x556 /* Batch start needs a corresponding batch end */,
@@ -425,5 +423,16 @@ export class PendingStateManager implements IDisposable {
425
423
  });
426
424
  }
427
425
  }
426
+
427
+ // We replayPendingStates on read connections too - we expect these to get nack'd though, and to then reconnect
428
+ // on a write connection and replay again. This filters out the replay that happens on the read connection so
429
+ // we only see the replays on write connections (that have a chance to go through).
430
+ if (this.stateHandler.isActiveConnection()) {
431
+ this.logger?.sendTelemetryEvent({
432
+ eventName: "PendingStatesReplayed",
433
+ count: initialPendingMessagesCount,
434
+ clientId: this.stateHandler.clientId(),
435
+ });
436
+ }
428
437
  }
429
438
  }
@@ -5,7 +5,7 @@
5
5
  import { EventEmitter } from "events";
6
6
  import { IDeltaManager } from "@fluidframework/container-definitions";
7
7
  import { IDocumentMessage, ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
8
- import { ITelemetryLoggerExt, ChildLogger } from "@fluidframework/telemetry-utils";
8
+ import { ITelemetryLoggerExt, createChildLogger } from "@fluidframework/telemetry-utils";
9
9
  import { assert, performance } from "@fluidframework/common-utils";
10
10
  import { isRuntimeMessage } from "@fluidframework/driver-utils";
11
11
  import {
@@ -45,7 +45,7 @@ export class ScheduleManager {
45
45
  ) {
46
46
  this.deltaScheduler = new DeltaScheduler(
47
47
  this.deltaManager,
48
- ChildLogger.create(this.logger, "DeltaScheduler"),
48
+ createChildLogger({ logger: this.logger, namespace: "DeltaScheduler" }),
49
49
  );
50
50
  void new ScheduleManagerCore(deltaManager, getClientId, logger);
51
51
  }
@@ -4,11 +4,12 @@
4
4
  */
5
5
  /* eslint-disable @rushstack/no-new-null */
6
6
  import { IEvent, IEventProvider } from "@fluidframework/common-definitions";
7
- import { ITelemetryLoggerExt, ChildLogger } from "@fluidframework/telemetry-utils";
7
+ import { ITelemetryLoggerExt, createChildLogger } from "@fluidframework/telemetry-utils";
8
8
  import { assert, TypedEventEmitter } from "@fluidframework/common-utils";
9
9
  import { IDeltaManager } from "@fluidframework/container-definitions";
10
10
  import { UsageError } from "@fluidframework/container-utils";
11
11
  import { IClient, IQuorumClients, ISequencedClient } from "@fluidframework/protocol-definitions";
12
+ import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
12
13
  import { summarizerClientType } from "./summarizerClientElection";
13
14
 
14
15
  // helper types for recursive readonly.
@@ -101,12 +102,12 @@ export class OrderedClientCollection
101
102
  }
102
103
 
103
104
  constructor(
104
- logger: ITelemetryLoggerExt,
105
+ logger: ITelemetryBaseLogger,
105
106
  deltaManager: Pick<IDeltaManager<unknown, unknown>, "lastSequenceNumber">,
106
107
  quorum: Pick<IQuorumClients, "getMembers" | "on">,
107
108
  ) {
108
109
  super();
109
- this.logger = ChildLogger.create(logger, "OrderedClientCollection");
110
+ this.logger = createChildLogger({ logger, namespace: "OrderedClientCollection" });
110
111
  const members = quorum.getMembers();
111
112
  for (const [clientId, client] of members) {
112
113
  this.addClient(clientId, client);
@@ -3,18 +3,16 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { IDisposable } from "@fluidframework/core-interfaces";
6
+ import { IDisposable, ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
7
7
  import {
8
- ITelemetryLoggerExt,
9
- ChildLogger,
10
8
  isFluidError,
11
- loggerToMonitoringContext,
12
9
  MonitoringContext,
10
+ createChildMonitoringContext,
11
+ createChildLogger,
13
12
  } from "@fluidframework/telemetry-utils";
14
13
  import { assert, delay, Deferred, PromiseTimer } from "@fluidframework/common-utils";
15
14
  import { UsageError } from "@fluidframework/container-utils";
16
15
  import { DriverErrorType } from "@fluidframework/driver-definitions";
17
- import { isRuntimeMessage } from "@fluidframework/driver-utils";
18
16
  import { ISequencedDocumentMessage, MessageType } from "@fluidframework/protocol-definitions";
19
17
  import { ISummaryConfiguration } from "../containerRuntime";
20
18
  import { opSize } from "../opProperties";
@@ -57,7 +55,7 @@ const defaultNumberSummarizationAttempts = 2; // only up to 2 attempts
57
55
  */
58
56
  export class RunningSummarizer implements IDisposable {
59
57
  public static async start(
60
- logger: ITelemetryLoggerExt,
58
+ logger: ITelemetryBaseLogger,
61
59
  summaryWatcher: IClientSummaryWatcher,
62
60
  configuration: ISummaryConfiguration,
63
61
  submitSummaryCallback: (options: ISubmitSummaryOptions) => Promise<SubmitSummaryResult>,
@@ -90,7 +88,10 @@ export class RunningSummarizer implements IDisposable {
90
88
  // Handle summary acks asynchronously
91
89
  // Note: no exceptions are thrown from processIncomingSummaryAcks handler as it handles all exceptions
92
90
  summarizer.processIncomingSummaryAcks(lastAckRefSeq).catch((error) => {
93
- logger.sendErrorEvent({ eventName: "HandleSummaryAckFatalError" }, error);
91
+ createChildLogger({ logger }).sendErrorEvent(
92
+ { eventName: "HandleSummaryAckFatalError" },
93
+ error,
94
+ );
94
95
  });
95
96
 
96
97
  // Update heuristic counts
@@ -146,11 +147,10 @@ export class RunningSummarizer implements IDisposable {
146
147
  private totalSuccessfulAttempts = 0;
147
148
  private initialized = false;
148
149
 
149
- private readonly deltaManagerListener;
150
150
  private readonly runtimeListener;
151
151
 
152
152
  private constructor(
153
- baseLogger: ITelemetryLoggerExt,
153
+ baseLogger: ITelemetryBaseLogger,
154
154
  private readonly summaryWatcher: IClientSummaryWatcher,
155
155
  private readonly configuration: ISummaryConfiguration,
156
156
  private readonly submitSummaryCallback: (
@@ -170,11 +170,13 @@ export class RunningSummarizer implements IDisposable {
170
170
  summarizerSuccessfulAttempts: () => this.totalSuccessfulAttempts,
171
171
  };
172
172
 
173
- this.mc = loggerToMonitoringContext(
174
- ChildLogger.create(baseLogger, "Running", {
173
+ this.mc = createChildMonitoringContext({
174
+ logger: baseLogger,
175
+ namespace: "Running",
176
+ properties: {
175
177
  all: telemetryProps,
176
- }),
177
- );
178
+ },
179
+ });
178
180
 
179
181
  if (configuration.state !== "disableHeuristics") {
180
182
  assert(
@@ -235,24 +237,10 @@ export class RunningSummarizer implements IDisposable {
235
237
  this.mc.logger,
236
238
  );
237
239
 
238
- // Listen to deltaManager for non-runtime ops
239
- this.deltaManagerListener = (op) => {
240
- if (!isRuntimeMessage(op)) {
241
- this.handleOp(op, false);
242
- }
240
+ // Listen to runtime for ops
241
+ this.runtimeListener = (op: ISequencedDocumentMessage, runtimeMessage?: boolean) => {
242
+ this.handleOp(op, runtimeMessage === true);
243
243
  };
244
-
245
- // Listen to runtime for runtime ops
246
- this.runtimeListener = (op, runtimeMessage) => {
247
- if (runtimeMessage) {
248
- this.handleOp(op, true);
249
- }
250
- };
251
-
252
- // Purpose of listening to deltaManager is for back-compat
253
- // Can remove and only listen to runtime once loader version is past 2.0.0-internal.1.2.0 (https://github.com/microsoft/FluidFramework/pull/11832)
254
- // Tracked by AB#3883
255
- this.runtime.deltaManager.on("op", this.deltaManagerListener);
256
244
  this.runtime.on("op", this.runtimeListener);
257
245
  }
258
246
 
@@ -347,7 +335,6 @@ export class RunningSummarizer implements IDisposable {
347
335
  }
348
336
 
349
337
  public dispose(): void {
350
- this.runtime.deltaManager.off("op", this.deltaManagerListener);
351
338
  this.runtime.off("op", this.runtimeListener);
352
339
  this.summaryWatcher.dispose();
353
340
  this.heuristicRunner?.dispose();
@@ -610,8 +597,6 @@ export class RunningSummarizer implements IDisposable {
610
597
  throw new UsageError("Invalid number of attempts.");
611
598
  }
612
599
 
613
- let lastResult: { message: string; error: any } | undefined;
614
-
615
600
  for (let summaryAttemptPhase = 0; summaryAttemptPhase < totalAttempts; ) {
616
601
  if (this.cancellationToken.cancelled) {
617
602
  return;
@@ -655,7 +640,6 @@ export class RunningSummarizer implements IDisposable {
655
640
  summaryAttemptPhase++;
656
641
  summaryAttemptsPerPhase = 0;
657
642
  }
658
- lastResult = result;
659
643
 
660
644
  const delaySeconds = overrideDelaySeconds ?? regularDelaySeconds;
661
645
 
@@ -670,16 +654,6 @@ export class RunningSummarizer implements IDisposable {
670
654
  }
671
655
  }
672
656
 
673
- // If all attempts failed, log error (with last attempt info) and close the summarizer container
674
- this.mc.logger.sendErrorEvent(
675
- {
676
- eventName: "FailToSummarize",
677
- reason,
678
- message: lastResult?.message,
679
- },
680
- lastResult?.error,
681
- );
682
-
683
657
  this.stopSummarizerCallback("failToSummarize");
684
658
  },
685
659
  () => {
@@ -7,7 +7,7 @@ import { EventEmitter } from "events";
7
7
  import { Deferred } from "@fluidframework/common-utils";
8
8
  import {
9
9
  ITelemetryLoggerExt,
10
- ChildLogger,
10
+ createChildLogger,
11
11
  IFluidErrorBase,
12
12
  LoggingError,
13
13
  wrapErrorAndLog,
@@ -90,7 +90,7 @@ export class Summarizer extends EventEmitter implements ISummarizer {
90
90
  ) => Promise<ICancellableSummarizerController>,
91
91
  ) {
92
92
  super();
93
- this.logger = ChildLogger.create(this.runtime.logger, "Summarizer");
93
+ this.logger = createChildLogger({ logger: this.runtime.logger, namespace: "Summarizer" });
94
94
  }
95
95
 
96
96
  /**
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ITelemetryErrorEvent } from "@fluidframework/core-interfaces";
6
+ import { ITelemetryBaseLogger, ITelemetryErrorEvent } from "@fluidframework/core-interfaces";
7
7
  import {
8
8
  ISummarizerNode,
9
9
  ISummarizerNodeConfig,
@@ -23,10 +23,11 @@ import {
23
23
  } from "@fluidframework/protocol-definitions";
24
24
  import {
25
25
  ITelemetryLoggerExt,
26
- ChildLogger,
26
+ createChildLogger,
27
27
  LoggingError,
28
28
  PerformanceEvent,
29
29
  TelemetryDataTag,
30
+ tagCodeArtifacts,
30
31
  } from "@fluidframework/telemetry-utils";
31
32
  import { assert, unreachableCase } from "@fluidframework/common-utils";
32
33
  import {
@@ -85,30 +86,28 @@ export class SummarizerNode implements IRootSummarizerNode {
85
86
  * Use createRootSummarizerNode to create root node, or createChild to create child nodes.
86
87
  */
87
88
  public constructor(
88
- baseLogger: ITelemetryLoggerExt,
89
+ baseLogger: ITelemetryBaseLogger,
89
90
  private readonly summarizeInternalFn: SummarizeInternalFn,
90
91
  config: ISummarizerNodeConfig,
91
92
  private _changeSequenceNumber: number,
92
93
  /** Undefined means created without summary */
93
94
  private _latestSummary?: SummaryNode,
94
95
  private readonly initialSummary?: IInitialSummary,
95
- protected wipSummaryLogger?: ITelemetryLoggerExt,
96
+ protected wipSummaryLogger?: ITelemetryBaseLogger,
96
97
  /** A unique id of this node to be logged when sending telemetry. */
97
98
  protected telemetryNodeId?: string,
98
99
  ) {
99
100
  this.canReuseHandle = config.canReuseHandle ?? true;
100
101
  // All logs posted by the summarizer node should include the telemetryNodeId.
101
- this.logger = ChildLogger.create(baseLogger, undefined /* namespace */, {
102
- all: {
103
- id: {
104
- tag: TelemetryDataTag.CodeArtifact,
105
- value: this.telemetryNodeId,
106
- },
102
+ this.logger = createChildLogger({
103
+ logger: baseLogger,
104
+ properties: {
105
+ all: tagCodeArtifacts({ id: this.telemetryNodeId }),
107
106
  },
108
107
  });
109
108
  }
110
109
 
111
- public startSummary(referenceSequenceNumber: number, summaryLogger: ITelemetryLoggerExt) {
110
+ public startSummary(referenceSequenceNumber: number, summaryLogger: ITelemetryBaseLogger) {
112
111
  assert(
113
112
  this.wipSummaryLogger === undefined,
114
113
  0x19f /* "wipSummaryLogger should not be set yet in startSummary" */,
@@ -809,10 +808,9 @@ export class SummarizerNode implements IRootSummarizerNode {
809
808
  const error = new LoggingError(eventProps.eventName, {
810
809
  ...eventProps,
811
810
  referenceSequenceNumber: this.wipReferenceSequenceNumber,
812
- id: {
813
- tag: TelemetryDataTag.CodeArtifact,
814
- value: this.telemetryNodeId,
815
- },
811
+ ...tagCodeArtifacts({
812
+ id: this.telemetryNodeId,
813
+ }),
816
814
  });
817
815
  this.logger.sendErrorEvent(eventProps, error);
818
816
  throw error;