@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.
Files changed (367) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/dist/batchTracker.d.ts +4 -4
  3. package/dist/batchTracker.d.ts.map +1 -1
  4. package/dist/batchTracker.js +2 -2
  5. package/dist/batchTracker.js.map +1 -1
  6. package/dist/blobManager.d.ts +5 -2
  7. package/dist/blobManager.d.ts.map +1 -1
  8. package/dist/blobManager.js +53 -24
  9. package/dist/blobManager.js.map +1 -1
  10. package/dist/connectionTelemetry.d.ts +2 -2
  11. package/dist/connectionTelemetry.d.ts.map +1 -1
  12. package/dist/connectionTelemetry.js +8 -1
  13. package/dist/connectionTelemetry.js.map +1 -1
  14. package/dist/containerRuntime.d.ts +19 -7
  15. package/dist/containerRuntime.d.ts.map +1 -1
  16. package/dist/containerRuntime.js +98 -22
  17. package/dist/containerRuntime.js.map +1 -1
  18. package/dist/dataStore.d.ts +2 -2
  19. package/dist/dataStore.d.ts.map +1 -1
  20. package/dist/dataStore.js +1 -1
  21. package/dist/dataStore.js.map +1 -1
  22. package/dist/dataStoreContext.d.ts +3 -4
  23. package/dist/dataStoreContext.d.ts.map +1 -1
  24. package/dist/dataStoreContext.js +5 -5
  25. package/dist/dataStoreContext.js.map +1 -1
  26. package/dist/dataStoreContexts.d.ts +2 -1
  27. package/dist/dataStoreContexts.d.ts.map +1 -1
  28. package/dist/dataStoreContexts.js +2 -1
  29. package/dist/dataStoreContexts.js.map +1 -1
  30. package/dist/dataStores.d.ts +1 -1
  31. package/dist/dataStores.d.ts.map +1 -1
  32. package/dist/dataStores.js +2 -1
  33. package/dist/dataStores.js.map +1 -1
  34. package/dist/deltaScheduler.d.ts +2 -2
  35. package/dist/deltaScheduler.d.ts.map +1 -1
  36. package/dist/deltaScheduler.js +1 -1
  37. package/dist/deltaScheduler.js.map +1 -1
  38. package/dist/gc/garbageCollection.d.ts +2 -2
  39. package/dist/gc/garbageCollection.d.ts.map +1 -1
  40. package/dist/gc/garbageCollection.js +4 -3
  41. package/dist/gc/garbageCollection.js.map +1 -1
  42. package/dist/gc/gcDefinitions.d.ts +3 -4
  43. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  44. package/dist/gc/gcDefinitions.js.map +1 -1
  45. package/dist/gc/gcTelemetry.d.ts +5 -5
  46. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  47. package/dist/gc/gcTelemetry.js.map +1 -1
  48. package/dist/id-compressor/idCompressor.d.ts +2 -2
  49. package/dist/id-compressor/idCompressor.d.ts.map +1 -1
  50. package/dist/id-compressor/idCompressor.js.map +1 -1
  51. package/dist/id-compressor/uuidUtilities.d.ts +0 -2
  52. package/dist/id-compressor/uuidUtilities.d.ts.map +1 -1
  53. package/dist/id-compressor/uuidUtilities.js +1 -3
  54. package/dist/id-compressor/uuidUtilities.js.map +1 -1
  55. package/dist/index.d.ts +1 -1
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js.map +1 -1
  58. package/dist/metadata.d.ts +18 -0
  59. package/dist/metadata.d.ts.map +1 -0
  60. package/dist/metadata.js +7 -0
  61. package/dist/metadata.js.map +1 -0
  62. package/dist/opLifecycle/batchManager.d.ts +2 -1
  63. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  64. package/dist/opLifecycle/batchManager.js +5 -1
  65. package/dist/opLifecycle/batchManager.js.map +1 -1
  66. package/dist/opLifecycle/definitions.d.ts +13 -2
  67. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  68. package/dist/opLifecycle/definitions.js.map +1 -1
  69. package/dist/opLifecycle/index.d.ts +1 -1
  70. package/dist/opLifecycle/index.d.ts.map +1 -1
  71. package/dist/opLifecycle/index.js +2 -1
  72. package/dist/opLifecycle/index.js.map +1 -1
  73. package/dist/opLifecycle/opCompressor.d.ts +2 -2
  74. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  75. package/dist/opLifecycle/opCompressor.js +3 -6
  76. package/dist/opLifecycle/opCompressor.js.map +1 -1
  77. package/dist/opLifecycle/opDecompressor.d.ts +2 -2
  78. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  79. package/dist/opLifecycle/opDecompressor.js +14 -8
  80. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  81. package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
  82. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  83. package/dist/opLifecycle/opGroupingManager.js +6 -11
  84. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  85. package/dist/opLifecycle/opSplitter.d.ts +2 -2
  86. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  87. package/dist/opLifecycle/opSplitter.js +5 -3
  88. package/dist/opLifecycle/opSplitter.js.map +1 -1
  89. package/dist/opLifecycle/outbox.d.ts +35 -4
  90. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  91. package/dist/opLifecycle/outbox.js +135 -45
  92. package/dist/opLifecycle/outbox.js.map +1 -1
  93. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  94. package/dist/opLifecycle/remoteMessageProcessor.js +3 -1
  95. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  96. package/dist/packageVersion.d.ts +1 -1
  97. package/dist/packageVersion.js +1 -1
  98. package/dist/packageVersion.js.map +1 -1
  99. package/dist/pendingStateManager.d.ts +24 -15
  100. package/dist/pendingStateManager.d.ts.map +1 -1
  101. package/dist/pendingStateManager.js +67 -72
  102. package/dist/pendingStateManager.js.map +1 -1
  103. package/dist/scheduleManager.d.ts +2 -2
  104. package/dist/scheduleManager.d.ts.map +1 -1
  105. package/dist/scheduleManager.js +8 -2
  106. package/dist/scheduleManager.js.map +1 -1
  107. package/dist/summary/index.d.ts +2 -2
  108. package/dist/summary/index.d.ts.map +1 -1
  109. package/dist/summary/index.js +2 -1
  110. package/dist/summary/index.js.map +1 -1
  111. package/dist/summary/orderedClientElection.d.ts +4 -3
  112. package/dist/summary/orderedClientElection.d.ts.map +1 -1
  113. package/dist/summary/orderedClientElection.js +3 -18
  114. package/dist/summary/orderedClientElection.js.map +1 -1
  115. package/dist/summary/runningSummarizer.d.ts +4 -3
  116. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  117. package/dist/summary/runningSummarizer.js +5 -6
  118. package/dist/summary/runningSummarizer.js.map +1 -1
  119. package/dist/summary/summarizer.d.ts +2 -3
  120. package/dist/summary/summarizer.d.ts.map +1 -1
  121. package/dist/summary/summarizer.js +2 -3
  122. package/dist/summary/summarizer.js.map +1 -1
  123. package/dist/summary/summarizerClientElection.d.ts +3 -2
  124. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  125. package/dist/summary/summarizerClientElection.js.map +1 -1
  126. package/dist/summary/summarizerHeuristics.d.ts +2 -2
  127. package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
  128. package/dist/summary/summarizerHeuristics.js.map +1 -1
  129. package/dist/summary/summarizerNode/index.d.ts +1 -1
  130. package/dist/summary/summarizerNode/index.d.ts.map +1 -1
  131. package/dist/summary/summarizerNode/index.js.map +1 -1
  132. package/dist/summary/summarizerNode/summarizerNode.d.ts +41 -14
  133. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  134. package/dist/summary/summarizerNode/summarizerNode.js +91 -23
  135. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  136. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +24 -4
  137. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  138. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  139. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +23 -8
  140. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  141. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +60 -23
  142. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  143. package/dist/summary/summarizerTypes.d.ts +16 -9
  144. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  145. package/dist/summary/summarizerTypes.js.map +1 -1
  146. package/dist/summary/summaryCollection.d.ts +4 -2
  147. package/dist/summary/summaryCollection.d.ts.map +1 -1
  148. package/dist/summary/summaryCollection.js +4 -0
  149. package/dist/summary/summaryCollection.js.map +1 -1
  150. package/dist/summary/summaryFormat.d.ts +1 -0
  151. package/dist/summary/summaryFormat.d.ts.map +1 -1
  152. package/dist/summary/summaryFormat.js +2 -1
  153. package/dist/summary/summaryFormat.js.map +1 -1
  154. package/dist/summary/summaryGenerator.d.ts +14 -5
  155. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  156. package/dist/summary/summaryGenerator.js +23 -9
  157. package/dist/summary/summaryGenerator.js.map +1 -1
  158. package/dist/summary/summaryManager.d.ts +4 -2
  159. package/dist/summary/summaryManager.d.ts.map +1 -1
  160. package/dist/summary/summaryManager.js.map +1 -1
  161. package/dist/tsdoc-metadata.json +11 -0
  162. package/lib/batchTracker.d.ts +4 -4
  163. package/lib/batchTracker.d.ts.map +1 -1
  164. package/lib/batchTracker.js +2 -2
  165. package/lib/batchTracker.js.map +1 -1
  166. package/lib/blobManager.d.ts +5 -2
  167. package/lib/blobManager.d.ts.map +1 -1
  168. package/lib/blobManager.js +53 -24
  169. package/lib/blobManager.js.map +1 -1
  170. package/lib/connectionTelemetry.d.ts +2 -2
  171. package/lib/connectionTelemetry.d.ts.map +1 -1
  172. package/lib/connectionTelemetry.js +8 -1
  173. package/lib/connectionTelemetry.js.map +1 -1
  174. package/lib/containerRuntime.d.ts +19 -7
  175. package/lib/containerRuntime.d.ts.map +1 -1
  176. package/lib/containerRuntime.js +101 -25
  177. package/lib/containerRuntime.js.map +1 -1
  178. package/lib/dataStore.d.ts +2 -2
  179. package/lib/dataStore.d.ts.map +1 -1
  180. package/lib/dataStore.js +1 -1
  181. package/lib/dataStore.js.map +1 -1
  182. package/lib/dataStoreContext.d.ts +3 -4
  183. package/lib/dataStoreContext.d.ts.map +1 -1
  184. package/lib/dataStoreContext.js +5 -5
  185. package/lib/dataStoreContext.js.map +1 -1
  186. package/lib/dataStoreContexts.d.ts +2 -1
  187. package/lib/dataStoreContexts.d.ts.map +1 -1
  188. package/lib/dataStoreContexts.js +2 -1
  189. package/lib/dataStoreContexts.js.map +1 -1
  190. package/lib/dataStores.d.ts +1 -1
  191. package/lib/dataStores.d.ts.map +1 -1
  192. package/lib/dataStores.js +2 -1
  193. package/lib/dataStores.js.map +1 -1
  194. package/lib/deltaScheduler.d.ts +2 -2
  195. package/lib/deltaScheduler.d.ts.map +1 -1
  196. package/lib/deltaScheduler.js +1 -1
  197. package/lib/deltaScheduler.js.map +1 -1
  198. package/lib/gc/garbageCollection.d.ts +2 -2
  199. package/lib/gc/garbageCollection.d.ts.map +1 -1
  200. package/lib/gc/garbageCollection.js +2 -1
  201. package/lib/gc/garbageCollection.js.map +1 -1
  202. package/lib/gc/gcDefinitions.d.ts +3 -4
  203. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  204. package/lib/gc/gcDefinitions.js.map +1 -1
  205. package/lib/gc/gcTelemetry.d.ts +5 -5
  206. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  207. package/lib/gc/gcTelemetry.js +1 -1
  208. package/lib/gc/gcTelemetry.js.map +1 -1
  209. package/lib/id-compressor/idCompressor.d.ts +2 -2
  210. package/lib/id-compressor/idCompressor.d.ts.map +1 -1
  211. package/lib/id-compressor/idCompressor.js.map +1 -1
  212. package/lib/id-compressor/uuidUtilities.d.ts +0 -2
  213. package/lib/id-compressor/uuidUtilities.d.ts.map +1 -1
  214. package/lib/id-compressor/uuidUtilities.js +1 -3
  215. package/lib/id-compressor/uuidUtilities.js.map +1 -1
  216. package/lib/index.d.ts +1 -1
  217. package/lib/index.d.ts.map +1 -1
  218. package/lib/index.js.map +1 -1
  219. package/lib/metadata.d.ts +18 -0
  220. package/lib/metadata.d.ts.map +1 -0
  221. package/lib/metadata.js +6 -0
  222. package/lib/metadata.js.map +1 -0
  223. package/lib/opLifecycle/batchManager.d.ts +2 -1
  224. package/lib/opLifecycle/batchManager.d.ts.map +1 -1
  225. package/lib/opLifecycle/batchManager.js +5 -1
  226. package/lib/opLifecycle/batchManager.js.map +1 -1
  227. package/lib/opLifecycle/definitions.d.ts +13 -2
  228. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  229. package/lib/opLifecycle/definitions.js.map +1 -1
  230. package/lib/opLifecycle/index.d.ts +1 -1
  231. package/lib/opLifecycle/index.d.ts.map +1 -1
  232. package/lib/opLifecycle/index.js +1 -1
  233. package/lib/opLifecycle/index.js.map +1 -1
  234. package/lib/opLifecycle/opCompressor.d.ts +2 -2
  235. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  236. package/lib/opLifecycle/opCompressor.js +3 -6
  237. package/lib/opLifecycle/opCompressor.js.map +1 -1
  238. package/lib/opLifecycle/opDecompressor.d.ts +2 -2
  239. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  240. package/lib/opLifecycle/opDecompressor.js +14 -8
  241. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  242. package/lib/opLifecycle/opGroupingManager.d.ts +1 -1
  243. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
  244. package/lib/opLifecycle/opGroupingManager.js +6 -11
  245. package/lib/opLifecycle/opGroupingManager.js.map +1 -1
  246. package/lib/opLifecycle/opSplitter.d.ts +2 -2
  247. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  248. package/lib/opLifecycle/opSplitter.js +5 -3
  249. package/lib/opLifecycle/opSplitter.js.map +1 -1
  250. package/lib/opLifecycle/outbox.d.ts +35 -4
  251. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  252. package/lib/opLifecycle/outbox.js +133 -44
  253. package/lib/opLifecycle/outbox.js.map +1 -1
  254. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  255. package/lib/opLifecycle/remoteMessageProcessor.js +3 -1
  256. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  257. package/lib/packageVersion.d.ts +1 -1
  258. package/lib/packageVersion.js +1 -1
  259. package/lib/packageVersion.js.map +1 -1
  260. package/lib/pendingStateManager.d.ts +24 -15
  261. package/lib/pendingStateManager.d.ts.map +1 -1
  262. package/lib/pendingStateManager.js +67 -72
  263. package/lib/pendingStateManager.js.map +1 -1
  264. package/lib/scheduleManager.d.ts +2 -2
  265. package/lib/scheduleManager.d.ts.map +1 -1
  266. package/lib/scheduleManager.js +8 -2
  267. package/lib/scheduleManager.js.map +1 -1
  268. package/lib/summary/index.d.ts +2 -2
  269. package/lib/summary/index.d.ts.map +1 -1
  270. package/lib/summary/index.js +1 -1
  271. package/lib/summary/index.js.map +1 -1
  272. package/lib/summary/orderedClientElection.d.ts +4 -3
  273. package/lib/summary/orderedClientElection.d.ts.map +1 -1
  274. package/lib/summary/orderedClientElection.js +3 -18
  275. package/lib/summary/orderedClientElection.js.map +1 -1
  276. package/lib/summary/runningSummarizer.d.ts +4 -3
  277. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  278. package/lib/summary/runningSummarizer.js +5 -6
  279. package/lib/summary/runningSummarizer.js.map +1 -1
  280. package/lib/summary/summarizer.d.ts +2 -3
  281. package/lib/summary/summarizer.d.ts.map +1 -1
  282. package/lib/summary/summarizer.js +2 -3
  283. package/lib/summary/summarizer.js.map +1 -1
  284. package/lib/summary/summarizerClientElection.d.ts +3 -2
  285. package/lib/summary/summarizerClientElection.d.ts.map +1 -1
  286. package/lib/summary/summarizerClientElection.js.map +1 -1
  287. package/lib/summary/summarizerHeuristics.d.ts +2 -2
  288. package/lib/summary/summarizerHeuristics.d.ts.map +1 -1
  289. package/lib/summary/summarizerHeuristics.js.map +1 -1
  290. package/lib/summary/summarizerNode/index.d.ts +1 -1
  291. package/lib/summary/summarizerNode/index.d.ts.map +1 -1
  292. package/lib/summary/summarizerNode/index.js.map +1 -1
  293. package/lib/summary/summarizerNode/summarizerNode.d.ts +41 -14
  294. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  295. package/lib/summary/summarizerNode/summarizerNode.js +91 -23
  296. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  297. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +24 -4
  298. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  299. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  300. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +23 -8
  301. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  302. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +59 -22
  303. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  304. package/lib/summary/summarizerTypes.d.ts +16 -9
  305. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  306. package/lib/summary/summarizerTypes.js.map +1 -1
  307. package/lib/summary/summaryCollection.d.ts +4 -2
  308. package/lib/summary/summaryCollection.d.ts.map +1 -1
  309. package/lib/summary/summaryCollection.js +4 -0
  310. package/lib/summary/summaryCollection.js.map +1 -1
  311. package/lib/summary/summaryFormat.d.ts +1 -0
  312. package/lib/summary/summaryFormat.d.ts.map +1 -1
  313. package/lib/summary/summaryFormat.js +2 -1
  314. package/lib/summary/summaryFormat.js.map +1 -1
  315. package/lib/summary/summaryGenerator.d.ts +14 -5
  316. package/lib/summary/summaryGenerator.d.ts.map +1 -1
  317. package/lib/summary/summaryGenerator.js +21 -8
  318. package/lib/summary/summaryGenerator.js.map +1 -1
  319. package/lib/summary/summaryManager.d.ts +4 -2
  320. package/lib/summary/summaryManager.d.ts.map +1 -1
  321. package/lib/summary/summaryManager.js +1 -1
  322. package/lib/summary/summaryManager.js.map +1 -1
  323. package/package.json +25 -41
  324. package/src/batchTracker.ts +5 -6
  325. package/src/blobManager.ts +70 -29
  326. package/src/connectionTelemetry.ts +14 -6
  327. package/src/containerRuntime.ts +124 -38
  328. package/src/dataStore.ts +3 -4
  329. package/src/dataStoreContext.ts +12 -9
  330. package/src/dataStoreContexts.ts +6 -8
  331. package/src/dataStores.ts +8 -3
  332. package/src/deltaScheduler.ts +2 -3
  333. package/src/gc/garbageCollection.ts +7 -6
  334. package/src/gc/gcDefinitions.ts +3 -4
  335. package/src/gc/gcTelemetry.ts +9 -5
  336. package/src/id-compressor/idCompressor.ts +2 -2
  337. package/src/id-compressor/uuidUtilities.ts +1 -4
  338. package/src/index.ts +2 -0
  339. package/src/metadata.ts +19 -0
  340. package/src/opLifecycle/README.md +20 -0
  341. package/src/opLifecycle/batchManager.ts +9 -1
  342. package/src/opLifecycle/definitions.ts +13 -2
  343. package/src/opLifecycle/index.ts +1 -1
  344. package/src/opLifecycle/opCompressor.ts +4 -8
  345. package/src/opLifecycle/opDecompressor.ts +43 -16
  346. package/src/opLifecycle/opGroupingManager.ts +19 -13
  347. package/src/opLifecycle/opSplitter.ts +7 -6
  348. package/src/opLifecycle/outbox.ts +172 -57
  349. package/src/opLifecycle/remoteMessageProcessor.ts +5 -1
  350. package/src/packageVersion.ts +1 -1
  351. package/src/pendingStateManager.ts +113 -129
  352. package/src/scheduleManager.ts +18 -10
  353. package/src/summary/index.ts +3 -1
  354. package/src/summary/orderedClientElection.ts +7 -20
  355. package/src/summary/runningSummarizer.ts +11 -10
  356. package/src/summary/summarizer.ts +8 -8
  357. package/src/summary/summarizerClientElection.ts +3 -2
  358. package/src/summary/summarizerHeuristics.ts +2 -2
  359. package/src/summary/summarizerNode/index.ts +1 -0
  360. package/src/summary/summarizerNode/summarizerNode.ts +121 -38
  361. package/src/summary/summarizerNode/summarizerNodeUtils.ts +27 -4
  362. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +73 -27
  363. package/src/summary/summarizerTypes.ts +19 -14
  364. package/src/summary/summaryCollection.ts +10 -4
  365. package/src/summary/summaryFormat.ts +5 -1
  366. package/src/summary/summaryGenerator.ts +38 -11
  367. package/src/summary/summaryManager.ts +9 -9
@@ -4,19 +4,20 @@
4
4
  */
5
5
 
6
6
  import { IDisposable } from "@fluidframework/common-definitions";
7
- import { assert, Lazy } from "@fluidframework/common-utils";
7
+ import { assert } from "@fluidframework/common-utils";
8
8
  import { ICriticalContainerError } from "@fluidframework/container-definitions";
9
9
  import { DataProcessingError } from "@fluidframework/container-utils";
10
+ import { Lazy } from "@fluidframework/core-utils";
10
11
  import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
11
12
  import Deque from "double-ended-queue";
12
13
  import { ContainerMessageType } from "./containerRuntime";
13
14
  import { pkgVersion } from "./packageVersion";
15
+ import { IBatchMetadata } from "./metadata";
14
16
 
15
17
  /**
16
- * This represents a message that has been submitted and is added to the pending queue when `submit` is called on the
17
- * ContainerRuntime. This message has either not been ack'd by the server or has not been submitted to the server yet.
18
+ * ! TODO: Remove this interface in "2.0.0-internal.7.0.0" once we only read IPendingMessageNew
18
19
  */
19
- export interface IPendingMessage {
20
+ export interface IPendingMessageOld {
20
21
  type: "message";
21
22
  messageType: ContainerMessageType;
22
23
  clientSequenceNumber: number;
@@ -27,16 +28,22 @@ export interface IPendingMessage {
27
28
  }
28
29
 
29
30
  /**
30
- * This represents an explicit flush call and is added to the pending queue when flush is called on the ContainerRuntime
31
- * to flush pending messages.
32
- * ! TODO: Remove in "2.0.0-internal.5.0.0" AB#2496
31
+ * This represents a message that has been submitted and is added to the pending queue when `submit` is called on the
32
+ * ContainerRuntime. This message has either not been ack'd by the server or has not been submitted to the server yet.
33
33
  */
34
- export interface IPendingFlush {
35
- type: "flush";
34
+ export interface IPendingMessageNew {
35
+ type: "message";
36
+ clientSequenceNumber: number;
37
+ referenceSequenceNumber: number;
38
+ content: string;
39
+ localOpMetadata: unknown;
40
+ opMetadata: Record<string, unknown> | undefined;
36
41
  }
37
42
 
38
- /** ! TODO: Remove in "2.0.0-internal.5.0.0" AB#2496 */
39
- export type IPendingState = IPendingMessage | IPendingFlush;
43
+ /**
44
+ * ! TODO: Remove this type in "2.0.0-internal.7.0.0"
45
+ */
46
+ export type IPendingState = IPendingMessageOld | IPendingMessageNew;
40
47
 
41
48
  export interface IPendingLocalState {
42
49
  /**
@@ -45,19 +52,19 @@ export interface IPendingLocalState {
45
52
  pendingStates: IPendingState[];
46
53
  }
47
54
 
55
+ export interface IPendingBatchMessage {
56
+ content: string;
57
+ localOpMetadata: unknown;
58
+ opMetadata: Record<string, unknown> | undefined;
59
+ }
60
+
48
61
  export interface IRuntimeStateHandler {
49
62
  connected(): boolean;
50
63
  clientId(): string | undefined;
51
64
  close(error?: ICriticalContainerError): void;
52
- applyStashedOp: (type: ContainerMessageType, content: unknown) => Promise<unknown>;
53
- reSubmit(
54
- type: ContainerMessageType,
55
- content: any,
56
- localOpMetadata: unknown,
57
- opMetadata: Record<string, unknown> | undefined,
58
- ): void;
59
- rollback(type: ContainerMessageType, content: any, localOpMetadata: unknown): void;
60
- orderSequentially(callback: () => void): void;
65
+ applyStashedOp(content: string): Promise<unknown>;
66
+ reSubmit(message: IPendingBatchMessage): void;
67
+ reSubmitBatch(batch: IPendingBatchMessage[]): void;
61
68
  }
62
69
 
63
70
  /**
@@ -70,8 +77,8 @@ export interface IRuntimeStateHandler {
70
77
  * It verifies that all the ops are acked, are received in the right order and batch information is correct.
71
78
  */
72
79
  export class PendingStateManager implements IDisposable {
73
- private readonly pendingMessages = new Deque<IPendingMessage>();
74
- private readonly initialMessages = new Deque<IPendingMessage>();
80
+ private readonly pendingMessages = new Deque<IPendingMessageNew>();
81
+ private readonly initialMessages = new Deque<IPendingMessageNew>();
75
82
  private readonly disposeOnce = new Lazy<void>(() => {
76
83
  this.initialMessages.clear();
77
84
  this.pendingMessages.clear();
@@ -105,22 +112,23 @@ export class PendingStateManager implements IDisposable {
105
112
  );
106
113
  if (!this.pendingMessages.isEmpty()) {
107
114
  return {
108
- // delete localOpMetadata since it may not be serializable
109
- // and will be regenerated by applyStashedOp()
110
- pendingStates: this.pendingMessages.toArray().map((message) =>
115
+ 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);
111
118
  // IdAllocations need their localOpMetadata stashed in the contents
112
119
  // of the op to correctly resume the session when processing stashed ops
113
- message.messageType === ContainerMessageType.IdAllocation
114
- ? {
115
- ...message,
116
- content: {
117
- ...message.content,
118
- stashedState: message.localOpMetadata,
119
- },
120
- localOpMetadata: undefined,
121
- }
122
- : { ...message, localOpMetadata: undefined },
123
- ),
120
+ if (content.type === ContainerMessageType.IdAllocation) {
121
+ content.contents.stashedState = message.localOpMetadata;
122
+ }
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
+ };
131
+ }),
124
132
  };
125
133
  }
126
134
  }
@@ -130,34 +138,27 @@ export class PendingStateManager implements IDisposable {
130
138
  initialLocalState: IPendingLocalState | undefined,
131
139
  ) {
132
140
  /**
133
- * Convert old local state format to the new format
134
- * The old format contained "flush" messages as the indicator of batch ends
135
- * The new format instead uses batch metadata on the last message to indicate batch ends
136
- * ! TODO: Remove this conversion in "2.0.0-internal.5.0.0" as version from "2.0.0-internal.4.0.0" will be new format
137
- * AB#2496 tracks removal
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"
138
143
  */
139
144
  if (initialLocalState?.pendingStates) {
140
- const pendingStates = initialLocalState?.pendingStates;
141
- let currentlyBatching = false;
142
- for (let i = 0; i < pendingStates.length; i++) {
143
- const initialState = pendingStates[i];
144
-
145
- // Skip over "flush" messages
146
- if (initialState.type === "message") {
147
- if (initialState.opMetadata?.batch) {
148
- currentlyBatching = true;
149
- } else if (initialState.opMetadata?.batch === false) {
150
- currentlyBatching = false;
151
- } else if (
152
- // End of batch if we are currently batching and this is last message or next message is flush
153
- currentlyBatching &&
154
- (i === pendingStates.length - 1 || pendingStates[i + 1].type === "flush")
155
- ) {
156
- currentlyBatching = false;
157
- initialState.opMetadata = { ...initialState.opMetadata, batch: false };
158
- }
159
- this.initialMessages.push(initialState);
145
+ for (const initialState of initialLocalState.pendingStates) {
146
+ let messageContent = initialState.content;
147
+ if (
148
+ (initialState as IPendingMessageOld).messageType !== undefined &&
149
+ typeof initialState.content !== "string"
150
+ ) {
151
+ // Convert IPendingMessageOld to IPendingMessageNew
152
+ messageContent = JSON.stringify({
153
+ type: (initialState as IPendingMessageOld).messageType,
154
+ contents: initialState.content,
155
+ });
160
156
  }
157
+ // Note: this object may contain "messageType" prop, but it should not be easily accesible due to interface being used
158
+ this.initialMessages.push({
159
+ ...initialState,
160
+ content: messageContent,
161
+ });
161
162
  }
162
163
  }
163
164
  }
@@ -175,15 +176,13 @@ export class PendingStateManager implements IDisposable {
175
176
  * @param localOpMetadata - The local metadata associated with the message.
176
177
  */
177
178
  public onSubmitMessage(
178
- type: ContainerMessageType,
179
+ content: string,
179
180
  referenceSequenceNumber: number,
180
- content: any,
181
181
  localOpMetadata: unknown,
182
182
  opMetadata: Record<string, unknown> | undefined,
183
183
  ) {
184
- const pendingMessage: IPendingMessage = {
184
+ const pendingMessage: IPendingMessageNew = {
185
185
  type: "message",
186
- messageType: type,
187
186
  clientSequenceNumber: -1, // dummy value (not to be used anywhere)
188
187
  referenceSequenceNumber,
189
188
  content,
@@ -212,17 +211,12 @@ export class PendingStateManager implements IDisposable {
212
211
  }
213
212
  }
214
213
 
215
- // applyStashedOp will cause the DDS to behave as if it has sent the op but not actually send it
216
- const localOpMetadata = await this.stateHandler.applyStashedOp(
217
- nextMessage.messageType,
218
- nextMessage.content,
219
- );
220
- nextMessage.localOpMetadata = localOpMetadata;
221
-
222
- if (nextMessage.messageType === ContainerMessageType.IdAllocation) {
223
- // Remove the stashed state from the op
224
- // so that it doesn't go over the wire
225
- delete nextMessage.content.stashedState;
214
+ try {
215
+ // applyStashedOp will cause the DDS to behave as if it has sent the op but not actually send it
216
+ const localOpMetadata = await this.stateHandler.applyStashedOp(nextMessage.content);
217
+ nextMessage.localOpMetadata = localOpMetadata;
218
+ } catch (error) {
219
+ throw DataProcessingError.wrapIfUnrecognized(error, "applyStashedOp", nextMessage);
226
220
  }
227
221
 
228
222
  // then we push onto pendingMessages which will cause PendingStateManager to resubmit when we connect
@@ -248,32 +242,17 @@ export class PendingStateManager implements IDisposable {
248
242
  );
249
243
  this.pendingMessages.shift();
250
244
 
251
- if (pendingMessage.messageType !== message.type) {
252
- // Close the container because this could indicate data corruption.
253
- this.stateHandler.close(
254
- DataProcessingError.create(
255
- "pending local message type mismatch",
256
- "unexpectedAckReceived",
257
- message,
258
- {
259
- expectedMessageType: pendingMessage.messageType,
260
- },
261
- ),
262
- );
263
- return;
264
- }
265
-
266
- const pendingMessageContent = JSON.stringify(pendingMessage.content);
267
- const messageContent = JSON.stringify(message.contents);
268
-
245
+ const messageContent = JSON.stringify({ type: message.type, contents: message.contents });
269
246
  // Stringified content does not match
270
- if (pendingMessageContent !== messageContent) {
271
- // Close the container because this could indicate data corruption.
247
+ if (pendingMessage.content !== messageContent) {
272
248
  this.stateHandler.close(
273
249
  DataProcessingError.create(
274
250
  "pending local message content mismatch",
275
251
  "unexpectedAckReceived",
276
252
  message,
253
+ {
254
+ expectedMessageType: JSON.parse(pendingMessage.content).type,
255
+ },
277
256
  ),
278
257
  );
279
258
  return;
@@ -291,7 +270,7 @@ export class PendingStateManager implements IDisposable {
291
270
  */
292
271
  private maybeProcessBatchBegin(message: ISequencedDocumentMessage) {
293
272
  // This message is the first in a batch if the "batch" property on the metadata is set to true
294
- if (message.metadata?.batch) {
273
+ if ((message.metadata as IBatchMetadata | undefined)?.batch) {
295
274
  // We should not already be processing a batch and there should be no pending batch begin message.
296
275
  assert(
297
276
  !this.isProcessingBatch && this.pendingBatchBeginMessage === undefined,
@@ -319,10 +298,12 @@ export class PendingStateManager implements IDisposable {
319
298
  0x16d /* "There is no pending batch begin message" */,
320
299
  );
321
300
 
322
- const batchEndMetadata = message.metadata?.batch;
301
+ const batchEndMetadata = (message.metadata as IBatchMetadata | undefined)?.batch;
323
302
  if (this.pendingMessages.isEmpty() || batchEndMetadata === false) {
324
303
  // Get the batch begin metadata from the first message in the batch.
325
- const batchBeginMetadata = this.pendingBatchBeginMessage.metadata?.batch;
304
+ const batchBeginMetadata = (
305
+ this.pendingBatchBeginMessage.metadata as IBatchMetadata | undefined
306
+ )?.batch;
326
307
 
327
308
  // There could be just a single message in the batch. If so, it should not have any batch metadata. If there
328
309
  // are multiple messages in the batch, verify that we got the correct batch begin and end metadata.
@@ -340,7 +321,10 @@ export class PendingStateManager implements IDisposable {
340
321
  message,
341
322
  {
342
323
  runtimeVersion: pkgVersion,
343
- batchClientId: this.pendingBatchBeginMessage.clientId,
324
+ batchClientId:
325
+ this.pendingBatchBeginMessage.clientId === null
326
+ ? "null"
327
+ : this.pendingBatchBeginMessage.clientId,
344
328
  clientId: this.stateHandler.clientId(),
345
329
  hasBatchStart: batchBeginMetadata === true,
346
330
  hasBatchEnd: batchEndMetadata === false,
@@ -408,37 +392,37 @@ export class PendingStateManager implements IDisposable {
408
392
  0x554 /* Last pending message cannot be a batch begin */,
409
393
  );
410
394
 
411
- this.stateHandler.orderSequentially(() => {
412
- while (pendingMessagesCount >= 0) {
413
- // check is >= because batch end may be last pending message
414
- this.stateHandler.reSubmit(
415
- pendingMessage.messageType,
416
- pendingMessage.content,
417
- pendingMessage.localOpMetadata,
418
- pendingMessage.opMetadata,
419
- );
420
-
421
- if (pendingMessage.opMetadata?.batch === false) {
422
- break;
423
- }
424
- assert(pendingMessagesCount > 0, 0x555 /* No batch end found */);
425
-
426
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
427
- pendingMessage = this.pendingMessages.shift()!;
428
- pendingMessagesCount--;
429
- assert(
430
- pendingMessage.opMetadata?.batch !== true,
431
- 0x556 /* Batch start needs a corresponding batch end */,
432
- );
395
+ const batch: IPendingBatchMessage[] = [];
396
+
397
+ // check is >= because batch end may be last pending message
398
+ while (pendingMessagesCount >= 0) {
399
+ batch.push({
400
+ content: pendingMessage.content,
401
+ localOpMetadata: pendingMessage.localOpMetadata,
402
+ opMetadata: pendingMessage.opMetadata,
403
+ });
404
+
405
+ if (pendingMessage.opMetadata?.batch === false) {
406
+ break;
433
407
  }
434
- });
408
+ assert(pendingMessagesCount > 0, 0x555 /* No batch end found */);
409
+
410
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
411
+ pendingMessage = this.pendingMessages.shift()!;
412
+ pendingMessagesCount--;
413
+ assert(
414
+ pendingMessage.opMetadata?.batch !== true,
415
+ 0x556 /* Batch start needs a corresponding batch end */,
416
+ );
417
+ }
418
+
419
+ this.stateHandler.reSubmitBatch(batch);
435
420
  } else {
436
- this.stateHandler.reSubmit(
437
- pendingMessage.messageType,
438
- pendingMessage.content,
439
- pendingMessage.localOpMetadata,
440
- pendingMessage.opMetadata,
441
- );
421
+ this.stateHandler.reSubmit({
422
+ content: pendingMessage.content,
423
+ localOpMetadata: pendingMessage.localOpMetadata,
424
+ opMetadata: pendingMessage.opMetadata,
425
+ });
442
426
  }
443
427
  }
444
428
  }
@@ -5,8 +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 { ITelemetryLogger } from "@fluidframework/common-definitions";
9
- import { ChildLogger } from "@fluidframework/telemetry-utils";
8
+ import { ITelemetryLoggerExt, ChildLogger } from "@fluidframework/telemetry-utils";
10
9
  import { assert, performance } from "@fluidframework/common-utils";
11
10
  import { isRuntimeMessage } from "@fluidframework/driver-utils";
12
11
  import {
@@ -16,6 +15,7 @@ import {
16
15
  } from "@fluidframework/container-utils";
17
16
  import { DeltaScheduler } from "./deltaScheduler";
18
17
  import { pkgVersion } from "./packageVersion";
18
+ import { IBatchMetadata } from "./metadata";
19
19
 
20
20
  type IRuntimeMessageMetadata =
21
21
  | undefined
@@ -41,7 +41,7 @@ export class ScheduleManager {
41
41
  private readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
42
42
  private readonly emitter: EventEmitter,
43
43
  readonly getClientId: () => string | undefined,
44
- private readonly logger: ITelemetryLogger,
44
+ private readonly logger: ITelemetryLoggerExt,
45
45
  ) {
46
46
  this.deltaScheduler = new DeltaScheduler(
47
47
  this.deltaManager,
@@ -62,7 +62,9 @@ export class ScheduleManager {
62
62
  this.deltaScheduler.batchBegin(message);
63
63
 
64
64
  const batch = (message?.metadata as IRuntimeMessageMetadata)?.batch;
65
- this.batchClientId = batch ? message.clientId : undefined;
65
+ // TODO: Verify whether this should be able to handle server-generated ops (with null clientId)
66
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
67
+ this.batchClientId = batch ? (message.clientId as string) : undefined;
66
68
  }
67
69
  }
68
70
 
@@ -106,7 +108,7 @@ class ScheduleManagerCore {
106
108
  constructor(
107
109
  private readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
108
110
  private readonly getClientId: () => string | undefined,
109
- private readonly logger: ITelemetryLogger,
111
+ private readonly logger: ITelemetryLoggerExt,
110
112
  ) {
111
113
  // Listen for delta manager sends and add batch metadata to messages
112
114
  this.deltaManager.on("prepareSend", (messages: IDocumentMessage[]) => {
@@ -128,7 +130,9 @@ class ScheduleManagerCore {
128
130
 
129
131
  // Set the batch flag to false on the last message to indicate the end of the send batch
130
132
  const lastMessage = messages[messages.length - 1];
131
- lastMessage.metadata = { ...lastMessage.metadata, batch: false };
133
+ // TODO: It's not clear if this shallow clone is required, as opposed to just setting "batch" to false.
134
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
135
+ lastMessage.metadata = { ...(lastMessage.metadata as any), batch: false };
132
136
  });
133
137
 
134
138
  // Listen for updates and peek at the inbound
@@ -186,7 +190,7 @@ class ScheduleManagerCore {
186
190
  {
187
191
  type: message.type,
188
192
  contentType: typeof message.contents,
189
- batch: message.metadata?.batch,
193
+ batch: (message.metadata as IBatchMetadata | undefined)?.batch,
190
194
  compression: message.compression,
191
195
  pauseSeqNum: this.pauseSequenceNumber,
192
196
  },
@@ -264,7 +268,8 @@ class ScheduleManagerCore {
264
268
  message,
265
269
  {
266
270
  runtimeVersion: pkgVersion,
267
- batchClientId: this.currentBatchClientId,
271
+ batchClientId:
272
+ this.currentBatchClientId === null ? "null" : this.currentBatchClientId,
268
273
  pauseSequenceNumber: this.pauseSequenceNumber,
269
274
  localBatch: this.currentBatchClientId === this.getClientId(),
270
275
  messageType: message.type,
@@ -298,7 +303,8 @@ class ScheduleManagerCore {
298
303
  ) {
299
304
  throw new DataCorruptionError("OpBatchIncomplete", {
300
305
  runtimeVersion: pkgVersion,
301
- batchClientId: this.currentBatchClientId,
306
+ batchClientId:
307
+ this.currentBatchClientId === null ? "null" : this.currentBatchClientId,
302
308
  pauseSequenceNumber: this.pauseSequenceNumber,
303
309
  localBatch: this.currentBatchClientId === this.getClientId(),
304
310
  localMessage: message.clientId === this.getClientId(),
@@ -322,7 +328,9 @@ class ScheduleManagerCore {
322
328
  0x29f /* "we should be processing ops when there is no active batch" */,
323
329
  );
324
330
  this.pauseSequenceNumber = message.sequenceNumber;
325
- this.currentBatchClientId = message.clientId;
331
+ // TODO: Verify whether this should be able to handle server-generated ops (with null clientId)
332
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
333
+ this.currentBatchClientId = message.clientId as string;
326
334
  // Start of the batch
327
335
  // Only pause processing if queue has no other ops!
328
336
  // If there are any other ops in the queue, processing will be stopped when they are processed!
@@ -62,6 +62,8 @@ export {
62
62
  ISummarizingWarning,
63
63
  IUploadSummaryResult,
64
64
  SummarizeResultPart,
65
+ SubmitSummaryFailureData,
66
+ SummaryStage,
65
67
  } from "./summarizerTypes";
66
68
  export {
67
69
  IAckedSummary,
@@ -96,7 +98,7 @@ export {
96
98
  wrapSummaryInChannelsTree,
97
99
  idCompressorBlobName,
98
100
  } from "./summaryFormat";
99
- export { getFailMessage, SummarizeReason } from "./summaryGenerator";
101
+ export { getFailMessage, RetriableSummaryError, SummarizeReason } from "./summaryGenerator";
100
102
  export {
101
103
  IConnectedEvents,
102
104
  IConnectedState,
@@ -3,12 +3,12 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  /* eslint-disable @rushstack/no-new-null */
6
- import { IEvent, IEventProvider, ITelemetryLogger } from "@fluidframework/common-definitions";
6
+ import { IEvent, IEventProvider } from "@fluidframework/common-definitions";
7
+ import { ITelemetryLoggerExt, ChildLogger } from "@fluidframework/telemetry-utils";
7
8
  import { assert, TypedEventEmitter } from "@fluidframework/common-utils";
8
9
  import { IDeltaManager } from "@fluidframework/container-definitions";
9
10
  import { UsageError } from "@fluidframework/container-utils";
10
11
  import { IClient, IQuorumClients, ISequencedClient } from "@fluidframework/protocol-definitions";
11
- import { ChildLogger } from "@fluidframework/telemetry-utils";
12
12
  import { summarizerClientType } from "./summarizerClientElection";
13
13
 
14
14
  // helper types for recursive readonly.
@@ -91,7 +91,7 @@ export class OrderedClientCollection
91
91
  };
92
92
  /** Pointer to end of linked list, for optimized client adds. */
93
93
  private _youngestClient: LinkNode = this.rootNode;
94
- private readonly logger: ITelemetryLogger;
94
+ private readonly logger: ITelemetryLoggerExt;
95
95
 
96
96
  public get count() {
97
97
  return this.clientMap.size;
@@ -101,7 +101,7 @@ export class OrderedClientCollection
101
101
  }
102
102
 
103
103
  constructor(
104
- logger: ITelemetryLogger,
104
+ logger: ITelemetryLoggerExt,
105
105
  deltaManager: Pick<IDeltaManager<unknown, unknown>, "lastSequenceNumber">,
106
106
  quorum: Pick<IQuorumClients, "getMembers" | "on">,
107
107
  ) {
@@ -336,7 +336,7 @@ export class OrderedClientElection
336
336
  }
337
337
 
338
338
  constructor(
339
- private readonly logger: ITelemetryLogger,
339
+ private readonly logger: ITelemetryLoggerExt,
340
340
  private readonly orderedClientCollection: IOrderedClientCollection,
341
341
  /** Serialized state from summary or current sequence number at time of load if new. */
342
342
  initialState: ISerializedElection | number,
@@ -372,7 +372,7 @@ export class OrderedClientElection
372
372
  // Override the initially elected client with the initial state.
373
373
  if (initialClient?.clientId !== initialState.electedClientId) {
374
374
  // Cannot find initially elected client, so elect undefined.
375
- logger.sendErrorEvent({
375
+ this.logger.sendErrorEvent({
376
376
  eventName: "InitialElectedClientNotFound",
377
377
  electionSequenceNumber: initialState.electionSequenceNumber,
378
378
  expectedClientId: initialState.electedClientId,
@@ -382,7 +382,7 @@ export class OrderedClientElection
382
382
  } else if (initialClient !== undefined && !isEligibleFn(initialClient)) {
383
383
  // Initially elected client is ineligible, so elect next eligible client.
384
384
  initialClient = initialParent = this.findFirstEligibleParent(initialParent);
385
- logger.sendErrorEvent({
385
+ this.logger.sendErrorEvent({
386
386
  eventName: "InitialElectedClientIneligible",
387
387
  electionSequenceNumber: initialState.electionSequenceNumber,
388
388
  expectedClientId: initialState.electedClientId,
@@ -416,13 +416,6 @@ export class OrderedClientElection
416
416
  change = true;
417
417
  }
418
418
  if (change) {
419
- this.logger.sendTelemetryEvent({
420
- eventName: "SummarizerClientElected",
421
- electedClientId: this._electedClient?.clientId,
422
- electedParentId: this._electedParent?.clientId,
423
- electionSequenceNumber: sequenceNumber,
424
- isSummarizerClient,
425
- });
426
419
  this.emit("election", client, sequenceNumber, prevClient);
427
420
  }
428
421
  }
@@ -430,12 +423,6 @@ export class OrderedClientElection
430
423
  private tryElectingParent(client: ILinkedClient | undefined, sequenceNumber: number): void {
431
424
  if (this._electedParent !== client) {
432
425
  this._electedParent = client;
433
- this.logger.sendTelemetryEvent({
434
- eventName: "SummarizerParentElected",
435
- electedClientId: this._electedClient?.clientId,
436
- electedParentId: this._electedParent?.clientId,
437
- electionSequenceNumber: sequenceNumber,
438
- });
439
426
  this.emit("election", this._electedClient, sequenceNumber, this._electedClient);
440
427
  }
441
428
  }
@@ -3,18 +3,19 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { IDisposable, ITelemetryLogger } from "@fluidframework/common-definitions";
7
- import { assert, delay, Deferred, PromiseTimer } from "@fluidframework/common-utils";
8
- import { UsageError } from "@fluidframework/container-utils";
9
- import { DriverErrorType } from "@fluidframework/driver-definitions";
10
- import { isRuntimeMessage } from "@fluidframework/driver-utils";
11
- import { ISequencedDocumentMessage, MessageType } from "@fluidframework/protocol-definitions";
6
+ import { IDisposable } from "@fluidframework/core-interfaces";
12
7
  import {
8
+ ITelemetryLoggerExt,
13
9
  ChildLogger,
14
10
  isFluidError,
15
11
  loggerToMonitoringContext,
16
12
  MonitoringContext,
17
13
  } from "@fluidframework/telemetry-utils";
14
+ import { assert, delay, Deferred, PromiseTimer } from "@fluidframework/common-utils";
15
+ import { UsageError } from "@fluidframework/container-utils";
16
+ import { DriverErrorType } from "@fluidframework/driver-definitions";
17
+ import { isRuntimeMessage } from "@fluidframework/driver-utils";
18
+ import { ISequencedDocumentMessage, MessageType } from "@fluidframework/protocol-definitions";
18
19
  import { ISummaryConfiguration } from "../containerRuntime";
19
20
  import { opSize } from "../opProperties";
20
21
  import { SummarizeHeuristicRunner } from "./summarizerHeuristics";
@@ -56,7 +57,7 @@ const defaultNumberSummarizationAttempts = 2; // only up to 2 attempts
56
57
  */
57
58
  export class RunningSummarizer implements IDisposable {
58
59
  public static async start(
59
- logger: ITelemetryLogger,
60
+ logger: ITelemetryLoggerExt,
60
61
  summaryWatcher: IClientSummaryWatcher,
61
62
  configuration: ISummaryConfiguration,
62
63
  submitSummaryCallback: (options: ISubmitSummaryOptions) => Promise<SubmitSummaryResult>,
@@ -149,7 +150,7 @@ export class RunningSummarizer implements IDisposable {
149
150
  private readonly runtimeListener;
150
151
 
151
152
  private constructor(
152
- baseLogger: ITelemetryLogger,
153
+ baseLogger: ITelemetryLoggerExt,
153
154
  private readonly summaryWatcher: IClientSummaryWatcher,
154
155
  private readonly configuration: ISummaryConfiguration,
155
156
  private readonly submitSummaryCallback: (
@@ -252,7 +253,7 @@ export class RunningSummarizer implements IDisposable {
252
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)
253
254
  // Tracked by AB#3883
254
255
  this.runtime.deltaManager.on("op", this.deltaManagerListener);
255
- this.runtime.on?.("op", this.runtimeListener);
256
+ this.runtime.on("op", this.runtimeListener);
256
257
  }
257
258
 
258
259
  private async handleSummaryAck(): Promise<number> {
@@ -347,7 +348,7 @@ export class RunningSummarizer implements IDisposable {
347
348
 
348
349
  public dispose(): void {
349
350
  this.runtime.deltaManager.off("op", this.deltaManagerListener);
350
- this.runtime.off?.("op", this.runtimeListener);
351
+ this.runtime.off("op", this.runtimeListener);
351
352
  this.summaryWatcher.dispose();
352
353
  this.heuristicRunner?.dispose();
353
354
  this.heuristicRunner = undefined;