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

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 (703) 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-lint.json +4 -0
  6. package/api-extractor.json +2 -2
  7. package/api-report/container-runtime.api.md +863 -0
  8. package/dist/{batchTracker.js → batchTracker.cjs} +9 -8
  9. package/dist/batchTracker.cjs.map +1 -0
  10. package/dist/batchTracker.d.ts +6 -5
  11. package/dist/batchTracker.d.ts.map +1 -1
  12. package/dist/blobManager.cjs +704 -0
  13. package/dist/blobManager.cjs.map +1 -0
  14. package/dist/blobManager.d.ts +135 -39
  15. package/dist/blobManager.d.ts.map +1 -1
  16. package/dist/connectionTelemetry.cjs +230 -0
  17. package/dist/connectionTelemetry.cjs.map +1 -0
  18. package/dist/connectionTelemetry.d.ts +2 -2
  19. package/dist/connectionTelemetry.d.ts.map +1 -1
  20. package/dist/container-runtime-alpha.d.ts +1677 -0
  21. package/dist/container-runtime-beta.d.ts +250 -0
  22. package/dist/container-runtime-public.d.ts +250 -0
  23. package/dist/container-runtime-untrimmed.d.ts +1792 -0
  24. package/dist/{containerHandleContext.js → containerHandleContext.cjs} +4 -2
  25. package/dist/containerHandleContext.cjs.map +1 -0
  26. package/dist/containerHandleContext.d.ts.map +1 -1
  27. package/dist/containerRuntime.cjs +2531 -0
  28. package/dist/containerRuntime.cjs.map +1 -0
  29. package/dist/containerRuntime.d.ts +454 -256
  30. package/dist/containerRuntime.d.ts.map +1 -1
  31. package/dist/{dataStore.js → dataStore.cjs} +54 -45
  32. package/dist/dataStore.cjs.map +1 -0
  33. package/dist/dataStore.d.ts +2 -2
  34. package/dist/dataStore.d.ts.map +1 -1
  35. package/dist/{dataStoreContext.js → dataStoreContext.cjs} +343 -247
  36. package/dist/dataStoreContext.cjs.map +1 -0
  37. package/dist/dataStoreContext.d.ts +73 -41
  38. package/dist/dataStoreContext.d.ts.map +1 -1
  39. package/dist/{dataStoreContexts.js → dataStoreContexts.cjs} +19 -15
  40. package/dist/dataStoreContexts.cjs.map +1 -0
  41. package/dist/dataStoreContexts.d.ts +1 -1
  42. package/dist/dataStoreContexts.d.ts.map +1 -1
  43. package/dist/{dataStoreRegistry.js → dataStoreRegistry.cjs} +9 -4
  44. package/dist/dataStoreRegistry.cjs.map +1 -0
  45. package/dist/dataStoreRegistry.d.ts +3 -0
  46. package/dist/dataStoreRegistry.d.ts.map +1 -1
  47. package/dist/{dataStores.js → dataStores.cjs} +273 -124
  48. package/dist/dataStores.cjs.map +1 -0
  49. package/dist/dataStores.d.ts +53 -23
  50. package/dist/dataStores.d.ts.map +1 -1
  51. package/dist/deltaManagerProxyBase.cjs +77 -0
  52. package/dist/deltaManagerProxyBase.cjs.map +1 -0
  53. package/dist/deltaManagerProxyBase.d.ts +35 -0
  54. package/dist/deltaManagerProxyBase.d.ts.map +1 -0
  55. package/dist/deltaManagerSummarizerProxy.cjs +42 -0
  56. package/dist/deltaManagerSummarizerProxy.cjs.map +1 -0
  57. package/dist/deltaManagerSummarizerProxy.d.ts +19 -0
  58. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -0
  59. package/dist/{deltaScheduler.js → deltaScheduler.cjs} +25 -18
  60. package/dist/deltaScheduler.cjs.map +1 -0
  61. package/dist/deltaScheduler.d.ts +8 -6
  62. package/dist/deltaScheduler.d.ts.map +1 -1
  63. package/dist/error.cjs +21 -0
  64. package/dist/error.cjs.map +1 -0
  65. package/dist/error.d.ts +14 -0
  66. package/dist/error.d.ts.map +1 -0
  67. package/dist/gc/garbageCollection.cjs +861 -0
  68. package/dist/gc/garbageCollection.cjs.map +1 -0
  69. package/dist/gc/garbageCollection.d.ts +224 -0
  70. package/dist/gc/garbageCollection.d.ts.map +1 -0
  71. package/dist/gc/gcConfigs.cjs +153 -0
  72. package/dist/gc/gcConfigs.cjs.map +1 -0
  73. package/dist/gc/gcConfigs.d.ts +23 -0
  74. package/dist/gc/gcConfigs.d.ts.map +1 -0
  75. package/dist/gc/gcDefinitions.cjs +96 -0
  76. package/dist/gc/gcDefinitions.cjs.map +1 -0
  77. package/dist/gc/gcDefinitions.d.ts +437 -0
  78. package/dist/gc/gcDefinitions.d.ts.map +1 -0
  79. package/dist/gc/gcHelpers.cjs +235 -0
  80. package/dist/gc/gcHelpers.cjs.map +1 -0
  81. package/dist/gc/gcHelpers.d.ts +71 -0
  82. package/dist/gc/gcHelpers.d.ts.map +1 -0
  83. package/dist/gc/gcReferenceGraphAlgorithm.cjs +49 -0
  84. package/dist/gc/gcReferenceGraphAlgorithm.cjs.map +1 -0
  85. package/dist/gc/gcReferenceGraphAlgorithm.d.ts +16 -0
  86. package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  87. package/dist/{summarizerTypes.js → gc/gcSummaryDefinitions.cjs} +1 -6
  88. package/dist/gc/gcSummaryDefinitions.cjs.map +1 -0
  89. package/dist/gc/gcSummaryDefinitions.d.ts +52 -0
  90. package/dist/gc/gcSummaryDefinitions.d.ts.map +1 -0
  91. package/dist/gc/gcSummaryStateTracker.cjs +213 -0
  92. package/dist/gc/gcSummaryStateTracker.cjs.map +1 -0
  93. package/dist/gc/gcSummaryStateTracker.d.ts +94 -0
  94. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -0
  95. package/dist/gc/gcTelemetry.cjs +298 -0
  96. package/dist/gc/gcTelemetry.cjs.map +1 -0
  97. package/dist/gc/gcTelemetry.d.ts +92 -0
  98. package/dist/gc/gcTelemetry.d.ts.map +1 -0
  99. package/dist/gc/gcUnreferencedStateTracker.cjs +118 -0
  100. package/dist/gc/gcUnreferencedStateTracker.cjs.map +1 -0
  101. package/dist/gc/gcUnreferencedStateTracker.d.ts +40 -0
  102. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  103. package/dist/gc/index.cjs +44 -0
  104. package/dist/gc/index.cjs.map +1 -0
  105. package/dist/gc/index.d.ts +13 -0
  106. package/dist/gc/index.d.ts.map +1 -0
  107. package/dist/index.cjs +47 -0
  108. package/dist/index.cjs.map +1 -0
  109. package/dist/index.d.ts +19 -8
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/messageTypes.cjs +37 -0
  112. package/dist/messageTypes.cjs.map +1 -0
  113. package/dist/messageTypes.d.ts +142 -0
  114. package/dist/messageTypes.d.ts.map +1 -0
  115. package/dist/metadata.cjs +7 -0
  116. package/dist/metadata.cjs.map +1 -0
  117. package/dist/metadata.d.ts +24 -0
  118. package/dist/metadata.d.ts.map +1 -0
  119. package/dist/opLifecycle/batchManager.cjs +139 -0
  120. package/dist/opLifecycle/batchManager.cjs.map +1 -0
  121. package/dist/opLifecycle/batchManager.d.ts +48 -0
  122. package/dist/opLifecycle/batchManager.d.ts.map +1 -0
  123. package/dist/opLifecycle/definitions.cjs +7 -0
  124. package/dist/opLifecycle/definitions.cjs.map +1 -0
  125. package/dist/opLifecycle/definitions.d.ts +83 -0
  126. package/dist/opLifecycle/definitions.d.ts.map +1 -0
  127. package/dist/opLifecycle/index.cjs +26 -0
  128. package/dist/opLifecycle/index.cjs.map +1 -0
  129. package/dist/opLifecycle/index.d.ts +13 -0
  130. package/dist/opLifecycle/index.d.ts.map +1 -0
  131. package/dist/opLifecycle/opCompressor.cjs +84 -0
  132. package/dist/opLifecycle/opCompressor.cjs.map +1 -0
  133. package/dist/opLifecycle/opCompressor.d.ts +18 -0
  134. package/dist/opLifecycle/opCompressor.d.ts.map +1 -0
  135. package/dist/opLifecycle/opDecompressor.cjs +132 -0
  136. package/dist/opLifecycle/opDecompressor.cjs.map +1 -0
  137. package/dist/opLifecycle/opDecompressor.d.ts +25 -0
  138. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -0
  139. package/dist/opLifecycle/opGroupingManager.cjs +95 -0
  140. package/dist/opLifecycle/opGroupingManager.cjs.map +1 -0
  141. package/dist/opLifecycle/opGroupingManager.d.ts +22 -0
  142. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -0
  143. package/dist/opLifecycle/opSplitter.cjs +202 -0
  144. package/dist/opLifecycle/opSplitter.cjs.map +1 -0
  145. package/dist/opLifecycle/opSplitter.d.ts +61 -0
  146. package/dist/opLifecycle/opSplitter.d.ts.map +1 -0
  147. package/dist/opLifecycle/outbox.cjs +323 -0
  148. package/dist/opLifecycle/outbox.cjs.map +1 -0
  149. package/dist/opLifecycle/outbox.d.ts +104 -0
  150. package/dist/opLifecycle/outbox.d.ts.map +1 -0
  151. package/dist/opLifecycle/remoteMessageProcessor.cjs +136 -0
  152. package/dist/opLifecycle/remoteMessageProcessor.cjs.map +1 -0
  153. package/dist/opLifecycle/remoteMessageProcessor.d.ts +47 -0
  154. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
  155. package/dist/opProperties.cjs +17 -0
  156. package/dist/opProperties.cjs.map +1 -0
  157. package/dist/opProperties.d.ts +7 -0
  158. package/dist/opProperties.d.ts.map +1 -0
  159. package/dist/{packageVersion.js → packageVersion.cjs} +2 -2
  160. package/dist/packageVersion.cjs.map +1 -0
  161. package/dist/packageVersion.d.ts +1 -1
  162. package/dist/packageVersion.d.ts.map +1 -1
  163. package/dist/pendingStateManager.cjs +282 -0
  164. package/dist/pendingStateManager.cjs.map +1 -0
  165. package/dist/pendingStateManager.d.ts +32 -69
  166. package/dist/pendingStateManager.d.ts.map +1 -1
  167. package/dist/scheduleManager.cjs +258 -0
  168. package/dist/scheduleManager.cjs.map +1 -0
  169. package/dist/scheduleManager.d.ts +31 -0
  170. package/dist/scheduleManager.d.ts.map +1 -0
  171. package/dist/storageServiceWithAttachBlobs.cjs +32 -0
  172. package/dist/storageServiceWithAttachBlobs.cjs.map +1 -0
  173. package/dist/storageServiceWithAttachBlobs.d.ts +17 -0
  174. package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -0
  175. package/dist/summary/index.cjs +51 -0
  176. package/dist/summary/index.cjs.map +1 -0
  177. package/dist/summary/index.d.ts +17 -0
  178. package/dist/summary/index.d.ts.map +1 -0
  179. package/dist/{orderedClientElection.js → summary/orderedClientElection.cjs} +100 -84
  180. package/dist/summary/orderedClientElection.cjs.map +1 -0
  181. package/{lib → dist/summary}/orderedClientElection.d.ts +41 -18
  182. package/dist/summary/orderedClientElection.d.ts.map +1 -0
  183. package/dist/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.cjs} +12 -10
  184. package/dist/summary/runWhileConnectedCoordinator.cjs.map +1 -0
  185. package/{lib → dist/summary}/runWhileConnectedCoordinator.d.ts +8 -2
  186. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  187. package/dist/summary/runningSummarizer.cjs +679 -0
  188. package/dist/summary/runningSummarizer.cjs.map +1 -0
  189. package/dist/summary/runningSummarizer.d.ts +128 -0
  190. package/dist/summary/runningSummarizer.d.ts.map +1 -0
  191. package/dist/summary/summarizer.cjs +263 -0
  192. package/dist/summary/summarizer.cjs.map +1 -0
  193. package/dist/{summarizer.d.ts → summary/summarizer.d.ts} +18 -33
  194. package/dist/summary/summarizer.d.ts.map +1 -0
  195. package/dist/{summarizerClientElection.js → summary/summarizerClientElection.cjs} +15 -46
  196. package/dist/summary/summarizerClientElection.cjs.map +1 -0
  197. package/{lib → dist/summary}/summarizerClientElection.d.ts +4 -4
  198. package/dist/summary/summarizerClientElection.d.ts.map +1 -0
  199. package/dist/summary/summarizerHeuristics.cjs +156 -0
  200. package/dist/summary/summarizerHeuristics.cjs.map +1 -0
  201. package/{lib → dist/summary}/summarizerHeuristics.d.ts +28 -6
  202. package/dist/summary/summarizerHeuristics.d.ts.map +1 -0
  203. package/dist/summary/summarizerNode/index.cjs +12 -0
  204. package/dist/summary/summarizerNode/index.cjs.map +1 -0
  205. package/dist/summary/summarizerNode/index.d.ts +8 -0
  206. package/dist/summary/summarizerNode/index.d.ts.map +1 -0
  207. package/dist/summary/summarizerNode/summarizerNode.cjs +526 -0
  208. package/dist/summary/summarizerNode/summarizerNode.cjs.map +1 -0
  209. package/dist/summary/summarizerNode/summarizerNode.d.ts +167 -0
  210. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  211. package/dist/summary/summarizerNode/summarizerNodeUtils.cjs +130 -0
  212. package/dist/summary/summarizerNode/summarizerNodeUtils.cjs.map +1 -0
  213. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +121 -0
  214. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  215. package/dist/summary/summarizerNode/summarizerNodeWithGc.cjs +375 -0
  216. package/dist/summary/summarizerNode/summarizerNodeWithGc.cjs.map +1 -0
  217. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +153 -0
  218. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  219. package/dist/summary/summarizerTypes.cjs +7 -0
  220. package/dist/summary/summarizerTypes.cjs.map +1 -0
  221. package/{lib → dist/summary}/summarizerTypes.d.ts +233 -83
  222. package/dist/summary/summarizerTypes.d.ts.map +1 -0
  223. package/dist/{summaryCollection.js → summary/summaryCollection.cjs} +80 -49
  224. package/dist/summary/summaryCollection.cjs.map +1 -0
  225. package/dist/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +23 -5
  226. package/dist/summary/summaryCollection.d.ts.map +1 -0
  227. package/dist/{summaryFormat.js → summary/summaryFormat.cjs} +29 -26
  228. package/dist/summary/summaryFormat.cjs.map +1 -0
  229. package/{lib → dist/summary}/summaryFormat.d.ts +25 -30
  230. package/dist/summary/summaryFormat.d.ts.map +1 -0
  231. package/dist/{summaryGenerator.js → summary/summaryGenerator.cjs} +162 -74
  232. package/dist/summary/summaryGenerator.cjs.map +1 -0
  233. package/dist/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +53 -11
  234. package/dist/summary/summaryGenerator.d.ts.map +1 -0
  235. package/dist/{summaryManager.js → summary/summaryManager.cjs} +98 -55
  236. package/dist/summary/summaryManager.cjs.map +1 -0
  237. package/{lib → dist/summary}/summaryManager.d.ts +13 -11
  238. package/dist/summary/summaryManager.d.ts.map +1 -0
  239. package/dist/{throttler.js → throttler.cjs} +21 -21
  240. package/dist/throttler.cjs.map +1 -0
  241. package/dist/throttler.d.ts +2 -2
  242. package/dist/throttler.d.ts.map +1 -1
  243. package/dist/tsdoc-metadata.json +11 -0
  244. package/lib/{batchTracker.d.ts → batchTracker.d.mts} +6 -5
  245. package/lib/batchTracker.d.mts.map +1 -0
  246. package/lib/{batchTracker.js → batchTracker.mjs} +9 -8
  247. package/lib/batchTracker.mjs.map +1 -0
  248. package/lib/blobManager.d.mts +191 -0
  249. package/lib/blobManager.d.mts.map +1 -0
  250. package/lib/blobManager.mjs +699 -0
  251. package/lib/blobManager.mjs.map +1 -0
  252. package/lib/{connectionTelemetry.d.ts → connectionTelemetry.d.mts} +2 -2
  253. package/lib/connectionTelemetry.d.mts.map +1 -0
  254. package/lib/connectionTelemetry.mjs +226 -0
  255. package/lib/connectionTelemetry.mjs.map +1 -0
  256. package/lib/container-runtime-alpha.d.mts +1677 -0
  257. package/lib/container-runtime-beta.d.mts +250 -0
  258. package/lib/container-runtime-public.d.mts +250 -0
  259. package/lib/container-runtime-untrimmed.d.mts +1792 -0
  260. package/lib/{containerHandleContext.d.ts → containerHandleContext.d.mts} +1 -1
  261. package/lib/containerHandleContext.d.mts.map +1 -0
  262. package/lib/{containerHandleContext.js → containerHandleContext.mjs} +4 -2
  263. package/lib/containerHandleContext.mjs.map +1 -0
  264. package/lib/containerRuntime.d.mts +809 -0
  265. package/lib/containerRuntime.d.mts.map +1 -0
  266. package/lib/containerRuntime.mjs +2526 -0
  267. package/lib/containerRuntime.mjs.map +1 -0
  268. package/lib/{dataStore.d.ts → dataStore.d.mts} +4 -4
  269. package/lib/dataStore.d.mts.map +1 -0
  270. package/lib/{dataStore.js → dataStore.mjs} +52 -43
  271. package/lib/dataStore.mjs.map +1 -0
  272. package/lib/{dataStoreContext.d.ts → dataStoreContext.d.mts} +74 -42
  273. package/lib/dataStoreContext.d.mts.map +1 -0
  274. package/lib/{dataStoreContext.js → dataStoreContext.mjs} +309 -213
  275. package/lib/dataStoreContext.mjs.map +1 -0
  276. package/lib/{dataStoreContexts.d.ts → dataStoreContexts.d.mts} +2 -2
  277. package/lib/dataStoreContexts.d.mts.map +1 -0
  278. package/lib/{dataStoreContexts.js → dataStoreContexts.mjs} +12 -8
  279. package/lib/dataStoreContexts.mjs.map +1 -0
  280. package/lib/{dataStoreRegistry.d.ts → dataStoreRegistry.d.mts} +3 -0
  281. package/lib/dataStoreRegistry.d.mts.map +1 -0
  282. package/lib/{dataStoreRegistry.js → dataStoreRegistry.mjs} +7 -6
  283. package/lib/dataStoreRegistry.mjs.map +1 -0
  284. package/lib/{dataStores.d.ts → dataStores.d.mts} +56 -26
  285. package/lib/dataStores.d.mts.map +1 -0
  286. package/lib/{dataStores.js → dataStores.mjs} +254 -105
  287. package/lib/dataStores.mjs.map +1 -0
  288. package/lib/deltaManagerProxyBase.d.mts +35 -0
  289. package/lib/deltaManagerProxyBase.d.mts.map +1 -0
  290. package/lib/deltaManagerProxyBase.mjs +73 -0
  291. package/lib/deltaManagerProxyBase.mjs.map +1 -0
  292. package/lib/deltaManagerSummarizerProxy.d.mts +19 -0
  293. package/lib/deltaManagerSummarizerProxy.d.mts.map +1 -0
  294. package/lib/deltaManagerSummarizerProxy.mjs +38 -0
  295. package/lib/deltaManagerSummarizerProxy.mjs.map +1 -0
  296. package/lib/{deltaScheduler.d.ts → deltaScheduler.d.mts} +8 -6
  297. package/lib/deltaScheduler.d.mts.map +1 -0
  298. package/lib/{deltaScheduler.js → deltaScheduler.mjs} +22 -15
  299. package/lib/deltaScheduler.mjs.map +1 -0
  300. package/lib/error.d.mts +14 -0
  301. package/lib/error.d.mts.map +1 -0
  302. package/lib/error.mjs +17 -0
  303. package/lib/error.mjs.map +1 -0
  304. package/lib/gc/garbageCollection.d.mts +224 -0
  305. package/lib/gc/garbageCollection.d.mts.map +1 -0
  306. package/lib/gc/garbageCollection.mjs +857 -0
  307. package/lib/gc/garbageCollection.mjs.map +1 -0
  308. package/lib/gc/gcConfigs.d.mts +23 -0
  309. package/lib/gc/gcConfigs.d.mts.map +1 -0
  310. package/lib/gc/gcConfigs.mjs +149 -0
  311. package/lib/gc/gcConfigs.mjs.map +1 -0
  312. package/lib/gc/gcDefinitions.d.mts +437 -0
  313. package/lib/gc/gcDefinitions.d.mts.map +1 -0
  314. package/lib/gc/gcDefinitions.mjs +93 -0
  315. package/lib/gc/gcDefinitions.mjs.map +1 -0
  316. package/lib/gc/gcHelpers.d.mts +71 -0
  317. package/lib/gc/gcHelpers.d.mts.map +1 -0
  318. package/lib/gc/gcHelpers.mjs +222 -0
  319. package/lib/gc/gcHelpers.mjs.map +1 -0
  320. package/lib/gc/gcReferenceGraphAlgorithm.d.mts +16 -0
  321. package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +1 -0
  322. package/lib/gc/gcReferenceGraphAlgorithm.mjs +45 -0
  323. package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +1 -0
  324. package/lib/gc/gcSummaryDefinitions.d.mts +52 -0
  325. package/lib/gc/gcSummaryDefinitions.d.mts.map +1 -0
  326. package/lib/gc/gcSummaryDefinitions.mjs +6 -0
  327. package/lib/gc/gcSummaryDefinitions.mjs.map +1 -0
  328. package/lib/gc/gcSummaryStateTracker.d.mts +94 -0
  329. package/lib/gc/gcSummaryStateTracker.d.mts.map +1 -0
  330. package/lib/gc/gcSummaryStateTracker.mjs +209 -0
  331. package/lib/gc/gcSummaryStateTracker.mjs.map +1 -0
  332. package/lib/gc/gcTelemetry.d.mts +92 -0
  333. package/lib/gc/gcTelemetry.d.mts.map +1 -0
  334. package/lib/gc/gcTelemetry.mjs +293 -0
  335. package/lib/gc/gcTelemetry.mjs.map +1 -0
  336. package/lib/gc/gcUnreferencedStateTracker.d.mts +40 -0
  337. package/lib/gc/gcUnreferencedStateTracker.d.mts.map +1 -0
  338. package/lib/gc/gcUnreferencedStateTracker.mjs +114 -0
  339. package/lib/gc/gcUnreferencedStateTracker.mjs.map +1 -0
  340. package/lib/gc/index.d.mts +13 -0
  341. package/lib/gc/index.d.mts.map +1 -0
  342. package/lib/gc/index.mjs +12 -0
  343. package/lib/gc/index.mjs.map +1 -0
  344. package/lib/index.d.mts +25 -0
  345. package/lib/index.d.mts.map +1 -0
  346. package/lib/index.mjs +24 -0
  347. package/lib/index.mjs.map +1 -0
  348. package/lib/messageTypes.d.mts +142 -0
  349. package/lib/messageTypes.d.mts.map +1 -0
  350. package/lib/messageTypes.mjs +34 -0
  351. package/lib/messageTypes.mjs.map +1 -0
  352. package/lib/metadata.d.mts +24 -0
  353. package/lib/metadata.d.mts.map +1 -0
  354. package/lib/metadata.mjs +6 -0
  355. package/lib/metadata.mjs.map +1 -0
  356. package/lib/opLifecycle/batchManager.d.mts +48 -0
  357. package/lib/opLifecycle/batchManager.d.mts.map +1 -0
  358. package/lib/opLifecycle/batchManager.mjs +133 -0
  359. package/lib/opLifecycle/batchManager.mjs.map +1 -0
  360. package/lib/opLifecycle/definitions.d.mts +83 -0
  361. package/lib/opLifecycle/definitions.d.mts.map +1 -0
  362. package/lib/opLifecycle/definitions.mjs +6 -0
  363. package/lib/opLifecycle/definitions.mjs.map +1 -0
  364. package/lib/opLifecycle/index.d.mts +13 -0
  365. package/lib/opLifecycle/index.d.mts.map +1 -0
  366. package/lib/opLifecycle/index.mjs +12 -0
  367. package/lib/opLifecycle/index.mjs.map +1 -0
  368. package/lib/opLifecycle/opCompressor.d.mts +18 -0
  369. package/lib/opLifecycle/opCompressor.d.mts.map +1 -0
  370. package/lib/opLifecycle/opCompressor.mjs +80 -0
  371. package/lib/opLifecycle/opCompressor.mjs.map +1 -0
  372. package/lib/opLifecycle/opDecompressor.d.mts +25 -0
  373. package/lib/opLifecycle/opDecompressor.d.mts.map +1 -0
  374. package/lib/opLifecycle/opDecompressor.mjs +128 -0
  375. package/lib/opLifecycle/opDecompressor.mjs.map +1 -0
  376. package/lib/opLifecycle/opGroupingManager.d.mts +22 -0
  377. package/lib/opLifecycle/opGroupingManager.d.mts.map +1 -0
  378. package/lib/opLifecycle/opGroupingManager.mjs +91 -0
  379. package/lib/opLifecycle/opGroupingManager.mjs.map +1 -0
  380. package/lib/opLifecycle/opSplitter.d.mts +61 -0
  381. package/lib/opLifecycle/opSplitter.d.mts.map +1 -0
  382. package/lib/opLifecycle/opSplitter.mjs +197 -0
  383. package/lib/opLifecycle/opSplitter.mjs.map +1 -0
  384. package/lib/opLifecycle/outbox.d.mts +104 -0
  385. package/lib/opLifecycle/outbox.d.mts.map +1 -0
  386. package/lib/opLifecycle/outbox.mjs +318 -0
  387. package/lib/opLifecycle/outbox.mjs.map +1 -0
  388. package/lib/opLifecycle/remoteMessageProcessor.d.mts +47 -0
  389. package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +1 -0
  390. package/lib/opLifecycle/remoteMessageProcessor.mjs +131 -0
  391. package/lib/opLifecycle/remoteMessageProcessor.mjs.map +1 -0
  392. package/lib/opProperties.d.mts +7 -0
  393. package/lib/opProperties.d.mts.map +1 -0
  394. package/lib/opProperties.mjs +13 -0
  395. package/lib/opProperties.mjs.map +1 -0
  396. package/lib/{packageVersion.d.ts → packageVersion.d.mts} +1 -1
  397. package/lib/{packageVersion.d.ts.map → packageVersion.d.mts.map} +1 -1
  398. package/lib/{packageVersion.js → packageVersion.mjs} +2 -2
  399. package/lib/packageVersion.mjs.map +1 -0
  400. package/lib/{pendingStateManager.d.ts → pendingStateManager.d.mts} +32 -69
  401. package/lib/pendingStateManager.d.mts.map +1 -0
  402. package/lib/pendingStateManager.mjs +275 -0
  403. package/lib/pendingStateManager.mjs.map +1 -0
  404. package/lib/scheduleManager.d.mts +27 -0
  405. package/lib/scheduleManager.d.mts.map +1 -0
  406. package/lib/scheduleManager.mjs +254 -0
  407. package/lib/scheduleManager.mjs.map +1 -0
  408. package/lib/storageServiceWithAttachBlobs.d.mts +17 -0
  409. package/lib/storageServiceWithAttachBlobs.d.mts.map +1 -0
  410. package/lib/storageServiceWithAttachBlobs.mjs +28 -0
  411. package/lib/storageServiceWithAttachBlobs.mjs.map +1 -0
  412. package/lib/summary/index.d.mts +17 -0
  413. package/lib/summary/index.d.mts.map +1 -0
  414. package/lib/summary/index.mjs +16 -0
  415. package/lib/summary/index.mjs.map +1 -0
  416. package/{dist/orderedClientElection.d.ts → lib/summary/orderedClientElection.d.mts} +41 -22
  417. package/lib/summary/orderedClientElection.d.mts.map +1 -0
  418. package/lib/{orderedClientElection.js → summary/orderedClientElection.mjs} +95 -79
  419. package/lib/summary/orderedClientElection.mjs.map +1 -0
  420. package/{dist/runWhileConnectedCoordinator.d.ts → lib/summary/runWhileConnectedCoordinator.d.mts} +9 -3
  421. package/lib/summary/runWhileConnectedCoordinator.d.mts.map +1 -0
  422. package/lib/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.mjs} +12 -10
  423. package/lib/summary/runWhileConnectedCoordinator.mjs.map +1 -0
  424. package/lib/summary/runningSummarizer.d.mts +128 -0
  425. package/lib/summary/runningSummarizer.d.mts.map +1 -0
  426. package/lib/summary/runningSummarizer.mjs +675 -0
  427. package/lib/summary/runningSummarizer.mjs.map +1 -0
  428. package/lib/{summarizer.d.ts → summary/summarizer.d.mts} +20 -35
  429. package/lib/summary/summarizer.d.mts.map +1 -0
  430. package/lib/summary/summarizer.mjs +257 -0
  431. package/lib/summary/summarizer.mjs.map +1 -0
  432. package/{dist/summarizerClientElection.d.ts → lib/summary/summarizerClientElection.d.mts} +6 -6
  433. package/lib/summary/summarizerClientElection.d.mts.map +1 -0
  434. package/lib/{summarizerClientElection.js → summary/summarizerClientElection.mjs} +14 -45
  435. package/lib/summary/summarizerClientElection.mjs.map +1 -0
  436. package/{dist/summarizerHeuristics.d.ts → lib/summary/summarizerHeuristics.d.mts} +29 -7
  437. package/lib/summary/summarizerHeuristics.d.mts.map +1 -0
  438. package/lib/summary/summarizerHeuristics.mjs +151 -0
  439. package/lib/summary/summarizerHeuristics.mjs.map +1 -0
  440. package/lib/summary/summarizerNode/index.d.mts +8 -0
  441. package/lib/summary/summarizerNode/index.d.mts.map +1 -0
  442. package/lib/summary/summarizerNode/index.mjs +7 -0
  443. package/lib/summary/summarizerNode/index.mjs.map +1 -0
  444. package/lib/summary/summarizerNode/summarizerNode.d.mts +167 -0
  445. package/lib/summary/summarizerNode/summarizerNode.d.mts.map +1 -0
  446. package/lib/summary/summarizerNode/summarizerNode.mjs +521 -0
  447. package/lib/summary/summarizerNode/summarizerNode.mjs.map +1 -0
  448. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts +121 -0
  449. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +1 -0
  450. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs +123 -0
  451. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +1 -0
  452. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts +153 -0
  453. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +1 -0
  454. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs +370 -0
  455. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +1 -0
  456. package/{dist/summarizerTypes.d.ts → lib/summary/summarizerTypes.d.mts} +234 -84
  457. package/lib/summary/summarizerTypes.d.mts.map +1 -0
  458. package/lib/summary/summarizerTypes.mjs +6 -0
  459. package/lib/summary/summarizerTypes.mjs.map +1 -0
  460. package/lib/{summaryCollection.d.ts → summary/summaryCollection.d.mts} +23 -5
  461. package/lib/summary/summaryCollection.d.mts.map +1 -0
  462. package/lib/{summaryCollection.js → summary/summaryCollection.mjs} +76 -45
  463. package/lib/summary/summaryCollection.mjs.map +1 -0
  464. package/{dist/summaryFormat.d.ts → lib/summary/summaryFormat.d.mts} +25 -30
  465. package/lib/summary/summaryFormat.d.mts.map +1 -0
  466. package/lib/{summaryFormat.js → summary/summaryFormat.mjs} +30 -26
  467. package/lib/summary/summaryFormat.mjs.map +1 -0
  468. package/lib/summary/summaryGenerator.d.mts +127 -0
  469. package/lib/summary/summaryGenerator.d.mts.map +1 -0
  470. package/lib/{summaryGenerator.js → summary/summaryGenerator.mjs} +153 -67
  471. package/lib/summary/summaryGenerator.mjs.map +1 -0
  472. package/{dist/summaryManager.d.ts → lib/summary/summaryManager.d.mts} +15 -13
  473. package/lib/summary/summaryManager.d.mts.map +1 -0
  474. package/lib/{summaryManager.js → summary/summaryManager.mjs} +94 -51
  475. package/lib/summary/summaryManager.mjs.map +1 -0
  476. package/lib/{throttler.d.ts → throttler.d.mts} +2 -2
  477. package/lib/throttler.d.mts.map +1 -0
  478. package/lib/{throttler.js → throttler.mjs} +21 -21
  479. package/lib/throttler.mjs.map +1 -0
  480. package/package.json +173 -72
  481. package/prettier.config.cjs +8 -0
  482. package/src/batchTracker.ts +59 -54
  483. package/src/blobManager.ts +937 -294
  484. package/src/connectionTelemetry.ts +342 -252
  485. package/src/containerHandleContext.ts +27 -29
  486. package/src/containerRuntime.ts +3879 -3143
  487. package/src/dataStore.ts +170 -140
  488. package/src/dataStoreContext.ts +1166 -986
  489. package/src/dataStoreContexts.ts +176 -163
  490. package/src/dataStoreRegistry.ts +29 -21
  491. package/src/dataStores.ts +921 -678
  492. package/src/deltaManagerProxyBase.ts +111 -0
  493. package/src/deltaManagerSummarizerProxy.ts +49 -0
  494. package/src/deltaScheduler.ts +161 -156
  495. package/src/error.ts +21 -0
  496. package/src/gc/garbageCollection.md +106 -0
  497. package/src/gc/garbageCollection.ts +1153 -0
  498. package/src/gc/gcConfigs.ts +216 -0
  499. package/src/gc/gcDefinitions.ts +502 -0
  500. package/src/gc/gcHelpers.ts +284 -0
  501. package/src/gc/gcReferenceGraphAlgorithm.ts +52 -0
  502. package/src/gc/gcSummaryDefinitions.ts +54 -0
  503. package/src/gc/gcSummaryStateTracker.ts +299 -0
  504. package/src/gc/gcTelemetry.ts +423 -0
  505. package/src/gc/gcUnreferencedStateTracker.ts +153 -0
  506. package/src/gc/index.ts +59 -0
  507. package/src/index.ts +101 -74
  508. package/src/messageTypes.ts +238 -0
  509. package/src/metadata.ts +26 -0
  510. package/src/opLifecycle/README.md +321 -0
  511. package/src/opLifecycle/batchManager.ts +179 -0
  512. package/src/opLifecycle/definitions.ts +89 -0
  513. package/src/opLifecycle/index.ts +19 -0
  514. package/src/opLifecycle/opCompressor.ts +99 -0
  515. package/src/opLifecycle/opDecompressor.ts +190 -0
  516. package/src/opLifecycle/opGroupingManager.ts +133 -0
  517. package/src/opLifecycle/opSplitter.ts +279 -0
  518. package/src/opLifecycle/outbox.ts +471 -0
  519. package/src/opLifecycle/remoteMessageProcessor.ts +175 -0
  520. package/src/opProperties.ts +21 -0
  521. package/src/packageVersion.ts +1 -1
  522. package/src/pendingStateManager.ts +396 -465
  523. package/src/scheduleManager.ts +358 -0
  524. package/src/storageServiceWithAttachBlobs.ts +38 -0
  525. package/src/summary/index.ts +109 -0
  526. package/src/summary/orderedClientElection.ts +571 -0
  527. package/src/summary/runWhileConnectedCoordinator.ts +117 -0
  528. package/src/summary/runningSummarizer.ts +920 -0
  529. package/src/summary/summarizer.ts +352 -0
  530. package/src/summary/summarizerClientElection.ts +140 -0
  531. package/src/summary/summarizerHeuristics.ts +227 -0
  532. package/src/summary/summarizerNode/index.ts +12 -0
  533. package/src/summary/summarizerNode/summarizerNode.ts +725 -0
  534. package/src/summary/summarizerNode/summarizerNodeUtils.ts +206 -0
  535. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +571 -0
  536. package/src/summary/summarizerTypes.ts +631 -0
  537. package/src/summary/summaryCollection.ts +474 -0
  538. package/src/summary/summaryFormat.ts +249 -0
  539. package/src/summary/summaryGenerator.ts +539 -0
  540. package/src/summary/summaryManager.ts +452 -0
  541. package/src/throttler.ts +131 -122
  542. package/tsc-multi.test.json +4 -0
  543. package/tsconfig.json +11 -13
  544. package/dist/batchTracker.js.map +0 -1
  545. package/dist/blobManager.js +0 -249
  546. package/dist/blobManager.js.map +0 -1
  547. package/dist/connectionTelemetry.js +0 -178
  548. package/dist/connectionTelemetry.js.map +0 -1
  549. package/dist/containerHandleContext.js.map +0 -1
  550. package/dist/containerRuntime.js +0 -2174
  551. package/dist/containerRuntime.js.map +0 -1
  552. package/dist/dataStore.js.map +0 -1
  553. package/dist/dataStoreContext.js.map +0 -1
  554. package/dist/dataStoreContexts.js.map +0 -1
  555. package/dist/dataStoreRegistry.js.map +0 -1
  556. package/dist/dataStores.js.map +0 -1
  557. package/dist/deltaScheduler.js.map +0 -1
  558. package/dist/garbageCollection.d.ts +0 -319
  559. package/dist/garbageCollection.d.ts.map +0 -1
  560. package/dist/garbageCollection.js +0 -993
  561. package/dist/garbageCollection.js.map +0 -1
  562. package/dist/index.js +0 -33
  563. package/dist/index.js.map +0 -1
  564. package/dist/opTelemetry.d.ts +0 -22
  565. package/dist/opTelemetry.d.ts.map +0 -1
  566. package/dist/opTelemetry.js +0 -60
  567. package/dist/opTelemetry.js.map +0 -1
  568. package/dist/orderedClientElection.d.ts.map +0 -1
  569. package/dist/orderedClientElection.js.map +0 -1
  570. package/dist/packageVersion.js.map +0 -1
  571. package/dist/pendingStateManager.js +0 -346
  572. package/dist/pendingStateManager.js.map +0 -1
  573. package/dist/runWhileConnectedCoordinator.d.ts.map +0 -1
  574. package/dist/runWhileConnectedCoordinator.js.map +0 -1
  575. package/dist/runningSummarizer.d.ts +0 -93
  576. package/dist/runningSummarizer.d.ts.map +0 -1
  577. package/dist/runningSummarizer.js +0 -384
  578. package/dist/runningSummarizer.js.map +0 -1
  579. package/dist/serializedSnapshotStorage.d.ts +0 -58
  580. package/dist/serializedSnapshotStorage.d.ts.map +0 -1
  581. package/dist/serializedSnapshotStorage.js +0 -108
  582. package/dist/serializedSnapshotStorage.js.map +0 -1
  583. package/dist/summarizer.d.ts.map +0 -1
  584. package/dist/summarizer.js +0 -348
  585. package/dist/summarizer.js.map +0 -1
  586. package/dist/summarizerClientElection.d.ts.map +0 -1
  587. package/dist/summarizerClientElection.js.map +0 -1
  588. package/dist/summarizerHandle.d.ts +0 -12
  589. package/dist/summarizerHandle.d.ts.map +0 -1
  590. package/dist/summarizerHandle.js +0 -22
  591. package/dist/summarizerHandle.js.map +0 -1
  592. package/dist/summarizerHeuristics.d.ts.map +0 -1
  593. package/dist/summarizerHeuristics.js +0 -84
  594. package/dist/summarizerHeuristics.js.map +0 -1
  595. package/dist/summarizerTypes.d.ts.map +0 -1
  596. package/dist/summarizerTypes.js.map +0 -1
  597. package/dist/summaryCollection.d.ts.map +0 -1
  598. package/dist/summaryCollection.js.map +0 -1
  599. package/dist/summaryFormat.d.ts.map +0 -1
  600. package/dist/summaryFormat.js.map +0 -1
  601. package/dist/summaryGenerator.d.ts.map +0 -1
  602. package/dist/summaryGenerator.js.map +0 -1
  603. package/dist/summaryManager.d.ts.map +0 -1
  604. package/dist/summaryManager.js.map +0 -1
  605. package/dist/throttler.js.map +0 -1
  606. package/garbageCollection.md +0 -41
  607. package/lib/batchTracker.d.ts.map +0 -1
  608. package/lib/batchTracker.js.map +0 -1
  609. package/lib/blobManager.d.ts +0 -95
  610. package/lib/blobManager.d.ts.map +0 -1
  611. package/lib/blobManager.js +0 -244
  612. package/lib/blobManager.js.map +0 -1
  613. package/lib/connectionTelemetry.d.ts.map +0 -1
  614. package/lib/connectionTelemetry.js +0 -174
  615. package/lib/connectionTelemetry.js.map +0 -1
  616. package/lib/containerHandleContext.d.ts.map +0 -1
  617. package/lib/containerHandleContext.js.map +0 -1
  618. package/lib/containerRuntime.d.ts +0 -615
  619. package/lib/containerRuntime.d.ts.map +0 -1
  620. package/lib/containerRuntime.js +0 -2166
  621. package/lib/containerRuntime.js.map +0 -1
  622. package/lib/dataStore.d.ts.map +0 -1
  623. package/lib/dataStore.js.map +0 -1
  624. package/lib/dataStoreContext.d.ts.map +0 -1
  625. package/lib/dataStoreContext.js.map +0 -1
  626. package/lib/dataStoreContexts.d.ts.map +0 -1
  627. package/lib/dataStoreContexts.js.map +0 -1
  628. package/lib/dataStoreRegistry.d.ts.map +0 -1
  629. package/lib/dataStoreRegistry.js.map +0 -1
  630. package/lib/dataStores.d.ts.map +0 -1
  631. package/lib/dataStores.js.map +0 -1
  632. package/lib/deltaScheduler.d.ts.map +0 -1
  633. package/lib/deltaScheduler.js.map +0 -1
  634. package/lib/garbageCollection.d.ts +0 -319
  635. package/lib/garbageCollection.d.ts.map +0 -1
  636. package/lib/garbageCollection.js +0 -989
  637. package/lib/garbageCollection.js.map +0 -1
  638. package/lib/index.d.ts +0 -14
  639. package/lib/index.d.ts.map +0 -1
  640. package/lib/index.js +0 -13
  641. package/lib/index.js.map +0 -1
  642. package/lib/opTelemetry.d.ts +0 -22
  643. package/lib/opTelemetry.d.ts.map +0 -1
  644. package/lib/opTelemetry.js +0 -56
  645. package/lib/opTelemetry.js.map +0 -1
  646. package/lib/orderedClientElection.d.ts.map +0 -1
  647. package/lib/orderedClientElection.js.map +0 -1
  648. package/lib/packageVersion.js.map +0 -1
  649. package/lib/pendingStateManager.d.ts.map +0 -1
  650. package/lib/pendingStateManager.js +0 -339
  651. package/lib/pendingStateManager.js.map +0 -1
  652. package/lib/runWhileConnectedCoordinator.d.ts.map +0 -1
  653. package/lib/runWhileConnectedCoordinator.js.map +0 -1
  654. package/lib/runningSummarizer.d.ts +0 -93
  655. package/lib/runningSummarizer.d.ts.map +0 -1
  656. package/lib/runningSummarizer.js +0 -380
  657. package/lib/runningSummarizer.js.map +0 -1
  658. package/lib/serializedSnapshotStorage.d.ts +0 -58
  659. package/lib/serializedSnapshotStorage.d.ts.map +0 -1
  660. package/lib/serializedSnapshotStorage.js +0 -104
  661. package/lib/serializedSnapshotStorage.js.map +0 -1
  662. package/lib/summarizer.d.ts.map +0 -1
  663. package/lib/summarizer.js +0 -342
  664. package/lib/summarizer.js.map +0 -1
  665. package/lib/summarizerClientElection.d.ts.map +0 -1
  666. package/lib/summarizerClientElection.js.map +0 -1
  667. package/lib/summarizerHandle.d.ts +0 -12
  668. package/lib/summarizerHandle.d.ts.map +0 -1
  669. package/lib/summarizerHandle.js +0 -18
  670. package/lib/summarizerHandle.js.map +0 -1
  671. package/lib/summarizerHeuristics.d.ts.map +0 -1
  672. package/lib/summarizerHeuristics.js +0 -79
  673. package/lib/summarizerHeuristics.js.map +0 -1
  674. package/lib/summarizerTypes.d.ts.map +0 -1
  675. package/lib/summarizerTypes.js +0 -9
  676. package/lib/summarizerTypes.js.map +0 -1
  677. package/lib/summaryCollection.d.ts.map +0 -1
  678. package/lib/summaryCollection.js.map +0 -1
  679. package/lib/summaryFormat.d.ts.map +0 -1
  680. package/lib/summaryFormat.js.map +0 -1
  681. package/lib/summaryGenerator.d.ts +0 -85
  682. package/lib/summaryGenerator.d.ts.map +0 -1
  683. package/lib/summaryGenerator.js.map +0 -1
  684. package/lib/summaryManager.d.ts.map +0 -1
  685. package/lib/summaryManager.js.map +0 -1
  686. package/lib/throttler.d.ts.map +0 -1
  687. package/lib/throttler.js.map +0 -1
  688. package/src/garbageCollection.ts +0 -1434
  689. package/src/opTelemetry.ts +0 -71
  690. package/src/orderedClientElection.ts +0 -511
  691. package/src/runWhileConnectedCoordinator.ts +0 -106
  692. package/src/runningSummarizer.ts +0 -550
  693. package/src/serializedSnapshotStorage.ts +0 -146
  694. package/src/summarizer.ts +0 -438
  695. package/src/summarizerClientElection.ts +0 -161
  696. package/src/summarizerHandle.ts +0 -21
  697. package/src/summarizerHeuristics.ts +0 -108
  698. package/src/summarizerTypes.ts +0 -462
  699. package/src/summaryCollection.ts +0 -406
  700. package/src/summaryFormat.ts +0 -239
  701. package/src/summaryGenerator.ts +0 -427
  702. package/src/summaryManager.ts +0 -368
  703. package/tsconfig.esnext.json +0 -7
@@ -1,106 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
-
6
- import { assert, Deferred } from "@fluidframework/common-utils";
7
- import { SummarizerStopReason, IConnectableRuntime, ISummaryCancellationToken } from "./summarizerTypes";
8
-
9
- /* Similar to AbortController, but using promise instead of events */
10
- export interface ICancellableSummarizerController extends ISummaryCancellationToken {
11
- stop(reason: SummarizerStopReason): void;
12
- }
13
-
14
- /**
15
- * Can be useful in testing as well as in places where caller does not use cancellation.
16
- * This object implements ISummaryCancellationToken interface but cancellation is never leveraged.
17
- */
18
- export const neverCancelledSummaryToken: ISummaryCancellationToken = {
19
- cancelled: false,
20
- waitCancelled: new Promise(() => {}),
21
- };
22
-
23
- /**
24
- * Helper class to coordinate something that needs to run only while connected.
25
- * This provides promises that resolve as it starts or stops. Stopping happens
26
- * when disconnected or if stop() is called.
27
- */
28
- export class RunWhileConnectedCoordinator implements ICancellableSummarizerController {
29
- private _cancelled = false;
30
- private readonly stopDeferred = new Deferred<SummarizerStopReason>();
31
-
32
- public get cancelled() {
33
- if (!this._cancelled) {
34
- assert(this.runtime.deltaManager.active, 0x25d /* "We should never connect as 'read'" */);
35
-
36
- // This check can't be enabled in current design due to lastSummary flow, where
37
- // summarizer for closed container stays around and can produce one more summary.
38
- // Currently we solve the problem of overlapping summarizer by doing wait in
39
- // SummaryManager.createSummarizer()
40
- // Better solution would involve these steps:
41
- // 1. Summarizer selection logic should chose summarizing client (with clientType === "summarizer")
42
- // if such client exists.
43
- // 2. Summarizer should be updated about such changes (to update onBehalfOfClientId)
44
- //
45
- // assert(this.runtime.summarizerClientId === this.onBehalfOfClientId ||
46
- // this.runtime.summarizerClientId === this.runtime.clientId, "onBehalfOfClientId");
47
- }
48
-
49
- return this._cancelled;
50
- }
51
-
52
- /**
53
- * Returns a promise that resolves once stopped either externally or by disconnect.
54
- */
55
- public get waitCancelled(): Promise<SummarizerStopReason> {
56
- return this.stopDeferred.promise;
57
- }
58
-
59
- public static async create(runtime: IConnectableRuntime) {
60
- const obj = new RunWhileConnectedCoordinator(runtime);
61
- await obj.waitStart();
62
- return obj;
63
- }
64
-
65
- protected constructor(private readonly runtime: IConnectableRuntime) {
66
- }
67
-
68
- /**
69
- * Starts and waits for a promise which resolves when connected.
70
- * The promise will also resolve if stopped either externally or by disconnect.
71
- *
72
- * We only listen on disconnected event for clientType === "summarizer" container!
73
- * And only do it here - no other place should check it! That way we have only one place
74
- * that controls policy and it's easy to change policy in the future if we want to!
75
- * We do not listen for "main" (aka interactive) container disconnect here, as it's
76
- * responsibility of SummaryManager to decide if that's material or not. There are cases
77
- * like "lastSummary", or main client experiencing nacks / disconnects due to hitting limit
78
- * of non-summarized ops, where can make determination to continue with summary even if main
79
- * client is disconnected.
80
- */
81
- protected async waitStart() {
82
- if (this.runtime.disposed) {
83
- this.stop("summarizerClientDisconnected");
84
- return;
85
- }
86
-
87
- this.runtime.once("dispose", () => this.stop("summarizerClientDisconnected"));
88
-
89
- if (!this.runtime.connected) {
90
- const waitConnected = new Promise<void>((resolve) =>
91
- this.runtime.once("connected", resolve));
92
- await Promise.race([waitConnected, this.waitCancelled]);
93
- }
94
- this.runtime.once("disconnected", () => this.stop("summarizerClientDisconnected"));
95
- }
96
-
97
- /**
98
- * Stops running.
99
- */
100
- public stop(reason: SummarizerStopReason): void {
101
- if (!this._cancelled) {
102
- this._cancelled = true;
103
- this.stopDeferred.resolve(reason);
104
- }
105
- }
106
- }
@@ -1,550 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
-
6
- import { IDisposable, ITelemetryLogger } from "@fluidframework/common-definitions";
7
- import { assert, delay, Deferred, PromiseTimer } from "@fluidframework/common-utils";
8
- import { UsageError } from "@fluidframework/container-utils";
9
- import {
10
- ISequencedDocumentMessage,
11
- MessageType,
12
- } from "@fluidframework/protocol-definitions";
13
- import { ChildLogger } from "@fluidframework/telemetry-utils";
14
- import {
15
- ISummaryConfiguration,
16
- } from "./containerRuntime";
17
- import { SummarizeHeuristicRunner } from "./summarizerHeuristics";
18
- import {
19
- IEnqueueSummarizeOptions,
20
- ISummarizeOptions,
21
- ISummarizeHeuristicData,
22
- ISummarizeHeuristicRunner,
23
- IOnDemandSummarizeOptions,
24
- EnqueueSummarizeResult,
25
- SummarizerStopReason,
26
- ISubmitSummaryOptions,
27
- SubmitSummaryResult,
28
- ISummaryCancellationToken,
29
- ISummarizeResults,
30
- ISummarizeTelemetryProperties,
31
- ISummarizeRunnerTelemetry,
32
- } from "./summarizerTypes";
33
- import { IClientSummaryWatcher, SummaryCollection } from "./summaryCollection";
34
- import {
35
- raceTimer,
36
- SummarizeReason,
37
- SummarizeResultBuilder,
38
- SummaryGenerator,
39
- } from "./summaryGenerator";
40
-
41
- const maxSummarizeAckWaitTime = 10 * 60 * 1000; // 10 minutes
42
-
43
- /**
44
- * An instance of RunningSummarizer manages the heuristics for summarizing.
45
- * Until disposed, the instance of RunningSummarizer can assume that it is
46
- * in a state of running, meaning it is connected and initialized. It keeps
47
- * track of summaries that it is generating as they are broadcast and acked/nacked.
48
- * This object is created and controlled by Summarizer object.
49
- */
50
- export class RunningSummarizer implements IDisposable {
51
- public static async start(
52
- logger: ITelemetryLogger,
53
- summaryWatcher: IClientSummaryWatcher,
54
- configuration: ISummaryConfiguration,
55
- submitSummaryCallback: (options: ISubmitSummaryOptions) => Promise<SubmitSummaryResult>,
56
- heuristicData: ISummarizeHeuristicData,
57
- raiseSummarizingError: (errorMessage: string) => void,
58
- summaryCollection: SummaryCollection,
59
- cancellationToken: ISummaryCancellationToken,
60
- stopSummarizerCallback: (reason: SummarizerStopReason) => void,
61
- ): Promise<RunningSummarizer> {
62
- const summarizer = new RunningSummarizer(
63
- logger,
64
- summaryWatcher,
65
- configuration,
66
- submitSummaryCallback,
67
- heuristicData,
68
- raiseSummarizingError,
69
- summaryCollection,
70
- cancellationToken,
71
- stopSummarizerCallback);
72
-
73
- await summarizer.waitStart();
74
-
75
- // Run the heuristics after starting
76
- summarizer.heuristicRunner?.run();
77
- return summarizer;
78
- }
79
-
80
- public get disposed() { return this._disposed; }
81
- private stopping = false;
82
- private _disposed = false;
83
- private summarizingLock: Promise<void> | undefined;
84
- private refreshSummaryAckLock: Promise<void> | undefined;
85
- private tryWhileSummarizing = false;
86
- private readonly pendingAckTimer: PromiseTimer;
87
- private heuristicRunner?: ISummarizeHeuristicRunner;
88
- private readonly generator: SummaryGenerator;
89
- private readonly logger: ITelemetryLogger;
90
- private enqueuedSummary: {
91
- reason: SummarizeReason;
92
- afterSequenceNumber: number;
93
- options: ISummarizeOptions;
94
- readonly resultsBuilder: SummarizeResultBuilder;
95
- } | undefined;
96
- private summarizeCount = 0;
97
- private totalSuccessfulAttempts = 0;
98
-
99
- private constructor(
100
- baseLogger: ITelemetryLogger,
101
- private readonly summaryWatcher: IClientSummaryWatcher,
102
- private readonly configuration: ISummaryConfiguration,
103
- private readonly submitSummaryCallback: (options: ISubmitSummaryOptions) => Promise<SubmitSummaryResult>,
104
- private readonly heuristicData: ISummarizeHeuristicData,
105
- private readonly raiseSummarizingError: (errorMessage: string) => void,
106
- private readonly summaryCollection: SummaryCollection,
107
- private readonly cancellationToken: ISummaryCancellationToken,
108
- private readonly stopSummarizerCallback: (reason: SummarizerStopReason) => void,
109
- ) {
110
- const telemetryProps: ISummarizeRunnerTelemetry = {
111
- summarizeCount: () => this.summarizeCount,
112
- summarizerSuccessfulAttempts: () => this.totalSuccessfulAttempts,
113
- };
114
-
115
- this.logger = ChildLogger.create(
116
- baseLogger, "Running",
117
- {
118
- all: telemetryProps,
119
- },
120
- );
121
-
122
- if (configuration.state !== "disableHeuristics") {
123
- assert(this.configuration.state === "enabled", 0x2ea /* "Configuration state should be enabled" */);
124
- this.heuristicRunner = new SummarizeHeuristicRunner(
125
- heuristicData,
126
- this.configuration,
127
- (reason) => this.trySummarize(reason),
128
- this.logger);
129
- }
130
-
131
- assert(
132
- this.configuration.state !== "disabled",
133
- 0x2eb /* "Summary not supported with configuration disabled" */,
134
- );
135
-
136
- // Cap the maximum amount of time client will wait for a summarize op ack to maxSummarizeAckWaitTime
137
- // configuration.maxAckWaitTime is composed from defaults, server values, and runtime overrides
138
-
139
- const maxAckWaitTime = Math.min(this.configuration.maxAckWaitTime, maxSummarizeAckWaitTime);
140
-
141
- this.pendingAckTimer = new PromiseTimer(
142
- maxAckWaitTime,
143
- () => {
144
- // pre-0.58 error message: summaryAckWaitTimeout
145
- this.raiseSummarizingError("Pending summary ack not received in time");
146
- // Note: summarizeCount (from ChildLogger definition) may be 0,
147
- // since this code path is hit when RunningSummarizer first starts up,
148
- // before this instance has kicked off a new summarize run.
149
- this.logger.sendErrorEvent({
150
- eventName: "SummaryAckWaitTimeout",
151
- maxAckWaitTime,
152
- referenceSequenceNumber: this.heuristicData.lastAttempt.refSequenceNumber,
153
- summarySequenceNumber: this.heuristicData.lastAttempt.summarySequenceNumber,
154
- timePending: Date.now() - this.heuristicData.lastAttempt.summaryTime,
155
- });
156
- });
157
- // Set up pending ack timeout by op timestamp differences for previous summaries.
158
- summaryCollection.setPendingAckTimerTimeoutCallback(maxAckWaitTime, () => {
159
- if (this.pendingAckTimer.hasTimer) {
160
- this.logger.sendTelemetryEvent({
161
- eventName: "MissingSummaryAckFoundByOps",
162
- referenceSequenceNumber: this.heuristicData.lastAttempt.refSequenceNumber,
163
- summarySequenceNumber: this.heuristicData.lastAttempt.summarySequenceNumber,
164
- });
165
- this.pendingAckTimer.clear();
166
- }
167
- });
168
-
169
- this.generator = new SummaryGenerator(
170
- this.pendingAckTimer,
171
- this.heuristicData,
172
- this.submitSummaryCallback,
173
- this.raiseSummarizingError,
174
- () => { this.totalSuccessfulAttempts++; },
175
- this.summaryWatcher,
176
- this.logger,
177
- );
178
- }
179
-
180
- public dispose(): void {
181
- this.summaryWatcher.dispose();
182
- this.heuristicRunner?.dispose();
183
- this.heuristicRunner = undefined;
184
- this.generator.dispose();
185
- this.pendingAckTimer.clear();
186
- this.disposeEnqueuedSummary();
187
- this._disposed = true;
188
- this.stopping = true;
189
- }
190
-
191
- /**
192
- * RunningSummarizer's logger includes the sequenced index of the current summary on each event.
193
- * If some other Summarizer code wants that event on their logs they can get it here,
194
- * but only if they're logging about that same summary.
195
- * @param summaryOpRefSeq - RefSeq number of the summary op, to ensure the log correlation will be correct
196
- */
197
- public tryGetCorrelatedLogger = (summaryOpRefSeq) =>
198
- this.heuristicData.lastAttempt.refSequenceNumber === summaryOpRefSeq
199
- ? this.logger
200
- : undefined;
201
-
202
- public handleSystemOp(op: ISequencedDocumentMessage) {
203
- switch (op.type) {
204
- case MessageType.ClientLeave:
205
- case MessageType.ClientJoin:
206
- case MessageType.Propose: {
207
- // Synchronously handle quorum ops like regular ops
208
- this.handleOp(undefined, op);
209
- return;
210
- }
211
- default: {
212
- return;
213
- }
214
- }
215
- }
216
-
217
- public handleOp(error: any, { sequenceNumber, type, clientId, contents }: ISequencedDocumentMessage) {
218
- if (error !== undefined) {
219
- return;
220
- }
221
- this.heuristicData.lastOpSequenceNumber = sequenceNumber;
222
-
223
- // Check for enqueued on-demand summaries; Intentionally do nothing otherwise
224
- if (!this.tryRunEnqueuedSummary()) {
225
- this.heuristicRunner?.run();
226
- }
227
- }
228
-
229
- public async waitStop(allowLastSummary: boolean): Promise<void> {
230
- if (this.stopping) {
231
- return;
232
- }
233
-
234
- this.stopping = true;
235
-
236
- this.disposeEnqueuedSummary();
237
-
238
- // This will try to run lastSummary if needed.
239
- if (allowLastSummary && this.heuristicRunner?.shouldRunLastSummary()) {
240
- if (this.summarizingLock === undefined) {
241
- this.trySummarizeOnce(
242
- // summarizeProps
243
- { reason: "lastSummary" },
244
- // ISummarizeOptions, using defaults: { refreshLatestAck: false, fullTree: false }
245
- {});
246
- }
247
- }
248
-
249
- // Note that trySummarizeOnce() call above returns right away, without waiting.
250
- // So we need to wait for its completion, otherwise it would be destroyed right away.
251
- // That said, if summary lock was taken upfront, this wait might wait on multiple retries to
252
- // submit summary. We should reconsider this flow and make summarizer move to exit faster.
253
- // This resolves when the current pending summary gets an ack or fails.
254
- await this.summarizingLock;
255
- }
256
-
257
- private async waitStart() {
258
- // Wait no longer than ack timeout for all pending
259
- const waitStartResult = await raceTimer(
260
- this.summaryWatcher.waitFlushed(),
261
- this.pendingAckTimer.start(),
262
- );
263
- this.pendingAckTimer.clear();
264
-
265
- // Remove pending ack wait timeout by op timestamp comparison, because
266
- // it has race conditions with summaries submitted by this same client.
267
- this.summaryCollection.unsetPendingAckTimerTimeoutCallback();
268
-
269
- if (waitStartResult.result === "done" && waitStartResult.value !== undefined) {
270
- this.heuristicData.updateWithLastSummaryAckInfo({
271
- refSequenceNumber: waitStartResult.value.summaryOp.referenceSequenceNumber,
272
- // This will be the Summarizer starting point so only use timestamps from client's machine.
273
- summaryTime: Date.now(),
274
- summarySequenceNumber: waitStartResult.value.summaryOp.sequenceNumber,
275
- });
276
- }
277
- }
278
-
279
- /**
280
- * Blocks a new summarizer from running in case RefreshSummaryAck is being processed.
281
- * Assumes that caller checked upfront for lack of concurrent action (this.refreshSummaryAckLock)
282
- * before calling this API. I.e. caller is responsible for either erroring out or waiting on this promise.
283
- * Note: The refreshSummaryAckLock makes sure no summarizer gets enqueued or processed
284
- * until the refresh has completed. One can't rely uniquely on the summarizingLock as the
285
- * refreshLatestSummaryAck also happens during the time summarizingLock !== undefined.
286
- * Ex. Summarizer submits a summay + op and then waits for the Summary Ack to proceed
287
- * with the refreshLatestSummaryAck and complete the summary.
288
- * @param action - action to perform.
289
- * @returns - result of action.
290
- */
291
- public async lockedRefreshSummaryAckAction<T>(action: () => Promise<T>) {
292
- assert(this.refreshSummaryAckLock === undefined,
293
- "Refresh Summary Ack - Caller is responsible for checking lock");
294
-
295
- const refreshSummaryAckLock = new Deferred<void>();
296
- this.refreshSummaryAckLock = refreshSummaryAckLock.promise;
297
-
298
- return action().finally(() => {
299
- refreshSummaryAckLock.resolve();
300
- this.refreshSummaryAckLock = undefined;
301
- });
302
- }
303
-
304
- /**
305
- * Runs single summary action that prevents any other concurrent actions.
306
- * Assumes that caller checked upfront for lack of concurrent action (this.summarizingLock)
307
- * before calling this API. I.e. caller is responsible for either erroring out or waiting on this promise.
308
- * @param action - action to perform.
309
- * @returns - result of action.
310
- */
311
- private async lockedSummaryAction<T>(action: () => Promise<T>) {
312
- assert(this.summarizingLock === undefined, 0x25b /* "Caller is responsible for checking lock" */);
313
-
314
- const summarizingLock = new Deferred<void>();
315
- this.summarizingLock = summarizingLock.promise;
316
-
317
- this.summarizeCount++;
318
- // Make sure the RefreshLatestSummaryAck is not being executed.
319
- await this.refreshSummaryAckLock;
320
-
321
- return action().finally(() => {
322
- summarizingLock.resolve();
323
- this.summarizingLock = undefined;
324
-
325
- const retry = this.tryWhileSummarizing;
326
- this.tryWhileSummarizing = false;
327
-
328
- // After summarizing, we should check to see if we need to summarize again.
329
- // Rerun the heuristics and check for enqueued summaries.
330
- if (!this.stopping && !this.tryRunEnqueuedSummary() && retry) {
331
- this.heuristicRunner?.run();
332
- }
333
- });
334
- }
335
-
336
- /**
337
- * Runs single summarize attempt
338
- * @param summarizeProps - props to log with each telemetry event associated with this attempt
339
- * @param options - summary options
340
- * @param cancellationToken - cancellation token to use to be able to cancel this summary, if needed
341
- * @param resultsBuilder - optional, result builder to use.
342
- * @returns ISummarizeResult - result of running a summary.
343
- */
344
- private trySummarizeOnce(
345
- summarizeProps: ISummarizeTelemetryProperties,
346
- options: ISummarizeOptions,
347
- cancellationToken = this.cancellationToken,
348
- resultsBuilder = new SummarizeResultBuilder()): ISummarizeResults {
349
- this.lockedSummaryAction(async () => {
350
- const summarizeResult = this.generator.summarize(
351
- summarizeProps,
352
- options,
353
- cancellationToken,
354
- resultsBuilder);
355
- // ensure we wait till the end of the process
356
- return summarizeResult.receivedSummaryAckOrNack;
357
- }).catch((error) => {
358
- // SummaryGenerator.summarize() does not throw exceptions - it converts them to failed result
359
- // on resultsBuilder
360
- // We do not care about exceptions on receivedSummaryAckOrNack - caller should check results
361
- // and take a appropriate action.
362
- });
363
-
364
- return resultsBuilder.build();
365
- }
366
-
367
- /** Heuristics summarize attempt. */
368
- private trySummarize(
369
- reason: SummarizeReason,
370
- cancellationToken = this.cancellationToken): void {
371
- if (this.summarizingLock !== undefined) {
372
- // lockedSummaryAction() will retry heuristic-based summary at the end of current attempt
373
- // if it's still needed
374
- this.tryWhileSummarizing = true;
375
- return;
376
- }
377
-
378
- this.lockedSummaryAction(async () => {
379
- const attempts: (ISummarizeOptions & { delaySeconds?: number; })[] = [
380
- { refreshLatestAck: false, fullTree: false },
381
- { refreshLatestAck: true, fullTree: false },
382
- { refreshLatestAck: true, fullTree: false, delaySeconds: 2 * 60 },
383
- { refreshLatestAck: true, fullTree: true, delaySeconds: 10 * 60 },
384
- ];
385
- let overrideDelaySeconds: number | undefined;
386
- let summaryAttempts = 0;
387
- let summaryAttemptsPerPhase = 0;
388
-
389
- let lastResult: { message: string; error: any; } | undefined;
390
-
391
- for (let summaryAttemptPhase = 0; summaryAttemptPhase < attempts.length;) {
392
- if (this.cancellationToken.cancelled) {
393
- return;
394
- }
395
-
396
- // We only want to attempt 1 summary when reason is "lastSummary"
397
- if (++summaryAttempts > 1 && reason === "lastSummary") {
398
- return;
399
- }
400
-
401
- summaryAttemptsPerPhase++;
402
-
403
- const { delaySeconds: regularDelaySeconds = 0, ...options } = attempts[summaryAttemptPhase];
404
- const delaySeconds = overrideDelaySeconds ?? regularDelaySeconds;
405
-
406
- const summarizeProps: ISummarizeTelemetryProperties = {
407
- reason,
408
- summaryAttempts,
409
- summaryAttemptsPerPhase,
410
- summaryAttemptPhase: summaryAttemptPhase + 1, // make everything 1-based
411
- ...options,
412
- };
413
-
414
- if (delaySeconds > 0) {
415
- this.logger.sendPerformanceEvent({
416
- eventName: "SummarizeAttemptDelay",
417
- duration: delaySeconds,
418
- summaryNackDelay: overrideDelaySeconds !== undefined,
419
- ...summarizeProps,
420
- });
421
- await delay(delaySeconds * 1000);
422
- }
423
-
424
- // Make sure the refresh Summary Ack is not being executed.
425
- await this.refreshSummaryAckLock;
426
-
427
- // Note: no need to account for cancellationToken.waitCancelled here, as
428
- // this is accounted SummaryGenerator.summarizeCore that controls receivedSummaryAckOrNack.
429
- const resultSummarize = this.generator.summarize(summarizeProps, options, cancellationToken);
430
- const result = await resultSummarize.receivedSummaryAckOrNack;
431
-
432
- if (result.success) {
433
- return;
434
- }
435
- // Check for retryDelay that can come from summaryNack or upload summary flow.
436
- // Retry the same step only once per retryAfter response.
437
- overrideDelaySeconds = result.retryAfterSeconds;
438
- if (overrideDelaySeconds === undefined || summaryAttemptsPerPhase > 1) {
439
- summaryAttemptPhase++;
440
- summaryAttemptsPerPhase = 0;
441
- }
442
- lastResult = result;
443
- }
444
-
445
- // If all attempts failed, log error (with last attempt info) and close the summarizer container
446
- this.logger.sendErrorEvent({
447
- eventName: "FailToSummarize",
448
- reason,
449
- message: lastResult?.message,
450
- }, lastResult?.error);
451
-
452
- this.stopSummarizerCallback("failToSummarize");
453
- }).catch((error) => {
454
- this.logger.sendErrorEvent({ eventName: "UnexpectedSummarizeError" }, error);
455
- });
456
- }
457
-
458
- /** {@inheritdoc (ISummarizer:interface).summarizeOnDemand} */
459
- public summarizeOnDemand(
460
- resultsBuilder: SummarizeResultBuilder = new SummarizeResultBuilder(),
461
- {
462
- reason,
463
- ...options
464
- }: IOnDemandSummarizeOptions): ISummarizeResults {
465
- if (this.stopping) {
466
- resultsBuilder.fail("RunningSummarizer stopped or disposed", undefined);
467
- return resultsBuilder.build();
468
- }
469
- // Check for concurrent summary attempts. If one is found,
470
- // return a promise that caller can await before trying again.
471
- if (this.summarizingLock !== undefined) {
472
- // The heuristics are blocking concurrent summarize attempts.
473
- throw new UsageError("Attempted to run an already-running summarizer on demand");
474
- }
475
-
476
- const result = this.trySummarizeOnce(
477
- { reason: `onDemand/${reason}` },
478
- options,
479
- this.cancellationToken,
480
- resultsBuilder);
481
- return result;
482
- }
483
-
484
- /** {@inheritdoc (ISummarizer:interface).enqueueSummarize} */
485
- public enqueueSummarize({
486
- reason,
487
- afterSequenceNumber = 0,
488
- override = false,
489
- ...options
490
- }: IEnqueueSummarizeOptions): EnqueueSummarizeResult {
491
- const onDemandReason = `enqueue;${reason}` as const;
492
- let overridden = false;
493
- if (this.enqueuedSummary !== undefined) {
494
- if (!override) {
495
- return { alreadyEnqueued: true };
496
- }
497
- // Override existing enqueued summarize attempt.
498
- this.enqueuedSummary.resultsBuilder.fail(
499
- "Aborted; overridden by another enqueue summarize attempt",
500
- undefined,
501
- );
502
- this.enqueuedSummary = undefined;
503
- overridden = true;
504
- }
505
- this.enqueuedSummary = {
506
- reason: onDemandReason,
507
- afterSequenceNumber,
508
- options,
509
- resultsBuilder: new SummarizeResultBuilder(),
510
- };
511
- const results = this.enqueuedSummary.resultsBuilder.build();
512
- this.tryRunEnqueuedSummary();
513
- return overridden ? {
514
- ...results,
515
- alreadyEnqueued: true,
516
- overridden: true,
517
- } : results;
518
- }
519
-
520
- private tryRunEnqueuedSummary() {
521
- if (this.stopping) {
522
- this.disposeEnqueuedSummary();
523
- return false;
524
- }
525
- if (
526
- this.enqueuedSummary === undefined
527
- || this.heuristicData.lastOpSequenceNumber < this.enqueuedSummary.afterSequenceNumber
528
- || this.summarizingLock !== undefined
529
- ) {
530
- // If no enqueued summary is ready or a summary is already in progress, take no action.
531
- return false;
532
- }
533
- const { reason, resultsBuilder, options } = this.enqueuedSummary;
534
- // Set to undefined first, so that subsequent enqueue attempt while summarize will occur later.
535
- this.enqueuedSummary = undefined;
536
- this.trySummarizeOnce(
537
- { reason: `enqueuedSummary/${reason}` },
538
- options,
539
- this.cancellationToken,
540
- resultsBuilder);
541
- return true;
542
- }
543
-
544
- private disposeEnqueuedSummary() {
545
- if (this.enqueuedSummary !== undefined) {
546
- this.enqueuedSummary.resultsBuilder.fail("RunningSummarizer stopped or disposed", undefined);
547
- this.enqueuedSummary = undefined;
548
- }
549
- }
550
- }