@fluidframework/container-runtime 1.4.0-121020 → 2.0.0-dev-rc.1.0.0.225277

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 (705) hide show
  1. package/.eslintrc.js +19 -29
  2. package/.mocharc.js +12 -0
  3. package/CHANGELOG.md +427 -0
  4. package/README.md +69 -0
  5. package/api-extractor-esm.json +4 -0
  6. package/api-extractor-lint.json +4 -0
  7. package/api-extractor.json +2 -2
  8. package/api-report/container-runtime.api.md +863 -0
  9. package/dist/{batchTracker.js → batchTracker.cjs} +9 -8
  10. package/dist/batchTracker.cjs.map +1 -0
  11. package/dist/batchTracker.d.ts +6 -5
  12. package/dist/batchTracker.d.ts.map +1 -1
  13. package/dist/blobManager.cjs +709 -0
  14. package/dist/blobManager.cjs.map +1 -0
  15. package/dist/blobManager.d.ts +140 -39
  16. package/dist/blobManager.d.ts.map +1 -1
  17. package/dist/connectionTelemetry.cjs +230 -0
  18. package/dist/connectionTelemetry.cjs.map +1 -0
  19. package/dist/connectionTelemetry.d.ts +2 -2
  20. package/dist/connectionTelemetry.d.ts.map +1 -1
  21. package/dist/container-runtime-alpha.d.ts +1690 -0
  22. package/dist/container-runtime-beta.d.ts +250 -0
  23. package/dist/container-runtime-public.d.ts +250 -0
  24. package/dist/container-runtime-untrimmed.d.ts +1805 -0
  25. package/dist/{containerHandleContext.js → containerHandleContext.cjs} +4 -2
  26. package/dist/containerHandleContext.cjs.map +1 -0
  27. package/dist/containerHandleContext.d.ts.map +1 -1
  28. package/dist/containerRuntime.cjs +2535 -0
  29. package/dist/containerRuntime.cjs.map +1 -0
  30. package/dist/containerRuntime.d.ts +458 -256
  31. package/dist/containerRuntime.d.ts.map +1 -1
  32. package/dist/{dataStore.js → dataStore.cjs} +54 -45
  33. package/dist/dataStore.cjs.map +1 -0
  34. package/dist/dataStore.d.ts +2 -2
  35. package/dist/dataStore.d.ts.map +1 -1
  36. package/dist/{dataStoreContext.js → dataStoreContext.cjs} +343 -247
  37. package/dist/dataStoreContext.cjs.map +1 -0
  38. package/dist/dataStoreContext.d.ts +73 -41
  39. package/dist/dataStoreContext.d.ts.map +1 -1
  40. package/dist/{dataStoreContexts.js → dataStoreContexts.cjs} +19 -15
  41. package/dist/dataStoreContexts.cjs.map +1 -0
  42. package/dist/dataStoreContexts.d.ts +1 -1
  43. package/dist/dataStoreContexts.d.ts.map +1 -1
  44. package/dist/{dataStoreRegistry.js → dataStoreRegistry.cjs} +9 -4
  45. package/dist/dataStoreRegistry.cjs.map +1 -0
  46. package/dist/dataStoreRegistry.d.ts +3 -0
  47. package/dist/dataStoreRegistry.d.ts.map +1 -1
  48. package/dist/{dataStores.js → dataStores.cjs} +276 -124
  49. package/dist/dataStores.cjs.map +1 -0
  50. package/dist/dataStores.d.ts +56 -23
  51. package/dist/dataStores.d.ts.map +1 -1
  52. package/dist/deltaManagerProxyBase.cjs +77 -0
  53. package/dist/deltaManagerProxyBase.cjs.map +1 -0
  54. package/dist/deltaManagerProxyBase.d.ts +35 -0
  55. package/dist/deltaManagerProxyBase.d.ts.map +1 -0
  56. package/dist/deltaManagerSummarizerProxy.cjs +42 -0
  57. package/dist/deltaManagerSummarizerProxy.cjs.map +1 -0
  58. package/dist/deltaManagerSummarizerProxy.d.ts +19 -0
  59. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -0
  60. package/dist/{deltaScheduler.js → deltaScheduler.cjs} +25 -18
  61. package/dist/deltaScheduler.cjs.map +1 -0
  62. package/dist/deltaScheduler.d.ts +8 -6
  63. package/dist/deltaScheduler.d.ts.map +1 -1
  64. package/dist/error.cjs +21 -0
  65. package/dist/error.cjs.map +1 -0
  66. package/dist/error.d.ts +14 -0
  67. package/dist/error.d.ts.map +1 -0
  68. package/dist/gc/garbageCollection.cjs +865 -0
  69. package/dist/gc/garbageCollection.cjs.map +1 -0
  70. package/dist/gc/garbageCollection.d.ts +224 -0
  71. package/dist/gc/garbageCollection.d.ts.map +1 -0
  72. package/dist/gc/gcConfigs.cjs +160 -0
  73. package/dist/gc/gcConfigs.cjs.map +1 -0
  74. package/dist/gc/gcConfigs.d.ts +23 -0
  75. package/dist/gc/gcConfigs.d.ts.map +1 -0
  76. package/dist/gc/gcDefinitions.cjs +96 -0
  77. package/dist/gc/gcDefinitions.cjs.map +1 -0
  78. package/dist/gc/gcDefinitions.d.ts +458 -0
  79. package/dist/gc/gcDefinitions.d.ts.map +1 -0
  80. package/dist/gc/gcHelpers.cjs +235 -0
  81. package/dist/gc/gcHelpers.cjs.map +1 -0
  82. package/dist/gc/gcHelpers.d.ts +71 -0
  83. package/dist/gc/gcHelpers.d.ts.map +1 -0
  84. package/dist/gc/gcReferenceGraphAlgorithm.cjs +49 -0
  85. package/dist/gc/gcReferenceGraphAlgorithm.cjs.map +1 -0
  86. package/dist/gc/gcReferenceGraphAlgorithm.d.ts +16 -0
  87. package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  88. package/dist/{summarizerTypes.js → gc/gcSummaryDefinitions.cjs} +1 -6
  89. package/dist/gc/gcSummaryDefinitions.cjs.map +1 -0
  90. package/dist/gc/gcSummaryDefinitions.d.ts +52 -0
  91. package/dist/gc/gcSummaryDefinitions.d.ts.map +1 -0
  92. package/dist/gc/gcSummaryStateTracker.cjs +213 -0
  93. package/dist/gc/gcSummaryStateTracker.cjs.map +1 -0
  94. package/dist/gc/gcSummaryStateTracker.d.ts +94 -0
  95. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -0
  96. package/dist/gc/gcTelemetry.cjs +307 -0
  97. package/dist/gc/gcTelemetry.cjs.map +1 -0
  98. package/dist/gc/gcTelemetry.d.ts +99 -0
  99. package/dist/gc/gcTelemetry.d.ts.map +1 -0
  100. package/dist/gc/gcUnreferencedStateTracker.cjs +118 -0
  101. package/dist/gc/gcUnreferencedStateTracker.cjs.map +1 -0
  102. package/dist/gc/gcUnreferencedStateTracker.d.ts +40 -0
  103. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  104. package/dist/gc/index.cjs +44 -0
  105. package/dist/gc/index.cjs.map +1 -0
  106. package/dist/gc/index.d.ts +13 -0
  107. package/dist/gc/index.d.ts.map +1 -0
  108. package/dist/index.cjs +47 -0
  109. package/dist/index.cjs.map +1 -0
  110. package/dist/index.d.ts +19 -8
  111. package/dist/index.d.ts.map +1 -1
  112. package/dist/messageTypes.cjs +37 -0
  113. package/dist/messageTypes.cjs.map +1 -0
  114. package/dist/messageTypes.d.ts +142 -0
  115. package/dist/messageTypes.d.ts.map +1 -0
  116. package/dist/metadata.cjs +7 -0
  117. package/dist/metadata.cjs.map +1 -0
  118. package/dist/metadata.d.ts +24 -0
  119. package/dist/metadata.d.ts.map +1 -0
  120. package/dist/opLifecycle/batchManager.cjs +139 -0
  121. package/dist/opLifecycle/batchManager.cjs.map +1 -0
  122. package/dist/opLifecycle/batchManager.d.ts +48 -0
  123. package/dist/opLifecycle/batchManager.d.ts.map +1 -0
  124. package/dist/opLifecycle/definitions.cjs +7 -0
  125. package/dist/opLifecycle/definitions.cjs.map +1 -0
  126. package/dist/opLifecycle/definitions.d.ts +83 -0
  127. package/dist/opLifecycle/definitions.d.ts.map +1 -0
  128. package/dist/opLifecycle/index.cjs +26 -0
  129. package/dist/opLifecycle/index.cjs.map +1 -0
  130. package/dist/opLifecycle/index.d.ts +13 -0
  131. package/dist/opLifecycle/index.d.ts.map +1 -0
  132. package/dist/opLifecycle/opCompressor.cjs +84 -0
  133. package/dist/opLifecycle/opCompressor.cjs.map +1 -0
  134. package/dist/opLifecycle/opCompressor.d.ts +18 -0
  135. package/dist/opLifecycle/opCompressor.d.ts.map +1 -0
  136. package/dist/opLifecycle/opDecompressor.cjs +132 -0
  137. package/dist/opLifecycle/opDecompressor.cjs.map +1 -0
  138. package/dist/opLifecycle/opDecompressor.d.ts +25 -0
  139. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -0
  140. package/dist/opLifecycle/opGroupingManager.cjs +95 -0
  141. package/dist/opLifecycle/opGroupingManager.cjs.map +1 -0
  142. package/dist/opLifecycle/opGroupingManager.d.ts +22 -0
  143. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -0
  144. package/dist/opLifecycle/opSplitter.cjs +202 -0
  145. package/dist/opLifecycle/opSplitter.cjs.map +1 -0
  146. package/dist/opLifecycle/opSplitter.d.ts +61 -0
  147. package/dist/opLifecycle/opSplitter.d.ts.map +1 -0
  148. package/dist/opLifecycle/outbox.cjs +326 -0
  149. package/dist/opLifecycle/outbox.cjs.map +1 -0
  150. package/dist/opLifecycle/outbox.d.ts +104 -0
  151. package/dist/opLifecycle/outbox.d.ts.map +1 -0
  152. package/dist/opLifecycle/remoteMessageProcessor.cjs +136 -0
  153. package/dist/opLifecycle/remoteMessageProcessor.cjs.map +1 -0
  154. package/dist/opLifecycle/remoteMessageProcessor.d.ts +47 -0
  155. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
  156. package/dist/opProperties.cjs +17 -0
  157. package/dist/opProperties.cjs.map +1 -0
  158. package/dist/opProperties.d.ts +7 -0
  159. package/dist/opProperties.d.ts.map +1 -0
  160. package/dist/{packageVersion.js → packageVersion.cjs} +2 -2
  161. package/dist/packageVersion.cjs.map +1 -0
  162. package/dist/packageVersion.d.ts +1 -1
  163. package/dist/packageVersion.d.ts.map +1 -1
  164. package/dist/pendingStateManager.cjs +282 -0
  165. package/dist/pendingStateManager.cjs.map +1 -0
  166. package/dist/pendingStateManager.d.ts +32 -69
  167. package/dist/pendingStateManager.d.ts.map +1 -1
  168. package/dist/scheduleManager.cjs +258 -0
  169. package/dist/scheduleManager.cjs.map +1 -0
  170. package/dist/scheduleManager.d.ts +31 -0
  171. package/dist/scheduleManager.d.ts.map +1 -0
  172. package/dist/storageServiceWithAttachBlobs.cjs +32 -0
  173. package/dist/storageServiceWithAttachBlobs.cjs.map +1 -0
  174. package/dist/storageServiceWithAttachBlobs.d.ts +17 -0
  175. package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -0
  176. package/dist/summary/index.cjs +51 -0
  177. package/dist/summary/index.cjs.map +1 -0
  178. package/dist/summary/index.d.ts +17 -0
  179. package/dist/summary/index.d.ts.map +1 -0
  180. package/dist/{orderedClientElection.js → summary/orderedClientElection.cjs} +100 -84
  181. package/dist/summary/orderedClientElection.cjs.map +1 -0
  182. package/{lib → dist/summary}/orderedClientElection.d.ts +41 -18
  183. package/dist/summary/orderedClientElection.d.ts.map +1 -0
  184. package/dist/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.cjs} +12 -10
  185. package/dist/summary/runWhileConnectedCoordinator.cjs.map +1 -0
  186. package/{lib → dist/summary}/runWhileConnectedCoordinator.d.ts +8 -2
  187. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  188. package/dist/summary/runningSummarizer.cjs +679 -0
  189. package/dist/summary/runningSummarizer.cjs.map +1 -0
  190. package/dist/summary/runningSummarizer.d.ts +128 -0
  191. package/dist/summary/runningSummarizer.d.ts.map +1 -0
  192. package/dist/summary/summarizer.cjs +263 -0
  193. package/dist/summary/summarizer.cjs.map +1 -0
  194. package/dist/{summarizer.d.ts → summary/summarizer.d.ts} +18 -33
  195. package/dist/summary/summarizer.d.ts.map +1 -0
  196. package/dist/{summarizerClientElection.js → summary/summarizerClientElection.cjs} +15 -46
  197. package/dist/summary/summarizerClientElection.cjs.map +1 -0
  198. package/{lib → dist/summary}/summarizerClientElection.d.ts +4 -4
  199. package/dist/summary/summarizerClientElection.d.ts.map +1 -0
  200. package/dist/summary/summarizerHeuristics.cjs +156 -0
  201. package/dist/summary/summarizerHeuristics.cjs.map +1 -0
  202. package/{lib → dist/summary}/summarizerHeuristics.d.ts +28 -6
  203. package/dist/summary/summarizerHeuristics.d.ts.map +1 -0
  204. package/dist/summary/summarizerNode/index.cjs +12 -0
  205. package/dist/summary/summarizerNode/index.cjs.map +1 -0
  206. package/dist/summary/summarizerNode/index.d.ts +8 -0
  207. package/dist/summary/summarizerNode/index.d.ts.map +1 -0
  208. package/dist/summary/summarizerNode/summarizerNode.cjs +526 -0
  209. package/dist/summary/summarizerNode/summarizerNode.cjs.map +1 -0
  210. package/dist/summary/summarizerNode/summarizerNode.d.ts +167 -0
  211. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  212. package/dist/summary/summarizerNode/summarizerNodeUtils.cjs +130 -0
  213. package/dist/summary/summarizerNode/summarizerNodeUtils.cjs.map +1 -0
  214. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +121 -0
  215. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  216. package/dist/summary/summarizerNode/summarizerNodeWithGc.cjs +375 -0
  217. package/dist/summary/summarizerNode/summarizerNodeWithGc.cjs.map +1 -0
  218. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +153 -0
  219. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  220. package/dist/summary/summarizerTypes.cjs +7 -0
  221. package/dist/summary/summarizerTypes.cjs.map +1 -0
  222. package/{lib → dist/summary}/summarizerTypes.d.ts +233 -83
  223. package/dist/summary/summarizerTypes.d.ts.map +1 -0
  224. package/dist/{summaryCollection.js → summary/summaryCollection.cjs} +80 -49
  225. package/dist/summary/summaryCollection.cjs.map +1 -0
  226. package/dist/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +23 -5
  227. package/dist/summary/summaryCollection.d.ts.map +1 -0
  228. package/dist/{summaryFormat.js → summary/summaryFormat.cjs} +29 -26
  229. package/dist/summary/summaryFormat.cjs.map +1 -0
  230. package/{lib → dist/summary}/summaryFormat.d.ts +25 -30
  231. package/dist/summary/summaryFormat.d.ts.map +1 -0
  232. package/dist/{summaryGenerator.js → summary/summaryGenerator.cjs} +162 -74
  233. package/dist/summary/summaryGenerator.cjs.map +1 -0
  234. package/dist/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +53 -11
  235. package/dist/summary/summaryGenerator.d.ts.map +1 -0
  236. package/dist/{summaryManager.js → summary/summaryManager.cjs} +98 -55
  237. package/dist/summary/summaryManager.cjs.map +1 -0
  238. package/{lib → dist/summary}/summaryManager.d.ts +13 -11
  239. package/dist/summary/summaryManager.d.ts.map +1 -0
  240. package/dist/{throttler.js → throttler.cjs} +21 -21
  241. package/dist/throttler.cjs.map +1 -0
  242. package/dist/throttler.d.ts +2 -2
  243. package/dist/throttler.d.ts.map +1 -1
  244. package/dist/tsdoc-metadata.json +11 -0
  245. package/lib/{batchTracker.d.ts → batchTracker.d.mts} +7 -6
  246. package/lib/batchTracker.d.mts.map +1 -0
  247. package/lib/{batchTracker.js → batchTracker.mjs} +9 -8
  248. package/lib/batchTracker.mjs.map +1 -0
  249. package/lib/blobManager.d.mts +196 -0
  250. package/lib/blobManager.d.mts.map +1 -0
  251. package/lib/blobManager.mjs +704 -0
  252. package/lib/blobManager.mjs.map +1 -0
  253. package/lib/{connectionTelemetry.d.ts → connectionTelemetry.d.mts} +3 -3
  254. package/lib/connectionTelemetry.d.mts.map +1 -0
  255. package/lib/connectionTelemetry.mjs +226 -0
  256. package/lib/connectionTelemetry.mjs.map +1 -0
  257. package/lib/container-runtime-alpha.d.mts +1690 -0
  258. package/lib/container-runtime-beta.d.mts +250 -0
  259. package/lib/container-runtime-public.d.mts +250 -0
  260. package/lib/container-runtime-untrimmed.d.mts +1805 -0
  261. package/lib/{containerHandleContext.d.ts → containerHandleContext.d.mts} +2 -2
  262. package/lib/containerHandleContext.d.mts.map +1 -0
  263. package/lib/{containerHandleContext.js → containerHandleContext.mjs} +4 -2
  264. package/lib/containerHandleContext.mjs.map +1 -0
  265. package/lib/containerRuntime.d.mts +813 -0
  266. package/lib/containerRuntime.d.mts.map +1 -0
  267. package/lib/containerRuntime.mjs +2530 -0
  268. package/lib/containerRuntime.mjs.map +1 -0
  269. package/lib/{dataStore.d.ts → dataStore.d.mts} +5 -5
  270. package/lib/dataStore.d.mts.map +1 -0
  271. package/lib/{dataStore.js → dataStore.mjs} +52 -43
  272. package/lib/dataStore.mjs.map +1 -0
  273. package/lib/{dataStoreContext.d.ts → dataStoreContext.d.mts} +75 -43
  274. package/lib/dataStoreContext.d.mts.map +1 -0
  275. package/lib/{dataStoreContext.js → dataStoreContext.mjs} +309 -213
  276. package/lib/dataStoreContext.mjs.map +1 -0
  277. package/lib/{dataStoreContexts.d.ts → dataStoreContexts.d.mts} +3 -3
  278. package/lib/dataStoreContexts.d.mts.map +1 -0
  279. package/lib/{dataStoreContexts.js → dataStoreContexts.mjs} +12 -8
  280. package/lib/dataStoreContexts.mjs.map +1 -0
  281. package/lib/{dataStoreRegistry.d.ts → dataStoreRegistry.d.mts} +4 -1
  282. package/lib/dataStoreRegistry.d.mts.map +1 -0
  283. package/lib/{dataStoreRegistry.js → dataStoreRegistry.mjs} +7 -6
  284. package/lib/dataStoreRegistry.mjs.map +1 -0
  285. package/lib/{dataStores.d.ts → dataStores.d.mts} +60 -27
  286. package/lib/dataStores.d.mts.map +1 -0
  287. package/lib/{dataStores.js → dataStores.mjs} +257 -105
  288. package/lib/dataStores.mjs.map +1 -0
  289. package/lib/deltaManagerProxyBase.d.mts +35 -0
  290. package/lib/deltaManagerProxyBase.d.mts.map +1 -0
  291. package/lib/deltaManagerProxyBase.mjs +73 -0
  292. package/lib/deltaManagerProxyBase.mjs.map +1 -0
  293. package/lib/deltaManagerSummarizerProxy.d.mts +19 -0
  294. package/lib/deltaManagerSummarizerProxy.d.mts.map +1 -0
  295. package/lib/deltaManagerSummarizerProxy.mjs +38 -0
  296. package/lib/deltaManagerSummarizerProxy.mjs.map +1 -0
  297. package/lib/{deltaScheduler.d.ts → deltaScheduler.d.mts} +9 -7
  298. package/lib/deltaScheduler.d.mts.map +1 -0
  299. package/lib/{deltaScheduler.js → deltaScheduler.mjs} +22 -15
  300. package/lib/deltaScheduler.mjs.map +1 -0
  301. package/lib/error.d.mts +14 -0
  302. package/lib/error.d.mts.map +1 -0
  303. package/lib/error.mjs +17 -0
  304. package/lib/error.mjs.map +1 -0
  305. package/lib/gc/garbageCollection.d.mts +224 -0
  306. package/lib/gc/garbageCollection.d.mts.map +1 -0
  307. package/lib/gc/garbageCollection.mjs +861 -0
  308. package/lib/gc/garbageCollection.mjs.map +1 -0
  309. package/lib/gc/gcConfigs.d.mts +23 -0
  310. package/lib/gc/gcConfigs.d.mts.map +1 -0
  311. package/lib/gc/gcConfigs.mjs +156 -0
  312. package/lib/gc/gcConfigs.mjs.map +1 -0
  313. package/lib/gc/gcDefinitions.d.mts +458 -0
  314. package/lib/gc/gcDefinitions.d.mts.map +1 -0
  315. package/lib/gc/gcDefinitions.mjs +93 -0
  316. package/lib/gc/gcDefinitions.mjs.map +1 -0
  317. package/lib/gc/gcHelpers.d.mts +71 -0
  318. package/lib/gc/gcHelpers.d.mts.map +1 -0
  319. package/lib/gc/gcHelpers.mjs +222 -0
  320. package/lib/gc/gcHelpers.mjs.map +1 -0
  321. package/lib/gc/gcReferenceGraphAlgorithm.d.mts +16 -0
  322. package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +1 -0
  323. package/lib/gc/gcReferenceGraphAlgorithm.mjs +45 -0
  324. package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +1 -0
  325. package/lib/gc/gcSummaryDefinitions.d.mts +52 -0
  326. package/lib/gc/gcSummaryDefinitions.d.mts.map +1 -0
  327. package/lib/gc/gcSummaryDefinitions.mjs +6 -0
  328. package/lib/gc/gcSummaryDefinitions.mjs.map +1 -0
  329. package/lib/gc/gcSummaryStateTracker.d.mts +94 -0
  330. package/lib/gc/gcSummaryStateTracker.d.mts.map +1 -0
  331. package/lib/gc/gcSummaryStateTracker.mjs +209 -0
  332. package/lib/gc/gcSummaryStateTracker.mjs.map +1 -0
  333. package/lib/gc/gcTelemetry.d.mts +99 -0
  334. package/lib/gc/gcTelemetry.d.mts.map +1 -0
  335. package/lib/gc/gcTelemetry.mjs +302 -0
  336. package/lib/gc/gcTelemetry.mjs.map +1 -0
  337. package/lib/gc/gcUnreferencedStateTracker.d.mts +40 -0
  338. package/lib/gc/gcUnreferencedStateTracker.d.mts.map +1 -0
  339. package/lib/gc/gcUnreferencedStateTracker.mjs +114 -0
  340. package/lib/gc/gcUnreferencedStateTracker.mjs.map +1 -0
  341. package/lib/gc/index.d.mts +13 -0
  342. package/lib/gc/index.d.mts.map +1 -0
  343. package/lib/gc/index.mjs +12 -0
  344. package/lib/gc/index.mjs.map +1 -0
  345. package/lib/index.d.mts +25 -0
  346. package/lib/index.d.mts.map +1 -0
  347. package/lib/index.mjs +24 -0
  348. package/lib/index.mjs.map +1 -0
  349. package/lib/messageTypes.d.mts +142 -0
  350. package/lib/messageTypes.d.mts.map +1 -0
  351. package/lib/messageTypes.mjs +34 -0
  352. package/lib/messageTypes.mjs.map +1 -0
  353. package/lib/metadata.d.mts +24 -0
  354. package/lib/metadata.d.mts.map +1 -0
  355. package/lib/metadata.mjs +6 -0
  356. package/lib/metadata.mjs.map +1 -0
  357. package/lib/opLifecycle/batchManager.d.mts +48 -0
  358. package/lib/opLifecycle/batchManager.d.mts.map +1 -0
  359. package/lib/opLifecycle/batchManager.mjs +133 -0
  360. package/lib/opLifecycle/batchManager.mjs.map +1 -0
  361. package/lib/opLifecycle/definitions.d.mts +83 -0
  362. package/lib/opLifecycle/definitions.d.mts.map +1 -0
  363. package/lib/opLifecycle/definitions.mjs +6 -0
  364. package/lib/opLifecycle/definitions.mjs.map +1 -0
  365. package/lib/opLifecycle/index.d.mts +13 -0
  366. package/lib/opLifecycle/index.d.mts.map +1 -0
  367. package/lib/opLifecycle/index.mjs +12 -0
  368. package/lib/opLifecycle/index.mjs.map +1 -0
  369. package/lib/opLifecycle/opCompressor.d.mts +18 -0
  370. package/lib/opLifecycle/opCompressor.d.mts.map +1 -0
  371. package/lib/opLifecycle/opCompressor.mjs +80 -0
  372. package/lib/opLifecycle/opCompressor.mjs.map +1 -0
  373. package/lib/opLifecycle/opDecompressor.d.mts +25 -0
  374. package/lib/opLifecycle/opDecompressor.d.mts.map +1 -0
  375. package/lib/opLifecycle/opDecompressor.mjs +128 -0
  376. package/lib/opLifecycle/opDecompressor.mjs.map +1 -0
  377. package/lib/opLifecycle/opGroupingManager.d.mts +22 -0
  378. package/lib/opLifecycle/opGroupingManager.d.mts.map +1 -0
  379. package/lib/opLifecycle/opGroupingManager.mjs +91 -0
  380. package/lib/opLifecycle/opGroupingManager.mjs.map +1 -0
  381. package/lib/opLifecycle/opSplitter.d.mts +61 -0
  382. package/lib/opLifecycle/opSplitter.d.mts.map +1 -0
  383. package/lib/opLifecycle/opSplitter.mjs +197 -0
  384. package/lib/opLifecycle/opSplitter.mjs.map +1 -0
  385. package/lib/opLifecycle/outbox.d.mts +104 -0
  386. package/lib/opLifecycle/outbox.d.mts.map +1 -0
  387. package/lib/opLifecycle/outbox.mjs +321 -0
  388. package/lib/opLifecycle/outbox.mjs.map +1 -0
  389. package/lib/opLifecycle/remoteMessageProcessor.d.mts +47 -0
  390. package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +1 -0
  391. package/lib/opLifecycle/remoteMessageProcessor.mjs +131 -0
  392. package/lib/opLifecycle/remoteMessageProcessor.mjs.map +1 -0
  393. package/lib/opProperties.d.mts +7 -0
  394. package/lib/opProperties.d.mts.map +1 -0
  395. package/lib/opProperties.mjs +13 -0
  396. package/lib/opProperties.mjs.map +1 -0
  397. package/lib/{packageVersion.d.ts → packageVersion.d.mts} +2 -2
  398. package/lib/packageVersion.d.mts.map +1 -0
  399. package/lib/{packageVersion.js → packageVersion.mjs} +2 -2
  400. package/lib/packageVersion.mjs.map +1 -0
  401. package/lib/{pendingStateManager.d.ts → pendingStateManager.d.mts} +33 -70
  402. package/lib/pendingStateManager.d.mts.map +1 -0
  403. package/lib/pendingStateManager.mjs +275 -0
  404. package/lib/pendingStateManager.mjs.map +1 -0
  405. package/lib/scheduleManager.d.mts +27 -0
  406. package/lib/scheduleManager.d.mts.map +1 -0
  407. package/lib/scheduleManager.mjs +254 -0
  408. package/lib/scheduleManager.mjs.map +1 -0
  409. package/lib/storageServiceWithAttachBlobs.d.mts +17 -0
  410. package/lib/storageServiceWithAttachBlobs.d.mts.map +1 -0
  411. package/lib/storageServiceWithAttachBlobs.mjs +28 -0
  412. package/lib/storageServiceWithAttachBlobs.mjs.map +1 -0
  413. package/lib/summary/index.d.mts +17 -0
  414. package/lib/summary/index.d.mts.map +1 -0
  415. package/lib/summary/index.mjs +16 -0
  416. package/lib/summary/index.mjs.map +1 -0
  417. package/{dist/orderedClientElection.d.ts → lib/summary/orderedClientElection.d.mts} +42 -23
  418. package/lib/summary/orderedClientElection.d.mts.map +1 -0
  419. package/lib/{orderedClientElection.js → summary/orderedClientElection.mjs} +95 -79
  420. package/lib/summary/orderedClientElection.mjs.map +1 -0
  421. package/{dist/runWhileConnectedCoordinator.d.ts → lib/summary/runWhileConnectedCoordinator.d.mts} +10 -4
  422. package/lib/summary/runWhileConnectedCoordinator.d.mts.map +1 -0
  423. package/lib/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.mjs} +12 -10
  424. package/lib/summary/runWhileConnectedCoordinator.mjs.map +1 -0
  425. package/lib/summary/runningSummarizer.d.mts +128 -0
  426. package/lib/summary/runningSummarizer.d.mts.map +1 -0
  427. package/lib/summary/runningSummarizer.mjs +675 -0
  428. package/lib/summary/runningSummarizer.mjs.map +1 -0
  429. package/lib/{summarizer.d.ts → summary/summarizer.d.mts} +21 -36
  430. package/lib/summary/summarizer.d.mts.map +1 -0
  431. package/lib/summary/summarizer.mjs +257 -0
  432. package/lib/summary/summarizer.mjs.map +1 -0
  433. package/{dist/summarizerClientElection.d.ts → lib/summary/summarizerClientElection.d.mts} +7 -7
  434. package/lib/summary/summarizerClientElection.d.mts.map +1 -0
  435. package/lib/{summarizerClientElection.js → summary/summarizerClientElection.mjs} +14 -45
  436. package/lib/summary/summarizerClientElection.mjs.map +1 -0
  437. package/{dist/summarizerHeuristics.d.ts → lib/summary/summarizerHeuristics.d.mts} +30 -8
  438. package/lib/summary/summarizerHeuristics.d.mts.map +1 -0
  439. package/lib/summary/summarizerHeuristics.mjs +151 -0
  440. package/lib/summary/summarizerHeuristics.mjs.map +1 -0
  441. package/lib/summary/summarizerNode/index.d.mts +8 -0
  442. package/lib/summary/summarizerNode/index.d.mts.map +1 -0
  443. package/lib/summary/summarizerNode/index.mjs +7 -0
  444. package/lib/summary/summarizerNode/index.mjs.map +1 -0
  445. package/lib/summary/summarizerNode/summarizerNode.d.mts +167 -0
  446. package/lib/summary/summarizerNode/summarizerNode.d.mts.map +1 -0
  447. package/lib/summary/summarizerNode/summarizerNode.mjs +521 -0
  448. package/lib/summary/summarizerNode/summarizerNode.mjs.map +1 -0
  449. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts +121 -0
  450. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +1 -0
  451. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs +123 -0
  452. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +1 -0
  453. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts +153 -0
  454. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +1 -0
  455. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs +370 -0
  456. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +1 -0
  457. package/{dist/summarizerTypes.d.ts → lib/summary/summarizerTypes.d.mts} +235 -85
  458. package/lib/summary/summarizerTypes.d.mts.map +1 -0
  459. package/lib/summary/summarizerTypes.mjs +6 -0
  460. package/lib/summary/summarizerTypes.mjs.map +1 -0
  461. package/lib/{summaryCollection.d.ts → summary/summaryCollection.d.mts} +24 -6
  462. package/lib/summary/summaryCollection.d.mts.map +1 -0
  463. package/lib/{summaryCollection.js → summary/summaryCollection.mjs} +76 -45
  464. package/lib/summary/summaryCollection.mjs.map +1 -0
  465. package/{dist/summaryFormat.d.ts → lib/summary/summaryFormat.d.mts} +26 -31
  466. package/lib/summary/summaryFormat.d.mts.map +1 -0
  467. package/lib/{summaryFormat.js → summary/summaryFormat.mjs} +30 -26
  468. package/lib/summary/summaryFormat.mjs.map +1 -0
  469. package/lib/summary/summaryGenerator.d.mts +127 -0
  470. package/lib/summary/summaryGenerator.d.mts.map +1 -0
  471. package/lib/{summaryGenerator.js → summary/summaryGenerator.mjs} +153 -67
  472. package/lib/summary/summaryGenerator.mjs.map +1 -0
  473. package/{dist/summaryManager.d.ts → lib/summary/summaryManager.d.mts} +16 -14
  474. package/lib/summary/summaryManager.d.mts.map +1 -0
  475. package/lib/{summaryManager.js → summary/summaryManager.mjs} +94 -51
  476. package/lib/summary/summaryManager.mjs.map +1 -0
  477. package/lib/{throttler.d.ts → throttler.d.mts} +3 -3
  478. package/lib/throttler.d.mts.map +1 -0
  479. package/lib/{throttler.js → throttler.mjs} +21 -21
  480. package/lib/throttler.mjs.map +1 -0
  481. package/package.json +199 -71
  482. package/prettier.config.cjs +8 -0
  483. package/src/batchTracker.ts +59 -54
  484. package/src/blobManager.ts +942 -294
  485. package/src/connectionTelemetry.ts +342 -252
  486. package/src/containerHandleContext.ts +27 -29
  487. package/src/containerRuntime.ts +3883 -3143
  488. package/src/dataStore.ts +170 -140
  489. package/src/dataStoreContext.ts +1166 -986
  490. package/src/dataStoreContexts.ts +176 -163
  491. package/src/dataStoreRegistry.ts +29 -21
  492. package/src/dataStores.ts +924 -678
  493. package/src/deltaManagerProxyBase.ts +111 -0
  494. package/src/deltaManagerSummarizerProxy.ts +49 -0
  495. package/src/deltaScheduler.ts +161 -156
  496. package/src/error.ts +21 -0
  497. package/src/gc/garbageCollection.md +106 -0
  498. package/src/gc/garbageCollection.ts +1157 -0
  499. package/src/gc/gcConfigs.ts +224 -0
  500. package/src/gc/gcDefinitions.ts +524 -0
  501. package/src/gc/gcHelpers.ts +284 -0
  502. package/src/gc/gcReferenceGraphAlgorithm.ts +52 -0
  503. package/src/gc/gcSummaryDefinitions.ts +54 -0
  504. package/src/gc/gcSummaryStateTracker.ts +299 -0
  505. package/src/gc/gcTelemetry.ts +433 -0
  506. package/src/gc/gcUnreferencedStateTracker.ts +153 -0
  507. package/src/gc/index.ts +60 -0
  508. package/src/index.ts +101 -74
  509. package/src/messageTypes.ts +238 -0
  510. package/src/metadata.ts +26 -0
  511. package/src/opLifecycle/README.md +321 -0
  512. package/src/opLifecycle/batchManager.ts +179 -0
  513. package/src/opLifecycle/definitions.ts +89 -0
  514. package/src/opLifecycle/index.ts +19 -0
  515. package/src/opLifecycle/opCompressor.ts +99 -0
  516. package/src/opLifecycle/opDecompressor.ts +190 -0
  517. package/src/opLifecycle/opGroupingManager.ts +133 -0
  518. package/src/opLifecycle/opSplitter.ts +279 -0
  519. package/src/opLifecycle/outbox.ts +474 -0
  520. package/src/opLifecycle/remoteMessageProcessor.ts +175 -0
  521. package/src/opProperties.ts +21 -0
  522. package/src/packageVersion.ts +1 -1
  523. package/src/pendingStateManager.ts +396 -465
  524. package/src/scheduleManager.ts +358 -0
  525. package/src/storageServiceWithAttachBlobs.ts +38 -0
  526. package/src/summary/index.ts +109 -0
  527. package/src/summary/orderedClientElection.ts +571 -0
  528. package/src/summary/runWhileConnectedCoordinator.ts +117 -0
  529. package/src/summary/runningSummarizer.ts +920 -0
  530. package/src/summary/summarizer.ts +352 -0
  531. package/src/summary/summarizerClientElection.ts +140 -0
  532. package/src/summary/summarizerHeuristics.ts +227 -0
  533. package/src/summary/summarizerNode/index.ts +12 -0
  534. package/src/summary/summarizerNode/summarizerNode.ts +725 -0
  535. package/src/summary/summarizerNode/summarizerNodeUtils.ts +206 -0
  536. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +571 -0
  537. package/src/summary/summarizerTypes.ts +631 -0
  538. package/src/summary/summaryCollection.ts +474 -0
  539. package/src/summary/summaryFormat.ts +249 -0
  540. package/src/summary/summaryGenerator.ts +539 -0
  541. package/src/summary/summaryManager.ts +452 -0
  542. package/src/throttler.ts +131 -122
  543. package/tsc-multi.test.json +4 -0
  544. package/tsconfig.json +11 -13
  545. package/dist/batchTracker.js.map +0 -1
  546. package/dist/blobManager.js +0 -249
  547. package/dist/blobManager.js.map +0 -1
  548. package/dist/connectionTelemetry.js +0 -178
  549. package/dist/connectionTelemetry.js.map +0 -1
  550. package/dist/containerHandleContext.js.map +0 -1
  551. package/dist/containerRuntime.js +0 -2174
  552. package/dist/containerRuntime.js.map +0 -1
  553. package/dist/dataStore.js.map +0 -1
  554. package/dist/dataStoreContext.js.map +0 -1
  555. package/dist/dataStoreContexts.js.map +0 -1
  556. package/dist/dataStoreRegistry.js.map +0 -1
  557. package/dist/dataStores.js.map +0 -1
  558. package/dist/deltaScheduler.js.map +0 -1
  559. package/dist/garbageCollection.d.ts +0 -319
  560. package/dist/garbageCollection.d.ts.map +0 -1
  561. package/dist/garbageCollection.js +0 -993
  562. package/dist/garbageCollection.js.map +0 -1
  563. package/dist/index.js +0 -33
  564. package/dist/index.js.map +0 -1
  565. package/dist/opTelemetry.d.ts +0 -22
  566. package/dist/opTelemetry.d.ts.map +0 -1
  567. package/dist/opTelemetry.js +0 -60
  568. package/dist/opTelemetry.js.map +0 -1
  569. package/dist/orderedClientElection.d.ts.map +0 -1
  570. package/dist/orderedClientElection.js.map +0 -1
  571. package/dist/packageVersion.js.map +0 -1
  572. package/dist/pendingStateManager.js +0 -346
  573. package/dist/pendingStateManager.js.map +0 -1
  574. package/dist/runWhileConnectedCoordinator.d.ts.map +0 -1
  575. package/dist/runWhileConnectedCoordinator.js.map +0 -1
  576. package/dist/runningSummarizer.d.ts +0 -93
  577. package/dist/runningSummarizer.d.ts.map +0 -1
  578. package/dist/runningSummarizer.js +0 -384
  579. package/dist/runningSummarizer.js.map +0 -1
  580. package/dist/serializedSnapshotStorage.d.ts +0 -58
  581. package/dist/serializedSnapshotStorage.d.ts.map +0 -1
  582. package/dist/serializedSnapshotStorage.js +0 -108
  583. package/dist/serializedSnapshotStorage.js.map +0 -1
  584. package/dist/summarizer.d.ts.map +0 -1
  585. package/dist/summarizer.js +0 -348
  586. package/dist/summarizer.js.map +0 -1
  587. package/dist/summarizerClientElection.d.ts.map +0 -1
  588. package/dist/summarizerClientElection.js.map +0 -1
  589. package/dist/summarizerHandle.d.ts +0 -12
  590. package/dist/summarizerHandle.d.ts.map +0 -1
  591. package/dist/summarizerHandle.js +0 -22
  592. package/dist/summarizerHandle.js.map +0 -1
  593. package/dist/summarizerHeuristics.d.ts.map +0 -1
  594. package/dist/summarizerHeuristics.js +0 -84
  595. package/dist/summarizerHeuristics.js.map +0 -1
  596. package/dist/summarizerTypes.d.ts.map +0 -1
  597. package/dist/summarizerTypes.js.map +0 -1
  598. package/dist/summaryCollection.d.ts.map +0 -1
  599. package/dist/summaryCollection.js.map +0 -1
  600. package/dist/summaryFormat.d.ts.map +0 -1
  601. package/dist/summaryFormat.js.map +0 -1
  602. package/dist/summaryGenerator.d.ts.map +0 -1
  603. package/dist/summaryGenerator.js.map +0 -1
  604. package/dist/summaryManager.d.ts.map +0 -1
  605. package/dist/summaryManager.js.map +0 -1
  606. package/dist/throttler.js.map +0 -1
  607. package/garbageCollection.md +0 -41
  608. package/lib/batchTracker.d.ts.map +0 -1
  609. package/lib/batchTracker.js.map +0 -1
  610. package/lib/blobManager.d.ts +0 -95
  611. package/lib/blobManager.d.ts.map +0 -1
  612. package/lib/blobManager.js +0 -244
  613. package/lib/blobManager.js.map +0 -1
  614. package/lib/connectionTelemetry.d.ts.map +0 -1
  615. package/lib/connectionTelemetry.js +0 -174
  616. package/lib/connectionTelemetry.js.map +0 -1
  617. package/lib/containerHandleContext.d.ts.map +0 -1
  618. package/lib/containerHandleContext.js.map +0 -1
  619. package/lib/containerRuntime.d.ts +0 -615
  620. package/lib/containerRuntime.d.ts.map +0 -1
  621. package/lib/containerRuntime.js +0 -2166
  622. package/lib/containerRuntime.js.map +0 -1
  623. package/lib/dataStore.d.ts.map +0 -1
  624. package/lib/dataStore.js.map +0 -1
  625. package/lib/dataStoreContext.d.ts.map +0 -1
  626. package/lib/dataStoreContext.js.map +0 -1
  627. package/lib/dataStoreContexts.d.ts.map +0 -1
  628. package/lib/dataStoreContexts.js.map +0 -1
  629. package/lib/dataStoreRegistry.d.ts.map +0 -1
  630. package/lib/dataStoreRegistry.js.map +0 -1
  631. package/lib/dataStores.d.ts.map +0 -1
  632. package/lib/dataStores.js.map +0 -1
  633. package/lib/deltaScheduler.d.ts.map +0 -1
  634. package/lib/deltaScheduler.js.map +0 -1
  635. package/lib/garbageCollection.d.ts +0 -319
  636. package/lib/garbageCollection.d.ts.map +0 -1
  637. package/lib/garbageCollection.js +0 -989
  638. package/lib/garbageCollection.js.map +0 -1
  639. package/lib/index.d.ts +0 -14
  640. package/lib/index.d.ts.map +0 -1
  641. package/lib/index.js +0 -13
  642. package/lib/index.js.map +0 -1
  643. package/lib/opTelemetry.d.ts +0 -22
  644. package/lib/opTelemetry.d.ts.map +0 -1
  645. package/lib/opTelemetry.js +0 -56
  646. package/lib/opTelemetry.js.map +0 -1
  647. package/lib/orderedClientElection.d.ts.map +0 -1
  648. package/lib/orderedClientElection.js.map +0 -1
  649. package/lib/packageVersion.d.ts.map +0 -1
  650. package/lib/packageVersion.js.map +0 -1
  651. package/lib/pendingStateManager.d.ts.map +0 -1
  652. package/lib/pendingStateManager.js +0 -339
  653. package/lib/pendingStateManager.js.map +0 -1
  654. package/lib/runWhileConnectedCoordinator.d.ts.map +0 -1
  655. package/lib/runWhileConnectedCoordinator.js.map +0 -1
  656. package/lib/runningSummarizer.d.ts +0 -93
  657. package/lib/runningSummarizer.d.ts.map +0 -1
  658. package/lib/runningSummarizer.js +0 -380
  659. package/lib/runningSummarizer.js.map +0 -1
  660. package/lib/serializedSnapshotStorage.d.ts +0 -58
  661. package/lib/serializedSnapshotStorage.d.ts.map +0 -1
  662. package/lib/serializedSnapshotStorage.js +0 -104
  663. package/lib/serializedSnapshotStorage.js.map +0 -1
  664. package/lib/summarizer.d.ts.map +0 -1
  665. package/lib/summarizer.js +0 -342
  666. package/lib/summarizer.js.map +0 -1
  667. package/lib/summarizerClientElection.d.ts.map +0 -1
  668. package/lib/summarizerClientElection.js.map +0 -1
  669. package/lib/summarizerHandle.d.ts +0 -12
  670. package/lib/summarizerHandle.d.ts.map +0 -1
  671. package/lib/summarizerHandle.js +0 -18
  672. package/lib/summarizerHandle.js.map +0 -1
  673. package/lib/summarizerHeuristics.d.ts.map +0 -1
  674. package/lib/summarizerHeuristics.js +0 -79
  675. package/lib/summarizerHeuristics.js.map +0 -1
  676. package/lib/summarizerTypes.d.ts.map +0 -1
  677. package/lib/summarizerTypes.js +0 -9
  678. package/lib/summarizerTypes.js.map +0 -1
  679. package/lib/summaryCollection.d.ts.map +0 -1
  680. package/lib/summaryCollection.js.map +0 -1
  681. package/lib/summaryFormat.d.ts.map +0 -1
  682. package/lib/summaryFormat.js.map +0 -1
  683. package/lib/summaryGenerator.d.ts +0 -85
  684. package/lib/summaryGenerator.d.ts.map +0 -1
  685. package/lib/summaryGenerator.js.map +0 -1
  686. package/lib/summaryManager.d.ts.map +0 -1
  687. package/lib/summaryManager.js.map +0 -1
  688. package/lib/throttler.d.ts.map +0 -1
  689. package/lib/throttler.js.map +0 -1
  690. package/src/garbageCollection.ts +0 -1434
  691. package/src/opTelemetry.ts +0 -71
  692. package/src/orderedClientElection.ts +0 -511
  693. package/src/runWhileConnectedCoordinator.ts +0 -106
  694. package/src/runningSummarizer.ts +0 -550
  695. package/src/serializedSnapshotStorage.ts +0 -146
  696. package/src/summarizer.ts +0 -438
  697. package/src/summarizerClientElection.ts +0 -161
  698. package/src/summarizerHandle.ts +0 -21
  699. package/src/summarizerHeuristics.ts +0 -108
  700. package/src/summarizerTypes.ts +0 -462
  701. package/src/summaryCollection.ts +0 -406
  702. package/src/summaryFormat.ts +0 -239
  703. package/src/summaryGenerator.ts +0 -427
  704. package/src/summaryManager.ts +0 -368
  705. package/tsconfig.esnext.json +0 -7
@@ -0,0 +1,679 @@
1
+ "use strict";
2
+ /*!
3
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
+ * Licensed under the MIT License.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.RunningSummarizer = exports.defaultMaxAttemptsForSubmitFailures = exports.defaultMaxAttempts = void 0;
8
+ const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
9
+ const core_utils_1 = require("@fluidframework/core-utils");
10
+ const client_utils_1 = require("@fluid-internal/client-utils");
11
+ const driver_definitions_1 = require("@fluidframework/driver-definitions");
12
+ const protocol_definitions_1 = require("@fluidframework/protocol-definitions");
13
+ const opProperties_1 = require("../opProperties.cjs");
14
+ const summarizerHeuristics_1 = require("./summarizerHeuristics.cjs");
15
+ const summaryGenerator_1 = require("./summaryGenerator.cjs");
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;
27
+ /**
28
+ * An instance of RunningSummarizer manages the heuristics for summarizing.
29
+ * Until disposed, the instance of RunningSummarizer can assume that it is
30
+ * in a state of running, meaning it is connected and initialized. It keeps
31
+ * track of summaries that it is generating as they are broadcast and acked/nacked.
32
+ * This object is created and controlled by Summarizer object.
33
+ */
34
+ class RunningSummarizer extends client_utils_1.TypedEventEmitter {
35
+ static async start(logger, summaryWatcher, configuration, submitSummaryCallback, refreshLatestSummaryAckCallback, heuristicData, summaryCollection, cancellationToken, stopSummarizerCallback, runtime) {
36
+ const summarizer = new RunningSummarizer(logger, summaryWatcher, configuration, submitSummaryCallback, refreshLatestSummaryAckCallback, heuristicData, summaryCollection, cancellationToken, stopSummarizerCallback, runtime);
37
+ // Before doing any heuristics or proceeding with its refreshing, if there is a summary ack received while
38
+ // this summarizer catches up, let's refresh state before proceeding with the summarization.
39
+ const lastAckRefSeq = await summarizer.handleSummaryAck();
40
+ await summarizer.waitStart();
41
+ // Handle summary acks asynchronously
42
+ // Note: no exceptions are thrown from processIncomingSummaryAcks handler as it handles all exceptions
43
+ summarizer.processIncomingSummaryAcks(lastAckRefSeq).catch((error) => {
44
+ (0, telemetry_utils_1.createChildLogger)({ logger }).sendErrorEvent({ eventName: "HandleSummaryAckFatalError" }, error);
45
+ });
46
+ // Update heuristic counts
47
+ // By the time we get here, there are potentially ops missing from the heuristic summary counts
48
+ // Examples of where this could happen:
49
+ // 1. Op is processed during the time that we are initiating the RunningSummarizer instance but before we
50
+ // listen for the op events (will get missed by the handlers in the current workflow)
51
+ // 2. Op was sequenced after the last time we summarized (op sequence number > summarize ref sequence number)
52
+ const diff = runtime.deltaManager.lastSequenceNumber -
53
+ (heuristicData.lastSuccessfulSummary.refSequenceNumber +
54
+ heuristicData.numNonRuntimeOps +
55
+ heuristicData.numRuntimeOps);
56
+ heuristicData.hasMissingOpData = diff > 0;
57
+ if (heuristicData.hasMissingOpData) {
58
+ // Split the diff 50-50 and increment the counts appropriately
59
+ heuristicData.numNonRuntimeOps += Math.ceil(diff / 2);
60
+ heuristicData.numRuntimeOps += Math.floor(diff / 2);
61
+ }
62
+ // Update last seq number (in case the handlers haven't processed anything yet)
63
+ heuristicData.lastOpSequenceNumber = runtime.deltaManager.lastSequenceNumber;
64
+ // Start heuristics
65
+ summarizer.heuristicRunner?.start();
66
+ summarizer.heuristicRunner?.run();
67
+ return summarizer;
68
+ }
69
+ get disposed() {
70
+ return this._disposed;
71
+ }
72
+ constructor(baseLogger, summaryWatcher, configuration, submitSummaryCallback, refreshLatestSummaryAckCallback, heuristicData, summaryCollection, cancellationToken, stopSummarizerCallback, runtime) {
73
+ super();
74
+ this.summaryWatcher = summaryWatcher;
75
+ this.configuration = configuration;
76
+ this.submitSummaryCallback = submitSummaryCallback;
77
+ this.refreshLatestSummaryAckCallback = refreshLatestSummaryAckCallback;
78
+ this.heuristicData = heuristicData;
79
+ this.summaryCollection = summaryCollection;
80
+ this.cancellationToken = cancellationToken;
81
+ this.stopSummarizerCallback = stopSummarizerCallback;
82
+ this.runtime = runtime;
83
+ this.stopping = false;
84
+ this._disposed = false;
85
+ this.tryWhileSummarizing = false;
86
+ this.summarizeCount = 0;
87
+ this.totalSuccessfulAttempts = 0;
88
+ this.initialized = false;
89
+ /**
90
+ * RunningSummarizer's logger includes the sequenced index of the current summary on each event.
91
+ * If some other Summarizer code wants that event on their logs they can get it here,
92
+ * but only if they're logging about that same summary.
93
+ * @param summaryOpRefSeq - RefSeq number of the summary op, to ensure the log correlation will be correct
94
+ */
95
+ this.tryGetCorrelatedLogger = (summaryOpRefSeq) => this.heuristicData.lastAttempt.refSequenceNumber === summaryOpRefSeq
96
+ ? this.mc.logger
97
+ : undefined;
98
+ /** We only want a single heuristic runner micro-task (will provide better optimized grouping of ops) */
99
+ this.heuristicRunnerMicroTaskExists = false;
100
+ const telemetryProps = {
101
+ summarizeCount: () => this.summarizeCount,
102
+ summarizerSuccessfulAttempts: () => this.totalSuccessfulAttempts,
103
+ };
104
+ this.mc = (0, telemetry_utils_1.createChildMonitoringContext)({
105
+ logger: baseLogger,
106
+ namespace: "Running",
107
+ properties: {
108
+ all: telemetryProps,
109
+ },
110
+ });
111
+ if (configuration.state !== "disableHeuristics") {
112
+ (0, core_utils_1.assert)(this.configuration.state === "enabled", 0x2ea /* "Configuration state should be enabled" */);
113
+ this.heuristicRunner = new summarizerHeuristics_1.SummarizeHeuristicRunner(heuristicData, this.configuration, (reason) => this.trySummarize(reason), this.mc.logger);
114
+ }
115
+ (0, core_utils_1.assert)(this.configuration.state !== "disabled", 0x2eb /* "Summary not supported with configuration disabled" */);
116
+ // Cap the maximum amount of time client will wait for a summarize op ack to maxSummarizeAckWaitTime
117
+ // configuration.maxAckWaitTime is composed from defaults, server values, and runtime overrides
118
+ const maxAckWaitTime = Math.min(this.configuration.maxAckWaitTime, maxSummarizeAckWaitTime);
119
+ this.pendingAckTimer = new core_utils_1.PromiseTimer(maxAckWaitTime, () => {
120
+ // Note: summarizeCount (from ChildLogger definition) may be 0,
121
+ // since this code path is hit when RunningSummarizer first starts up,
122
+ // before this instance has kicked off a new summarize run.
123
+ this.mc.logger.sendErrorEvent({
124
+ eventName: "SummaryAckWaitTimeout",
125
+ message: "Pending summary ack not received in time",
126
+ maxAckWaitTime,
127
+ referenceSequenceNumber: this.heuristicData.lastAttempt.refSequenceNumber,
128
+ summarySequenceNumber: this.heuristicData.lastAttempt.summarySequenceNumber,
129
+ timePending: Date.now() - this.heuristicData.lastAttempt.summaryTime,
130
+ });
131
+ });
132
+ // Set up pending ack timeout by op timestamp differences for previous summaries.
133
+ summaryCollection.setPendingAckTimerTimeoutCallback(maxAckWaitTime, () => {
134
+ if (this.pendingAckTimer.hasTimer) {
135
+ this.mc.logger.sendTelemetryEvent({
136
+ eventName: "MissingSummaryAckFoundByOps",
137
+ referenceSequenceNumber: this.heuristicData.lastAttempt.refSequenceNumber,
138
+ summarySequenceNumber: this.heuristicData.lastAttempt.summarySequenceNumber,
139
+ });
140
+ this.pendingAckTimer.clear();
141
+ }
142
+ });
143
+ this.generator = new summaryGenerator_1.SummaryGenerator(this.pendingAckTimer, this.heuristicData, this.submitSummaryCallback, () => {
144
+ this.totalSuccessfulAttempts++;
145
+ }, this.summaryWatcher, this.mc.logger);
146
+ // Listen to runtime for ops
147
+ this.runtimeListener = (op, runtimeMessage) => {
148
+ this.handleOp(op, runtimeMessage === true);
149
+ };
150
+ this.runtime.on("op", this.runtimeListener);
151
+ // The max attempts for submit failures can be overridden via a feature flag. This allows us to
152
+ // tweak this as per telemetry data until we arrive at a stable number.
153
+ // If its set to a number higher than `defaultMaxAttemptsForSubmitFailures`, it will be ignored.
154
+ const overrideMaxAttempts = this.mc.config.getNumber("Fluid.Summarizer.AttemptsForSubmitFailures");
155
+ this.maxAttemptsForSubmitFailures =
156
+ overrideMaxAttempts && overrideMaxAttempts < exports.defaultMaxAttemptsForSubmitFailures
157
+ ? overrideMaxAttempts
158
+ : exports.defaultMaxAttemptsForSubmitFailures;
159
+ }
160
+ async handleSummaryAck() {
161
+ const lastAck = this.summaryCollection.latestAck;
162
+ let refSequenceNumber = -1;
163
+ // In case we haven't received the lastestAck yet, just return.
164
+ if (lastAck !== undefined) {
165
+ refSequenceNumber = lastAck.summaryOp.referenceSequenceNumber;
166
+ const summaryLogger = this.tryGetCorrelatedLogger(refSequenceNumber) ?? this.mc.logger;
167
+ const summaryOpHandle = lastAck.summaryOp.contents.handle;
168
+ const summaryAckHandle = lastAck.summaryAck.contents.handle;
169
+ while (this.summarizingLock !== undefined) {
170
+ summaryLogger.sendTelemetryEvent({
171
+ eventName: "RefreshAttemptWithSummarizerRunning",
172
+ referenceSequenceNumber: refSequenceNumber,
173
+ proposalHandle: summaryOpHandle,
174
+ ackHandle: summaryAckHandle,
175
+ });
176
+ await this.summarizingLock;
177
+ }
178
+ // Make sure we block any summarizer from being executed/enqueued while
179
+ // executing the refreshLatestSummaryAck.
180
+ // https://dev.azure.com/fluidframework/internal/_workitems/edit/779
181
+ await this.lockedSummaryAction(() => { }, async () => this.refreshLatestSummaryAckCallback({
182
+ proposalHandle: summaryOpHandle,
183
+ ackHandle: summaryAckHandle,
184
+ summaryRefSeq: refSequenceNumber,
185
+ summaryLogger,
186
+ }).catch(async (error) => {
187
+ // If the error is 404, so maybe the fetched version no longer exists on server. We just
188
+ // ignore this error in that case, as that means we will have another summaryAck for the
189
+ // latest version with which we will refresh the state. However in case of single commit
190
+ // summary, we might me missing a summary ack, so in that case we are still fine as the
191
+ // code in `submitSummary` function in container runtime, will refresh the latest state
192
+ // by calling `prefetchLatestSummaryThenClose`. We will load the next summarizer from the
193
+ // updated state and be fine.
194
+ const isIgnoredError = (0, telemetry_utils_1.isFluidError)(error) &&
195
+ error.errorType === driver_definitions_1.DriverErrorTypes.fileNotFoundOrAccessDeniedError;
196
+ summaryLogger.sendTelemetryEvent({
197
+ eventName: isIgnoredError
198
+ ? "HandleSummaryAckErrorIgnored"
199
+ : "HandleLastSummaryAckError",
200
+ referenceSequenceNumber: refSequenceNumber,
201
+ proposalHandle: summaryOpHandle,
202
+ ackHandle: summaryAckHandle,
203
+ }, error);
204
+ }), () => { });
205
+ refSequenceNumber++;
206
+ }
207
+ return refSequenceNumber;
208
+ }
209
+ /**
210
+ * Responsible for receiving and processing all the summaryAcks.
211
+ * In case there was a summary ack processed by the running summarizer before processIncomingSummaryAcks is called,
212
+ * it will wait for the summary ack that is newer than the one indicated by the lastAckRefSeq.
213
+ * @param lastAckRefSeq - Identifies the minimum reference sequence number the summarizer needs to wait for.
214
+ * In case of a negative number, the summarizer will wait for ANY summary ack that is greater than the deltaManager's initial sequence number,
215
+ * and, in case of a positive one, it will wait for a summary ack that is greater than this current reference sequence number.
216
+ */
217
+ async processIncomingSummaryAcks(lastAckRefSeq) {
218
+ let refSequenceNumber = lastAckRefSeq > 0 ? lastAckRefSeq : this.runtime.deltaManager.initialSequenceNumber;
219
+ while (!this.disposed) {
220
+ const summaryLogger = this.tryGetCorrelatedLogger(refSequenceNumber) ?? this.mc.logger;
221
+ // Initialize ack with undefined if exception happens inside of waitSummaryAck on second iteration,
222
+ // we record undefined, not previous handles.
223
+ await this.summaryCollection.waitSummaryAck(refSequenceNumber);
224
+ summaryLogger.sendTelemetryEvent({
225
+ eventName: "processIncomingSummaryAcks",
226
+ referenceSequenceNumber: refSequenceNumber,
227
+ lastAckRefSeq,
228
+ });
229
+ refSequenceNumber = await this.handleSummaryAck();
230
+ // A valid Summary Ack must have been processed.
231
+ (0, core_utils_1.assert)(refSequenceNumber >= 0, 0x58f /* Invalid ref sequence number */);
232
+ }
233
+ }
234
+ dispose() {
235
+ this.runtime.off("op", this.runtimeListener);
236
+ this.summaryWatcher.dispose();
237
+ this.heuristicRunner?.dispose();
238
+ this.heuristicRunner = undefined;
239
+ this.generator.dispose();
240
+ this.pendingAckTimer.clear();
241
+ this.disposeEnqueuedSummary();
242
+ this._disposed = true;
243
+ this.stopping = true;
244
+ }
245
+ handleOp(op, runtimeMessage) {
246
+ this.heuristicData.lastOpSequenceNumber = op.sequenceNumber;
247
+ if (runtimeMessage) {
248
+ this.heuristicData.numRuntimeOps++;
249
+ }
250
+ else {
251
+ this.heuristicData.numNonRuntimeOps++;
252
+ }
253
+ this.heuristicData.totalOpsSize += (0, opProperties_1.opSize)(op);
254
+ // Check for enqueued on-demand summaries; Intentionally do nothing otherwise
255
+ if (this.initialized &&
256
+ this.opCanTriggerSummary(op, runtimeMessage) &&
257
+ !this.tryRunEnqueuedSummary() &&
258
+ !this.heuristicRunnerMicroTaskExists) {
259
+ this.heuristicRunnerMicroTaskExists = true;
260
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
261
+ Promise.resolve()
262
+ .then(() => {
263
+ this.heuristicRunner?.run();
264
+ })
265
+ .finally(() => {
266
+ this.heuristicRunnerMicroTaskExists = false;
267
+ });
268
+ }
269
+ }
270
+ /**
271
+ * Can the given op trigger a summary?
272
+ * # Currently always prevents summaries for Summarize and SummaryAck/Nack ops
273
+ * @param op - op to check
274
+ * @returns true if this op can trigger a summary
275
+ */
276
+ opCanTriggerSummary(op, runtimeMessage) {
277
+ switch (op.type) {
278
+ case protocol_definitions_1.MessageType.Summarize:
279
+ case protocol_definitions_1.MessageType.SummaryAck:
280
+ case protocol_definitions_1.MessageType.SummaryNack:
281
+ return false;
282
+ default:
283
+ return runtimeMessage || this.nonRuntimeOpCanTriggerSummary();
284
+ }
285
+ }
286
+ nonRuntimeOpCanTriggerSummary() {
287
+ const opsSinceLastAck = this.heuristicData.lastOpSequenceNumber -
288
+ this.heuristicData.lastSuccessfulSummary.refSequenceNumber;
289
+ return (this.configuration.state === "enabled" &&
290
+ (this.configuration.nonRuntimeHeuristicThreshold === undefined ||
291
+ this.configuration.nonRuntimeHeuristicThreshold <= opsSinceLastAck));
292
+ }
293
+ async waitStop(allowLastSummary) {
294
+ if (this.stopping) {
295
+ return;
296
+ }
297
+ this.stopping = true;
298
+ this.disposeEnqueuedSummary();
299
+ // This will try to run lastSummary if needed.
300
+ if (allowLastSummary && this.heuristicRunner?.shouldRunLastSummary()) {
301
+ if (this.summarizingLock === undefined) {
302
+ this.trySummarizeOnce(
303
+ // summarizeProps
304
+ { summarizeReason: "lastSummary" },
305
+ // ISummarizeOptions, using defaults: { refreshLatestAck: false, fullTree: false }
306
+ {});
307
+ }
308
+ }
309
+ // Note that trySummarizeOnce() call above returns right away, without waiting.
310
+ // So we need to wait for its completion, otherwise it would be destroyed right away.
311
+ // That said, if summary lock was taken upfront, this wait might wait on multiple retries to
312
+ // submit summary. We should reconsider this flow and make summarizer move to exit faster.
313
+ // This resolves when the current pending summary gets an ack or fails.
314
+ await this.summarizingLock;
315
+ }
316
+ async waitStart() {
317
+ // Wait no longer than ack timeout for all pending
318
+ const waitStartResult = await (0, summaryGenerator_1.raceTimer)(this.summaryWatcher.waitFlushed(), this.pendingAckTimer.start());
319
+ this.pendingAckTimer.clear();
320
+ // Remove pending ack wait timeout by op timestamp comparison, because
321
+ // it has race conditions with summaries submitted by this same client.
322
+ this.summaryCollection.unsetPendingAckTimerTimeoutCallback();
323
+ if (waitStartResult.result === "done" && waitStartResult.value !== undefined) {
324
+ this.heuristicData.updateWithLastSummaryAckInfo({
325
+ refSequenceNumber: waitStartResult.value.summaryOp.referenceSequenceNumber,
326
+ // This will be the Summarizer starting point so only use timestamps from client's machine.
327
+ summaryTime: Date.now(),
328
+ summarySequenceNumber: waitStartResult.value.summaryOp.sequenceNumber,
329
+ });
330
+ }
331
+ this.initialized = true;
332
+ }
333
+ beforeSummaryAction() {
334
+ this.summarizeCount++;
335
+ }
336
+ afterSummaryAction() {
337
+ const retry = this.tryWhileSummarizing;
338
+ this.tryWhileSummarizing = false;
339
+ // After summarizing, we should check to see if we need to summarize again.
340
+ // Rerun the heuristics and check for enqueued summaries.
341
+ if (!this.stopping && !this.tryRunEnqueuedSummary() && retry) {
342
+ this.heuristicRunner?.run();
343
+ }
344
+ }
345
+ /**
346
+ * Runs single summary action that prevents any other concurrent actions.
347
+ * Assumes that caller checked upfront for lack of concurrent action (this.summarizingLock)
348
+ * before calling this API. I.e. caller is responsible for either erroring out or waiting on this promise.
349
+ * @param before - set of instructions to run before running the action.
350
+ * @param action - action to perform.
351
+ * @param after - set of instructions to run after running the action.
352
+ * @returns The result of the action.
353
+ */
354
+ async lockedSummaryAction(before, action, after) {
355
+ (0, core_utils_1.assert)(this.summarizingLock === undefined, 0x25b /* "Caller is responsible for checking lock" */);
356
+ const summarizingLock = new core_utils_1.Deferred();
357
+ this.summarizingLock = summarizingLock.promise;
358
+ before();
359
+ return action().finally(() => {
360
+ summarizingLock.resolve();
361
+ this.summarizingLock = undefined;
362
+ after();
363
+ });
364
+ }
365
+ /**
366
+ * Runs single summarize attempt
367
+ * @param summarizeProps - props to log with each telemetry event associated with this attempt
368
+ * @param options - summary options
369
+ * @param cancellationToken - cancellation token to use to be able to cancel this summary, if needed
370
+ * @param resultsBuilder - optional, result builder to use.
371
+ * @returns ISummarizeResult - result of running a summary.
372
+ */
373
+ trySummarizeOnce(summarizeProps, options, resultsBuilder = new summaryGenerator_1.SummarizeResultBuilder()) {
374
+ this.lockedSummaryAction(() => {
375
+ this.beforeSummaryAction();
376
+ }, async () => {
377
+ const summaryLogger = (0, telemetry_utils_1.createChildLogger)({
378
+ logger: this.mc.logger,
379
+ properties: { all: summarizeProps },
380
+ });
381
+ const summaryOptions = {
382
+ ...options,
383
+ summaryLogger,
384
+ cancellationToken: this.cancellationToken,
385
+ };
386
+ const summarizeResult = this.generator.summarize(summaryOptions, resultsBuilder);
387
+ // ensure we wait till the end of the process
388
+ return summarizeResult.receivedSummaryAckOrNack;
389
+ }, () => {
390
+ this.afterSummaryAction();
391
+ }).catch((error) => {
392
+ // SummaryGenerator.summarize() does not throw exceptions - it converts them to failed result
393
+ // on resultsBuilder
394
+ // We do not care about exceptions on receivedSummaryAckOrNack - caller should check results
395
+ // and take a appropriate action.
396
+ });
397
+ return resultsBuilder.build();
398
+ }
399
+ /** Heuristics summarize attempt. */
400
+ trySummarize(reason) {
401
+ if (this.summarizingLock !== undefined) {
402
+ // lockedSummaryAction() will retry heuristic-based summary at the end of current attempt
403
+ // if it's still needed
404
+ this.tryWhileSummarizing = true;
405
+ return;
406
+ }
407
+ this.lockedSummaryAction(() => {
408
+ this.beforeSummaryAction();
409
+ }, async () => {
410
+ return this.mc.config.getBoolean("Fluid.Summarizer.UseDynamicRetries")
411
+ ? this.trySummarizeWithRetries(reason)
412
+ : this.trySummarizeWithStaticAttempts(reason);
413
+ }, () => {
414
+ this.afterSummaryAction();
415
+ }).catch((error) => {
416
+ this.mc.logger.sendErrorEvent({ eventName: "UnexpectedSummarizeError" }, error);
417
+ });
418
+ }
419
+ /**
420
+ * Tries to summarize 2 times with pre-defined summary options. If an attempt fails with "retryAfterSeconds"
421
+ * param, that attempt is tried once more.
422
+ */
423
+ async trySummarizeWithStaticAttempts(reason) {
424
+ const attemptOptions = [
425
+ { refreshLatestAck: false, fullTree: false },
426
+ { refreshLatestAck: true, fullTree: false },
427
+ ];
428
+ let summaryAttempts = 0;
429
+ let summaryAttemptsPerPhase = 0;
430
+ let summaryAttemptPhase = 0;
431
+ while (summaryAttemptPhase < attemptOptions.length) {
432
+ if (this.cancellationToken.cancelled) {
433
+ return;
434
+ }
435
+ // We only want to attempt 1 summary when reason is "lastSummary"
436
+ if (++summaryAttempts > 1 && reason === "lastSummary") {
437
+ return;
438
+ }
439
+ summaryAttemptsPerPhase++;
440
+ const summarizeOptions = attemptOptions[summaryAttemptPhase];
441
+ const summarizeProps = {
442
+ summarizeReason: reason,
443
+ summaryAttempts,
444
+ summaryAttemptsPerPhase,
445
+ summaryAttemptPhase: summaryAttemptPhase + 1,
446
+ ...summarizeOptions,
447
+ };
448
+ const summaryLogger = (0, telemetry_utils_1.createChildLogger)({
449
+ logger: this.mc.logger,
450
+ properties: { all: summarizeProps },
451
+ });
452
+ const summaryOptions = {
453
+ ...summarizeOptions,
454
+ summaryLogger,
455
+ cancellationToken: this.cancellationToken,
456
+ };
457
+ // Note: no need to account for cancellationToken.waitCancelled here, as
458
+ // this is accounted SummaryGenerator.summarizeCore that controls receivedSummaryAckOrNack.
459
+ const resultSummarize = this.generator.summarize(summaryOptions);
460
+ const ackNackResult = await resultSummarize.receivedSummaryAckOrNack;
461
+ if (ackNackResult.success) {
462
+ return;
463
+ }
464
+ // Check for retryDelay that can come from summaryNack, upload summary or submit summary flows.
465
+ // Retry the same step only once per retryAfter response.
466
+ const submitResult = await resultSummarize.summarySubmitted;
467
+ const delaySeconds = !submitResult.success
468
+ ? submitResult.data?.retryAfterSeconds
469
+ : ackNackResult.data?.retryAfterSeconds;
470
+ if (delaySeconds === undefined || summaryAttemptsPerPhase > 1) {
471
+ summaryAttemptPhase++;
472
+ summaryAttemptsPerPhase = 0;
473
+ }
474
+ if (delaySeconds !== undefined) {
475
+ this.mc.logger.sendPerformanceEvent({
476
+ eventName: "SummarizeAttemptDelay",
477
+ duration: delaySeconds,
478
+ summaryNackDelay: ackNackResult.data?.retryAfterSeconds !== undefined,
479
+ ...summarizeProps,
480
+ });
481
+ await (0, core_utils_1.delay)(delaySeconds * 1000);
482
+ }
483
+ }
484
+ this.stopSummarizerCallback("failToSummarize");
485
+ }
486
+ /**
487
+ * Tries to summarize with retries where retry is based on the failure params.
488
+ * For example, summarization may be retried for failures with "retryAfterSeconds" param.
489
+ */
490
+ async trySummarizeWithRetries(reason) {
491
+ // Helper to set summarize options, telemetry properties and call summarize.
492
+ const attemptSummarize = (attemptNumber, finalAttempt) => {
493
+ const summarizeOptions = {
494
+ fullTree: false,
495
+ };
496
+ const summarizeProps = {
497
+ summarizeReason: reason,
498
+ summaryAttempts: attemptNumber,
499
+ ...summarizeOptions,
500
+ finalAttempt,
501
+ };
502
+ const summaryLogger = (0, telemetry_utils_1.createChildLogger)({
503
+ logger: this.mc.logger,
504
+ properties: { all: summarizeProps },
505
+ });
506
+ const summaryOptions = {
507
+ ...summarizeOptions,
508
+ summaryLogger,
509
+ cancellationToken: this.cancellationToken,
510
+ finalAttempt,
511
+ };
512
+ const summarizeResult = this.generator.summarize(summaryOptions);
513
+ return { summarizeProps, summarizeResult };
514
+ };
515
+ // The max number of attempts are based on the stage at which summarization failed. If it fails before it is
516
+ // submitted, a different value is used compared to if it fails after submission. Usually, in the former case,
517
+ // we would retry more often as its cheaper and retries are likely to succeed.
518
+ // This makes it harder to predict how many attempts would actually happen as that depends on how far an attempt
519
+ // made. To keep things simple, the max attempts is reset after every attempt based on where it failed. This may
520
+ // result in some failures not being retried depending on what happened before this attempt. That's fine because
521
+ // such scenarios are very unlikely and even if it happens, it would resolve when a new summarizer starts over.
522
+ // For example - When failure switches from one the submit failures to nack failure, only one more retry will
523
+ // happen irrespective of the value of `defaultMaxAttempts`.
524
+ let maxAttempts = exports.defaultMaxAttempts;
525
+ let currentAttempt = 0;
526
+ let retryAfterSeconds;
527
+ let done = false;
528
+ let result = "success";
529
+ do {
530
+ currentAttempt++;
531
+ if (this.cancellationToken.cancelled) {
532
+ result = "canceled";
533
+ done = true;
534
+ break;
535
+ }
536
+ const { summarizeProps, summarizeResult } = attemptSummarize(currentAttempt, false /* finalAttempt */);
537
+ // Ack / nack is the final step, so if it succeeds we're done.
538
+ const ackNackResult = await summarizeResult.receivedSummaryAckOrNack;
539
+ if (ackNackResult.success) {
540
+ result = "success";
541
+ done = true;
542
+ break;
543
+ }
544
+ // Update max attempts and retry params from the failure result.
545
+ // If submit summary failed, use the params from "summarySubmitted" result. Else, use the params
546
+ // from "receivedSummaryAckOrNack" result.
547
+ // Note: Check "summarySubmitted" result first because if it fails, ack nack would fail as well.
548
+ const submitSummaryResult = await summarizeResult.summarySubmitted;
549
+ if (!submitSummaryResult.success) {
550
+ maxAttempts = this.maxAttemptsForSubmitFailures;
551
+ retryAfterSeconds = submitSummaryResult.data?.retryAfterSeconds;
552
+ }
553
+ else {
554
+ maxAttempts = exports.defaultMaxAttempts;
555
+ retryAfterSeconds = ackNackResult.data?.retryAfterSeconds;
556
+ }
557
+ // Emit "summarize" event for this failed attempt.
558
+ result = "failure";
559
+ const eventProps = {
560
+ result,
561
+ currentAttempt,
562
+ maxAttempts,
563
+ error: ackNackResult.error,
564
+ };
565
+ this.emit("summarize", eventProps);
566
+ // If the failure doesn't have "retryAfterSeconds" or the max number of attempts have been done, we're done.
567
+ if (retryAfterSeconds === undefined || currentAttempt >= maxAttempts - 1) {
568
+ done = true;
569
+ }
570
+ // If the failure has "retryAfterSeconds", add a delay of that time. In this case, a final attempt will
571
+ // take place and we need to wait for "retryAfterSeconds" before that.
572
+ if (retryAfterSeconds !== undefined) {
573
+ this.mc.logger.sendPerformanceEvent({
574
+ eventName: "SummarizeAttemptDelay",
575
+ duration: retryAfterSeconds,
576
+ summaryNackDelay: ackNackResult.data?.retryAfterSeconds !== undefined,
577
+ stage: submitSummaryResult.data?.stage,
578
+ dynamicRetries: true,
579
+ ...summarizeProps,
580
+ });
581
+ await (0, core_utils_1.delay)(retryAfterSeconds * 1000);
582
+ }
583
+ } while (!done);
584
+ // If summarize attempt did not fail, emit "summarize" event and return. A failed attempt may be retried below.
585
+ if (result !== "failure") {
586
+ this.emit("summarize", { result, currentAttempt, maxAttempts });
587
+ return;
588
+ }
589
+ // If summarization wasn't successful above and the failure contains "retryAfterSeconds", perform one last
590
+ // attempt. This gives a chance to the runtime to perform additional steps in the last attempt.
591
+ if (retryAfterSeconds !== undefined) {
592
+ const { summarizeResult } = attemptSummarize(++currentAttempt, true /* finalAttempt */);
593
+ // Ack / nack is the final step, so if it succeeds we're done.
594
+ const ackNackResult = await summarizeResult.receivedSummaryAckOrNack;
595
+ result = ackNackResult.success ? "success" : "failure";
596
+ const eventProps = {
597
+ result,
598
+ currentAttempt,
599
+ maxAttempts,
600
+ error: ackNackResult.success ? undefined : ackNackResult.error,
601
+ };
602
+ this.emit("summarize", eventProps);
603
+ }
604
+ // If summarization is still unsuccessful, stop the summarizer.
605
+ if (result === "failure") {
606
+ this.stopSummarizerCallback("failToSummarize");
607
+ }
608
+ }
609
+ /** {@inheritdoc (ISummarizer:interface).summarizeOnDemand} */
610
+ summarizeOnDemand(options, resultsBuilder = new summaryGenerator_1.SummarizeResultBuilder()) {
611
+ if (this.stopping) {
612
+ resultsBuilder.fail("RunningSummarizer stopped or disposed", undefined);
613
+ return resultsBuilder.build();
614
+ }
615
+ // Check for concurrent summary attempts. If one is found,
616
+ // return a promise that caller can await before trying again.
617
+ if (this.summarizingLock !== undefined) {
618
+ // The heuristics are blocking concurrent summarize attempts.
619
+ throw new telemetry_utils_1.UsageError("Attempted to run an already-running summarizer on demand");
620
+ }
621
+ const { reason, ...summarizeOptions } = options;
622
+ const result = this.trySummarizeOnce({ summarizeReason: `onDemand/${reason}` }, summarizeOptions, resultsBuilder);
623
+ return result;
624
+ }
625
+ /** {@inheritdoc (ISummarizer:interface).enqueueSummarize} */
626
+ enqueueSummarize(options) {
627
+ const { reason, afterSequenceNumber = 0, override = false, ...summarizeOptions } = options;
628
+ let overridden = false;
629
+ if (this.enqueuedSummary !== undefined) {
630
+ if (!override) {
631
+ return { alreadyEnqueued: true };
632
+ }
633
+ // Override existing enqueued summarize attempt.
634
+ this.enqueuedSummary.resultsBuilder.fail("Aborted; overridden by another enqueue summarize attempt", undefined);
635
+ this.enqueuedSummary = undefined;
636
+ overridden = true;
637
+ }
638
+ this.enqueuedSummary = {
639
+ reason: `enqueue;${reason}`,
640
+ afterSequenceNumber,
641
+ summarizeOptions,
642
+ resultsBuilder: new summaryGenerator_1.SummarizeResultBuilder(),
643
+ };
644
+ const results = this.enqueuedSummary.resultsBuilder.build();
645
+ this.tryRunEnqueuedSummary();
646
+ return overridden
647
+ ? {
648
+ ...results,
649
+ alreadyEnqueued: true,
650
+ overridden: true,
651
+ }
652
+ : results;
653
+ }
654
+ tryRunEnqueuedSummary() {
655
+ if (this.stopping) {
656
+ this.disposeEnqueuedSummary();
657
+ return false;
658
+ }
659
+ if (this.enqueuedSummary === undefined ||
660
+ this.heuristicData.lastOpSequenceNumber < this.enqueuedSummary.afterSequenceNumber ||
661
+ this.summarizingLock !== undefined) {
662
+ // If no enqueued summary is ready or a summary is already in progress, take no action.
663
+ return false;
664
+ }
665
+ const { reason, resultsBuilder, summarizeOptions } = this.enqueuedSummary;
666
+ // Set to undefined first, so that subsequent enqueue attempt while summarize will occur later.
667
+ this.enqueuedSummary = undefined;
668
+ this.trySummarizeOnce({ summarizeReason: `enqueuedSummary/${reason}` }, summarizeOptions, resultsBuilder);
669
+ return true;
670
+ }
671
+ disposeEnqueuedSummary() {
672
+ if (this.enqueuedSummary !== undefined) {
673
+ this.enqueuedSummary.resultsBuilder.fail("RunningSummarizer stopped or disposed", undefined);
674
+ this.enqueuedSummary = undefined;
675
+ }
676
+ }
677
+ }
678
+ exports.RunningSummarizer = RunningSummarizer;
679
+ //# sourceMappingURL=runningSummarizer.cjs.map