@fluidframework/container-runtime 2.0.0-internal.6.1.1 → 2.0.0-internal.6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +4 -3
  3. package/dist/batchTracker.d.ts +1 -1
  4. package/dist/batchTracker.d.ts.map +1 -1
  5. package/dist/batchTracker.js +5 -4
  6. package/dist/batchTracker.js.map +1 -1
  7. package/dist/blobManager.d.ts +4 -21
  8. package/dist/blobManager.d.ts.map +1 -1
  9. package/dist/blobManager.js +119 -185
  10. package/dist/blobManager.js.map +1 -1
  11. package/dist/connectionTelemetry.d.ts.map +1 -1
  12. package/dist/connectionTelemetry.js +13 -12
  13. package/dist/connectionTelemetry.js.map +1 -1
  14. package/dist/containerRuntime.d.ts +99 -16
  15. package/dist/containerRuntime.d.ts.map +1 -1
  16. package/dist/containerRuntime.js +380 -242
  17. package/dist/containerRuntime.js.map +1 -1
  18. package/dist/dataStore.d.ts.map +1 -1
  19. package/dist/dataStore.js +4 -5
  20. package/dist/dataStore.js.map +1 -1
  21. package/dist/dataStoreContext.d.ts +2 -1
  22. package/dist/dataStoreContext.d.ts.map +1 -1
  23. package/dist/dataStoreContext.js +40 -41
  24. package/dist/dataStoreContext.js.map +1 -1
  25. package/dist/dataStoreContexts.d.ts +1 -2
  26. package/dist/dataStoreContexts.d.ts.map +1 -1
  27. package/dist/dataStoreContexts.js +7 -8
  28. package/dist/dataStoreContexts.js.map +1 -1
  29. package/dist/dataStoreRegistry.js +2 -2
  30. package/dist/dataStoreRegistry.js.map +1 -1
  31. package/dist/dataStores.d.ts.map +1 -1
  32. package/dist/dataStores.js +23 -25
  33. package/dist/dataStores.js.map +1 -1
  34. package/dist/deltaManagerProxyBase.d.ts +1 -1
  35. package/dist/deltaManagerProxyBase.js +2 -2
  36. package/dist/deltaManagerProxyBase.js.map +1 -1
  37. package/dist/deltaScheduler.js +6 -6
  38. package/dist/deltaScheduler.js.map +1 -1
  39. package/dist/error.d.ts +14 -0
  40. package/dist/error.d.ts.map +1 -0
  41. package/dist/error.js +21 -0
  42. package/dist/error.js.map +1 -0
  43. package/dist/gc/garbageCollection.d.ts +4 -6
  44. package/dist/gc/garbageCollection.d.ts.map +1 -1
  45. package/dist/gc/garbageCollection.js +26 -25
  46. package/dist/gc/garbageCollection.js.map +1 -1
  47. package/dist/gc/gcConfigs.d.ts.map +1 -1
  48. package/dist/gc/gcConfigs.js +5 -3
  49. package/dist/gc/gcConfigs.js.map +1 -1
  50. package/dist/gc/gcDefinitions.d.ts +4 -2
  51. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  52. package/dist/gc/gcDefinitions.js.map +1 -1
  53. package/dist/gc/gcHelpers.js +7 -7
  54. package/dist/gc/gcHelpers.js.map +1 -1
  55. package/dist/gc/gcSummaryStateTracker.d.ts +4 -7
  56. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  57. package/dist/gc/gcSummaryStateTracker.js +15 -52
  58. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  59. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  60. package/dist/gc/gcTelemetry.js +2 -0
  61. package/dist/gc/gcTelemetry.js.map +1 -1
  62. package/dist/gc/gcUnreferencedStateTracker.js +4 -4
  63. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  64. package/dist/gc/index.d.ts +1 -1
  65. package/dist/gc/index.d.ts.map +1 -1
  66. package/dist/gc/index.js +1 -2
  67. package/dist/gc/index.js.map +1 -1
  68. package/dist/id-compressor/appendOnlySortedMap.d.ts +8 -30
  69. package/dist/id-compressor/appendOnlySortedMap.d.ts.map +1 -1
  70. package/dist/id-compressor/appendOnlySortedMap.js +26 -68
  71. package/dist/id-compressor/appendOnlySortedMap.js.map +1 -1
  72. package/dist/id-compressor/finalSpace.d.ts +29 -0
  73. package/dist/id-compressor/finalSpace.d.ts.map +1 -0
  74. package/dist/id-compressor/finalSpace.js +62 -0
  75. package/dist/id-compressor/finalSpace.js.map +1 -0
  76. package/dist/id-compressor/idCompressor.d.ts +25 -250
  77. package/dist/id-compressor/idCompressor.d.ts.map +1 -1
  78. package/dist/id-compressor/idCompressor.js +387 -1150
  79. package/dist/id-compressor/idCompressor.js.map +1 -1
  80. package/dist/id-compressor/identifiers.d.ts +32 -0
  81. package/dist/id-compressor/identifiers.d.ts.map +1 -0
  82. package/dist/id-compressor/identifiers.js +15 -0
  83. package/dist/id-compressor/identifiers.js.map +1 -0
  84. package/dist/id-compressor/index.d.ts +5 -6
  85. package/dist/id-compressor/index.d.ts.map +1 -1
  86. package/dist/id-compressor/index.js +20 -26
  87. package/dist/id-compressor/index.js.map +1 -1
  88. package/dist/id-compressor/persistanceUtilities.d.ts +22 -0
  89. package/dist/id-compressor/persistanceUtilities.d.ts.map +1 -0
  90. package/dist/id-compressor/persistanceUtilities.js +43 -0
  91. package/dist/id-compressor/persistanceUtilities.js.map +1 -0
  92. package/dist/id-compressor/sessionSpaceNormalizer.d.ts +46 -0
  93. package/dist/id-compressor/sessionSpaceNormalizer.d.ts.map +1 -0
  94. package/dist/id-compressor/sessionSpaceNormalizer.js +80 -0
  95. package/dist/id-compressor/sessionSpaceNormalizer.js.map +1 -0
  96. package/dist/id-compressor/sessions.d.ts +115 -0
  97. package/dist/id-compressor/sessions.d.ts.map +1 -0
  98. package/dist/id-compressor/sessions.js +305 -0
  99. package/dist/id-compressor/sessions.js.map +1 -0
  100. package/dist/id-compressor/utilities.d.ts +49 -0
  101. package/dist/id-compressor/utilities.d.ts.map +1 -0
  102. package/dist/id-compressor/utilities.js +166 -0
  103. package/dist/id-compressor/utilities.js.map +1 -0
  104. package/dist/index.d.ts +3 -3
  105. package/dist/index.d.ts.map +1 -1
  106. package/dist/index.js +6 -4
  107. package/dist/index.js.map +1 -1
  108. package/dist/opLifecycle/opCompressor.js +5 -5
  109. package/dist/opLifecycle/opCompressor.js.map +1 -1
  110. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  111. package/dist/opLifecycle/opDecompressor.js +11 -10
  112. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  113. package/dist/opLifecycle/opGroupingManager.js +3 -3
  114. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  115. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  116. package/dist/opLifecycle/opSplitter.js +14 -15
  117. package/dist/opLifecycle/opSplitter.js.map +1 -1
  118. package/dist/opLifecycle/outbox.d.ts +1 -0
  119. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  120. package/dist/opLifecycle/outbox.js +16 -17
  121. package/dist/opLifecycle/outbox.js.map +1 -1
  122. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  123. package/dist/opLifecycle/remoteMessageProcessor.js +11 -5
  124. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  125. package/dist/packageVersion.d.ts +1 -1
  126. package/dist/packageVersion.js +1 -1
  127. package/dist/packageVersion.js.map +1 -1
  128. package/dist/pendingStateManager.d.ts +12 -5
  129. package/dist/pendingStateManager.d.ts.map +1 -1
  130. package/dist/pendingStateManager.js +36 -23
  131. package/dist/pendingStateManager.js.map +1 -1
  132. package/dist/scheduleManager.d.ts.map +1 -1
  133. package/dist/scheduleManager.js +23 -23
  134. package/dist/scheduleManager.js.map +1 -1
  135. package/dist/summary/index.d.ts +3 -3
  136. package/dist/summary/index.d.ts.map +1 -1
  137. package/dist/summary/index.js +2 -1
  138. package/dist/summary/index.js.map +1 -1
  139. package/dist/summary/orderedClientElection.d.ts +2 -3
  140. package/dist/summary/orderedClientElection.d.ts.map +1 -1
  141. package/dist/summary/orderedClientElection.js +8 -8
  142. package/dist/summary/orderedClientElection.js.map +1 -1
  143. package/dist/summary/runWhileConnectedCoordinator.js +3 -3
  144. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  145. package/dist/summary/runningSummarizer.d.ts +27 -4
  146. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  147. package/dist/summary/runningSummarizer.js +246 -74
  148. package/dist/summary/runningSummarizer.js.map +1 -1
  149. package/dist/summary/summarizer.d.ts +6 -5
  150. package/dist/summary/summarizer.d.ts.map +1 -1
  151. package/dist/summary/summarizer.js +73 -69
  152. package/dist/summary/summarizer.js.map +1 -1
  153. package/dist/summary/summarizerClientElection.d.ts +2 -2
  154. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  155. package/dist/summary/summarizerClientElection.js +2 -2
  156. package/dist/summary/summarizerClientElection.js.map +1 -1
  157. package/dist/summary/summarizerHeuristics.js +2 -2
  158. package/dist/summary/summarizerHeuristics.js.map +1 -1
  159. package/dist/summary/summarizerNode/index.d.ts +1 -1
  160. package/dist/summary/summarizerNode/index.d.ts.map +1 -1
  161. package/dist/summary/summarizerNode/index.js.map +1 -1
  162. package/dist/summary/summarizerNode/summarizerNode.d.ts +5 -14
  163. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  164. package/dist/summary/summarizerNode/summarizerNode.js +32 -109
  165. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  166. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +6 -30
  167. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  168. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  169. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +0 -11
  170. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  171. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +5 -88
  172. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  173. package/dist/summary/summarizerTypes.d.ts +38 -25
  174. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  175. package/dist/summary/summarizerTypes.js.map +1 -1
  176. package/dist/summary/summaryCollection.d.ts +2 -3
  177. package/dist/summary/summaryCollection.d.ts.map +1 -1
  178. package/dist/summary/summaryCollection.js +9 -8
  179. package/dist/summary/summaryCollection.js.map +1 -1
  180. package/dist/summary/summaryFormat.js +2 -2
  181. package/dist/summary/summaryFormat.js.map +1 -1
  182. package/dist/summary/summaryGenerator.d.ts +10 -4
  183. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  184. package/dist/summary/summaryGenerator.js +52 -48
  185. package/dist/summary/summaryGenerator.js.map +1 -1
  186. package/dist/summary/summaryManager.d.ts +7 -6
  187. package/dist/summary/summaryManager.d.ts.map +1 -1
  188. package/dist/summary/summaryManager.js +30 -22
  189. package/dist/summary/summaryManager.js.map +1 -1
  190. package/lib/batchTracker.d.ts +1 -1
  191. package/lib/batchTracker.d.ts.map +1 -1
  192. package/lib/batchTracker.js +3 -2
  193. package/lib/batchTracker.js.map +1 -1
  194. package/lib/blobManager.d.ts +4 -21
  195. package/lib/blobManager.d.ts.map +1 -1
  196. package/lib/blobManager.js +91 -157
  197. package/lib/blobManager.js.map +1 -1
  198. package/lib/connectionTelemetry.d.ts.map +1 -1
  199. package/lib/connectionTelemetry.js +2 -1
  200. package/lib/connectionTelemetry.js.map +1 -1
  201. package/lib/containerRuntime.d.ts +99 -16
  202. package/lib/containerRuntime.d.ts.map +1 -1
  203. package/lib/containerRuntime.js +332 -192
  204. package/lib/containerRuntime.js.map +1 -1
  205. package/lib/dataStore.d.ts.map +1 -1
  206. package/lib/dataStore.js +2 -3
  207. package/lib/dataStore.js.map +1 -1
  208. package/lib/dataStoreContext.d.ts +2 -1
  209. package/lib/dataStoreContext.d.ts.map +1 -1
  210. package/lib/dataStoreContext.js +3 -4
  211. package/lib/dataStoreContext.js.map +1 -1
  212. package/lib/dataStoreContexts.d.ts +1 -2
  213. package/lib/dataStoreContexts.d.ts.map +1 -1
  214. package/lib/dataStoreContexts.js +1 -2
  215. package/lib/dataStoreContexts.js.map +1 -1
  216. package/lib/dataStoreRegistry.js +1 -1
  217. package/lib/dataStoreRegistry.js.map +1 -1
  218. package/lib/dataStores.d.ts.map +1 -1
  219. package/lib/dataStores.js +2 -4
  220. package/lib/dataStores.js.map +1 -1
  221. package/lib/deltaManagerProxyBase.d.ts +1 -1
  222. package/lib/deltaManagerProxyBase.js +1 -1
  223. package/lib/deltaManagerProxyBase.js.map +1 -1
  224. package/lib/deltaScheduler.js +1 -1
  225. package/lib/deltaScheduler.js.map +1 -1
  226. package/lib/error.d.ts +14 -0
  227. package/lib/error.d.ts.map +1 -0
  228. package/lib/error.js +17 -0
  229. package/lib/error.js.map +1 -0
  230. package/lib/gc/garbageCollection.d.ts +4 -6
  231. package/lib/gc/garbageCollection.d.ts.map +1 -1
  232. package/lib/gc/garbageCollection.js +26 -25
  233. package/lib/gc/garbageCollection.js.map +1 -1
  234. package/lib/gc/gcConfigs.d.ts.map +1 -1
  235. package/lib/gc/gcConfigs.js +3 -1
  236. package/lib/gc/gcConfigs.js.map +1 -1
  237. package/lib/gc/gcDefinitions.d.ts +4 -2
  238. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  239. package/lib/gc/gcDefinitions.js.map +1 -1
  240. package/lib/gc/gcHelpers.js +1 -1
  241. package/lib/gc/gcHelpers.js.map +1 -1
  242. package/lib/gc/gcSummaryStateTracker.d.ts +4 -7
  243. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
  244. package/lib/gc/gcSummaryStateTracker.js +16 -53
  245. package/lib/gc/gcSummaryStateTracker.js.map +1 -1
  246. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  247. package/lib/gc/gcTelemetry.js +2 -0
  248. package/lib/gc/gcTelemetry.js.map +1 -1
  249. package/lib/gc/gcUnreferencedStateTracker.js +1 -1
  250. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -1
  251. package/lib/gc/index.d.ts +1 -1
  252. package/lib/gc/index.d.ts.map +1 -1
  253. package/lib/gc/index.js +1 -1
  254. package/lib/gc/index.js.map +1 -1
  255. package/lib/id-compressor/appendOnlySortedMap.d.ts +8 -30
  256. package/lib/id-compressor/appendOnlySortedMap.d.ts.map +1 -1
  257. package/lib/id-compressor/appendOnlySortedMap.js +25 -66
  258. package/lib/id-compressor/appendOnlySortedMap.js.map +1 -1
  259. package/lib/id-compressor/finalSpace.d.ts +29 -0
  260. package/lib/id-compressor/finalSpace.d.ts.map +1 -0
  261. package/lib/id-compressor/finalSpace.js +58 -0
  262. package/lib/id-compressor/finalSpace.js.map +1 -0
  263. package/lib/id-compressor/idCompressor.d.ts +25 -250
  264. package/lib/id-compressor/idCompressor.d.ts.map +1 -1
  265. package/lib/id-compressor/idCompressor.js +382 -1139
  266. package/lib/id-compressor/idCompressor.js.map +1 -1
  267. package/lib/id-compressor/identifiers.d.ts +32 -0
  268. package/lib/id-compressor/identifiers.d.ts.map +1 -0
  269. package/lib/id-compressor/identifiers.js +11 -0
  270. package/lib/id-compressor/identifiers.js.map +1 -0
  271. package/lib/id-compressor/index.d.ts +5 -6
  272. package/lib/id-compressor/index.d.ts.map +1 -1
  273. package/lib/id-compressor/index.js +5 -6
  274. package/lib/id-compressor/index.js.map +1 -1
  275. package/lib/id-compressor/persistanceUtilities.d.ts +22 -0
  276. package/lib/id-compressor/persistanceUtilities.d.ts.map +1 -0
  277. package/lib/id-compressor/persistanceUtilities.js +34 -0
  278. package/lib/id-compressor/persistanceUtilities.js.map +1 -0
  279. package/lib/id-compressor/sessionSpaceNormalizer.d.ts +46 -0
  280. package/lib/id-compressor/sessionSpaceNormalizer.d.ts.map +1 -0
  281. package/lib/id-compressor/sessionSpaceNormalizer.js +76 -0
  282. package/lib/id-compressor/sessionSpaceNormalizer.js.map +1 -0
  283. package/lib/id-compressor/sessions.d.ts +115 -0
  284. package/lib/id-compressor/sessions.d.ts.map +1 -0
  285. package/lib/id-compressor/sessions.js +290 -0
  286. package/lib/id-compressor/sessions.js.map +1 -0
  287. package/lib/id-compressor/utilities.d.ts +49 -0
  288. package/lib/id-compressor/utilities.d.ts.map +1 -0
  289. package/lib/id-compressor/utilities.js +148 -0
  290. package/lib/id-compressor/utilities.js.map +1 -0
  291. package/lib/index.d.ts +3 -3
  292. package/lib/index.d.ts.map +1 -1
  293. package/lib/index.js +2 -2
  294. package/lib/index.js.map +1 -1
  295. package/lib/opLifecycle/opCompressor.js +3 -3
  296. package/lib/opLifecycle/opCompressor.js.map +1 -1
  297. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  298. package/lib/opLifecycle/opDecompressor.js +2 -1
  299. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  300. package/lib/opLifecycle/opGroupingManager.js +1 -1
  301. package/lib/opLifecycle/opGroupingManager.js.map +1 -1
  302. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  303. package/lib/opLifecycle/opSplitter.js +2 -3
  304. package/lib/opLifecycle/opSplitter.js.map +1 -1
  305. package/lib/opLifecycle/outbox.d.ts +1 -0
  306. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  307. package/lib/opLifecycle/outbox.js +7 -8
  308. package/lib/opLifecycle/outbox.js.map +1 -1
  309. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  310. package/lib/opLifecycle/remoteMessageProcessor.js +12 -6
  311. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  312. package/lib/packageVersion.d.ts +1 -1
  313. package/lib/packageVersion.js +1 -1
  314. package/lib/packageVersion.js.map +1 -1
  315. package/lib/pendingStateManager.d.ts +12 -5
  316. package/lib/pendingStateManager.d.ts.map +1 -1
  317. package/lib/pendingStateManager.js +21 -8
  318. package/lib/pendingStateManager.js.map +1 -1
  319. package/lib/scheduleManager.d.ts.map +1 -1
  320. package/lib/scheduleManager.js +3 -3
  321. package/lib/scheduleManager.js.map +1 -1
  322. package/lib/summary/index.d.ts +3 -3
  323. package/lib/summary/index.d.ts.map +1 -1
  324. package/lib/summary/index.js +1 -1
  325. package/lib/summary/index.js.map +1 -1
  326. package/lib/summary/orderedClientElection.d.ts +2 -3
  327. package/lib/summary/orderedClientElection.d.ts.map +1 -1
  328. package/lib/summary/orderedClientElection.js +3 -3
  329. package/lib/summary/orderedClientElection.js.map +1 -1
  330. package/lib/summary/runWhileConnectedCoordinator.js +1 -1
  331. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
  332. package/lib/summary/runningSummarizer.d.ts +27 -4
  333. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  334. package/lib/summary/runningSummarizer.js +240 -68
  335. package/lib/summary/runningSummarizer.js.map +1 -1
  336. package/lib/summary/summarizer.d.ts +6 -5
  337. package/lib/summary/summarizer.d.ts.map +1 -1
  338. package/lib/summary/summarizer.js +69 -65
  339. package/lib/summary/summarizer.js.map +1 -1
  340. package/lib/summary/summarizerClientElection.d.ts +2 -2
  341. package/lib/summary/summarizerClientElection.d.ts.map +1 -1
  342. package/lib/summary/summarizerClientElection.js +1 -1
  343. package/lib/summary/summarizerClientElection.js.map +1 -1
  344. package/lib/summary/summarizerHeuristics.js +1 -1
  345. package/lib/summary/summarizerHeuristics.js.map +1 -1
  346. package/lib/summary/summarizerNode/index.d.ts +1 -1
  347. package/lib/summary/summarizerNode/index.d.ts.map +1 -1
  348. package/lib/summary/summarizerNode/index.js.map +1 -1
  349. package/lib/summary/summarizerNode/summarizerNode.d.ts +5 -14
  350. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  351. package/lib/summary/summarizerNode/summarizerNode.js +16 -93
  352. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  353. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +6 -30
  354. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  355. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  356. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +0 -11
  357. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  358. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +3 -86
  359. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  360. package/lib/summary/summarizerTypes.d.ts +38 -25
  361. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  362. package/lib/summary/summarizerTypes.js.map +1 -1
  363. package/lib/summary/summaryCollection.d.ts +2 -3
  364. package/lib/summary/summaryCollection.d.ts.map +1 -1
  365. package/lib/summary/summaryCollection.js +2 -1
  366. package/lib/summary/summaryCollection.js.map +1 -1
  367. package/lib/summary/summaryFormat.js +1 -1
  368. package/lib/summary/summaryFormat.js.map +1 -1
  369. package/lib/summary/summaryGenerator.d.ts +10 -4
  370. package/lib/summary/summaryGenerator.d.ts.map +1 -1
  371. package/lib/summary/summaryGenerator.js +46 -42
  372. package/lib/summary/summaryGenerator.js.map +1 -1
  373. package/lib/summary/summaryManager.d.ts +7 -6
  374. package/lib/summary/summaryManager.d.ts.map +1 -1
  375. package/lib/summary/summaryManager.js +26 -18
  376. package/lib/summary/summaryManager.js.map +1 -1
  377. package/package.json +30 -29
  378. package/src/batchTracker.ts +3 -2
  379. package/src/blobManager.ts +105 -185
  380. package/src/connectionTelemetry.ts +2 -1
  381. package/src/containerRuntime.ts +481 -267
  382. package/src/dataStore.ts +2 -3
  383. package/src/dataStoreContext.ts +5 -8
  384. package/src/dataStoreContexts.ts +2 -4
  385. package/src/dataStoreRegistry.ts +1 -1
  386. package/src/dataStores.ts +4 -7
  387. package/src/deltaManagerProxyBase.ts +1 -1
  388. package/src/deltaScheduler.ts +1 -1
  389. package/src/error.ts +18 -0
  390. package/src/gc/garbageCollection.ts +39 -41
  391. package/src/gc/gcConfigs.ts +4 -2
  392. package/src/gc/gcDefinitions.ts +4 -6
  393. package/src/gc/gcHelpers.ts +1 -1
  394. package/src/gc/gcSummaryStateTracker.ts +19 -65
  395. package/src/gc/gcTelemetry.ts +2 -0
  396. package/src/gc/gcUnreferencedStateTracker.ts +1 -1
  397. package/src/gc/index.ts +0 -1
  398. package/src/id-compressor/appendOnlySortedMap.ts +26 -87
  399. package/src/id-compressor/finalSpace.ts +67 -0
  400. package/src/id-compressor/idCompressor.ts +456 -1681
  401. package/src/id-compressor/identifiers.ts +42 -0
  402. package/src/id-compressor/index.ts +11 -20
  403. package/src/id-compressor/persistanceUtilities.ts +58 -0
  404. package/src/id-compressor/sessionSpaceNormalizer.ts +83 -0
  405. package/src/id-compressor/sessions.ts +405 -0
  406. package/src/id-compressor/utilities.ts +187 -0
  407. package/src/index.ts +7 -1
  408. package/src/opLifecycle/opCompressor.ts +3 -3
  409. package/src/opLifecycle/opDecompressor.ts +2 -1
  410. package/src/opLifecycle/opGroupingManager.ts +1 -1
  411. package/src/opLifecycle/opSplitter.ts +4 -4
  412. package/src/opLifecycle/outbox.ts +14 -11
  413. package/src/opLifecycle/remoteMessageProcessor.ts +19 -6
  414. package/src/packageVersion.ts +1 -1
  415. package/src/pendingStateManager.ts +50 -29
  416. package/src/scheduleManager.ts +6 -4
  417. package/src/summary/index.ts +4 -3
  418. package/src/summary/orderedClientElection.ts +8 -5
  419. package/src/summary/runWhileConnectedCoordinator.ts +1 -1
  420. package/src/summary/runningSummarizer.ts +273 -97
  421. package/src/summary/summarizer.ts +23 -12
  422. package/src/summary/summarizerClientElection.ts +2 -2
  423. package/src/summary/summarizerHeuristics.ts +1 -1
  424. package/src/summary/summarizerNode/index.ts +1 -2
  425. package/src/summary/summarizerNode/summarizerNode.ts +23 -145
  426. package/src/summary/summarizerNode/summarizerNodeUtils.ts +7 -38
  427. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +3 -123
  428. package/src/summary/summarizerTypes.ts +40 -25
  429. package/src/summary/summaryCollection.ts +3 -3
  430. package/src/summary/summaryFormat.ts +1 -1
  431. package/src/summary/summaryGenerator.ts +52 -55
  432. package/src/summary/summaryManager.ts +36 -13
  433. package/dist/id-compressor/idRange.d.ts +0 -11
  434. package/dist/id-compressor/idRange.d.ts.map +0 -1
  435. package/dist/id-compressor/idRange.js +0 -29
  436. package/dist/id-compressor/idRange.js.map +0 -1
  437. package/dist/id-compressor/numericUuid.d.ts +0 -59
  438. package/dist/id-compressor/numericUuid.d.ts.map +0 -1
  439. package/dist/id-compressor/numericUuid.js +0 -325
  440. package/dist/id-compressor/numericUuid.js.map +0 -1
  441. package/dist/id-compressor/sessionIdNormalizer.d.ts +0 -138
  442. package/dist/id-compressor/sessionIdNormalizer.d.ts.map +0 -1
  443. package/dist/id-compressor/sessionIdNormalizer.js +0 -483
  444. package/dist/id-compressor/sessionIdNormalizer.js.map +0 -1
  445. package/dist/id-compressor/utils.d.ts +0 -57
  446. package/dist/id-compressor/utils.d.ts.map +0 -1
  447. package/dist/id-compressor/utils.js +0 -90
  448. package/dist/id-compressor/utils.js.map +0 -1
  449. package/dist/id-compressor/uuidUtilities.d.ts +0 -28
  450. package/dist/id-compressor/uuidUtilities.d.ts.map +0 -1
  451. package/dist/id-compressor/uuidUtilities.js +0 -104
  452. package/dist/id-compressor/uuidUtilities.js.map +0 -1
  453. package/lib/id-compressor/idRange.d.ts +0 -11
  454. package/lib/id-compressor/idRange.d.ts.map +0 -1
  455. package/lib/id-compressor/idRange.js +0 -25
  456. package/lib/id-compressor/idRange.js.map +0 -1
  457. package/lib/id-compressor/numericUuid.d.ts +0 -59
  458. package/lib/id-compressor/numericUuid.d.ts.map +0 -1
  459. package/lib/id-compressor/numericUuid.js +0 -315
  460. package/lib/id-compressor/numericUuid.js.map +0 -1
  461. package/lib/id-compressor/sessionIdNormalizer.d.ts +0 -138
  462. package/lib/id-compressor/sessionIdNormalizer.d.ts.map +0 -1
  463. package/lib/id-compressor/sessionIdNormalizer.js +0 -479
  464. package/lib/id-compressor/sessionIdNormalizer.js.map +0 -1
  465. package/lib/id-compressor/utils.d.ts +0 -57
  466. package/lib/id-compressor/utils.d.ts.map +0 -1
  467. package/lib/id-compressor/utils.js +0 -79
  468. package/lib/id-compressor/utils.js.map +0 -1
  469. package/lib/id-compressor/uuidUtilities.d.ts +0 -28
  470. package/lib/id-compressor/uuidUtilities.d.ts.map +0 -1
  471. package/lib/id-compressor/uuidUtilities.js +0 -96
  472. package/lib/id-compressor/uuidUtilities.js.map +0 -1
  473. package/src/id-compressor/idRange.ts +0 -35
  474. package/src/id-compressor/numericUuid.ts +0 -383
  475. package/src/id-compressor/sessionIdNormalizer.ts +0 -609
  476. package/src/id-compressor/utils.ts +0 -114
  477. package/src/id-compressor/uuidUtilities.ts +0 -120
@@ -2,15 +2,25 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { isFluidError, createChildMonitoringContext, createChildLogger, } from "@fluidframework/telemetry-utils";
6
- import { assert, delay, Deferred, PromiseTimer } from "@fluidframework/common-utils";
7
- import { UsageError } from "@fluidframework/container-utils";
8
- import { DriverErrorType } from "@fluidframework/driver-definitions";
5
+ import { isFluidError, createChildMonitoringContext, createChildLogger, UsageError, } from "@fluidframework/telemetry-utils";
6
+ import { assert, delay, Deferred, PromiseTimer } from "@fluidframework/core-utils";
7
+ import { TypedEventEmitter } from "@fluid-internal/client-utils";
8
+ import { DriverErrorTypes } from "@fluidframework/driver-definitions";
9
9
  import { MessageType } from "@fluidframework/protocol-definitions";
10
10
  import { opSize } from "../opProperties";
11
11
  import { SummarizeHeuristicRunner } from "./summarizerHeuristics";
12
12
  import { raceTimer, SummarizeResultBuilder, SummaryGenerator, } from "./summaryGenerator";
13
13
  const maxSummarizeAckWaitTime = 10 * 60 * 1000; // 10 minutes
14
+ /**
15
+ * The maximum number of summarization attempts that will be done by default in case of failures
16
+ * that can be retried.
17
+ */
18
+ export const defaultMaxAttempts = 2;
19
+ /**
20
+ * The default value for maximum number of summarization attempts that will be done for summarization failures where
21
+ * submit fails and the failure can be retried.
22
+ */
23
+ export const defaultMaxAttemptsForSubmitFailures = 5;
14
24
  /**
15
25
  * An instance of RunningSummarizer manages the heuristics for summarizing.
16
26
  * Until disposed, the instance of RunningSummarizer can assume that it is
@@ -18,8 +28,9 @@ const maxSummarizeAckWaitTime = 10 * 60 * 1000; // 10 minutes
18
28
  * track of summaries that it is generating as they are broadcast and acked/nacked.
19
29
  * This object is created and controlled by Summarizer object.
20
30
  */
21
- export class RunningSummarizer {
31
+ export class RunningSummarizer extends TypedEventEmitter {
22
32
  constructor(baseLogger, summaryWatcher, configuration, submitSummaryCallback, refreshLatestSummaryAckCallback, heuristicData, summaryCollection, cancellationToken, stopSummarizerCallback, runtime) {
33
+ super();
23
34
  this.summaryWatcher = summaryWatcher;
24
35
  this.configuration = configuration;
25
36
  this.submitSummaryCallback = submitSummaryCallback;
@@ -97,6 +108,14 @@ export class RunningSummarizer {
97
108
  this.handleOp(op, runtimeMessage === true);
98
109
  };
99
110
  this.runtime.on("op", this.runtimeListener);
111
+ // The max attempts for submit failures can be overridden via a feature flag. This allows us to
112
+ // tweak this as per telemetry data until we arrive at a stable number.
113
+ // If its set to a number higher than `defaultMaxAttemptsForSubmitFailures`, it will be ignored.
114
+ const overrideMaxAttempts = this.mc.config.getNumber("Fluid.Summarizer.AttemptsForSubmitFailures");
115
+ this.maxAttemptsForSubmitFailures =
116
+ overrideMaxAttempts && overrideMaxAttempts < defaultMaxAttemptsForSubmitFailures
117
+ ? overrideMaxAttempts
118
+ : defaultMaxAttemptsForSubmitFailures;
100
119
  }
101
120
  static async start(logger, summaryWatcher, configuration, submitSummaryCallback, refreshLatestSummaryAckCallback, heuristicData, summaryCollection, cancellationToken, stopSummarizerCallback, runtime) {
102
121
  const summarizer = new RunningSummarizer(logger, summaryWatcher, configuration, submitSummaryCallback, refreshLatestSummaryAckCallback, heuristicData, summaryCollection, cancellationToken, stopSummarizerCallback, runtime);
@@ -169,7 +188,7 @@ export class RunningSummarizer {
169
188
  // code in `submitSummary` function in container runtime, will refresh the latest state
170
189
  // by calling `refreshLatestSummaryAckFromServer` and we will be fine.
171
190
  const isIgnoredError = isFluidError(error) &&
172
- error.errorType === DriverErrorType.fileNotFoundOrAccessDeniedError;
191
+ error.errorType === DriverErrorTypes.fileNotFoundOrAccessDeniedError;
173
192
  summaryLogger.sendTelemetryEvent({
174
193
  eventName: isIgnoredError
175
194
  ? "HandleSummaryAckErrorIgnored"
@@ -277,7 +296,7 @@ export class RunningSummarizer {
277
296
  if (this.summarizingLock === undefined) {
278
297
  this.trySummarizeOnce(
279
298
  // summarizeProps
280
- { reason: "lastSummary" },
299
+ { summarizeReason: "lastSummary" },
281
300
  // ISummarizeOptions, using defaults: { refreshLatestAck: false, fullTree: false }
282
301
  {});
283
302
  }
@@ -346,11 +365,20 @@ export class RunningSummarizer {
346
365
  * @param resultsBuilder - optional, result builder to use.
347
366
  * @returns ISummarizeResult - result of running a summary.
348
367
  */
349
- trySummarizeOnce(summarizeProps, options, cancellationToken = this.cancellationToken, resultsBuilder = new SummarizeResultBuilder()) {
368
+ trySummarizeOnce(summarizeProps, options, resultsBuilder = new SummarizeResultBuilder()) {
350
369
  this.lockedSummaryAction(() => {
351
370
  this.beforeSummaryAction();
352
371
  }, async () => {
353
- const summarizeResult = this.generator.summarize(summarizeProps, options, cancellationToken, resultsBuilder);
372
+ const summaryLogger = createChildLogger({
373
+ logger: this.mc.logger,
374
+ properties: { all: summarizeProps },
375
+ });
376
+ const summaryOptions = {
377
+ ...options,
378
+ summaryLogger,
379
+ cancellationToken: this.cancellationToken,
380
+ };
381
+ const summarizeResult = this.generator.summarize(summaryOptions, resultsBuilder);
354
382
  // ensure we wait till the end of the process
355
383
  return summarizeResult.receivedSummaryAckOrNack;
356
384
  }, () => {
@@ -364,7 +392,7 @@ export class RunningSummarizer {
364
392
  return resultsBuilder.build();
365
393
  }
366
394
  /** Heuristics summarize attempt. */
367
- trySummarize(reason, cancellationToken = this.cancellationToken) {
395
+ trySummarize(reason) {
368
396
  if (this.summarizingLock !== undefined) {
369
397
  // lockedSummaryAction() will retry heuristic-based summary at the end of current attempt
370
398
  // if it's still needed
@@ -374,64 +402,207 @@ export class RunningSummarizer {
374
402
  this.lockedSummaryAction(() => {
375
403
  this.beforeSummaryAction();
376
404
  }, async () => {
377
- const attempts = [
378
- { refreshLatestAck: false, fullTree: false },
379
- { refreshLatestAck: true, fullTree: false },
380
- ];
381
- let overrideDelaySeconds;
382
- let summaryAttempts = 0;
383
- let summaryAttemptsPerPhase = 0;
384
- let summaryAttemptPhase = 0;
385
- while (summaryAttemptPhase < attempts.length) {
386
- if (this.cancellationToken.cancelled) {
387
- return;
388
- }
389
- // We only want to attempt 1 summary when reason is "lastSummary"
390
- if (++summaryAttempts > 1 && reason === "lastSummary") {
391
- return;
392
- }
393
- summaryAttemptsPerPhase++;
394
- const summarizeOptions = attempts[summaryAttemptPhase];
395
- const summarizeProps = {
396
- reason,
397
- summaryAttempts,
398
- summaryAttemptsPerPhase,
399
- summaryAttemptPhase: summaryAttemptPhase + 1,
400
- ...summarizeOptions,
401
- };
402
- // Note: no need to account for cancellationToken.waitCancelled here, as
403
- // this is accounted SummaryGenerator.summarizeCore that controls receivedSummaryAckOrNack.
404
- const resultSummarize = this.generator.summarize(summarizeProps, summarizeOptions, cancellationToken);
405
- const result = await resultSummarize.receivedSummaryAckOrNack;
406
- if (result.success) {
407
- return;
408
- }
409
- // Check for retryDelay that can come from summaryNack or upload summary flow.
410
- // Retry the same step only once per retryAfter response.
411
- const delaySeconds = result.retryAfterSeconds;
412
- if (delaySeconds === undefined || summaryAttemptsPerPhase > 1) {
413
- summaryAttemptPhase++;
414
- summaryAttemptsPerPhase = 0;
415
- }
416
- if (delaySeconds !== undefined) {
417
- this.mc.logger.sendPerformanceEvent({
418
- eventName: "SummarizeAttemptDelay",
419
- duration: delaySeconds,
420
- summaryNackDelay: overrideDelaySeconds !== undefined,
421
- ...summarizeProps,
422
- });
423
- await delay(delaySeconds * 1000);
424
- }
425
- }
426
- this.stopSummarizerCallback("failToSummarize");
405
+ return this.mc.config.getBoolean("Fluid.Summarizer.UseDynamicRetries")
406
+ ? this.trySummarizeWithRetries(reason)
407
+ : this.trySummarizeWithStaticAttempts(reason);
427
408
  }, () => {
428
409
  this.afterSummaryAction();
429
410
  }).catch((error) => {
430
411
  this.mc.logger.sendErrorEvent({ eventName: "UnexpectedSummarizeError" }, error);
431
412
  });
432
413
  }
414
+ /**
415
+ * Tries to summarize 2 times with pre-defined summary options. If an attempt fails with "retryAfterSeconds"
416
+ * param, that attempt is tried once more.
417
+ */
418
+ async trySummarizeWithStaticAttempts(reason) {
419
+ const attemptOptions = [
420
+ { refreshLatestAck: false, fullTree: false },
421
+ { refreshLatestAck: true, fullTree: false },
422
+ ];
423
+ let summaryAttempts = 0;
424
+ let summaryAttemptsPerPhase = 0;
425
+ let summaryAttemptPhase = 0;
426
+ while (summaryAttemptPhase < attemptOptions.length) {
427
+ if (this.cancellationToken.cancelled) {
428
+ return;
429
+ }
430
+ // We only want to attempt 1 summary when reason is "lastSummary"
431
+ if (++summaryAttempts > 1 && reason === "lastSummary") {
432
+ return;
433
+ }
434
+ summaryAttemptsPerPhase++;
435
+ const summarizeOptions = attemptOptions[summaryAttemptPhase];
436
+ const summarizeProps = {
437
+ summarizeReason: reason,
438
+ summaryAttempts,
439
+ summaryAttemptsPerPhase,
440
+ summaryAttemptPhase: summaryAttemptPhase + 1,
441
+ ...summarizeOptions,
442
+ };
443
+ const summaryLogger = createChildLogger({
444
+ logger: this.mc.logger,
445
+ properties: { all: summarizeProps },
446
+ });
447
+ const summaryOptions = {
448
+ ...summarizeOptions,
449
+ summaryLogger,
450
+ cancellationToken: this.cancellationToken,
451
+ };
452
+ // Note: no need to account for cancellationToken.waitCancelled here, as
453
+ // this is accounted SummaryGenerator.summarizeCore that controls receivedSummaryAckOrNack.
454
+ const resultSummarize = this.generator.summarize(summaryOptions);
455
+ const ackNackResult = await resultSummarize.receivedSummaryAckOrNack;
456
+ if (ackNackResult.success) {
457
+ return;
458
+ }
459
+ // Check for retryDelay that can come from summaryNack, upload summary or submit summary flows.
460
+ // Retry the same step only once per retryAfter response.
461
+ const submitResult = await resultSummarize.summarySubmitted;
462
+ const delaySeconds = !submitResult.success
463
+ ? submitResult.data?.retryAfterSeconds
464
+ : ackNackResult.data?.retryAfterSeconds;
465
+ if (delaySeconds === undefined || summaryAttemptsPerPhase > 1) {
466
+ summaryAttemptPhase++;
467
+ summaryAttemptsPerPhase = 0;
468
+ }
469
+ if (delaySeconds !== undefined) {
470
+ this.mc.logger.sendPerformanceEvent({
471
+ eventName: "SummarizeAttemptDelay",
472
+ duration: delaySeconds,
473
+ summaryNackDelay: ackNackResult.data?.retryAfterSeconds !== undefined,
474
+ ...summarizeProps,
475
+ });
476
+ await delay(delaySeconds * 1000);
477
+ }
478
+ }
479
+ this.stopSummarizerCallback("failToSummarize");
480
+ }
481
+ /**
482
+ * Tries to summarize with retries where retry is based on the failure params.
483
+ * For example, summarization may be retried for failures with "retryAfterSeconds" param.
484
+ */
485
+ async trySummarizeWithRetries(reason) {
486
+ // Helper to set summarize options, telemetry properties and call summarize.
487
+ const attemptSummarize = (attemptNumber, finalAttempt) => {
488
+ const summarizeOptions = {
489
+ fullTree: false,
490
+ };
491
+ const summarizeProps = {
492
+ summarizeReason: reason,
493
+ summaryAttempts: attemptNumber,
494
+ ...summarizeOptions,
495
+ finalAttempt,
496
+ };
497
+ const summaryLogger = createChildLogger({
498
+ logger: this.mc.logger,
499
+ properties: { all: summarizeProps },
500
+ });
501
+ const summaryOptions = {
502
+ ...summarizeOptions,
503
+ summaryLogger,
504
+ cancellationToken: this.cancellationToken,
505
+ finalAttempt,
506
+ };
507
+ const summarizeResult = this.generator.summarize(summaryOptions);
508
+ return { summarizeProps, summarizeResult };
509
+ };
510
+ // The max number of attempts are based on the stage at which summarization failed. If it fails before it is
511
+ // submitted, a different value is used compared to if it fails after submission. Usually, in the former case,
512
+ // we would retry more often as its cheaper and retries are likely to succeed.
513
+ // This makes it harder to predict how many attempts would actually happen as that depends on how far an attempt
514
+ // made. To keep things simple, the max attempts is reset after every attempt based on where it failed. This may
515
+ // result in some failures not being retried depending on what happened before this attempt. That's fine because
516
+ // such scenarios are very unlikely and even if it happens, it would resolve when a new summarizer starts over.
517
+ // For example - When failure switches from one the submit failures to nack failure, only one more retry will
518
+ // happen irrespective of the value of `defaultMaxAttempts`.
519
+ let maxAttempts = defaultMaxAttempts;
520
+ let currentAttempt = 0;
521
+ let retryAfterSeconds;
522
+ let done = false;
523
+ let result = "success";
524
+ do {
525
+ currentAttempt++;
526
+ if (this.cancellationToken.cancelled) {
527
+ result = "canceled";
528
+ done = true;
529
+ break;
530
+ }
531
+ const { summarizeProps, summarizeResult } = attemptSummarize(currentAttempt, false /* finalAttempt */);
532
+ // Ack / nack is the final step, so if it succeeds we're done.
533
+ const ackNackResult = await summarizeResult.receivedSummaryAckOrNack;
534
+ if (ackNackResult.success) {
535
+ result = "success";
536
+ done = true;
537
+ break;
538
+ }
539
+ // Update max attempts and retry params from the failure result.
540
+ // If submit summary failed, use the params from "summarySubmitted" result. Else, use the params
541
+ // from "receivedSummaryAckOrNack" result.
542
+ // Note: Check "summarySubmitted" result first because if it fails, ack nack would fail as well.
543
+ const submitSummaryResult = await summarizeResult.summarySubmitted;
544
+ if (!submitSummaryResult.success) {
545
+ maxAttempts = this.maxAttemptsForSubmitFailures;
546
+ retryAfterSeconds = submitSummaryResult.data?.retryAfterSeconds;
547
+ }
548
+ else {
549
+ maxAttempts = defaultMaxAttempts;
550
+ retryAfterSeconds = ackNackResult.data?.retryAfterSeconds;
551
+ }
552
+ // Emit "summarize" event for this failed attempt.
553
+ result = "failure";
554
+ const eventProps = {
555
+ result,
556
+ currentAttempt,
557
+ maxAttempts,
558
+ error: ackNackResult.error,
559
+ };
560
+ this.emit("summarize", eventProps);
561
+ // If the failure doesn't have "retryAfterSeconds" or the max number of attempts have been done, we're done.
562
+ if (retryAfterSeconds === undefined || currentAttempt >= maxAttempts - 1) {
563
+ done = true;
564
+ }
565
+ // If the failure has "retryAfterSeconds", add a delay of that time. In this case, a final attempt will
566
+ // take place and we need to wait for "retryAfterSeconds" before that.
567
+ if (retryAfterSeconds !== undefined) {
568
+ this.mc.logger.sendPerformanceEvent({
569
+ eventName: "SummarizeAttemptDelay",
570
+ duration: retryAfterSeconds,
571
+ summaryNackDelay: ackNackResult.data?.retryAfterSeconds !== undefined,
572
+ stage: submitSummaryResult.data?.stage,
573
+ dynamicRetries: true,
574
+ ...summarizeProps,
575
+ });
576
+ await delay(retryAfterSeconds * 1000);
577
+ }
578
+ } while (!done);
579
+ // If summarize attempt did not fail, emit "summarize" event and return. A failed attempt may be retried below.
580
+ if (result !== "failure") {
581
+ this.emit("summarize", { result, currentAttempt, maxAttempts });
582
+ return;
583
+ }
584
+ // If summarization wasn't successful above and the failure contains "retryAfterSeconds", perform one last
585
+ // attempt. This gives a chance to the runtime to perform additional steps in the last attempt.
586
+ if (retryAfterSeconds !== undefined) {
587
+ const { summarizeResult } = attemptSummarize(++currentAttempt, true /* finalAttempt */);
588
+ // Ack / nack is the final step, so if it succeeds we're done.
589
+ const ackNackResult = await summarizeResult.receivedSummaryAckOrNack;
590
+ result = ackNackResult.success ? "success" : "failure";
591
+ const eventProps = {
592
+ result,
593
+ currentAttempt,
594
+ maxAttempts,
595
+ error: ackNackResult.success ? undefined : ackNackResult.error,
596
+ };
597
+ this.emit("summarize", eventProps);
598
+ }
599
+ // If summarization is still unsuccessful, stop the summarizer.
600
+ if (result === "failure") {
601
+ this.stopSummarizerCallback("failToSummarize");
602
+ }
603
+ }
433
604
  /** {@inheritdoc (ISummarizer:interface).summarizeOnDemand} */
434
- summarizeOnDemand(resultsBuilder = new SummarizeResultBuilder(), { reason, ...options }) {
605
+ summarizeOnDemand(options, resultsBuilder = new SummarizeResultBuilder()) {
435
606
  if (this.stopping) {
436
607
  resultsBuilder.fail("RunningSummarizer stopped or disposed", undefined);
437
608
  return resultsBuilder.build();
@@ -442,12 +613,13 @@ export class RunningSummarizer {
442
613
  // The heuristics are blocking concurrent summarize attempts.
443
614
  throw new UsageError("Attempted to run an already-running summarizer on demand");
444
615
  }
445
- const result = this.trySummarizeOnce({ reason: `onDemand/${reason}` }, options, this.cancellationToken, resultsBuilder);
616
+ const { reason, ...summarizeOptions } = options;
617
+ const result = this.trySummarizeOnce({ summarizeReason: `onDemand/${reason}` }, summarizeOptions, resultsBuilder);
446
618
  return result;
447
619
  }
448
620
  /** {@inheritdoc (ISummarizer:interface).enqueueSummarize} */
449
- enqueueSummarize({ reason, afterSequenceNumber = 0, override = false, ...options }) {
450
- const onDemandReason = `enqueue;${reason}`;
621
+ enqueueSummarize(options) {
622
+ const { reason, afterSequenceNumber = 0, override = false, ...summarizeOptions } = options;
451
623
  let overridden = false;
452
624
  if (this.enqueuedSummary !== undefined) {
453
625
  if (!override) {
@@ -459,9 +631,9 @@ export class RunningSummarizer {
459
631
  overridden = true;
460
632
  }
461
633
  this.enqueuedSummary = {
462
- reason: onDemandReason,
634
+ reason: `enqueue;${reason}`,
463
635
  afterSequenceNumber,
464
- options,
636
+ summarizeOptions,
465
637
  resultsBuilder: new SummarizeResultBuilder(),
466
638
  };
467
639
  const results = this.enqueuedSummary.resultsBuilder.build();
@@ -485,10 +657,10 @@ export class RunningSummarizer {
485
657
  // If no enqueued summary is ready or a summary is already in progress, take no action.
486
658
  return false;
487
659
  }
488
- const { reason, resultsBuilder, options } = this.enqueuedSummary;
660
+ const { reason, resultsBuilder, summarizeOptions } = this.enqueuedSummary;
489
661
  // Set to undefined first, so that subsequent enqueue attempt while summarize will occur later.
490
662
  this.enqueuedSummary = undefined;
491
- this.trySummarizeOnce({ reason: `enqueuedSummary/${reason}` }, options, this.cancellationToken, resultsBuilder);
663
+ this.trySummarizeOnce({ summarizeReason: `enqueuedSummary/${reason}` }, summarizeOptions, resultsBuilder);
492
664
  return true;
493
665
  }
494
666
  disposeEnqueuedSummary() {