@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
@@ -4,16 +4,26 @@
4
4
  * Licensed under the MIT License.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.RunningSummarizer = void 0;
7
+ exports.RunningSummarizer = exports.defaultMaxAttemptsForSubmitFailures = exports.defaultMaxAttempts = void 0;
8
8
  const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
9
- const common_utils_1 = require("@fluidframework/common-utils");
10
- const container_utils_1 = require("@fluidframework/container-utils");
9
+ const core_utils_1 = require("@fluidframework/core-utils");
10
+ const client_utils_1 = require("@fluid-internal/client-utils");
11
11
  const driver_definitions_1 = require("@fluidframework/driver-definitions");
12
12
  const protocol_definitions_1 = require("@fluidframework/protocol-definitions");
13
13
  const opProperties_1 = require("../opProperties");
14
14
  const summarizerHeuristics_1 = require("./summarizerHeuristics");
15
15
  const summaryGenerator_1 = require("./summaryGenerator");
16
16
  const maxSummarizeAckWaitTime = 10 * 60 * 1000; // 10 minutes
17
+ /**
18
+ * The maximum number of summarization attempts that will be done by default in case of failures
19
+ * that can be retried.
20
+ */
21
+ exports.defaultMaxAttempts = 2;
22
+ /**
23
+ * The default value for maximum number of summarization attempts that will be done for summarization failures where
24
+ * submit fails and the failure can be retried.
25
+ */
26
+ exports.defaultMaxAttemptsForSubmitFailures = 5;
17
27
  /**
18
28
  * An instance of RunningSummarizer manages the heuristics for summarizing.
19
29
  * Until disposed, the instance of RunningSummarizer can assume that it is
@@ -21,8 +31,9 @@ const maxSummarizeAckWaitTime = 10 * 60 * 1000; // 10 minutes
21
31
  * track of summaries that it is generating as they are broadcast and acked/nacked.
22
32
  * This object is created and controlled by Summarizer object.
23
33
  */
24
- class RunningSummarizer {
34
+ class RunningSummarizer extends client_utils_1.TypedEventEmitter {
25
35
  constructor(baseLogger, summaryWatcher, configuration, submitSummaryCallback, refreshLatestSummaryAckCallback, heuristicData, summaryCollection, cancellationToken, stopSummarizerCallback, runtime) {
36
+ super();
26
37
  this.summaryWatcher = summaryWatcher;
27
38
  this.configuration = configuration;
28
39
  this.submitSummaryCallback = submitSummaryCallback;
@@ -61,14 +72,14 @@ class RunningSummarizer {
61
72
  },
62
73
  });
63
74
  if (configuration.state !== "disableHeuristics") {
64
- (0, common_utils_1.assert)(this.configuration.state === "enabled", 0x2ea /* "Configuration state should be enabled" */);
75
+ (0, core_utils_1.assert)(this.configuration.state === "enabled", 0x2ea /* "Configuration state should be enabled" */);
65
76
  this.heuristicRunner = new summarizerHeuristics_1.SummarizeHeuristicRunner(heuristicData, this.configuration, (reason) => this.trySummarize(reason), this.mc.logger);
66
77
  }
67
- (0, common_utils_1.assert)(this.configuration.state !== "disabled", 0x2eb /* "Summary not supported with configuration disabled" */);
78
+ (0, core_utils_1.assert)(this.configuration.state !== "disabled", 0x2eb /* "Summary not supported with configuration disabled" */);
68
79
  // Cap the maximum amount of time client will wait for a summarize op ack to maxSummarizeAckWaitTime
69
80
  // configuration.maxAckWaitTime is composed from defaults, server values, and runtime overrides
70
81
  const maxAckWaitTime = Math.min(this.configuration.maxAckWaitTime, maxSummarizeAckWaitTime);
71
- this.pendingAckTimer = new common_utils_1.PromiseTimer(maxAckWaitTime, () => {
82
+ this.pendingAckTimer = new core_utils_1.PromiseTimer(maxAckWaitTime, () => {
72
83
  // Note: summarizeCount (from ChildLogger definition) may be 0,
73
84
  // since this code path is hit when RunningSummarizer first starts up,
74
85
  // before this instance has kicked off a new summarize run.
@@ -100,6 +111,14 @@ class RunningSummarizer {
100
111
  this.handleOp(op, runtimeMessage === true);
101
112
  };
102
113
  this.runtime.on("op", this.runtimeListener);
114
+ // The max attempts for submit failures can be overridden via a feature flag. This allows us to
115
+ // tweak this as per telemetry data until we arrive at a stable number.
116
+ // If its set to a number higher than `defaultMaxAttemptsForSubmitFailures`, it will be ignored.
117
+ const overrideMaxAttempts = this.mc.config.getNumber("Fluid.Summarizer.AttemptsForSubmitFailures");
118
+ this.maxAttemptsForSubmitFailures =
119
+ overrideMaxAttempts && overrideMaxAttempts < exports.defaultMaxAttemptsForSubmitFailures
120
+ ? overrideMaxAttempts
121
+ : exports.defaultMaxAttemptsForSubmitFailures;
103
122
  }
104
123
  static async start(logger, summaryWatcher, configuration, submitSummaryCallback, refreshLatestSummaryAckCallback, heuristicData, summaryCollection, cancellationToken, stopSummarizerCallback, runtime) {
105
124
  const summarizer = new RunningSummarizer(logger, summaryWatcher, configuration, submitSummaryCallback, refreshLatestSummaryAckCallback, heuristicData, summaryCollection, cancellationToken, stopSummarizerCallback, runtime);
@@ -172,7 +191,7 @@ class RunningSummarizer {
172
191
  // code in `submitSummary` function in container runtime, will refresh the latest state
173
192
  // by calling `refreshLatestSummaryAckFromServer` and we will be fine.
174
193
  const isIgnoredError = (0, telemetry_utils_1.isFluidError)(error) &&
175
- error.errorType === driver_definitions_1.DriverErrorType.fileNotFoundOrAccessDeniedError;
194
+ error.errorType === driver_definitions_1.DriverErrorTypes.fileNotFoundOrAccessDeniedError;
176
195
  summaryLogger.sendTelemetryEvent({
177
196
  eventName: isIgnoredError
178
197
  ? "HandleSummaryAckErrorIgnored"
@@ -208,7 +227,7 @@ class RunningSummarizer {
208
227
  });
209
228
  refSequenceNumber = await this.handleSummaryAck();
210
229
  // A valid Summary Ack must have been processed.
211
- (0, common_utils_1.assert)(refSequenceNumber >= 0, 0x58f /* Invalid ref sequence number */);
230
+ (0, core_utils_1.assert)(refSequenceNumber >= 0, 0x58f /* Invalid ref sequence number */);
212
231
  }
213
232
  }
214
233
  dispose() {
@@ -280,7 +299,7 @@ class RunningSummarizer {
280
299
  if (this.summarizingLock === undefined) {
281
300
  this.trySummarizeOnce(
282
301
  // summarizeProps
283
- { reason: "lastSummary" },
302
+ { summarizeReason: "lastSummary" },
284
303
  // ISummarizeOptions, using defaults: { refreshLatestAck: false, fullTree: false }
285
304
  {});
286
305
  }
@@ -331,8 +350,8 @@ class RunningSummarizer {
331
350
  * @returns - result of action.
332
351
  */
333
352
  async lockedSummaryAction(before, action, after) {
334
- (0, common_utils_1.assert)(this.summarizingLock === undefined, 0x25b /* "Caller is responsible for checking lock" */);
335
- const summarizingLock = new common_utils_1.Deferred();
353
+ (0, core_utils_1.assert)(this.summarizingLock === undefined, 0x25b /* "Caller is responsible for checking lock" */);
354
+ const summarizingLock = new core_utils_1.Deferred();
336
355
  this.summarizingLock = summarizingLock.promise;
337
356
  before();
338
357
  return action().finally(() => {
@@ -349,11 +368,20 @@ class RunningSummarizer {
349
368
  * @param resultsBuilder - optional, result builder to use.
350
369
  * @returns ISummarizeResult - result of running a summary.
351
370
  */
352
- trySummarizeOnce(summarizeProps, options, cancellationToken = this.cancellationToken, resultsBuilder = new summaryGenerator_1.SummarizeResultBuilder()) {
371
+ trySummarizeOnce(summarizeProps, options, resultsBuilder = new summaryGenerator_1.SummarizeResultBuilder()) {
353
372
  this.lockedSummaryAction(() => {
354
373
  this.beforeSummaryAction();
355
374
  }, async () => {
356
- const summarizeResult = this.generator.summarize(summarizeProps, options, cancellationToken, resultsBuilder);
375
+ const summaryLogger = (0, telemetry_utils_1.createChildLogger)({
376
+ logger: this.mc.logger,
377
+ properties: { all: summarizeProps },
378
+ });
379
+ const summaryOptions = {
380
+ ...options,
381
+ summaryLogger,
382
+ cancellationToken: this.cancellationToken,
383
+ };
384
+ const summarizeResult = this.generator.summarize(summaryOptions, resultsBuilder);
357
385
  // ensure we wait till the end of the process
358
386
  return summarizeResult.receivedSummaryAckOrNack;
359
387
  }, () => {
@@ -367,7 +395,7 @@ class RunningSummarizer {
367
395
  return resultsBuilder.build();
368
396
  }
369
397
  /** Heuristics summarize attempt. */
370
- trySummarize(reason, cancellationToken = this.cancellationToken) {
398
+ trySummarize(reason) {
371
399
  if (this.summarizingLock !== undefined) {
372
400
  // lockedSummaryAction() will retry heuristic-based summary at the end of current attempt
373
401
  // if it's still needed
@@ -377,64 +405,207 @@ class RunningSummarizer {
377
405
  this.lockedSummaryAction(() => {
378
406
  this.beforeSummaryAction();
379
407
  }, async () => {
380
- const attempts = [
381
- { refreshLatestAck: false, fullTree: false },
382
- { refreshLatestAck: true, fullTree: false },
383
- ];
384
- let overrideDelaySeconds;
385
- let summaryAttempts = 0;
386
- let summaryAttemptsPerPhase = 0;
387
- let summaryAttemptPhase = 0;
388
- while (summaryAttemptPhase < attempts.length) {
389
- if (this.cancellationToken.cancelled) {
390
- return;
391
- }
392
- // We only want to attempt 1 summary when reason is "lastSummary"
393
- if (++summaryAttempts > 1 && reason === "lastSummary") {
394
- return;
395
- }
396
- summaryAttemptsPerPhase++;
397
- const summarizeOptions = attempts[summaryAttemptPhase];
398
- const summarizeProps = {
399
- reason,
400
- summaryAttempts,
401
- summaryAttemptsPerPhase,
402
- summaryAttemptPhase: summaryAttemptPhase + 1,
403
- ...summarizeOptions,
404
- };
405
- // Note: no need to account for cancellationToken.waitCancelled here, as
406
- // this is accounted SummaryGenerator.summarizeCore that controls receivedSummaryAckOrNack.
407
- const resultSummarize = this.generator.summarize(summarizeProps, summarizeOptions, cancellationToken);
408
- const result = await resultSummarize.receivedSummaryAckOrNack;
409
- if (result.success) {
410
- return;
411
- }
412
- // Check for retryDelay that can come from summaryNack or upload summary flow.
413
- // Retry the same step only once per retryAfter response.
414
- const delaySeconds = result.retryAfterSeconds;
415
- if (delaySeconds === undefined || summaryAttemptsPerPhase > 1) {
416
- summaryAttemptPhase++;
417
- summaryAttemptsPerPhase = 0;
418
- }
419
- if (delaySeconds !== undefined) {
420
- this.mc.logger.sendPerformanceEvent({
421
- eventName: "SummarizeAttemptDelay",
422
- duration: delaySeconds,
423
- summaryNackDelay: overrideDelaySeconds !== undefined,
424
- ...summarizeProps,
425
- });
426
- await (0, common_utils_1.delay)(delaySeconds * 1000);
427
- }
428
- }
429
- this.stopSummarizerCallback("failToSummarize");
408
+ return this.mc.config.getBoolean("Fluid.Summarizer.UseDynamicRetries")
409
+ ? this.trySummarizeWithRetries(reason)
410
+ : this.trySummarizeWithStaticAttempts(reason);
430
411
  }, () => {
431
412
  this.afterSummaryAction();
432
413
  }).catch((error) => {
433
414
  this.mc.logger.sendErrorEvent({ eventName: "UnexpectedSummarizeError" }, error);
434
415
  });
435
416
  }
417
+ /**
418
+ * Tries to summarize 2 times with pre-defined summary options. If an attempt fails with "retryAfterSeconds"
419
+ * param, that attempt is tried once more.
420
+ */
421
+ async trySummarizeWithStaticAttempts(reason) {
422
+ const attemptOptions = [
423
+ { refreshLatestAck: false, fullTree: false },
424
+ { refreshLatestAck: true, fullTree: false },
425
+ ];
426
+ let summaryAttempts = 0;
427
+ let summaryAttemptsPerPhase = 0;
428
+ let summaryAttemptPhase = 0;
429
+ while (summaryAttemptPhase < attemptOptions.length) {
430
+ if (this.cancellationToken.cancelled) {
431
+ return;
432
+ }
433
+ // We only want to attempt 1 summary when reason is "lastSummary"
434
+ if (++summaryAttempts > 1 && reason === "lastSummary") {
435
+ return;
436
+ }
437
+ summaryAttemptsPerPhase++;
438
+ const summarizeOptions = attemptOptions[summaryAttemptPhase];
439
+ const summarizeProps = {
440
+ summarizeReason: reason,
441
+ summaryAttempts,
442
+ summaryAttemptsPerPhase,
443
+ summaryAttemptPhase: summaryAttemptPhase + 1,
444
+ ...summarizeOptions,
445
+ };
446
+ const summaryLogger = (0, telemetry_utils_1.createChildLogger)({
447
+ logger: this.mc.logger,
448
+ properties: { all: summarizeProps },
449
+ });
450
+ const summaryOptions = {
451
+ ...summarizeOptions,
452
+ summaryLogger,
453
+ cancellationToken: this.cancellationToken,
454
+ };
455
+ // Note: no need to account for cancellationToken.waitCancelled here, as
456
+ // this is accounted SummaryGenerator.summarizeCore that controls receivedSummaryAckOrNack.
457
+ const resultSummarize = this.generator.summarize(summaryOptions);
458
+ const ackNackResult = await resultSummarize.receivedSummaryAckOrNack;
459
+ if (ackNackResult.success) {
460
+ return;
461
+ }
462
+ // Check for retryDelay that can come from summaryNack, upload summary or submit summary flows.
463
+ // Retry the same step only once per retryAfter response.
464
+ const submitResult = await resultSummarize.summarySubmitted;
465
+ const delaySeconds = !submitResult.success
466
+ ? submitResult.data?.retryAfterSeconds
467
+ : ackNackResult.data?.retryAfterSeconds;
468
+ if (delaySeconds === undefined || summaryAttemptsPerPhase > 1) {
469
+ summaryAttemptPhase++;
470
+ summaryAttemptsPerPhase = 0;
471
+ }
472
+ if (delaySeconds !== undefined) {
473
+ this.mc.logger.sendPerformanceEvent({
474
+ eventName: "SummarizeAttemptDelay",
475
+ duration: delaySeconds,
476
+ summaryNackDelay: ackNackResult.data?.retryAfterSeconds !== undefined,
477
+ ...summarizeProps,
478
+ });
479
+ await (0, core_utils_1.delay)(delaySeconds * 1000);
480
+ }
481
+ }
482
+ this.stopSummarizerCallback("failToSummarize");
483
+ }
484
+ /**
485
+ * Tries to summarize with retries where retry is based on the failure params.
486
+ * For example, summarization may be retried for failures with "retryAfterSeconds" param.
487
+ */
488
+ async trySummarizeWithRetries(reason) {
489
+ // Helper to set summarize options, telemetry properties and call summarize.
490
+ const attemptSummarize = (attemptNumber, finalAttempt) => {
491
+ const summarizeOptions = {
492
+ fullTree: false,
493
+ };
494
+ const summarizeProps = {
495
+ summarizeReason: reason,
496
+ summaryAttempts: attemptNumber,
497
+ ...summarizeOptions,
498
+ finalAttempt,
499
+ };
500
+ const summaryLogger = (0, telemetry_utils_1.createChildLogger)({
501
+ logger: this.mc.logger,
502
+ properties: { all: summarizeProps },
503
+ });
504
+ const summaryOptions = {
505
+ ...summarizeOptions,
506
+ summaryLogger,
507
+ cancellationToken: this.cancellationToken,
508
+ finalAttempt,
509
+ };
510
+ const summarizeResult = this.generator.summarize(summaryOptions);
511
+ return { summarizeProps, summarizeResult };
512
+ };
513
+ // The max number of attempts are based on the stage at which summarization failed. If it fails before it is
514
+ // submitted, a different value is used compared to if it fails after submission. Usually, in the former case,
515
+ // we would retry more often as its cheaper and retries are likely to succeed.
516
+ // This makes it harder to predict how many attempts would actually happen as that depends on how far an attempt
517
+ // made. To keep things simple, the max attempts is reset after every attempt based on where it failed. This may
518
+ // result in some failures not being retried depending on what happened before this attempt. That's fine because
519
+ // such scenarios are very unlikely and even if it happens, it would resolve when a new summarizer starts over.
520
+ // For example - When failure switches from one the submit failures to nack failure, only one more retry will
521
+ // happen irrespective of the value of `defaultMaxAttempts`.
522
+ let maxAttempts = exports.defaultMaxAttempts;
523
+ let currentAttempt = 0;
524
+ let retryAfterSeconds;
525
+ let done = false;
526
+ let result = "success";
527
+ do {
528
+ currentAttempt++;
529
+ if (this.cancellationToken.cancelled) {
530
+ result = "canceled";
531
+ done = true;
532
+ break;
533
+ }
534
+ const { summarizeProps, summarizeResult } = attemptSummarize(currentAttempt, false /* finalAttempt */);
535
+ // Ack / nack is the final step, so if it succeeds we're done.
536
+ const ackNackResult = await summarizeResult.receivedSummaryAckOrNack;
537
+ if (ackNackResult.success) {
538
+ result = "success";
539
+ done = true;
540
+ break;
541
+ }
542
+ // Update max attempts and retry params from the failure result.
543
+ // If submit summary failed, use the params from "summarySubmitted" result. Else, use the params
544
+ // from "receivedSummaryAckOrNack" result.
545
+ // Note: Check "summarySubmitted" result first because if it fails, ack nack would fail as well.
546
+ const submitSummaryResult = await summarizeResult.summarySubmitted;
547
+ if (!submitSummaryResult.success) {
548
+ maxAttempts = this.maxAttemptsForSubmitFailures;
549
+ retryAfterSeconds = submitSummaryResult.data?.retryAfterSeconds;
550
+ }
551
+ else {
552
+ maxAttempts = exports.defaultMaxAttempts;
553
+ retryAfterSeconds = ackNackResult.data?.retryAfterSeconds;
554
+ }
555
+ // Emit "summarize" event for this failed attempt.
556
+ result = "failure";
557
+ const eventProps = {
558
+ result,
559
+ currentAttempt,
560
+ maxAttempts,
561
+ error: ackNackResult.error,
562
+ };
563
+ this.emit("summarize", eventProps);
564
+ // If the failure doesn't have "retryAfterSeconds" or the max number of attempts have been done, we're done.
565
+ if (retryAfterSeconds === undefined || currentAttempt >= maxAttempts - 1) {
566
+ done = true;
567
+ }
568
+ // If the failure has "retryAfterSeconds", add a delay of that time. In this case, a final attempt will
569
+ // take place and we need to wait for "retryAfterSeconds" before that.
570
+ if (retryAfterSeconds !== undefined) {
571
+ this.mc.logger.sendPerformanceEvent({
572
+ eventName: "SummarizeAttemptDelay",
573
+ duration: retryAfterSeconds,
574
+ summaryNackDelay: ackNackResult.data?.retryAfterSeconds !== undefined,
575
+ stage: submitSummaryResult.data?.stage,
576
+ dynamicRetries: true,
577
+ ...summarizeProps,
578
+ });
579
+ await (0, core_utils_1.delay)(retryAfterSeconds * 1000);
580
+ }
581
+ } while (!done);
582
+ // If summarize attempt did not fail, emit "summarize" event and return. A failed attempt may be retried below.
583
+ if (result !== "failure") {
584
+ this.emit("summarize", { result, currentAttempt, maxAttempts });
585
+ return;
586
+ }
587
+ // If summarization wasn't successful above and the failure contains "retryAfterSeconds", perform one last
588
+ // attempt. This gives a chance to the runtime to perform additional steps in the last attempt.
589
+ if (retryAfterSeconds !== undefined) {
590
+ const { summarizeResult } = attemptSummarize(++currentAttempt, true /* finalAttempt */);
591
+ // Ack / nack is the final step, so if it succeeds we're done.
592
+ const ackNackResult = await summarizeResult.receivedSummaryAckOrNack;
593
+ result = ackNackResult.success ? "success" : "failure";
594
+ const eventProps = {
595
+ result,
596
+ currentAttempt,
597
+ maxAttempts,
598
+ error: ackNackResult.success ? undefined : ackNackResult.error,
599
+ };
600
+ this.emit("summarize", eventProps);
601
+ }
602
+ // If summarization is still unsuccessful, stop the summarizer.
603
+ if (result === "failure") {
604
+ this.stopSummarizerCallback("failToSummarize");
605
+ }
606
+ }
436
607
  /** {@inheritdoc (ISummarizer:interface).summarizeOnDemand} */
437
- summarizeOnDemand(resultsBuilder = new summaryGenerator_1.SummarizeResultBuilder(), { reason, ...options }) {
608
+ summarizeOnDemand(options, resultsBuilder = new summaryGenerator_1.SummarizeResultBuilder()) {
438
609
  if (this.stopping) {
439
610
  resultsBuilder.fail("RunningSummarizer stopped or disposed", undefined);
440
611
  return resultsBuilder.build();
@@ -443,14 +614,15 @@ class RunningSummarizer {
443
614
  // return a promise that caller can await before trying again.
444
615
  if (this.summarizingLock !== undefined) {
445
616
  // The heuristics are blocking concurrent summarize attempts.
446
- throw new container_utils_1.UsageError("Attempted to run an already-running summarizer on demand");
617
+ throw new telemetry_utils_1.UsageError("Attempted to run an already-running summarizer on demand");
447
618
  }
448
- const result = this.trySummarizeOnce({ reason: `onDemand/${reason}` }, options, this.cancellationToken, resultsBuilder);
619
+ const { reason, ...summarizeOptions } = options;
620
+ const result = this.trySummarizeOnce({ summarizeReason: `onDemand/${reason}` }, summarizeOptions, resultsBuilder);
449
621
  return result;
450
622
  }
451
623
  /** {@inheritdoc (ISummarizer:interface).enqueueSummarize} */
452
- enqueueSummarize({ reason, afterSequenceNumber = 0, override = false, ...options }) {
453
- const onDemandReason = `enqueue;${reason}`;
624
+ enqueueSummarize(options) {
625
+ const { reason, afterSequenceNumber = 0, override = false, ...summarizeOptions } = options;
454
626
  let overridden = false;
455
627
  if (this.enqueuedSummary !== undefined) {
456
628
  if (!override) {
@@ -462,9 +634,9 @@ class RunningSummarizer {
462
634
  overridden = true;
463
635
  }
464
636
  this.enqueuedSummary = {
465
- reason: onDemandReason,
637
+ reason: `enqueue;${reason}`,
466
638
  afterSequenceNumber,
467
- options,
639
+ summarizeOptions,
468
640
  resultsBuilder: new summaryGenerator_1.SummarizeResultBuilder(),
469
641
  };
470
642
  const results = this.enqueuedSummary.resultsBuilder.build();
@@ -488,10 +660,10 @@ class RunningSummarizer {
488
660
  // If no enqueued summary is ready or a summary is already in progress, take no action.
489
661
  return false;
490
662
  }
491
- const { reason, resultsBuilder, options } = this.enqueuedSummary;
663
+ const { reason, resultsBuilder, summarizeOptions } = this.enqueuedSummary;
492
664
  // Set to undefined first, so that subsequent enqueue attempt while summarize will occur later.
493
665
  this.enqueuedSummary = undefined;
494
- this.trySummarizeOnce({ reason: `enqueuedSummary/${reason}` }, options, this.cancellationToken, resultsBuilder);
666
+ this.trySummarizeOnce({ summarizeReason: `enqueuedSummary/${reason}` }, summarizeOptions, resultsBuilder);
495
667
  return true;
496
668
  }
497
669
  disposeEnqueuedSummary() {