@fluidframework/container-runtime 2.0.0-dev.5.2.0.169897 → 2.0.0-dev.6.4.0.191258

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 (561) hide show
  1. package/CHANGELOG.md +147 -0
  2. package/README.md +4 -3
  3. package/dist/batchTracker.d.ts +3 -2
  4. package/dist/batchTracker.d.ts.map +1 -1
  5. package/dist/batchTracker.js +6 -5
  6. package/dist/batchTracker.js.map +1 -1
  7. package/dist/blobManager.d.ts +15 -18
  8. package/dist/blobManager.d.ts.map +1 -1
  9. package/dist/blobManager.js +212 -171
  10. package/dist/blobManager.js.map +1 -1
  11. package/dist/connectionTelemetry.d.ts.map +1 -1
  12. package/dist/connectionTelemetry.js +33 -17
  13. package/dist/connectionTelemetry.js.map +1 -1
  14. package/dist/containerRuntime.d.ts +172 -35
  15. package/dist/containerRuntime.d.ts.map +1 -1
  16. package/dist/containerRuntime.js +722 -425
  17. package/dist/containerRuntime.js.map +1 -1
  18. package/dist/dataStore.d.ts.map +1 -1
  19. package/dist/dataStore.js +15 -7
  20. package/dist/dataStore.js.map +1 -1
  21. package/dist/dataStoreContext.d.ts +4 -4
  22. package/dist/dataStoreContext.d.ts.map +1 -1
  23. package/dist/dataStoreContext.js +87 -90
  24. package/dist/dataStoreContext.js.map +1 -1
  25. package/dist/dataStoreContexts.d.ts +1 -1
  26. package/dist/dataStoreContexts.d.ts.map +1 -1
  27. package/dist/dataStoreContexts.js +10 -10
  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 +23 -7
  32. package/dist/dataStores.d.ts.map +1 -1
  33. package/dist/dataStores.js +125 -82
  34. package/dist/dataStores.js.map +1 -1
  35. package/dist/deltaManagerProxyBase.d.ts +35 -0
  36. package/dist/deltaManagerProxyBase.d.ts.map +1 -0
  37. package/dist/deltaManagerProxyBase.js +77 -0
  38. package/dist/deltaManagerProxyBase.js.map +1 -0
  39. package/dist/deltaManagerSummarizerProxy.d.ts +1 -1
  40. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
  41. package/dist/deltaManagerSummarizerProxy.js +4 -2
  42. package/dist/deltaManagerSummarizerProxy.js.map +1 -1
  43. package/dist/deltaScheduler.d.ts.map +1 -1
  44. package/dist/deltaScheduler.js +10 -10
  45. package/dist/deltaScheduler.js.map +1 -1
  46. package/dist/error.d.ts +14 -0
  47. package/dist/error.d.ts.map +1 -0
  48. package/dist/error.js +21 -0
  49. package/dist/error.js.map +1 -0
  50. package/dist/gc/garbageCollection.d.ts +10 -9
  51. package/dist/gc/garbageCollection.d.ts.map +1 -1
  52. package/dist/gc/garbageCollection.js +65 -56
  53. package/dist/gc/garbageCollection.js.map +1 -1
  54. package/dist/gc/gcConfigs.d.ts.map +1 -1
  55. package/dist/gc/gcConfigs.js +18 -14
  56. package/dist/gc/gcConfigs.js.map +1 -1
  57. package/dist/gc/gcDefinitions.d.ts +17 -5
  58. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  59. package/dist/gc/gcDefinitions.js +14 -15
  60. package/dist/gc/gcDefinitions.js.map +1 -1
  61. package/dist/gc/gcHelpers.d.ts +0 -8
  62. package/dist/gc/gcHelpers.d.ts.map +1 -1
  63. package/dist/gc/gcHelpers.js +11 -24
  64. package/dist/gc/gcHelpers.js.map +1 -1
  65. package/dist/gc/gcSummaryStateTracker.d.ts +4 -7
  66. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  67. package/dist/gc/gcSummaryStateTracker.js +19 -58
  68. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  69. package/dist/gc/gcTelemetry.d.ts +1 -1
  70. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  71. package/dist/gc/gcTelemetry.js +45 -35
  72. package/dist/gc/gcTelemetry.js.map +1 -1
  73. package/dist/gc/gcUnreferencedStateTracker.js +4 -4
  74. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  75. package/dist/gc/index.d.ts +2 -2
  76. package/dist/gc/index.d.ts.map +1 -1
  77. package/dist/gc/index.js +3 -5
  78. package/dist/gc/index.js.map +1 -1
  79. package/dist/id-compressor/appendOnlySortedMap.d.ts +8 -30
  80. package/dist/id-compressor/appendOnlySortedMap.d.ts.map +1 -1
  81. package/dist/id-compressor/appendOnlySortedMap.js +26 -68
  82. package/dist/id-compressor/appendOnlySortedMap.js.map +1 -1
  83. package/dist/id-compressor/finalSpace.d.ts +29 -0
  84. package/dist/id-compressor/finalSpace.d.ts.map +1 -0
  85. package/dist/id-compressor/finalSpace.js +62 -0
  86. package/dist/id-compressor/finalSpace.js.map +1 -0
  87. package/dist/id-compressor/idCompressor.d.ts +25 -250
  88. package/dist/id-compressor/idCompressor.d.ts.map +1 -1
  89. package/dist/id-compressor/idCompressor.js +390 -1153
  90. package/dist/id-compressor/idCompressor.js.map +1 -1
  91. package/dist/id-compressor/identifiers.d.ts +32 -0
  92. package/dist/id-compressor/identifiers.d.ts.map +1 -0
  93. package/dist/id-compressor/identifiers.js +15 -0
  94. package/dist/id-compressor/identifiers.js.map +1 -0
  95. package/dist/id-compressor/index.d.ts +5 -6
  96. package/dist/id-compressor/index.d.ts.map +1 -1
  97. package/dist/id-compressor/index.js +20 -26
  98. package/dist/id-compressor/index.js.map +1 -1
  99. package/dist/id-compressor/persistanceUtilities.d.ts +22 -0
  100. package/dist/id-compressor/persistanceUtilities.d.ts.map +1 -0
  101. package/dist/id-compressor/persistanceUtilities.js +43 -0
  102. package/dist/id-compressor/persistanceUtilities.js.map +1 -0
  103. package/dist/id-compressor/sessionSpaceNormalizer.d.ts +46 -0
  104. package/dist/id-compressor/sessionSpaceNormalizer.d.ts.map +1 -0
  105. package/dist/id-compressor/sessionSpaceNormalizer.js +80 -0
  106. package/dist/id-compressor/sessionSpaceNormalizer.js.map +1 -0
  107. package/dist/id-compressor/sessions.d.ts +115 -0
  108. package/dist/id-compressor/sessions.d.ts.map +1 -0
  109. package/dist/id-compressor/sessions.js +305 -0
  110. package/dist/id-compressor/sessions.js.map +1 -0
  111. package/dist/id-compressor/utilities.d.ts +49 -0
  112. package/dist/id-compressor/utilities.d.ts.map +1 -0
  113. package/dist/id-compressor/utilities.js +166 -0
  114. package/dist/id-compressor/utilities.js.map +1 -0
  115. package/dist/index.d.ts +3 -3
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +6 -4
  118. package/dist/index.js.map +1 -1
  119. package/dist/metadata.d.ts +18 -0
  120. package/dist/metadata.d.ts.map +1 -0
  121. package/dist/metadata.js +7 -0
  122. package/dist/metadata.js.map +1 -0
  123. package/dist/opLifecycle/batchManager.d.ts +2 -1
  124. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  125. package/dist/opLifecycle/batchManager.js +15 -7
  126. package/dist/opLifecycle/batchManager.js.map +1 -1
  127. package/dist/opLifecycle/definitions.d.ts +11 -0
  128. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  129. package/dist/opLifecycle/definitions.js.map +1 -1
  130. package/dist/opLifecycle/index.d.ts +1 -1
  131. package/dist/opLifecycle/index.d.ts.map +1 -1
  132. package/dist/opLifecycle/index.js +2 -1
  133. package/dist/opLifecycle/index.js.map +1 -1
  134. package/dist/opLifecycle/opCompressor.d.ts +2 -2
  135. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  136. package/dist/opLifecycle/opCompressor.js +12 -7
  137. package/dist/opLifecycle/opCompressor.js.map +1 -1
  138. package/dist/opLifecycle/opDecompressor.d.ts +2 -2
  139. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  140. package/dist/opLifecycle/opDecompressor.js +30 -21
  141. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  142. package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
  143. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  144. package/dist/opLifecycle/opGroupingManager.js +19 -13
  145. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  146. package/dist/opLifecycle/opSplitter.d.ts +2 -2
  147. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  148. package/dist/opLifecycle/opSplitter.js +24 -19
  149. package/dist/opLifecycle/opSplitter.js.map +1 -1
  150. package/dist/opLifecycle/outbox.d.ts +39 -6
  151. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  152. package/dist/opLifecycle/outbox.js +138 -61
  153. package/dist/opLifecycle/outbox.js.map +1 -1
  154. package/dist/opLifecycle/remoteMessageProcessor.d.ts +6 -1
  155. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  156. package/dist/opLifecycle/remoteMessageProcessor.js +22 -8
  157. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  158. package/dist/opProperties.js +1 -2
  159. package/dist/opProperties.js.map +1 -1
  160. package/dist/packageVersion.d.ts +1 -1
  161. package/dist/packageVersion.js +1 -1
  162. package/dist/packageVersion.js.map +1 -1
  163. package/dist/pendingStateManager.d.ts +25 -10
  164. package/dist/pendingStateManager.d.ts.map +1 -1
  165. package/dist/pendingStateManager.js +101 -64
  166. package/dist/pendingStateManager.js.map +1 -1
  167. package/dist/scheduleManager.d.ts.map +1 -1
  168. package/dist/scheduleManager.js +43 -33
  169. package/dist/scheduleManager.js.map +1 -1
  170. package/dist/summary/index.d.ts +4 -4
  171. package/dist/summary/index.d.ts.map +1 -1
  172. package/dist/summary/index.js +3 -1
  173. package/dist/summary/index.js.map +1 -1
  174. package/dist/summary/orderedClientElection.d.ts +3 -3
  175. package/dist/summary/orderedClientElection.d.ts.map +1 -1
  176. package/dist/summary/orderedClientElection.js +26 -27
  177. package/dist/summary/orderedClientElection.js.map +1 -1
  178. package/dist/summary/runWhileConnectedCoordinator.js +3 -3
  179. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  180. package/dist/summary/runningSummarizer.d.ts +31 -10
  181. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  182. package/dist/summary/runningSummarizer.js +271 -139
  183. package/dist/summary/runningSummarizer.js.map +1 -1
  184. package/dist/summary/summarizer.d.ts +8 -7
  185. package/dist/summary/summarizer.d.ts.map +1 -1
  186. package/dist/summary/summarizer.js +79 -78
  187. package/dist/summary/summarizer.js.map +1 -1
  188. package/dist/summary/summarizerClientElection.d.ts +2 -2
  189. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  190. package/dist/summary/summarizerClientElection.js +7 -11
  191. package/dist/summary/summarizerClientElection.js.map +1 -1
  192. package/dist/summary/summarizerHeuristics.js +10 -14
  193. package/dist/summary/summarizerHeuristics.js.map +1 -1
  194. package/dist/summary/summarizerNode/index.d.ts +1 -1
  195. package/dist/summary/summarizerNode/index.d.ts.map +1 -1
  196. package/dist/summary/summarizerNode/index.js.map +1 -1
  197. package/dist/summary/summarizerNode/summarizerNode.d.ts +40 -23
  198. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  199. package/dist/summary/summarizerNode/summarizerNode.js +144 -149
  200. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  201. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +25 -29
  202. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  203. package/dist/summary/summarizerNode/summarizerNodeUtils.js +2 -4
  204. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  205. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +21 -16
  206. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  207. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +74 -123
  208. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  209. package/dist/summary/summarizerTypes.d.ts +44 -24
  210. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  211. package/dist/summary/summarizerTypes.js.map +1 -1
  212. package/dist/summary/summaryCollection.d.ts +2 -2
  213. package/dist/summary/summaryCollection.d.ts.map +1 -1
  214. package/dist/summary/summaryCollection.js +16 -13
  215. package/dist/summary/summaryCollection.js.map +1 -1
  216. package/dist/summary/summaryFormat.d.ts +4 -0
  217. package/dist/summary/summaryFormat.d.ts.map +1 -1
  218. package/dist/summary/summaryFormat.js +8 -5
  219. package/dist/summary/summaryFormat.js.map +1 -1
  220. package/dist/summary/summaryGenerator.d.ts +21 -6
  221. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  222. package/dist/summary/summaryGenerator.js +117 -54
  223. package/dist/summary/summaryGenerator.js.map +1 -1
  224. package/dist/summary/summaryManager.d.ts +8 -7
  225. package/dist/summary/summaryManager.d.ts.map +1 -1
  226. package/dist/summary/summaryManager.js +38 -28
  227. package/dist/summary/summaryManager.js.map +1 -1
  228. package/lib/batchTracker.d.ts +3 -2
  229. package/lib/batchTracker.d.ts.map +1 -1
  230. package/lib/batchTracker.js +5 -4
  231. package/lib/batchTracker.js.map +1 -1
  232. package/lib/blobManager.d.ts +15 -18
  233. package/lib/blobManager.d.ts.map +1 -1
  234. package/lib/blobManager.js +187 -146
  235. package/lib/blobManager.js.map +1 -1
  236. package/lib/connectionTelemetry.d.ts.map +1 -1
  237. package/lib/connectionTelemetry.js +23 -7
  238. package/lib/connectionTelemetry.js.map +1 -1
  239. package/lib/containerRuntime.d.ts +172 -35
  240. package/lib/containerRuntime.d.ts.map +1 -1
  241. package/lib/containerRuntime.js +678 -380
  242. package/lib/containerRuntime.js.map +1 -1
  243. package/lib/dataStore.d.ts.map +1 -1
  244. package/lib/dataStore.js +13 -5
  245. package/lib/dataStore.js.map +1 -1
  246. package/lib/dataStoreContext.d.ts +4 -4
  247. package/lib/dataStoreContext.d.ts.map +1 -1
  248. package/lib/dataStoreContext.js +49 -52
  249. package/lib/dataStoreContext.js.map +1 -1
  250. package/lib/dataStoreContexts.d.ts +1 -1
  251. package/lib/dataStoreContexts.d.ts.map +1 -1
  252. package/lib/dataStoreContexts.js +3 -3
  253. package/lib/dataStoreContexts.js.map +1 -1
  254. package/lib/dataStoreRegistry.js +1 -1
  255. package/lib/dataStoreRegistry.js.map +1 -1
  256. package/lib/dataStores.d.ts +23 -7
  257. package/lib/dataStores.d.ts.map +1 -1
  258. package/lib/dataStores.js +107 -64
  259. package/lib/dataStores.js.map +1 -1
  260. package/lib/deltaManagerProxyBase.d.ts +35 -0
  261. package/lib/deltaManagerProxyBase.d.ts.map +1 -0
  262. package/lib/deltaManagerProxyBase.js +73 -0
  263. package/lib/deltaManagerProxyBase.js.map +1 -0
  264. package/lib/deltaManagerSummarizerProxy.d.ts +1 -1
  265. package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -1
  266. package/lib/deltaManagerSummarizerProxy.js +3 -1
  267. package/lib/deltaManagerSummarizerProxy.js.map +1 -1
  268. package/lib/deltaScheduler.d.ts.map +1 -1
  269. package/lib/deltaScheduler.js +7 -7
  270. package/lib/deltaScheduler.js.map +1 -1
  271. package/lib/error.d.ts +14 -0
  272. package/lib/error.d.ts.map +1 -0
  273. package/lib/error.js +17 -0
  274. package/lib/error.js.map +1 -0
  275. package/lib/gc/garbageCollection.d.ts +10 -9
  276. package/lib/gc/garbageCollection.d.ts.map +1 -1
  277. package/lib/gc/garbageCollection.js +61 -52
  278. package/lib/gc/garbageCollection.js.map +1 -1
  279. package/lib/gc/gcConfigs.d.ts.map +1 -1
  280. package/lib/gc/gcConfigs.js +16 -12
  281. package/lib/gc/gcConfigs.js.map +1 -1
  282. package/lib/gc/gcDefinitions.d.ts +17 -5
  283. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  284. package/lib/gc/gcDefinitions.js +13 -14
  285. package/lib/gc/gcDefinitions.js.map +1 -1
  286. package/lib/gc/gcHelpers.d.ts +0 -8
  287. package/lib/gc/gcHelpers.d.ts.map +1 -1
  288. package/lib/gc/gcHelpers.js +5 -17
  289. package/lib/gc/gcHelpers.js.map +1 -1
  290. package/lib/gc/gcSummaryStateTracker.d.ts +4 -7
  291. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
  292. package/lib/gc/gcSummaryStateTracker.js +20 -59
  293. package/lib/gc/gcSummaryStateTracker.js.map +1 -1
  294. package/lib/gc/gcTelemetry.d.ts +1 -1
  295. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  296. package/lib/gc/gcTelemetry.js +46 -36
  297. package/lib/gc/gcTelemetry.js.map +1 -1
  298. package/lib/gc/gcUnreferencedStateTracker.js +1 -1
  299. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -1
  300. package/lib/gc/index.d.ts +2 -2
  301. package/lib/gc/index.d.ts.map +1 -1
  302. package/lib/gc/index.js +2 -2
  303. package/lib/gc/index.js.map +1 -1
  304. package/lib/id-compressor/appendOnlySortedMap.d.ts +8 -30
  305. package/lib/id-compressor/appendOnlySortedMap.d.ts.map +1 -1
  306. package/lib/id-compressor/appendOnlySortedMap.js +25 -66
  307. package/lib/id-compressor/appendOnlySortedMap.js.map +1 -1
  308. package/lib/id-compressor/finalSpace.d.ts +29 -0
  309. package/lib/id-compressor/finalSpace.d.ts.map +1 -0
  310. package/lib/id-compressor/finalSpace.js +58 -0
  311. package/lib/id-compressor/finalSpace.js.map +1 -0
  312. package/lib/id-compressor/idCompressor.d.ts +25 -250
  313. package/lib/id-compressor/idCompressor.d.ts.map +1 -1
  314. package/lib/id-compressor/idCompressor.js +385 -1142
  315. package/lib/id-compressor/idCompressor.js.map +1 -1
  316. package/lib/id-compressor/identifiers.d.ts +32 -0
  317. package/lib/id-compressor/identifiers.d.ts.map +1 -0
  318. package/lib/id-compressor/identifiers.js +11 -0
  319. package/lib/id-compressor/identifiers.js.map +1 -0
  320. package/lib/id-compressor/index.d.ts +5 -6
  321. package/lib/id-compressor/index.d.ts.map +1 -1
  322. package/lib/id-compressor/index.js +5 -6
  323. package/lib/id-compressor/index.js.map +1 -1
  324. package/lib/id-compressor/persistanceUtilities.d.ts +22 -0
  325. package/lib/id-compressor/persistanceUtilities.d.ts.map +1 -0
  326. package/lib/id-compressor/persistanceUtilities.js +34 -0
  327. package/lib/id-compressor/persistanceUtilities.js.map +1 -0
  328. package/lib/id-compressor/sessionSpaceNormalizer.d.ts +46 -0
  329. package/lib/id-compressor/sessionSpaceNormalizer.d.ts.map +1 -0
  330. package/lib/id-compressor/sessionSpaceNormalizer.js +76 -0
  331. package/lib/id-compressor/sessionSpaceNormalizer.js.map +1 -0
  332. package/lib/id-compressor/sessions.d.ts +115 -0
  333. package/lib/id-compressor/sessions.d.ts.map +1 -0
  334. package/lib/id-compressor/sessions.js +290 -0
  335. package/lib/id-compressor/sessions.js.map +1 -0
  336. package/lib/id-compressor/utilities.d.ts +49 -0
  337. package/lib/id-compressor/utilities.d.ts.map +1 -0
  338. package/lib/id-compressor/utilities.js +148 -0
  339. package/lib/id-compressor/utilities.js.map +1 -0
  340. package/lib/index.d.ts +3 -3
  341. package/lib/index.d.ts.map +1 -1
  342. package/lib/index.js +2 -2
  343. package/lib/index.js.map +1 -1
  344. package/lib/metadata.d.ts +18 -0
  345. package/lib/metadata.d.ts.map +1 -0
  346. package/lib/metadata.js +6 -0
  347. package/lib/metadata.js.map +1 -0
  348. package/lib/opLifecycle/batchManager.d.ts +2 -1
  349. package/lib/opLifecycle/batchManager.d.ts.map +1 -1
  350. package/lib/opLifecycle/batchManager.js +15 -7
  351. package/lib/opLifecycle/batchManager.js.map +1 -1
  352. package/lib/opLifecycle/definitions.d.ts +11 -0
  353. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  354. package/lib/opLifecycle/definitions.js.map +1 -1
  355. package/lib/opLifecycle/index.d.ts +1 -1
  356. package/lib/opLifecycle/index.d.ts.map +1 -1
  357. package/lib/opLifecycle/index.js +1 -1
  358. package/lib/opLifecycle/index.js.map +1 -1
  359. package/lib/opLifecycle/opCompressor.d.ts +2 -2
  360. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  361. package/lib/opLifecycle/opCompressor.js +10 -5
  362. package/lib/opLifecycle/opCompressor.js.map +1 -1
  363. package/lib/opLifecycle/opDecompressor.d.ts +2 -2
  364. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  365. package/lib/opLifecycle/opDecompressor.js +22 -13
  366. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  367. package/lib/opLifecycle/opGroupingManager.d.ts +1 -1
  368. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
  369. package/lib/opLifecycle/opGroupingManager.js +17 -11
  370. package/lib/opLifecycle/opGroupingManager.js.map +1 -1
  371. package/lib/opLifecycle/opSplitter.d.ts +2 -2
  372. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  373. package/lib/opLifecycle/opSplitter.js +15 -10
  374. package/lib/opLifecycle/opSplitter.js.map +1 -1
  375. package/lib/opLifecycle/outbox.d.ts +39 -6
  376. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  377. package/lib/opLifecycle/outbox.js +132 -56
  378. package/lib/opLifecycle/outbox.js.map +1 -1
  379. package/lib/opLifecycle/remoteMessageProcessor.d.ts +6 -1
  380. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  381. package/lib/opLifecycle/remoteMessageProcessor.js +23 -9
  382. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  383. package/lib/opProperties.js +1 -2
  384. package/lib/opProperties.js.map +1 -1
  385. package/lib/packageVersion.d.ts +1 -1
  386. package/lib/packageVersion.js +1 -1
  387. package/lib/packageVersion.js.map +1 -1
  388. package/lib/pendingStateManager.d.ts +25 -10
  389. package/lib/pendingStateManager.d.ts.map +1 -1
  390. package/lib/pendingStateManager.js +90 -53
  391. package/lib/pendingStateManager.js.map +1 -1
  392. package/lib/scheduleManager.d.ts.map +1 -1
  393. package/lib/scheduleManager.js +25 -15
  394. package/lib/scheduleManager.js.map +1 -1
  395. package/lib/summary/index.d.ts +4 -4
  396. package/lib/summary/index.d.ts.map +1 -1
  397. package/lib/summary/index.js +2 -2
  398. package/lib/summary/index.js.map +1 -1
  399. package/lib/summary/orderedClientElection.d.ts +3 -3
  400. package/lib/summary/orderedClientElection.d.ts.map +1 -1
  401. package/lib/summary/orderedClientElection.js +21 -22
  402. package/lib/summary/orderedClientElection.js.map +1 -1
  403. package/lib/summary/runWhileConnectedCoordinator.js +1 -1
  404. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
  405. package/lib/summary/runningSummarizer.d.ts +31 -10
  406. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  407. package/lib/summary/runningSummarizer.js +265 -133
  408. package/lib/summary/runningSummarizer.js.map +1 -1
  409. package/lib/summary/summarizer.d.ts +8 -7
  410. package/lib/summary/summarizer.d.ts.map +1 -1
  411. package/lib/summary/summarizer.js +75 -74
  412. package/lib/summary/summarizer.js.map +1 -1
  413. package/lib/summary/summarizerClientElection.d.ts +2 -2
  414. package/lib/summary/summarizerClientElection.d.ts.map +1 -1
  415. package/lib/summary/summarizerClientElection.js +6 -10
  416. package/lib/summary/summarizerClientElection.js.map +1 -1
  417. package/lib/summary/summarizerHeuristics.js +9 -13
  418. package/lib/summary/summarizerHeuristics.js.map +1 -1
  419. package/lib/summary/summarizerNode/index.d.ts +1 -1
  420. package/lib/summary/summarizerNode/index.d.ts.map +1 -1
  421. package/lib/summary/summarizerNode/index.js.map +1 -1
  422. package/lib/summary/summarizerNode/summarizerNode.d.ts +40 -23
  423. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  424. package/lib/summary/summarizerNode/summarizerNode.js +132 -137
  425. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  426. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +25 -29
  427. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  428. package/lib/summary/summarizerNode/summarizerNodeUtils.js +2 -4
  429. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  430. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +21 -16
  431. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  432. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +70 -119
  433. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  434. package/lib/summary/summarizerTypes.d.ts +44 -24
  435. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  436. package/lib/summary/summarizerTypes.js.map +1 -1
  437. package/lib/summary/summaryCollection.d.ts +2 -2
  438. package/lib/summary/summaryCollection.d.ts.map +1 -1
  439. package/lib/summary/summaryCollection.js +9 -6
  440. package/lib/summary/summaryCollection.js.map +1 -1
  441. package/lib/summary/summaryFormat.d.ts +4 -0
  442. package/lib/summary/summaryFormat.d.ts.map +1 -1
  443. package/lib/summary/summaryFormat.js +7 -4
  444. package/lib/summary/summaryFormat.js.map +1 -1
  445. package/lib/summary/summaryGenerator.d.ts +21 -6
  446. package/lib/summary/summaryGenerator.d.ts.map +1 -1
  447. package/lib/summary/summaryGenerator.js +109 -47
  448. package/lib/summary/summaryGenerator.js.map +1 -1
  449. package/lib/summary/summaryManager.d.ts +8 -7
  450. package/lib/summary/summaryManager.d.ts.map +1 -1
  451. package/lib/summary/summaryManager.js +35 -25
  452. package/lib/summary/summaryManager.js.map +1 -1
  453. package/package.json +30 -32
  454. package/src/batchTracker.ts +7 -5
  455. package/src/blobManager.ts +235 -172
  456. package/src/connectionTelemetry.ts +19 -5
  457. package/src/containerRuntime.ts +853 -431
  458. package/src/dataStore.ts +12 -4
  459. package/src/dataStoreContext.ts +49 -46
  460. package/src/dataStoreContexts.ts +4 -4
  461. package/src/dataStoreRegistry.ts +1 -1
  462. package/src/dataStores.ts +119 -80
  463. package/src/deltaManagerProxyBase.ts +111 -0
  464. package/src/deltaManagerSummarizerProxy.ts +4 -1
  465. package/src/deltaScheduler.ts +7 -11
  466. package/src/error.ts +18 -0
  467. package/src/gc/garbageCollection.md +53 -5
  468. package/src/gc/garbageCollection.ts +58 -51
  469. package/src/gc/gcConfigs.ts +4 -2
  470. package/src/gc/gcDefinitions.ts +17 -21
  471. package/src/gc/gcEarlyAdoption.md +145 -0
  472. package/src/gc/gcHelpers.ts +1 -12
  473. package/src/gc/gcSummaryStateTracker.ts +19 -65
  474. package/src/gc/gcTelemetry.ts +15 -13
  475. package/src/gc/gcUnreferencedStateTracker.ts +1 -1
  476. package/src/gc/index.ts +2 -4
  477. package/src/id-compressor/appendOnlySortedMap.ts +26 -87
  478. package/src/id-compressor/finalSpace.ts +67 -0
  479. package/src/id-compressor/idCompressor.ts +458 -1682
  480. package/src/id-compressor/identifiers.ts +42 -0
  481. package/src/id-compressor/index.ts +11 -20
  482. package/src/id-compressor/persistanceUtilities.ts +58 -0
  483. package/src/id-compressor/sessionSpaceNormalizer.ts +83 -0
  484. package/src/id-compressor/sessions.ts +405 -0
  485. package/src/id-compressor/utilities.ts +187 -0
  486. package/src/index.ts +9 -2
  487. package/src/metadata.ts +19 -0
  488. package/src/opLifecycle/README.md +20 -0
  489. package/src/opLifecycle/batchManager.ts +9 -1
  490. package/src/opLifecycle/definitions.ts +11 -0
  491. package/src/opLifecycle/index.ts +1 -1
  492. package/src/opLifecycle/opCompressor.ts +6 -5
  493. package/src/opLifecycle/opDecompressor.ts +47 -17
  494. package/src/opLifecycle/opGroupingManager.ts +18 -8
  495. package/src/opLifecycle/opSplitter.ts +10 -7
  496. package/src/opLifecycle/outbox.ts +177 -72
  497. package/src/opLifecycle/remoteMessageProcessor.ts +32 -9
  498. package/src/packageVersion.ts +1 -1
  499. package/src/pendingStateManager.ts +123 -78
  500. package/src/scheduleManager.ts +22 -11
  501. package/src/summary/index.ts +7 -4
  502. package/src/summary/orderedClientElection.ts +10 -6
  503. package/src/summary/runWhileConnectedCoordinator.ts +1 -1
  504. package/src/summary/runningSummarizer.ts +291 -163
  505. package/src/summary/summarizer.ts +27 -16
  506. package/src/summary/summarizerClientElection.ts +2 -2
  507. package/src/summary/summarizerHeuristics.ts +1 -1
  508. package/src/summary/summarizerNode/index.ts +2 -2
  509. package/src/summary/summarizerNode/summarizerNode.ts +142 -184
  510. package/src/summary/summarizerNode/summarizerNodeUtils.ts +27 -35
  511. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +72 -148
  512. package/src/summary/summarizerTypes.ts +49 -24
  513. package/src/summary/summaryCollection.ts +9 -4
  514. package/src/summary/summaryFormat.ts +9 -2
  515. package/src/summary/summaryGenerator.ts +72 -49
  516. package/src/summary/summaryManager.ts +44 -16
  517. package/dist/id-compressor/idRange.d.ts +0 -11
  518. package/dist/id-compressor/idRange.d.ts.map +0 -1
  519. package/dist/id-compressor/idRange.js +0 -29
  520. package/dist/id-compressor/idRange.js.map +0 -1
  521. package/dist/id-compressor/numericUuid.d.ts +0 -59
  522. package/dist/id-compressor/numericUuid.d.ts.map +0 -1
  523. package/dist/id-compressor/numericUuid.js +0 -325
  524. package/dist/id-compressor/numericUuid.js.map +0 -1
  525. package/dist/id-compressor/sessionIdNormalizer.d.ts +0 -138
  526. package/dist/id-compressor/sessionIdNormalizer.d.ts.map +0 -1
  527. package/dist/id-compressor/sessionIdNormalizer.js +0 -488
  528. package/dist/id-compressor/sessionIdNormalizer.js.map +0 -1
  529. package/dist/id-compressor/utils.d.ts +0 -57
  530. package/dist/id-compressor/utils.d.ts.map +0 -1
  531. package/dist/id-compressor/utils.js +0 -90
  532. package/dist/id-compressor/utils.js.map +0 -1
  533. package/dist/id-compressor/uuidUtilities.d.ts +0 -30
  534. package/dist/id-compressor/uuidUtilities.d.ts.map +0 -1
  535. package/dist/id-compressor/uuidUtilities.js +0 -106
  536. package/dist/id-compressor/uuidUtilities.js.map +0 -1
  537. package/lib/id-compressor/idRange.d.ts +0 -11
  538. package/lib/id-compressor/idRange.d.ts.map +0 -1
  539. package/lib/id-compressor/idRange.js +0 -25
  540. package/lib/id-compressor/idRange.js.map +0 -1
  541. package/lib/id-compressor/numericUuid.d.ts +0 -59
  542. package/lib/id-compressor/numericUuid.d.ts.map +0 -1
  543. package/lib/id-compressor/numericUuid.js +0 -315
  544. package/lib/id-compressor/numericUuid.js.map +0 -1
  545. package/lib/id-compressor/sessionIdNormalizer.d.ts +0 -138
  546. package/lib/id-compressor/sessionIdNormalizer.d.ts.map +0 -1
  547. package/lib/id-compressor/sessionIdNormalizer.js +0 -484
  548. package/lib/id-compressor/sessionIdNormalizer.js.map +0 -1
  549. package/lib/id-compressor/utils.d.ts +0 -57
  550. package/lib/id-compressor/utils.d.ts.map +0 -1
  551. package/lib/id-compressor/utils.js +0 -79
  552. package/lib/id-compressor/utils.js.map +0 -1
  553. package/lib/id-compressor/uuidUtilities.d.ts +0 -30
  554. package/lib/id-compressor/uuidUtilities.d.ts.map +0 -1
  555. package/lib/id-compressor/uuidUtilities.js +0 -98
  556. package/lib/id-compressor/uuidUtilities.js.map +0 -1
  557. package/src/id-compressor/idRange.ts +0 -35
  558. package/src/id-compressor/numericUuid.ts +0 -383
  559. package/src/id-compressor/sessionIdNormalizer.ts +0 -609
  560. package/src/id-compressor/utils.ts +0 -114
  561. package/src/id-compressor/uuidUtilities.ts +0 -123
@@ -2,28 +2,25 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- var __rest = (this && this.__rest) || function (s, e) {
6
- var t = {};
7
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
8
- t[p] = s[p];
9
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
10
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
11
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
12
- t[p[i]] = s[p[i]];
13
- }
14
- return t;
15
- };
16
- import { ChildLogger, isFluidError, loggerToMonitoringContext, } from "@fluidframework/telemetry-utils";
17
- import { assert, delay, Deferred, PromiseTimer } from "@fluidframework/common-utils";
18
- import { UsageError } from "@fluidframework/container-utils";
19
- import { DriverErrorType } from "@fluidframework/driver-definitions";
20
- import { isRuntimeMessage } from "@fluidframework/driver-utils";
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";
21
9
  import { MessageType } from "@fluidframework/protocol-definitions";
22
10
  import { opSize } from "../opProperties";
23
11
  import { SummarizeHeuristicRunner } from "./summarizerHeuristics";
24
12
  import { raceTimer, SummarizeResultBuilder, SummaryGenerator, } from "./summaryGenerator";
25
13
  const maxSummarizeAckWaitTime = 10 * 60 * 1000; // 10 minutes
26
- const defaultNumberSummarizationAttempts = 2; // only up to 2 attempts
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;
27
24
  /**
28
25
  * An instance of RunningSummarizer manages the heuristics for summarizing.
29
26
  * Until disposed, the instance of RunningSummarizer can assume that it is
@@ -31,8 +28,9 @@ const defaultNumberSummarizationAttempts = 2; // only up to 2 attempts
31
28
  * track of summaries that it is generating as they are broadcast and acked/nacked.
32
29
  * This object is created and controlled by Summarizer object.
33
30
  */
34
- export class RunningSummarizer {
31
+ export class RunningSummarizer extends TypedEventEmitter {
35
32
  constructor(baseLogger, summaryWatcher, configuration, submitSummaryCallback, refreshLatestSummaryAckCallback, heuristicData, summaryCollection, cancellationToken, stopSummarizerCallback, runtime) {
33
+ super();
36
34
  this.summaryWatcher = summaryWatcher;
37
35
  this.configuration = configuration;
38
36
  this.submitSummaryCallback = submitSummaryCallback;
@@ -63,9 +61,13 @@ export class RunningSummarizer {
63
61
  summarizeCount: () => this.summarizeCount,
64
62
  summarizerSuccessfulAttempts: () => this.totalSuccessfulAttempts,
65
63
  };
66
- this.mc = loggerToMonitoringContext(ChildLogger.create(baseLogger, "Running", {
67
- all: telemetryProps,
68
- }));
64
+ this.mc = createChildMonitoringContext({
65
+ logger: baseLogger,
66
+ namespace: "Running",
67
+ properties: {
68
+ all: telemetryProps,
69
+ },
70
+ });
69
71
  if (configuration.state !== "disableHeuristics") {
70
72
  assert(this.configuration.state === "enabled", 0x2ea /* "Configuration state should be enabled" */);
71
73
  this.heuristicRunner = new SummarizeHeuristicRunner(heuristicData, this.configuration, (reason) => this.trySummarize(reason), this.mc.logger);
@@ -101,26 +103,21 @@ export class RunningSummarizer {
101
103
  this.generator = new SummaryGenerator(this.pendingAckTimer, this.heuristicData, this.submitSummaryCallback, () => {
102
104
  this.totalSuccessfulAttempts++;
103
105
  }, this.summaryWatcher, this.mc.logger);
104
- // Listen to deltaManager for non-runtime ops
105
- this.deltaManagerListener = (op) => {
106
- if (!isRuntimeMessage(op)) {
107
- this.handleOp(op, false);
108
- }
109
- };
110
- // Listen to runtime for runtime ops
106
+ // Listen to runtime for ops
111
107
  this.runtimeListener = (op, runtimeMessage) => {
112
- if (runtimeMessage) {
113
- this.handleOp(op, true);
114
- }
108
+ this.handleOp(op, runtimeMessage === true);
115
109
  };
116
- // Purpose of listening to deltaManager is for back-compat
117
- // Can remove and only listen to runtime once loader version is past 2.0.0-internal.1.2.0 (https://github.com/microsoft/FluidFramework/pull/11832)
118
- // Tracked by AB#3883
119
- this.runtime.deltaManager.on("op", this.deltaManagerListener);
120
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;
121
119
  }
122
120
  static async start(logger, summaryWatcher, configuration, submitSummaryCallback, refreshLatestSummaryAckCallback, heuristicData, summaryCollection, cancellationToken, stopSummarizerCallback, runtime) {
123
- var _a, _b;
124
121
  const summarizer = new RunningSummarizer(logger, summaryWatcher, configuration, submitSummaryCallback, refreshLatestSummaryAckCallback, heuristicData, summaryCollection, cancellationToken, stopSummarizerCallback, runtime);
125
122
  // Before doing any heuristics or proceeding with its refreshing, if there is a summary ack received while
126
123
  // this summarizer catches up, let's refresh state before proceeding with the summarization.
@@ -129,7 +126,7 @@ export class RunningSummarizer {
129
126
  // Handle summary acks asynchronously
130
127
  // Note: no exceptions are thrown from processIncomingSummaryAcks handler as it handles all exceptions
131
128
  summarizer.processIncomingSummaryAcks(lastAckRefSeq).catch((error) => {
132
- logger.sendErrorEvent({ eventName: "HandleSummaryAckFatalError" }, error);
129
+ createChildLogger({ logger }).sendErrorEvent({ eventName: "HandleSummaryAckFatalError" }, error);
133
130
  });
134
131
  // Update heuristic counts
135
132
  // By the time we get here, there are potentially ops missing from the heuristic summary counts
@@ -150,21 +147,20 @@ export class RunningSummarizer {
150
147
  // Update last seq number (in case the handlers haven't processed anything yet)
151
148
  heuristicData.lastOpSequenceNumber = runtime.deltaManager.lastSequenceNumber;
152
149
  // Start heuristics
153
- (_a = summarizer.heuristicRunner) === null || _a === void 0 ? void 0 : _a.start();
154
- (_b = summarizer.heuristicRunner) === null || _b === void 0 ? void 0 : _b.run();
150
+ summarizer.heuristicRunner?.start();
151
+ summarizer.heuristicRunner?.run();
155
152
  return summarizer;
156
153
  }
157
154
  get disposed() {
158
155
  return this._disposed;
159
156
  }
160
157
  async handleSummaryAck() {
161
- var _a;
162
158
  const lastAck = this.summaryCollection.latestAck;
163
159
  let refSequenceNumber = -1;
164
160
  // In case we haven't received the lastestAck yet, just return.
165
161
  if (lastAck !== undefined) {
166
162
  refSequenceNumber = lastAck.summaryOp.referenceSequenceNumber;
167
- const summaryLogger = (_a = this.tryGetCorrelatedLogger(refSequenceNumber)) !== null && _a !== void 0 ? _a : this.mc.logger;
163
+ const summaryLogger = this.tryGetCorrelatedLogger(refSequenceNumber) ?? this.mc.logger;
168
164
  const summaryOpHandle = lastAck.summaryOp.contents.handle;
169
165
  const summaryAckHandle = lastAck.summaryAck.contents.handle;
170
166
  while (this.summarizingLock !== undefined) {
@@ -192,7 +188,7 @@ export class RunningSummarizer {
192
188
  // code in `submitSummary` function in container runtime, will refresh the latest state
193
189
  // by calling `refreshLatestSummaryAckFromServer` and we will be fine.
194
190
  const isIgnoredError = isFluidError(error) &&
195
- error.errorType === DriverErrorType.fileNotFoundOrAccessDeniedError;
191
+ error.errorType === DriverErrorTypes.fileNotFoundOrAccessDeniedError;
196
192
  summaryLogger.sendTelemetryEvent({
197
193
  eventName: isIgnoredError
198
194
  ? "HandleSummaryAckErrorIgnored"
@@ -215,10 +211,9 @@ export class RunningSummarizer {
215
211
  * and, in case of a positive one, it will wait for a summary ack that is greater than this current reference sequence number.
216
212
  */
217
213
  async processIncomingSummaryAcks(lastAckRefSeq) {
218
- var _a;
219
214
  let refSequenceNumber = lastAckRefSeq > 0 ? lastAckRefSeq : this.runtime.deltaManager.initialSequenceNumber;
220
215
  while (!this.disposed) {
221
- const summaryLogger = (_a = this.tryGetCorrelatedLogger(refSequenceNumber)) !== null && _a !== void 0 ? _a : this.mc.logger;
216
+ const summaryLogger = this.tryGetCorrelatedLogger(refSequenceNumber) ?? this.mc.logger;
222
217
  // Initialize ack with undefined if exception happens inside of waitSummaryAck on second iteration,
223
218
  // we record undefined, not previous handles.
224
219
  await this.summaryCollection.waitSummaryAck(refSequenceNumber);
@@ -233,11 +228,9 @@ export class RunningSummarizer {
233
228
  }
234
229
  }
235
230
  dispose() {
236
- var _a;
237
- this.runtime.deltaManager.off("op", this.deltaManagerListener);
238
231
  this.runtime.off("op", this.runtimeListener);
239
232
  this.summaryWatcher.dispose();
240
- (_a = this.heuristicRunner) === null || _a === void 0 ? void 0 : _a.dispose();
233
+ this.heuristicRunner?.dispose();
241
234
  this.heuristicRunner = undefined;
242
235
  this.generator.dispose();
243
236
  this.pendingAckTimer.clear();
@@ -262,8 +255,7 @@ export class RunningSummarizer {
262
255
  this.heuristicRunnerMicroTaskExists = true;
263
256
  Promise.resolve()
264
257
  .then(() => {
265
- var _a;
266
- (_a = this.heuristicRunner) === null || _a === void 0 ? void 0 : _a.run();
258
+ this.heuristicRunner?.run();
267
259
  })
268
260
  .finally(() => {
269
261
  this.heuristicRunnerMicroTaskExists = false;
@@ -294,18 +286,17 @@ export class RunningSummarizer {
294
286
  this.configuration.nonRuntimeHeuristicThreshold <= opsSinceLastAck));
295
287
  }
296
288
  async waitStop(allowLastSummary) {
297
- var _a;
298
289
  if (this.stopping) {
299
290
  return;
300
291
  }
301
292
  this.stopping = true;
302
293
  this.disposeEnqueuedSummary();
303
294
  // This will try to run lastSummary if needed.
304
- if (allowLastSummary && ((_a = this.heuristicRunner) === null || _a === void 0 ? void 0 : _a.shouldRunLastSummary())) {
295
+ if (allowLastSummary && this.heuristicRunner?.shouldRunLastSummary()) {
305
296
  if (this.summarizingLock === undefined) {
306
297
  this.trySummarizeOnce(
307
298
  // summarizeProps
308
- { reason: "lastSummary" },
299
+ { summarizeReason: "lastSummary" },
309
300
  // ISummarizeOptions, using defaults: { refreshLatestAck: false, fullTree: false }
310
301
  {});
311
302
  }
@@ -338,13 +329,12 @@ export class RunningSummarizer {
338
329
  this.summarizeCount++;
339
330
  }
340
331
  afterSummaryAction() {
341
- var _a;
342
332
  const retry = this.tryWhileSummarizing;
343
333
  this.tryWhileSummarizing = false;
344
334
  // After summarizing, we should check to see if we need to summarize again.
345
335
  // Rerun the heuristics and check for enqueued summaries.
346
336
  if (!this.stopping && !this.tryRunEnqueuedSummary() && retry) {
347
- (_a = this.heuristicRunner) === null || _a === void 0 ? void 0 : _a.run();
337
+ this.heuristicRunner?.run();
348
338
  }
349
339
  }
350
340
  /**
@@ -354,7 +344,7 @@ export class RunningSummarizer {
354
344
  * @param before - set of instructions to run before running the action.
355
345
  * @param action - action to perform.
356
346
  * @param after - set of instructions to run after running the action.
357
- * @returns - result of action.
347
+ * @returns The result of the action.
358
348
  */
359
349
  async lockedSummaryAction(before, action, after) {
360
350
  assert(this.summarizingLock === undefined, 0x25b /* "Caller is responsible for checking lock" */);
@@ -375,11 +365,20 @@ export class RunningSummarizer {
375
365
  * @param resultsBuilder - optional, result builder to use.
376
366
  * @returns ISummarizeResult - result of running a summary.
377
367
  */
378
- trySummarizeOnce(summarizeProps, options, cancellationToken = this.cancellationToken, resultsBuilder = new SummarizeResultBuilder()) {
368
+ trySummarizeOnce(summarizeProps, options, resultsBuilder = new SummarizeResultBuilder()) {
379
369
  this.lockedSummaryAction(() => {
380
370
  this.beforeSummaryAction();
381
371
  }, async () => {
382
- 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);
383
382
  // ensure we wait till the end of the process
384
383
  return summarizeResult.receivedSummaryAckOrNack;
385
384
  }, () => {
@@ -393,7 +392,7 @@ export class RunningSummarizer {
393
392
  return resultsBuilder.build();
394
393
  }
395
394
  /** Heuristics summarize attempt. */
396
- trySummarize(reason, cancellationToken = this.cancellationToken) {
395
+ trySummarize(reason) {
397
396
  if (this.summarizingLock !== undefined) {
398
397
  // lockedSummaryAction() will retry heuristic-based summary at the end of current attempt
399
398
  // if it's still needed
@@ -403,79 +402,207 @@ export class RunningSummarizer {
403
402
  this.lockedSummaryAction(() => {
404
403
  this.beforeSummaryAction();
405
404
  }, async () => {
406
- var _a;
407
- const attempts = [
408
- { refreshLatestAck: false, fullTree: false },
409
- { refreshLatestAck: true, fullTree: false },
410
- { refreshLatestAck: true, fullTree: false, delaySeconds: 2 * 60 },
411
- { refreshLatestAck: true, fullTree: true, delaySeconds: 10 * 60 },
412
- ];
413
- let overrideDelaySeconds;
414
- let summaryAttempts = 0;
415
- let summaryAttemptsPerPhase = 0;
416
- // Reducing the default number of attempts to defaultNumberofSummarizationAttempts.
417
- let totalAttempts = (_a = this.mc.config.getNumber("Fluid.Summarizer.Attempts")) !== null && _a !== void 0 ? _a : defaultNumberSummarizationAttempts;
418
- if (totalAttempts > attempts.length) {
419
- this.mc.logger.sendTelemetryEvent({
420
- eventName: "InvalidSummarizerAttempts",
421
- attempts: totalAttempts,
422
- });
423
- totalAttempts = defaultNumberSummarizationAttempts;
424
- }
425
- else if (totalAttempts < 1) {
426
- throw new UsageError("Invalid number of attempts.");
427
- }
428
- let lastResult;
429
- for (let summaryAttemptPhase = 0; summaryAttemptPhase < totalAttempts;) {
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 _b = attempts[summaryAttemptPhase], { delaySeconds: regularDelaySeconds = 0 } = _b, options = __rest(_b, ["delaySeconds"]);
439
- const summarizeProps = Object.assign({ reason,
440
- summaryAttempts,
441
- summaryAttemptsPerPhase, summaryAttemptPhase: summaryAttemptPhase + 1 }, options);
442
- // Note: no need to account for cancellationToken.waitCancelled here, as
443
- // this is accounted SummaryGenerator.summarizeCore that controls receivedSummaryAckOrNack.
444
- const resultSummarize = this.generator.summarize(summarizeProps, options, cancellationToken);
445
- const result = await resultSummarize.receivedSummaryAckOrNack;
446
- if (result.success) {
447
- return;
448
- }
449
- // Check for retryDelay that can come from summaryNack or upload summary flow.
450
- // Retry the same step only once per retryAfter response.
451
- overrideDelaySeconds = result.retryAfterSeconds;
452
- if (overrideDelaySeconds === undefined || summaryAttemptsPerPhase > 1) {
453
- summaryAttemptPhase++;
454
- summaryAttemptsPerPhase = 0;
455
- }
456
- lastResult = result;
457
- const delaySeconds = overrideDelaySeconds !== null && overrideDelaySeconds !== void 0 ? overrideDelaySeconds : regularDelaySeconds;
458
- if (delaySeconds > 0) {
459
- this.mc.logger.sendPerformanceEvent(Object.assign({ eventName: "SummarizeAttemptDelay", duration: delaySeconds, summaryNackDelay: overrideDelaySeconds !== undefined }, summarizeProps));
460
- await delay(delaySeconds * 1000);
461
- }
462
- }
463
- // If all attempts failed, log error (with last attempt info) and close the summarizer container
464
- this.mc.logger.sendErrorEvent({
465
- eventName: "FailToSummarize",
466
- reason,
467
- message: lastResult === null || lastResult === void 0 ? void 0 : lastResult.message,
468
- }, lastResult === null || lastResult === void 0 ? void 0 : lastResult.error);
469
- this.stopSummarizerCallback("failToSummarize");
405
+ return this.mc.config.getBoolean("Fluid.Summarizer.UseDynamicRetries")
406
+ ? this.trySummarizeWithRetries(reason)
407
+ : this.trySummarizeWithStaticAttempts(reason);
470
408
  }, () => {
471
409
  this.afterSummaryAction();
472
410
  }).catch((error) => {
473
411
  this.mc.logger.sendErrorEvent({ eventName: "UnexpectedSummarizeError" }, error);
474
412
  });
475
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
+ }
476
604
  /** {@inheritdoc (ISummarizer:interface).summarizeOnDemand} */
477
- summarizeOnDemand(resultsBuilder = new SummarizeResultBuilder(), _a) {
478
- var { reason } = _a, options = __rest(_a, ["reason"]);
605
+ summarizeOnDemand(options, resultsBuilder = new SummarizeResultBuilder()) {
479
606
  if (this.stopping) {
480
607
  resultsBuilder.fail("RunningSummarizer stopped or disposed", undefined);
481
608
  return resultsBuilder.build();
@@ -486,13 +613,13 @@ export class RunningSummarizer {
486
613
  // The heuristics are blocking concurrent summarize attempts.
487
614
  throw new UsageError("Attempted to run an already-running summarizer on demand");
488
615
  }
489
- 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);
490
618
  return result;
491
619
  }
492
620
  /** {@inheritdoc (ISummarizer:interface).enqueueSummarize} */
493
- enqueueSummarize(_a) {
494
- var { reason, afterSequenceNumber = 0, override = false } = _a, options = __rest(_a, ["reason", "afterSequenceNumber", "override"]);
495
- const onDemandReason = `enqueue;${reason}`;
621
+ enqueueSummarize(options) {
622
+ const { reason, afterSequenceNumber = 0, override = false, ...summarizeOptions } = options;
496
623
  let overridden = false;
497
624
  if (this.enqueuedSummary !== undefined) {
498
625
  if (!override) {
@@ -504,15 +631,20 @@ export class RunningSummarizer {
504
631
  overridden = true;
505
632
  }
506
633
  this.enqueuedSummary = {
507
- reason: onDemandReason,
634
+ reason: `enqueue;${reason}`,
508
635
  afterSequenceNumber,
509
- options,
636
+ summarizeOptions,
510
637
  resultsBuilder: new SummarizeResultBuilder(),
511
638
  };
512
639
  const results = this.enqueuedSummary.resultsBuilder.build();
513
640
  this.tryRunEnqueuedSummary();
514
641
  return overridden
515
- ? Object.assign(Object.assign({}, results), { alreadyEnqueued: true, overridden: true }) : results;
642
+ ? {
643
+ ...results,
644
+ alreadyEnqueued: true,
645
+ overridden: true,
646
+ }
647
+ : results;
516
648
  }
517
649
  tryRunEnqueuedSummary() {
518
650
  if (this.stopping) {
@@ -525,10 +657,10 @@ export class RunningSummarizer {
525
657
  // If no enqueued summary is ready or a summary is already in progress, take no action.
526
658
  return false;
527
659
  }
528
- const { reason, resultsBuilder, options } = this.enqueuedSummary;
660
+ const { reason, resultsBuilder, summarizeOptions } = this.enqueuedSummary;
529
661
  // Set to undefined first, so that subsequent enqueue attempt while summarize will occur later.
530
662
  this.enqueuedSummary = undefined;
531
- this.trySummarizeOnce({ reason: `enqueuedSummary/${reason}` }, options, this.cancellationToken, resultsBuilder);
663
+ this.trySummarizeOnce({ summarizeReason: `enqueuedSummary/${reason}` }, summarizeOptions, resultsBuilder);
532
664
  return true;
533
665
  }
534
666
  disposeEnqueuedSummary() {