@fluidframework/container-runtime 2.0.0-dev-rc.5.0.0.263932 → 2.0.0-dev-rc.5.0.0.267932

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. package/api-report/container-runtime.api.md +43 -53
  2. package/dist/batchTracker.js.map +1 -1
  3. package/dist/blobManager.d.ts +4 -4
  4. package/dist/blobManager.d.ts.map +1 -1
  5. package/dist/blobManager.js +1 -1
  6. package/dist/blobManager.js.map +1 -1
  7. package/dist/channelCollection.d.ts +3 -3
  8. package/dist/channelCollection.d.ts.map +1 -1
  9. package/dist/channelCollection.js +3 -3
  10. package/dist/channelCollection.js.map +1 -1
  11. package/dist/connectionTelemetry.d.ts +2 -1
  12. package/dist/connectionTelemetry.d.ts.map +1 -1
  13. package/dist/connectionTelemetry.js +14 -14
  14. package/dist/connectionTelemetry.js.map +1 -1
  15. package/dist/containerHandleContext.d.ts +2 -1
  16. package/dist/containerHandleContext.d.ts.map +1 -1
  17. package/dist/containerHandleContext.js.map +1 -1
  18. package/dist/containerRuntime.d.ts +12 -19
  19. package/dist/containerRuntime.d.ts.map +1 -1
  20. package/dist/containerRuntime.js +74 -120
  21. package/dist/containerRuntime.js.map +1 -1
  22. package/dist/dataStore.d.ts.map +1 -1
  23. package/dist/dataStore.js.map +1 -1
  24. package/dist/dataStoreContext.d.ts +7 -8
  25. package/dist/dataStoreContext.d.ts.map +1 -1
  26. package/dist/dataStoreContext.js +3 -3
  27. package/dist/dataStoreContext.js.map +1 -1
  28. package/dist/dataStoreContexts.js.map +1 -1
  29. package/dist/dataStoreRegistry.js.map +1 -1
  30. package/dist/deltaManagerProxies.d.ts +4 -3
  31. package/dist/deltaManagerProxies.d.ts.map +1 -1
  32. package/dist/deltaManagerProxies.js.map +1 -1
  33. package/dist/deltaScheduler.d.ts +2 -1
  34. package/dist/deltaScheduler.d.ts.map +1 -1
  35. package/dist/deltaScheduler.js.map +1 -1
  36. package/dist/gc/garbageCollection.d.ts +1 -3
  37. package/dist/gc/garbageCollection.d.ts.map +1 -1
  38. package/dist/gc/garbageCollection.js +18 -21
  39. package/dist/gc/garbageCollection.js.map +1 -1
  40. package/dist/gc/gcConfigs.d.ts.map +1 -1
  41. package/dist/gc/gcConfigs.js +11 -30
  42. package/dist/gc/gcConfigs.js.map +1 -1
  43. package/dist/gc/gcDefinitions.d.ts +3 -30
  44. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  45. package/dist/gc/gcDefinitions.js +1 -3
  46. package/dist/gc/gcDefinitions.js.map +1 -1
  47. package/dist/gc/gcHelpers.d.ts +2 -3
  48. package/dist/gc/gcHelpers.d.ts.map +1 -1
  49. package/dist/gc/gcHelpers.js.map +1 -1
  50. package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -1
  51. package/dist/gc/gcSummaryDefinitions.d.ts +1 -1
  52. package/dist/gc/gcSummaryDefinitions.d.ts.map +1 -1
  53. package/dist/gc/gcSummaryDefinitions.js.map +1 -1
  54. package/dist/gc/gcSummaryStateTracker.d.ts +2 -35
  55. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  56. package/dist/gc/gcSummaryStateTracker.js +9 -62
  57. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  58. package/dist/gc/gcTelemetry.d.ts +1 -1
  59. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  60. package/dist/gc/gcTelemetry.js +2 -2
  61. package/dist/gc/gcTelemetry.js.map +1 -1
  62. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  63. package/dist/gc/index.d.ts +1 -1
  64. package/dist/gc/index.d.ts.map +1 -1
  65. package/dist/gc/index.js +1 -2
  66. package/dist/gc/index.js.map +1 -1
  67. package/dist/index.d.ts +1 -1
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js.map +1 -1
  70. package/dist/legacy.d.ts +1 -1
  71. package/dist/messageTypes.d.ts +1 -1
  72. package/dist/messageTypes.d.ts.map +1 -1
  73. package/dist/messageTypes.js.map +1 -1
  74. package/dist/opLifecycle/batchManager.js.map +1 -1
  75. package/dist/opLifecycle/definitions.d.ts +2 -2
  76. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  77. package/dist/opLifecycle/definitions.js.map +1 -1
  78. package/dist/opLifecycle/opCompressor.d.ts +11 -1
  79. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  80. package/dist/opLifecycle/opCompressor.js +13 -2
  81. package/dist/opLifecycle/opCompressor.js.map +1 -1
  82. package/dist/opLifecycle/opDecompressor.d.ts +1 -1
  83. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  84. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  85. package/dist/opLifecycle/opGroupingManager.d.ts +10 -3
  86. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  87. package/dist/opLifecycle/opGroupingManager.js +7 -0
  88. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  89. package/dist/opLifecycle/opSplitter.d.ts +4 -2
  90. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  91. package/dist/opLifecycle/opSplitter.js +12 -7
  92. package/dist/opLifecycle/opSplitter.js.map +1 -1
  93. package/dist/opLifecycle/outbox.d.ts +10 -0
  94. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  95. package/dist/opLifecycle/outbox.js +12 -17
  96. package/dist/opLifecycle/outbox.js.map +1 -1
  97. package/dist/opLifecycle/remoteMessageProcessor.d.ts +1 -1
  98. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  99. package/dist/opLifecycle/remoteMessageProcessor.js +2 -2
  100. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  101. package/dist/opProperties.d.ts +1 -1
  102. package/dist/opProperties.d.ts.map +1 -1
  103. package/dist/opProperties.js.map +1 -1
  104. package/dist/packageVersion.d.ts +1 -1
  105. package/dist/packageVersion.js +1 -1
  106. package/dist/packageVersion.js.map +1 -1
  107. package/dist/pendingStateManager.js.map +1 -1
  108. package/dist/scheduleManager.d.ts +2 -1
  109. package/dist/scheduleManager.d.ts.map +1 -1
  110. package/dist/scheduleManager.js.map +1 -1
  111. package/dist/storageServiceWithAttachBlobs.js.map +1 -1
  112. package/dist/summary/documentSchema.js +1 -1
  113. package/dist/summary/documentSchema.js.map +1 -1
  114. package/dist/summary/index.d.ts +1 -1
  115. package/dist/summary/index.d.ts.map +1 -1
  116. package/dist/summary/index.js.map +1 -1
  117. package/dist/summary/orderedClientElection.d.ts +4 -2
  118. package/dist/summary/orderedClientElection.d.ts.map +1 -1
  119. package/dist/summary/orderedClientElection.js +35 -13
  120. package/dist/summary/orderedClientElection.js.map +1 -1
  121. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  122. package/dist/summary/runningSummarizer.d.ts +1 -6
  123. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  124. package/dist/summary/runningSummarizer.js +22 -108
  125. package/dist/summary/runningSummarizer.js.map +1 -1
  126. package/dist/summary/summarizer.d.ts +1 -1
  127. package/dist/summary/summarizer.d.ts.map +1 -1
  128. package/dist/summary/summarizer.js +4 -1
  129. package/dist/summary/summarizer.js.map +1 -1
  130. package/dist/summary/summarizerClientElection.d.ts +1 -1
  131. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  132. package/dist/summary/summarizerClientElection.js +2 -2
  133. package/dist/summary/summarizerClientElection.js.map +1 -1
  134. package/dist/summary/summarizerHeuristics.js.map +1 -1
  135. package/dist/summary/summarizerNode/summarizerNode.d.ts +3 -3
  136. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  137. package/dist/summary/summarizerNode/summarizerNode.js +16 -16
  138. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  139. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
  140. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  141. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  142. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -3
  143. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  144. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +1 -1
  145. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  146. package/dist/summary/summarizerTypes.d.ts +17 -29
  147. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  148. package/dist/summary/summarizerTypes.js.map +1 -1
  149. package/dist/summary/summaryCollection.d.ts +2 -1
  150. package/dist/summary/summaryCollection.d.ts.map +1 -1
  151. package/dist/summary/summaryCollection.js +11 -11
  152. package/dist/summary/summaryCollection.js.map +1 -1
  153. package/dist/summary/summaryFormat.d.ts +3 -3
  154. package/dist/summary/summaryFormat.d.ts.map +1 -1
  155. package/dist/summary/summaryFormat.js +2 -2
  156. package/dist/summary/summaryFormat.js.map +1 -1
  157. package/dist/summary/summaryGenerator.d.ts +7 -8
  158. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  159. package/dist/summary/summaryGenerator.js +26 -22
  160. package/dist/summary/summaryGenerator.js.map +1 -1
  161. package/dist/summary/summaryManager.js.map +1 -1
  162. package/dist/throttler.js.map +1 -1
  163. package/lib/batchTracker.js.map +1 -1
  164. package/lib/blobManager.d.ts +4 -4
  165. package/lib/blobManager.d.ts.map +1 -1
  166. package/lib/blobManager.js +1 -1
  167. package/lib/blobManager.js.map +1 -1
  168. package/lib/channelCollection.d.ts +3 -3
  169. package/lib/channelCollection.d.ts.map +1 -1
  170. package/lib/channelCollection.js +3 -3
  171. package/lib/channelCollection.js.map +1 -1
  172. package/lib/connectionTelemetry.d.ts +2 -1
  173. package/lib/connectionTelemetry.d.ts.map +1 -1
  174. package/lib/connectionTelemetry.js +2 -2
  175. package/lib/connectionTelemetry.js.map +1 -1
  176. package/lib/containerHandleContext.d.ts +2 -1
  177. package/lib/containerHandleContext.d.ts.map +1 -1
  178. package/lib/containerHandleContext.js.map +1 -1
  179. package/lib/containerRuntime.d.ts +12 -19
  180. package/lib/containerRuntime.d.ts.map +1 -1
  181. package/lib/containerRuntime.js +68 -114
  182. package/lib/containerRuntime.js.map +1 -1
  183. package/lib/dataStore.d.ts.map +1 -1
  184. package/lib/dataStore.js.map +1 -1
  185. package/lib/dataStoreContext.d.ts +7 -8
  186. package/lib/dataStoreContext.d.ts.map +1 -1
  187. package/lib/dataStoreContext.js +3 -3
  188. package/lib/dataStoreContext.js.map +1 -1
  189. package/lib/dataStoreContexts.js.map +1 -1
  190. package/lib/dataStoreRegistry.js.map +1 -1
  191. package/lib/deltaManagerProxies.d.ts +4 -3
  192. package/lib/deltaManagerProxies.d.ts.map +1 -1
  193. package/lib/deltaManagerProxies.js.map +1 -1
  194. package/lib/deltaScheduler.d.ts +2 -1
  195. package/lib/deltaScheduler.d.ts.map +1 -1
  196. package/lib/deltaScheduler.js.map +1 -1
  197. package/lib/gc/garbageCollection.d.ts +1 -3
  198. package/lib/gc/garbageCollection.d.ts.map +1 -1
  199. package/lib/gc/garbageCollection.js +18 -21
  200. package/lib/gc/garbageCollection.js.map +1 -1
  201. package/lib/gc/gcConfigs.d.ts.map +1 -1
  202. package/lib/gc/gcConfigs.js +12 -31
  203. package/lib/gc/gcConfigs.js.map +1 -1
  204. package/lib/gc/gcDefinitions.d.ts +3 -30
  205. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  206. package/lib/gc/gcDefinitions.js +0 -2
  207. package/lib/gc/gcDefinitions.js.map +1 -1
  208. package/lib/gc/gcHelpers.d.ts +2 -3
  209. package/lib/gc/gcHelpers.d.ts.map +1 -1
  210. package/lib/gc/gcHelpers.js.map +1 -1
  211. package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -1
  212. package/lib/gc/gcSummaryDefinitions.d.ts +1 -1
  213. package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -1
  214. package/lib/gc/gcSummaryDefinitions.js.map +1 -1
  215. package/lib/gc/gcSummaryStateTracker.d.ts +2 -35
  216. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
  217. package/lib/gc/gcSummaryStateTracker.js +4 -57
  218. package/lib/gc/gcSummaryStateTracker.js.map +1 -1
  219. package/lib/gc/gcTelemetry.d.ts +1 -1
  220. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  221. package/lib/gc/gcTelemetry.js +2 -2
  222. package/lib/gc/gcTelemetry.js.map +1 -1
  223. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -1
  224. package/lib/gc/index.d.ts +1 -1
  225. package/lib/gc/index.d.ts.map +1 -1
  226. package/lib/gc/index.js +1 -1
  227. package/lib/gc/index.js.map +1 -1
  228. package/lib/index.d.ts +1 -1
  229. package/lib/index.d.ts.map +1 -1
  230. package/lib/index.js.map +1 -1
  231. package/lib/legacy.d.ts +1 -1
  232. package/lib/messageTypes.d.ts +1 -1
  233. package/lib/messageTypes.d.ts.map +1 -1
  234. package/lib/messageTypes.js.map +1 -1
  235. package/lib/opLifecycle/batchManager.js.map +1 -1
  236. package/lib/opLifecycle/definitions.d.ts +2 -2
  237. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  238. package/lib/opLifecycle/definitions.js.map +1 -1
  239. package/lib/opLifecycle/opCompressor.d.ts +11 -1
  240. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  241. package/lib/opLifecycle/opCompressor.js +13 -2
  242. package/lib/opLifecycle/opCompressor.js.map +1 -1
  243. package/lib/opLifecycle/opDecompressor.d.ts +1 -1
  244. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  245. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  246. package/lib/opLifecycle/opGroupingManager.d.ts +10 -3
  247. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
  248. package/lib/opLifecycle/opGroupingManager.js +7 -0
  249. package/lib/opLifecycle/opGroupingManager.js.map +1 -1
  250. package/lib/opLifecycle/opSplitter.d.ts +4 -2
  251. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  252. package/lib/opLifecycle/opSplitter.js +12 -7
  253. package/lib/opLifecycle/opSplitter.js.map +1 -1
  254. package/lib/opLifecycle/outbox.d.ts +10 -0
  255. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  256. package/lib/opLifecycle/outbox.js +12 -17
  257. package/lib/opLifecycle/outbox.js.map +1 -1
  258. package/lib/opLifecycle/remoteMessageProcessor.d.ts +1 -1
  259. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  260. package/lib/opLifecycle/remoteMessageProcessor.js +1 -1
  261. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  262. package/lib/opProperties.d.ts +1 -1
  263. package/lib/opProperties.d.ts.map +1 -1
  264. package/lib/opProperties.js.map +1 -1
  265. package/lib/packageVersion.d.ts +1 -1
  266. package/lib/packageVersion.js +1 -1
  267. package/lib/packageVersion.js.map +1 -1
  268. package/lib/pendingStateManager.js.map +1 -1
  269. package/lib/scheduleManager.d.ts +2 -1
  270. package/lib/scheduleManager.d.ts.map +1 -1
  271. package/lib/scheduleManager.js.map +1 -1
  272. package/lib/storageServiceWithAttachBlobs.js.map +1 -1
  273. package/lib/summary/documentSchema.js +1 -1
  274. package/lib/summary/documentSchema.js.map +1 -1
  275. package/lib/summary/index.d.ts +1 -1
  276. package/lib/summary/index.d.ts.map +1 -1
  277. package/lib/summary/index.js.map +1 -1
  278. package/lib/summary/orderedClientElection.d.ts +4 -2
  279. package/lib/summary/orderedClientElection.d.ts.map +1 -1
  280. package/lib/summary/orderedClientElection.js +35 -13
  281. package/lib/summary/orderedClientElection.js.map +1 -1
  282. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
  283. package/lib/summary/runningSummarizer.d.ts +1 -6
  284. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  285. package/lib/summary/runningSummarizer.js +21 -107
  286. package/lib/summary/runningSummarizer.js.map +1 -1
  287. package/lib/summary/summarizer.d.ts +1 -1
  288. package/lib/summary/summarizer.d.ts.map +1 -1
  289. package/lib/summary/summarizer.js +4 -1
  290. package/lib/summary/summarizer.js.map +1 -1
  291. package/lib/summary/summarizerClientElection.d.ts +1 -1
  292. package/lib/summary/summarizerClientElection.d.ts.map +1 -1
  293. package/lib/summary/summarizerClientElection.js +1 -1
  294. package/lib/summary/summarizerClientElection.js.map +1 -1
  295. package/lib/summary/summarizerHeuristics.js.map +1 -1
  296. package/lib/summary/summarizerNode/summarizerNode.d.ts +3 -3
  297. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  298. package/lib/summary/summarizerNode/summarizerNode.js +14 -14
  299. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  300. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
  301. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  302. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  303. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -3
  304. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  305. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +1 -1
  306. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  307. package/lib/summary/summarizerTypes.d.ts +17 -29
  308. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  309. package/lib/summary/summarizerTypes.js.map +1 -1
  310. package/lib/summary/summaryCollection.d.ts +2 -1
  311. package/lib/summary/summaryCollection.d.ts.map +1 -1
  312. package/lib/summary/summaryCollection.js +3 -3
  313. package/lib/summary/summaryCollection.js.map +1 -1
  314. package/lib/summary/summaryFormat.d.ts +3 -3
  315. package/lib/summary/summaryFormat.d.ts.map +1 -1
  316. package/lib/summary/summaryFormat.js +2 -2
  317. package/lib/summary/summaryFormat.js.map +1 -1
  318. package/lib/summary/summaryGenerator.d.ts +7 -8
  319. package/lib/summary/summaryGenerator.d.ts.map +1 -1
  320. package/lib/summary/summaryGenerator.js +25 -21
  321. package/lib/summary/summaryGenerator.js.map +1 -1
  322. package/lib/summary/summaryManager.js.map +1 -1
  323. package/lib/throttler.js.map +1 -1
  324. package/lib/tsdoc-metadata.json +1 -1
  325. package/package.json +72 -24
  326. package/src/batchTracker.ts +1 -1
  327. package/src/blobManager.ts +7 -7
  328. package/src/channelCollection.ts +8 -9
  329. package/src/connectionTelemetry.ts +14 -6
  330. package/src/containerHandleContext.ts +2 -1
  331. package/src/containerRuntime.ts +88 -141
  332. package/src/dataStore.ts +2 -1
  333. package/src/dataStoreContext.ts +16 -17
  334. package/src/deltaManagerProxies.ts +7 -5
  335. package/src/deltaScheduler.ts +2 -1
  336. package/src/gc/garbageCollection.md +0 -8
  337. package/src/gc/garbageCollection.ts +20 -25
  338. package/src/gc/gcConfigs.ts +8 -34
  339. package/src/gc/gcDefinitions.ts +4 -31
  340. package/src/gc/gcHelpers.ts +2 -2
  341. package/src/gc/gcSummaryDefinitions.ts +1 -1
  342. package/src/gc/gcSummaryStateTracker.ts +7 -73
  343. package/src/gc/gcTelemetry.ts +2 -2
  344. package/src/gc/index.ts +0 -1
  345. package/src/index.ts +1 -1
  346. package/src/messageTypes.ts +1 -1
  347. package/src/opLifecycle/README.md +120 -160
  348. package/src/opLifecycle/definitions.ts +2 -2
  349. package/src/opLifecycle/opCompressor.ts +13 -2
  350. package/src/opLifecycle/opDecompressor.ts +1 -1
  351. package/src/opLifecycle/opGroupingManager.ts +11 -4
  352. package/src/opLifecycle/opSplitter.ts +13 -8
  353. package/src/opLifecycle/outbox.ts +12 -27
  354. package/src/opLifecycle/remoteMessageProcessor.ts +2 -1
  355. package/src/opProperties.ts +2 -4
  356. package/src/packageVersion.ts +1 -1
  357. package/src/pendingStateManager.ts +1 -1
  358. package/src/scheduleManager.ts +2 -1
  359. package/src/summary/index.ts +1 -1
  360. package/src/summary/orderedClientElection.ts +83 -12
  361. package/src/summary/runningSummarizer.ts +31 -115
  362. package/src/summary/summarizer.ts +5 -2
  363. package/src/summary/summarizerClientElection.ts +2 -1
  364. package/src/summary/summarizerNode/summarizerNode.ts +19 -31
  365. package/src/summary/summarizerNode/summarizerNodeUtils.ts +2 -1
  366. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +4 -8
  367. package/src/summary/summarizerTypes.ts +22 -33
  368. package/src/summary/summaryCollection.ts +2 -2
  369. package/src/summary/summaryFormat.ts +9 -7
  370. package/src/summary/summaryGenerator.ts +51 -29
@@ -63,7 +63,7 @@ export {
63
63
  SummarizeResultPart,
64
64
  SubmitSummaryFailureData,
65
65
  SummaryStage,
66
- IRetriableFailureResult,
66
+ IRetriableFailureError,
67
67
  ISummarizeEventProps,
68
68
  } from "./summarizerTypes.js";
69
69
  export {
@@ -9,7 +9,7 @@ import { TypedEventEmitter } from "@fluid-internal/client-utils";
9
9
  import { IDeltaManager } from "@fluidframework/container-definitions/internal";
10
10
  import { IEvent, IEventProvider, ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
11
11
  import { assert } from "@fluidframework/core-utils/internal";
12
- import { IClient, IQuorumClients, ISequencedClient } from "@fluidframework/protocol-definitions";
12
+ import { IClient, IQuorumClients, ISequencedClient } from "@fluidframework/driver-definitions";
13
13
  import {
14
14
  ITelemetryLoggerExt,
15
15
  UsageError,
@@ -351,6 +351,7 @@ export class OrderedClientElection
351
351
  /** Serialized state from summary or current sequence number at time of load if new. */
352
352
  initialState: ISerializedElection | number,
353
353
  private readonly isEligibleFn: (c: ITrackedClient) => boolean,
354
+ private readonly recordPerformanceEvents: boolean = false,
354
355
  ) {
355
356
  super();
356
357
  let initialClient: ILinkedClient | undefined;
@@ -410,17 +411,42 @@ export class OrderedClientElection
410
411
  * Note that this function does no eligibility or suitability checks. If we get here, then
411
412
  * we will set _electedClient, and we will set _electedParent if this is an interactive client.
412
413
  */
413
- private tryElectingClient(client: ILinkedClient | undefined, sequenceNumber: number): void {
414
+ private tryElectingClient(
415
+ client: ILinkedClient | undefined,
416
+ sequenceNumber: number,
417
+ reason: string,
418
+ ): void {
419
+ this.sendPerformanceEvent(
420
+ "TryElectingClient",
421
+ client,
422
+ sequenceNumber,
423
+ false /* forceSend */,
424
+ reason,
425
+ );
414
426
  let change = false;
415
427
  const isSummarizerClient = client?.client.details.type === summarizerClientType;
416
428
  const prevClient = this._electedClient;
417
429
  if (this._electedClient !== client) {
430
+ this.sendPerformanceEvent(
431
+ "ClientElected",
432
+ client,
433
+ sequenceNumber,
434
+ true /* forceSend */,
435
+ reason,
436
+ );
418
437
  // Changing the elected client. Record the sequence number and note that we have to fire an event.
419
438
  this._electionSequenceNumber = sequenceNumber;
420
439
  this._electedClient = client;
421
440
  change = true;
422
441
  }
423
442
  if (this._electedParent !== client && !isSummarizerClient) {
443
+ this.sendPerformanceEvent(
444
+ "InteractiveClientElected",
445
+ client,
446
+ sequenceNumber,
447
+ true /* forceSend */,
448
+ reason,
449
+ );
424
450
  // Changing the elected parent as well.
425
451
  this._electedParent = client;
426
452
  change = true;
@@ -430,8 +456,26 @@ export class OrderedClientElection
430
456
  }
431
457
  }
432
458
 
433
- private tryElectingParent(client: ILinkedClient | undefined, sequenceNumber: number): void {
459
+ private tryElectingParent(
460
+ client: ILinkedClient | undefined,
461
+ sequenceNumber: number,
462
+ reason: string,
463
+ ): void {
464
+ this.sendPerformanceEvent(
465
+ "TryElectingParent",
466
+ client,
467
+ sequenceNumber,
468
+ false /* forceSend */,
469
+ reason,
470
+ );
434
471
  if (this._electedParent !== client) {
472
+ this.sendPerformanceEvent(
473
+ "ParentElected",
474
+ client,
475
+ sequenceNumber,
476
+ true /* forceSend */,
477
+ reason,
478
+ );
435
479
  this._electedParent = client;
436
480
  this.emit("election", this._electedClient, sequenceNumber, this._electedClient);
437
481
  }
@@ -462,6 +506,7 @@ export class OrderedClientElection
462
506
  * @param sequenceNumber - sequence number when client was added
463
507
  */
464
508
  private addClient(client: ILinkedClient, sequenceNumber: number): void {
509
+ this.sendPerformanceEvent("AddClient", client, sequenceNumber);
465
510
  if (this.isEligibleFn(client)) {
466
511
  this._eligibleCount++;
467
512
  const newClientIsSummarizer = client.client.details.type === summarizerClientType;
@@ -472,10 +517,10 @@ export class OrderedClientElection
472
517
  this._electedClient === undefined ||
473
518
  (!electedClientIsSummarizer && newClientIsSummarizer)
474
519
  ) {
475
- this.tryElectingClient(client, sequenceNumber);
520
+ this.tryElectingClient(client, sequenceNumber, "AddClient");
476
521
  } else if (this._electedParent === undefined && !newClientIsSummarizer) {
477
522
  // This is an odd case. If the _electedClient is set, the _electedParent should be as well.
478
- this.tryElectingParent(client, sequenceNumber);
523
+ this.tryElectingParent(client, sequenceNumber, "AddClient");
479
524
  }
480
525
  }
481
526
  }
@@ -487,6 +532,7 @@ export class OrderedClientElection
487
532
  * @param sequenceNumber - sequence number when client was removed
488
533
  */
489
534
  private removeClient(client: ILinkedClient, sequenceNumber: number): void {
535
+ this.sendPerformanceEvent("RemoveClient", client, sequenceNumber);
490
536
  if (this.isEligibleFn(client)) {
491
537
  this._eligibleCount--;
492
538
  if (this._electedClient === client) {
@@ -497,14 +543,18 @@ export class OrderedClientElection
497
543
  if (this._electedClient.client.details.type !== summarizerClientType) {
498
544
  throw new UsageError("Elected client should be a summarizer client 1");
499
545
  }
500
- this.tryElectingClient(this._electedParent, sequenceNumber);
546
+ this.tryElectingClient(
547
+ this._electedParent,
548
+ sequenceNumber,
549
+ "RemoveSummarizerClient",
550
+ );
501
551
  } else {
502
552
  // 2. The _electedClient is an interactive client that has left the quorum.
503
553
  // Automatically shift to next oldest client.
504
554
  const nextClient =
505
555
  this.findFirstEligibleParent(this._electedParent?.youngerClient) ??
506
556
  this.findFirstEligibleParent(this.orderedClientCollection.oldestClient);
507
- this.tryElectingClient(nextClient, sequenceNumber);
557
+ this.tryElectingClient(nextClient, sequenceNumber, "RemoveClient");
508
558
  }
509
559
  } else if (this._electedParent === client) {
510
560
  // Removing the _electedParent (but not _electedClient).
@@ -516,7 +566,7 @@ export class OrderedClientElection
516
566
  const nextParent =
517
567
  this.findFirstEligibleParent(this._electedParent?.youngerClient) ??
518
568
  this.findFirstEligibleParent(this.orderedClientCollection.oldestClient);
519
- this.tryElectingParent(nextParent, sequenceNumber);
569
+ this.tryElectingParent(nextParent, sequenceNumber, "RemoveClient");
520
570
  }
521
571
  }
522
572
  }
@@ -534,11 +584,11 @@ export class OrderedClientElection
534
584
  this.findFirstEligibleParent(this._electedParent?.youngerClient) ??
535
585
  this.findFirstEligibleParent(this.orderedClientCollection.oldestClient);
536
586
  if (this._electedClient === undefined || this._electedClient === this._electedParent) {
537
- this.tryElectingClient(nextClient, sequenceNumber);
587
+ this.tryElectingClient(nextClient, sequenceNumber, "IncrementElectedClient");
538
588
  } else {
539
589
  // The _electedClient is a summarizer and should not be replaced until it leaves the quorum.
540
590
  // Changing the _electedParent will stop the summarizer.
541
- this.tryElectingParent(nextClient, sequenceNumber);
591
+ this.tryElectingParent(nextClient, sequenceNumber, "IncrementElectedClient");
542
592
  }
543
593
  }
544
594
 
@@ -549,11 +599,11 @@ export class OrderedClientElection
549
599
  public resetElectedClient(sequenceNumber: number): void {
550
600
  const firstClient = this.findFirstEligibleParent(this.orderedClientCollection.oldestClient);
551
601
  if (this._electedClient === undefined || this._electedClient === this._electedParent) {
552
- this.tryElectingClient(firstClient, sequenceNumber);
602
+ this.tryElectingClient(firstClient, sequenceNumber, "ResetElectedClient");
553
603
  } else {
554
604
  // The _electedClient is a summarizer and should not be replaced until it leaves the quorum.
555
605
  // Changing the _electedParent will stop the summarizer.
556
- this.tryElectingParent(firstClient, sequenceNumber);
606
+ this.tryElectingParent(firstClient, sequenceNumber, "ResetElectedClient");
557
607
  }
558
608
  }
559
609
 
@@ -571,4 +621,25 @@ export class OrderedClientElection
571
621
  electedParentId: this.electedParent?.clientId,
572
622
  };
573
623
  }
624
+
625
+ private sendPerformanceEvent(
626
+ eventName: string,
627
+ client: ILinkedClient | undefined,
628
+ sequenceNumber: number,
629
+ forceSend: boolean = false,
630
+ reason?: string,
631
+ ) {
632
+ if (this.recordPerformanceEvents || forceSend) {
633
+ this.logger.sendPerformanceEvent({
634
+ eventName,
635
+ clientId: client?.clientId,
636
+ sequenceNumber,
637
+ electedClientId: this.electedClient?.clientId,
638
+ electedParentId: this.electedParent?.clientId,
639
+ isEligible: client !== undefined ? this.isEligibleFn(client) : false,
640
+ isSummarizerClient: client?.client.details.type === summarizerClientType,
641
+ reason,
642
+ });
643
+ }
644
+ }
574
645
  }
@@ -6,8 +6,8 @@
6
6
  import { TypedEventEmitter } from "@fluid-internal/client-utils";
7
7
  import { IDisposable, ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
8
8
  import { assert, Deferred, PromiseTimer, delay } from "@fluidframework/core-utils/internal";
9
- import { DriverErrorTypes } from "@fluidframework/driver-definitions/internal";
10
- import { ISequencedDocumentMessage, MessageType } from "@fluidframework/protocol-definitions";
9
+ import { ISequencedDocumentMessage } from "@fluidframework/driver-definitions";
10
+ import { DriverErrorTypes, MessageType } from "@fluidframework/driver-definitions/internal";
11
11
  import {
12
12
  MonitoringContext,
13
13
  UsageError,
@@ -38,9 +38,11 @@ import {
38
38
  ISummaryCancellationToken,
39
39
  SubmitSummaryResult,
40
40
  SummarizerStopReason,
41
+ type IRetriableFailureError,
41
42
  } from "./summarizerTypes.js";
42
43
  import { IAckedSummary, IClientSummaryWatcher, SummaryCollection } from "./summaryCollection.js";
43
44
  import {
45
+ RetriableSummaryError,
44
46
  SummarizeReason,
45
47
  SummarizeResultBuilder,
46
48
  SummaryGenerator,
@@ -474,7 +476,6 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
474
476
  this.trySummarizeOnce(
475
477
  // summarizeProps
476
478
  { summarizeReason: "lastSummary" },
477
- // ISummarizeOptions, using defaults: { refreshLatestAck: false, fullTree: false }
478
479
  {},
479
480
  );
480
481
  }
@@ -627,9 +628,7 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
627
628
  this.beforeSummaryAction();
628
629
  },
629
630
  async () => {
630
- return this.mc.config.getBoolean("Fluid.Summarizer.UseDynamicRetries")
631
- ? this.trySummarizeWithRetries(reason)
632
- : this.trySummarizeWithStaticAttempts(reason);
631
+ return this.trySummarizeWithRetries(reason);
633
632
  },
634
633
  () => {
635
634
  this.afterSummaryAction();
@@ -639,92 +638,6 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
639
638
  });
640
639
  }
641
640
 
642
- /**
643
- * Tries to summarize 2 times with pre-defined summary options. If an attempt fails with "retryAfterSeconds"
644
- * param, that attempt is tried once more.
645
- */
646
- private async trySummarizeWithStaticAttempts(reason: SummarizeReason) {
647
- const attemptOptions: ISummarizeOptions[] = [
648
- { refreshLatestAck: false, fullTree: false },
649
- { refreshLatestAck: true, fullTree: false },
650
- ];
651
- let summaryAttempts = 0;
652
- let summaryAttemptsPerPhase = 0;
653
- let summaryAttemptPhase = 0;
654
- let error: any;
655
- while (summaryAttemptPhase < attemptOptions.length) {
656
- if (this.cancellationToken.cancelled) {
657
- return;
658
- }
659
-
660
- // We only want to attempt 1 summary when reason is "lastSummary"
661
- if (++summaryAttempts > 1 && reason === "lastSummary") {
662
- return;
663
- }
664
-
665
- summaryAttemptsPerPhase++;
666
-
667
- const summarizeOptions = attemptOptions[summaryAttemptPhase];
668
- const summarizeProps: ISummarizeTelemetryProperties = {
669
- summarizeReason: reason,
670
- summaryAttempts,
671
- summaryAttemptsPerPhase,
672
- summaryAttemptPhase: summaryAttemptPhase + 1, // make everything 1-based
673
- ...summarizeOptions,
674
- };
675
- const summaryLogger = createChildLogger({
676
- logger: this.mc.logger,
677
- properties: { all: summarizeProps },
678
- });
679
- const summaryOptions: ISubmitSummaryOptions = {
680
- ...summarizeOptions,
681
- summaryLogger,
682
- cancellationToken: this.cancellationToken,
683
- latestSummaryRefSeqNum: this.heuristicData.lastSuccessfulSummary.refSequenceNumber,
684
- };
685
-
686
- // Note: no need to account for cancellationToken.waitCancelled here, as
687
- // this is accounted SummaryGenerator.summarizeCore that controls receivedSummaryAckOrNack.
688
- const resultSummarize = this.generator.summarize(summaryOptions);
689
- const ackNackResult = await resultSummarize.receivedSummaryAckOrNack;
690
- if (ackNackResult.success) {
691
- return;
692
- }
693
-
694
- error = ackNackResult.error;
695
-
696
- // Check for retryDelay that can come from summaryNack, upload summary or submit summary flows.
697
- // Retry the same step only once per retryAfter response.
698
- const submitResult = await resultSummarize.summarySubmitted;
699
- const delaySeconds = !submitResult.success
700
- ? submitResult.data?.retryAfterSeconds
701
- : ackNackResult.data?.retryAfterSeconds;
702
- if (delaySeconds === undefined || summaryAttemptsPerPhase > 1) {
703
- summaryAttemptPhase++;
704
- summaryAttemptsPerPhase = 0;
705
- }
706
-
707
- if (delaySeconds !== undefined) {
708
- this.mc.logger.sendPerformanceEvent({
709
- eventName: "SummarizeAttemptDelay",
710
- duration: delaySeconds,
711
- summaryNackDelay: ackNackResult.data?.retryAfterSeconds !== undefined,
712
- ...summarizeProps,
713
- });
714
- await delay(delaySeconds * 1000);
715
- }
716
- }
717
- this.mc.logger.sendErrorEvent(
718
- {
719
- eventName: "SummarizeFailed",
720
- maxAttempts: attemptOptions.length,
721
- summaryAttempts: summaryAttemptPhase,
722
- },
723
- error,
724
- );
725
- this.stopSummarizerCallback("failToSummarize");
726
- }
727
-
728
641
  /**
729
642
  * Tries to summarize with retries where retry is based on the failure params.
730
643
  * For example, summarization may be retried for failures with "retryAfterSeconds" param.
@@ -773,7 +686,7 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
773
686
  let done = false;
774
687
  let status: "success" | "failure" | "canceled" = "success";
775
688
  let results: ISummarizeResults | undefined;
776
- let error: any;
689
+ let error: IRetriableFailureError | undefined;
777
690
  do {
778
691
  currentAttempt++;
779
692
  if (this.cancellationToken.cancelled) {
@@ -793,22 +706,18 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
793
706
  break;
794
707
  }
795
708
 
796
- // Update max attempts and retry params from the failure result.
797
- // If submit summary failed, use the params from "summarySubmitted" result. Else, use the params
798
- // from "receivedSummaryAckOrNack" result.
709
+ // Update max attempts from the failure result.
710
+ // If submit summary failed, use maxAttemptsForSubmitFailures. Else use the defaultMaxAttempts.
799
711
  // Note: Check "summarySubmitted" result first because if it fails, ack nack would fail as well.
800
712
  const submitSummaryResult = await results.summarySubmitted;
801
- if (!submitSummaryResult.success) {
802
- maxAttempts = this.maxAttemptsForSubmitFailures;
803
- retryAfterSeconds = submitSummaryResult.data?.retryAfterSeconds;
804
- } else {
805
- maxAttempts = defaultMaxAttempts;
806
- retryAfterSeconds = ackNackResult.data?.retryAfterSeconds;
807
- }
713
+ maxAttempts = !submitSummaryResult.success
714
+ ? this.maxAttemptsForSubmitFailures
715
+ : defaultMaxAttempts;
808
716
 
809
717
  // Emit "summarize" event for this failed attempt.
810
718
  status = "failure";
811
719
  error = ackNackResult.error;
720
+ retryAfterSeconds = error.retryAfterSeconds;
812
721
  const eventProps: ISummarizeEventProps = {
813
722
  result: status,
814
723
  currentAttempt,
@@ -817,27 +726,26 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
817
726
  };
818
727
  this.emit("summarize", eventProps);
819
728
 
820
- // If the failure doesn't have "retryAfterSeconds" or the max number of attempts have been done, we're done.
729
+ // Break if the failure doesn't have "retryAfterSeconds" or we are one less from max number of attempts.
730
+ // Note that the final attempt if "retryAfterSeconds" does exist happens outside of the do..while loop.
821
731
  if (retryAfterSeconds === undefined || currentAttempt >= maxAttempts - 1) {
822
732
  done = true;
823
733
  }
824
734
 
825
- // If the failure has "retryAfterSeconds", add a delay of that time. In this case, a final attempt will
826
- // take place and we need to wait for "retryAfterSeconds" before that.
827
- if (retryAfterSeconds !== undefined) {
735
+ // If the failure has "retryAfterSeconds", add a delay of that time before starting the next attempt.
736
+ if (retryAfterSeconds !== undefined && retryAfterSeconds > 0) {
828
737
  this.mc.logger.sendPerformanceEvent({
829
738
  eventName: "SummarizeAttemptDelay",
830
- duration: retryAfterSeconds,
831
- summaryNackDelay: ackNackResult.data?.retryAfterSeconds !== undefined,
739
+ duration: retryAfterSeconds * 1000,
740
+ summaryNackDelay: ackNackResult.data !== undefined, // This will only be defined only for nack failures.
832
741
  stage: submitSummaryResult.data?.stage,
833
- dynamicRetries: true, // To differentiate this telemetry from regular retry logic
834
742
  ...attemptResult.summarizeProps,
835
743
  });
836
744
  await delay(retryAfterSeconds * 1000);
837
745
  }
838
746
  } while (!done);
839
747
 
840
- // If summarize attempt did not fail, emit "summarize" event and return. A failed attempt may be retried below.
748
+ // If the attempt was successful, emit "summarize" event and return. A failed attempt may be retried below.
841
749
  if (status !== "failure") {
842
750
  this.emit("summarize", { result: status, currentAttempt, maxAttempts });
843
751
  return results;
@@ -888,7 +796,10 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
888
796
  ) {
889
797
  const results = await this.trySummarizeWithRetries(reason);
890
798
  if (results === undefined) {
891
- resultsBuilder.fail("Summarization was canceled", undefined);
799
+ resultsBuilder.fail(
800
+ "Summarization was canceled",
801
+ new RetriableSummaryError("Summarization was canceled"),
802
+ );
892
803
  return resultsBuilder.build();
893
804
  }
894
805
  const submitResult = await results.summarySubmitted;
@@ -906,7 +817,10 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
906
817
  resultsBuilder: SummarizeResultBuilder = new SummarizeResultBuilder(),
907
818
  ): ISummarizeResults {
908
819
  if (this.stopping) {
909
- resultsBuilder.fail("RunningSummarizer stopped or disposed", undefined);
820
+ resultsBuilder.fail(
821
+ "RunningSummarizer stopped or disposed",
822
+ new RetriableSummaryError("RunningSummarizer stopped or disposed"),
823
+ );
910
824
  return resultsBuilder.build();
911
825
  }
912
826
  // Check for concurrent summary attempts. If one is found,
@@ -944,7 +858,9 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
944
858
  // Override existing enqueued summarize attempt.
945
859
  this.enqueuedSummary.resultsBuilder.fail(
946
860
  "Aborted; overridden by another enqueue summarize attempt",
947
- undefined,
861
+ new RetriableSummaryError(
862
+ "Summary was overridden by another enqueue summarize attempt",
863
+ ),
948
864
  );
949
865
  this.enqueuedSummary = undefined;
950
866
  overridden = true;
@@ -995,7 +911,7 @@ export class RunningSummarizer extends TypedEventEmitter<ISummarizerEvents> impl
995
911
  if (this.enqueuedSummary !== undefined) {
996
912
  this.enqueuedSummary.resultsBuilder.fail(
997
913
  "RunningSummarizer stopped or disposed",
998
- undefined,
914
+ new RetriableSummaryError("RunningSummarizer stopped or disposed"),
999
915
  );
1000
916
  this.enqueuedSummary = undefined;
1001
917
  }
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  import { TypedEventEmitter } from "@fluid-internal/client-utils";
7
- import { IFluidHandleContext } from "@fluidframework/core-interfaces";
7
+ import { IFluidHandleContext } from "@fluidframework/core-interfaces/internal";
8
8
  import { Deferred } from "@fluidframework/core-utils/internal";
9
9
  import {
10
10
  IFluidErrorBase,
@@ -98,7 +98,10 @@ export class Summarizer extends TypedEventEmitter<ISummarizerEvents> implements
98
98
  ) => Promise<ICancellableSummarizerController>,
99
99
  ) {
100
100
  super();
101
- this.logger = createChildLogger({ logger: this.runtime.logger, namespace: "Summarizer" });
101
+ this.logger = createChildLogger({
102
+ logger: this.runtime.baseLogger,
103
+ namespace: "Summarizer",
104
+ });
102
105
  }
103
106
 
104
107
  public async run(onBehalfOf: string): Promise<SummarizerStopReason> {
@@ -5,7 +5,8 @@
5
5
 
6
6
  import { TypedEventEmitter } from "@fluid-internal/client-utils";
7
7
  import { IEvent, IEventProvider } from "@fluidframework/core-interfaces";
8
- import { IClientDetails, MessageType } from "@fluidframework/protocol-definitions";
8
+ import { IClientDetails } from "@fluidframework/driver-definitions";
9
+ import { MessageType } from "@fluidframework/driver-definitions/internal";
9
10
  import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils/internal";
10
11
 
11
12
  import {
@@ -5,16 +5,11 @@
5
5
 
6
6
  import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
7
7
  import { assert, unreachableCase } from "@fluidframework/core-utils/internal";
8
- import {
9
- ISequencedDocumentMessage,
10
- ISnapshotTree,
11
- SummaryType,
12
- } from "@fluidframework/protocol-definitions";
8
+ import { ISequencedDocumentMessage, SummaryType } from "@fluidframework/driver-definitions";
9
+ import { ISnapshotTree } from "@fluidframework/driver-definitions/internal";
13
10
  import {
14
11
  IExperimentalIncrementalSummaryContext,
15
12
  ITelemetryContext,
16
- } from "@fluidframework/runtime-definitions";
17
- import {
18
13
  CreateChildSummarizerNodeParam,
19
14
  CreateSummarizerNodeSource,
20
15
  ISummarizeResult,
@@ -167,15 +162,6 @@ export class SummarizerNode implements IRootSummarizerNode {
167
162
  trackState: boolean = true,
168
163
  telemetryContext?: ITelemetryContext,
169
164
  ): Promise<ISummarizeResult> {
170
- assert(
171
- this.isSummaryInProgress(),
172
- 0x1a1 /* "summarize should not be called when not tracking the summary" */,
173
- );
174
- assert(
175
- this.wipSummaryLogger !== undefined,
176
- 0x1a2 /* "wipSummaryLogger should have been set in startSummary or ctor" */,
177
- );
178
-
179
165
  // Try to reuse the tree if unchanged
180
166
  if (this.canReuseHandle && !fullTree && !this.hasChanged()) {
181
167
  const latestSummary = this._latestSummary;
@@ -198,21 +184,23 @@ export class SummarizerNode implements IRootSummarizerNode {
198
184
  }
199
185
  }
200
186
 
201
- // This assert is the same the other 0a1x1 assert `isSummaryInProgress`, the only difference is that typescript
202
- // complains if this assert isn't done this way
203
- assert(
204
- this.wipReferenceSequenceNumber !== undefined,
205
- 0x5df /* Summarize should not be called when not tracking the summary */,
206
- );
207
- const incrementalSummaryContext: IExperimentalIncrementalSummaryContext | undefined =
208
- this._latestSummary !== undefined
209
- ? {
210
- summarySequenceNumber: this.wipReferenceSequenceNumber,
211
- latestSummarySequenceNumber: this._latestSummary.referenceSequenceNumber,
212
- // TODO: remove summaryPath
213
- summaryPath: this._latestSummary.fullPath.path,
214
- }
215
- : undefined;
187
+ let incrementalSummaryContext: IExperimentalIncrementalSummaryContext | undefined;
188
+ if (!fullTree) {
189
+ assert(
190
+ this.wipReferenceSequenceNumber !== undefined,
191
+ 0x5df /* Summarize should not be called when not tracking the summary */,
192
+ );
193
+ incrementalSummaryContext =
194
+ this._latestSummary !== undefined
195
+ ? {
196
+ summarySequenceNumber: this.wipReferenceSequenceNumber,
197
+ latestSummarySequenceNumber:
198
+ this._latestSummary.referenceSequenceNumber,
199
+ // TODO: remove summaryPath
200
+ summaryPath: this._latestSummary.fullPath.path,
201
+ }
202
+ : undefined;
203
+ }
216
204
 
217
205
  const result = await this.summarizeInternalFn(
218
206
  fullTree,
@@ -3,7 +3,8 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ISnapshotTree, SummaryObject } from "@fluidframework/protocol-definitions";
6
+ import { SummaryObject } from "@fluidframework/driver-definitions";
7
+ import { ISnapshotTree } from "@fluidframework/driver-definitions/internal";
7
8
  import { channelsTreeName } from "@fluidframework/runtime-definitions/internal";
8
9
  import { ITelemetryLoggerExt, TelemetryDataTag } from "@fluidframework/telemetry-utils/internal";
9
10
 
@@ -7,10 +7,8 @@ import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
7
7
  import { assert, LazyPromise } from "@fluidframework/core-utils/internal";
8
8
  import {
9
9
  IExperimentalIncrementalSummaryContext,
10
- IGarbageCollectionData,
11
10
  ITelemetryContext,
12
- } from "@fluidframework/runtime-definitions";
13
- import {
11
+ IGarbageCollectionData,
14
12
  CreateChildSummarizerNodeParam,
15
13
  IGarbageCollectionDetailsBase,
16
14
  ISummarizeInternalResult,
@@ -78,15 +76,13 @@ export class SummarizerNodeWithGC extends SummarizerNode implements IRootSummari
78
76
  private referenceUsedRoutes: string[] | undefined;
79
77
 
80
78
  // The base GC details of this node used to initialize the GC state.
81
- private readonly baseGCDetailsP: LazyPromise<IGarbageCollectionDetailsBase>;
79
+ private readonly baseGCDetailsP: Promise<IGarbageCollectionDetailsBase>;
82
80
 
83
81
  // Keeps track of whether we have loaded the base details to ensure that we only do it once.
84
82
  private baseGCDetailsLoaded: boolean = false;
85
83
 
86
84
  // The base GC details for the child nodes. This is passed to child nodes when creating them.
87
- private readonly childNodesBaseGCDetailsP: LazyPromise<
88
- Map<string, IGarbageCollectionDetailsBase>
89
- >;
85
+ private readonly childNodesBaseGCDetailsP: Promise<Map<string, IGarbageCollectionDetailsBase>>;
90
86
 
91
87
  private gcData: IGarbageCollectionData | undefined;
92
88
 
@@ -517,7 +513,7 @@ export class SummarizerNodeWithGC extends SummarizerNode implements IRootSummari
517
513
  * was previously used and became unused (or vice versa), its used state has changed.
518
514
  */
519
515
  private hasUsedStateChanged(): boolean {
520
- // If GC is disabled, we are not tracking used state, return false.
516
+ // If GC is disabled, it should not affect summary state, return false.
521
517
  if (this.gcDisabled) {
522
518
  return false;
523
519
  }