@fluidframework/container-runtime 2.0.0-internal.3.0.2 → 2.0.0-internal.3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (474) hide show
  1. package/.eslintrc.js +19 -19
  2. package/.mocharc.js +2 -2
  3. package/api-extractor.json +2 -2
  4. package/dist/batchTracker.d.ts.map +1 -1
  5. package/dist/batchTracker.js +2 -1
  6. package/dist/batchTracker.js.map +1 -1
  7. package/dist/blobManager.d.ts +15 -2
  8. package/dist/blobManager.d.ts.map +1 -1
  9. package/dist/blobManager.js +109 -37
  10. package/dist/blobManager.js.map +1 -1
  11. package/dist/connectionTelemetry.d.ts.map +1 -1
  12. package/dist/connectionTelemetry.js +11 -9
  13. package/dist/connectionTelemetry.js.map +1 -1
  14. package/dist/containerHandleContext.d.ts.map +1 -1
  15. package/dist/containerHandleContext.js +3 -1
  16. package/dist/containerHandleContext.js.map +1 -1
  17. package/dist/containerRuntime.d.ts +23 -11
  18. package/dist/containerRuntime.d.ts.map +1 -1
  19. package/dist/containerRuntime.js +225 -132
  20. package/dist/containerRuntime.js.map +1 -1
  21. package/dist/dataStore.d.ts.map +1 -1
  22. package/dist/dataStore.js +11 -9
  23. package/dist/dataStore.js.map +1 -1
  24. package/dist/dataStoreContext.d.ts +27 -13
  25. package/dist/dataStoreContext.d.ts.map +1 -1
  26. package/dist/dataStoreContext.js +95 -56
  27. package/dist/dataStoreContext.js.map +1 -1
  28. package/dist/dataStoreContexts.d.ts.map +1 -1
  29. package/dist/dataStoreContexts.js +7 -3
  30. package/dist/dataStoreContexts.js.map +1 -1
  31. package/dist/dataStoreRegistry.d.ts.map +1 -1
  32. package/dist/dataStoreRegistry.js +3 -1
  33. package/dist/dataStoreRegistry.js.map +1 -1
  34. package/dist/dataStores.d.ts +28 -4
  35. package/dist/dataStores.d.ts.map +1 -1
  36. package/dist/dataStores.js +122 -44
  37. package/dist/dataStores.js.map +1 -1
  38. package/dist/deltaScheduler.d.ts.map +1 -1
  39. package/dist/deltaScheduler.js +8 -3
  40. package/dist/deltaScheduler.js.map +1 -1
  41. package/dist/{garbageCollection.d.ts → gc/garbageCollection.d.ts} +27 -203
  42. package/dist/gc/garbageCollection.d.ts.map +1 -0
  43. package/dist/{garbageCollection.js → gc/garbageCollection.js} +210 -400
  44. package/dist/gc/garbageCollection.js.map +1 -0
  45. package/dist/gc/gcDefinitions.d.ts +189 -0
  46. package/dist/gc/gcDefinitions.d.ts.map +1 -0
  47. package/dist/{garbageCollectionConstants.js → gc/gcDefinitions.js} +27 -2
  48. package/dist/gc/gcDefinitions.js.map +1 -0
  49. package/dist/gc/gcHelpers.d.ts +30 -0
  50. package/dist/gc/gcHelpers.d.ts.map +1 -0
  51. package/dist/gc/gcHelpers.js +65 -0
  52. package/dist/gc/gcHelpers.js.map +1 -0
  53. package/dist/gc/gcSummaryStateTracker.d.ts +86 -0
  54. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -0
  55. package/dist/gc/gcSummaryStateTracker.js +246 -0
  56. package/dist/gc/gcSummaryStateTracker.js.map +1 -0
  57. package/{lib → dist/gc}/gcSweepReadyUsageDetection.d.ts +5 -5
  58. package/dist/gc/gcSweepReadyUsageDetection.d.ts.map +1 -0
  59. package/dist/{gcSweepReadyUsageDetection.js → gc/gcSweepReadyUsageDetection.js} +15 -11
  60. package/dist/gc/gcSweepReadyUsageDetection.js.map +1 -0
  61. package/dist/gc/gcUnreferencedStateTracker.d.ts +34 -0
  62. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  63. package/dist/gc/gcUnreferencedStateTracker.js +94 -0
  64. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -0
  65. package/dist/gc/index.d.ts +11 -0
  66. package/dist/gc/index.d.ts.map +1 -0
  67. package/dist/gc/index.js +40 -0
  68. package/dist/gc/index.js.map +1 -0
  69. package/dist/index.d.ts +2 -5
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +6 -9
  72. package/dist/index.js.map +1 -1
  73. package/dist/opLifecycle/batchManager.d.ts +2 -13
  74. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  75. package/dist/opLifecycle/batchManager.js +19 -41
  76. package/dist/opLifecycle/batchManager.js.map +1 -1
  77. package/dist/opLifecycle/definitions.d.ts +4 -0
  78. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  79. package/dist/opLifecycle/definitions.js.map +1 -1
  80. package/dist/opLifecycle/index.d.ts.map +1 -1
  81. package/dist/opLifecycle/index.js.map +1 -1
  82. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  83. package/dist/opLifecycle/opCompressor.js +1 -0
  84. package/dist/opLifecycle/opCompressor.js.map +1 -1
  85. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  86. package/dist/opLifecycle/opDecompressor.js +5 -2
  87. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  88. package/dist/opLifecycle/opSplitter.d.ts +1 -1
  89. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  90. package/dist/opLifecycle/opSplitter.js +24 -13
  91. package/dist/opLifecycle/opSplitter.js.map +1 -1
  92. package/dist/opLifecycle/outbox.d.ts +19 -3
  93. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  94. package/dist/opLifecycle/outbox.js +78 -45
  95. package/dist/opLifecycle/outbox.js.map +1 -1
  96. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  97. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  98. package/dist/opProperties.d.ts.map +1 -1
  99. package/dist/opProperties.js +1 -3
  100. package/dist/opProperties.js.map +1 -1
  101. package/dist/packageVersion.d.ts +1 -1
  102. package/dist/packageVersion.js +1 -1
  103. package/dist/packageVersion.js.map +1 -1
  104. package/dist/pendingStateManager.d.ts +8 -2
  105. package/dist/pendingStateManager.d.ts.map +1 -1
  106. package/dist/pendingStateManager.js +21 -13
  107. package/dist/pendingStateManager.js.map +1 -1
  108. package/dist/scheduleManager.d.ts.map +1 -1
  109. package/dist/scheduleManager.js +3 -2
  110. package/dist/scheduleManager.js.map +1 -1
  111. package/dist/serializedSnapshotStorage.d.ts +2 -2
  112. package/dist/serializedSnapshotStorage.d.ts.map +1 -1
  113. package/dist/serializedSnapshotStorage.js +5 -3
  114. package/dist/serializedSnapshotStorage.js.map +1 -1
  115. package/dist/summary/index.d.ts +17 -0
  116. package/dist/summary/index.d.ts.map +1 -0
  117. package/dist/summary/index.js +47 -0
  118. package/dist/summary/index.js.map +1 -0
  119. package/dist/summary/orderedClientElection.d.ts.map +1 -0
  120. package/dist/{orderedClientElection.js → summary/orderedClientElection.js} +10 -4
  121. package/dist/summary/orderedClientElection.js.map +1 -0
  122. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  123. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -0
  124. package/{lib → dist/summary}/runningSummarizer.d.ts +19 -18
  125. package/dist/summary/runningSummarizer.d.ts.map +1 -0
  126. package/dist/{runningSummarizer.js → summary/runningSummarizer.js} +191 -76
  127. package/dist/summary/runningSummarizer.js.map +1 -0
  128. package/dist/{summarizer.d.ts → summary/summarizer.d.ts} +4 -6
  129. package/dist/summary/summarizer.d.ts.map +1 -0
  130. package/dist/{summarizer.js → summary/summarizer.js} +31 -71
  131. package/dist/summary/summarizer.js.map +1 -0
  132. package/dist/summary/summarizerClientElection.d.ts.map +1 -0
  133. package/dist/summary/summarizerClientElection.js.map +1 -0
  134. package/dist/summary/summarizerHandle.d.ts.map +1 -0
  135. package/dist/summary/summarizerHandle.js.map +1 -0
  136. package/{lib → dist/summary}/summarizerHeuristics.d.ts +1 -1
  137. package/dist/summary/summarizerHeuristics.d.ts.map +1 -0
  138. package/dist/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +6 -9
  139. package/dist/summary/summarizerHeuristics.js.map +1 -0
  140. package/{lib → dist/summary}/summarizerTypes.d.ts +22 -22
  141. package/dist/summary/summarizerTypes.d.ts.map +1 -0
  142. package/dist/summary/summarizerTypes.js.map +1 -0
  143. package/dist/summary/summaryCollection.d.ts.map +1 -0
  144. package/dist/{summaryCollection.js → summary/summaryCollection.js} +18 -8
  145. package/dist/summary/summaryCollection.js.map +1 -0
  146. package/{lib → dist/summary}/summaryFormat.d.ts +1 -40
  147. package/dist/summary/summaryFormat.d.ts.map +1 -0
  148. package/dist/{summaryFormat.js → summary/summaryFormat.js} +19 -20
  149. package/dist/summary/summaryFormat.js.map +1 -0
  150. package/dist/summary/summaryGenerator.d.ts.map +1 -0
  151. package/dist/{summaryGenerator.js → summary/summaryGenerator.js} +33 -15
  152. package/dist/summary/summaryGenerator.js.map +1 -0
  153. package/dist/{summaryManager.d.ts → summary/summaryManager.d.ts} +1 -1
  154. package/dist/summary/summaryManager.d.ts.map +1 -0
  155. package/dist/{summaryManager.js → summary/summaryManager.js} +21 -9
  156. package/dist/summary/summaryManager.js.map +1 -0
  157. package/dist/throttler.d.ts +2 -2
  158. package/dist/throttler.d.ts.map +1 -1
  159. package/dist/throttler.js +4 -4
  160. package/dist/throttler.js.map +1 -1
  161. package/lib/batchTracker.d.ts.map +1 -1
  162. package/lib/batchTracker.js +2 -1
  163. package/lib/batchTracker.js.map +1 -1
  164. package/lib/blobManager.d.ts +15 -2
  165. package/lib/blobManager.d.ts.map +1 -1
  166. package/lib/blobManager.js +109 -37
  167. package/lib/blobManager.js.map +1 -1
  168. package/lib/connectionTelemetry.d.ts.map +1 -1
  169. package/lib/connectionTelemetry.js +11 -9
  170. package/lib/connectionTelemetry.js.map +1 -1
  171. package/lib/containerHandleContext.d.ts.map +1 -1
  172. package/lib/containerHandleContext.js +3 -1
  173. package/lib/containerHandleContext.js.map +1 -1
  174. package/lib/containerRuntime.d.ts +23 -11
  175. package/lib/containerRuntime.d.ts.map +1 -1
  176. package/lib/containerRuntime.js +201 -108
  177. package/lib/containerRuntime.js.map +1 -1
  178. package/lib/dataStore.d.ts.map +1 -1
  179. package/lib/dataStore.js +11 -9
  180. package/lib/dataStore.js.map +1 -1
  181. package/lib/dataStoreContext.d.ts +27 -13
  182. package/lib/dataStoreContext.d.ts.map +1 -1
  183. package/lib/dataStoreContext.js +84 -45
  184. package/lib/dataStoreContext.js.map +1 -1
  185. package/lib/dataStoreContexts.d.ts.map +1 -1
  186. package/lib/dataStoreContexts.js +7 -3
  187. package/lib/dataStoreContexts.js.map +1 -1
  188. package/lib/dataStoreRegistry.d.ts.map +1 -1
  189. package/lib/dataStoreRegistry.js +3 -1
  190. package/lib/dataStoreRegistry.js.map +1 -1
  191. package/lib/dataStores.d.ts +28 -4
  192. package/lib/dataStores.d.ts.map +1 -1
  193. package/lib/dataStores.js +120 -42
  194. package/lib/dataStores.js.map +1 -1
  195. package/lib/deltaScheduler.d.ts.map +1 -1
  196. package/lib/deltaScheduler.js +9 -4
  197. package/lib/deltaScheduler.js.map +1 -1
  198. package/lib/{garbageCollection.d.ts → gc/garbageCollection.d.ts} +27 -203
  199. package/lib/gc/garbageCollection.d.ts.map +1 -0
  200. package/lib/{garbageCollection.js → gc/garbageCollection.js} +190 -379
  201. package/lib/gc/garbageCollection.js.map +1 -0
  202. package/lib/gc/gcDefinitions.d.ts +189 -0
  203. package/lib/gc/gcDefinitions.d.ts.map +1 -0
  204. package/lib/{garbageCollectionConstants.js → gc/gcDefinitions.js} +26 -1
  205. package/lib/gc/gcDefinitions.js.map +1 -0
  206. package/lib/gc/gcHelpers.d.ts +30 -0
  207. package/lib/gc/gcHelpers.d.ts.map +1 -0
  208. package/lib/gc/gcHelpers.js +58 -0
  209. package/lib/gc/gcHelpers.js.map +1 -0
  210. package/lib/gc/gcSummaryStateTracker.d.ts +86 -0
  211. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
  212. package/lib/gc/gcSummaryStateTracker.js +242 -0
  213. package/lib/gc/gcSummaryStateTracker.js.map +1 -0
  214. package/{dist → lib/gc}/gcSweepReadyUsageDetection.d.ts +5 -5
  215. package/lib/gc/gcSweepReadyUsageDetection.d.ts.map +1 -0
  216. package/lib/{gcSweepReadyUsageDetection.js → gc/gcSweepReadyUsageDetection.js} +15 -11
  217. package/lib/gc/gcSweepReadyUsageDetection.js.map +1 -0
  218. package/lib/gc/gcUnreferencedStateTracker.d.ts +34 -0
  219. package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  220. package/lib/gc/gcUnreferencedStateTracker.js +90 -0
  221. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
  222. package/lib/gc/index.d.ts +11 -0
  223. package/lib/gc/index.d.ts.map +1 -0
  224. package/lib/gc/index.js +11 -0
  225. package/lib/gc/index.js.map +1 -0
  226. package/lib/index.d.ts +2 -5
  227. package/lib/index.d.ts.map +1 -1
  228. package/lib/index.js +1 -4
  229. package/lib/index.js.map +1 -1
  230. package/lib/opLifecycle/batchManager.d.ts +2 -13
  231. package/lib/opLifecycle/batchManager.d.ts.map +1 -1
  232. package/lib/opLifecycle/batchManager.js +19 -41
  233. package/lib/opLifecycle/batchManager.js.map +1 -1
  234. package/lib/opLifecycle/definitions.d.ts +4 -0
  235. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  236. package/lib/opLifecycle/definitions.js.map +1 -1
  237. package/lib/opLifecycle/index.d.ts.map +1 -1
  238. package/lib/opLifecycle/index.js.map +1 -1
  239. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  240. package/lib/opLifecycle/opCompressor.js +1 -0
  241. package/lib/opLifecycle/opCompressor.js.map +1 -1
  242. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  243. package/lib/opLifecycle/opDecompressor.js +5 -2
  244. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  245. package/lib/opLifecycle/opSplitter.d.ts +1 -1
  246. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  247. package/lib/opLifecycle/opSplitter.js +25 -14
  248. package/lib/opLifecycle/opSplitter.js.map +1 -1
  249. package/lib/opLifecycle/outbox.d.ts +19 -3
  250. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  251. package/lib/opLifecycle/outbox.js +79 -46
  252. package/lib/opLifecycle/outbox.js.map +1 -1
  253. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  254. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  255. package/lib/opProperties.d.ts.map +1 -1
  256. package/lib/opProperties.js +1 -3
  257. package/lib/opProperties.js.map +1 -1
  258. package/lib/packageVersion.d.ts +1 -1
  259. package/lib/packageVersion.js +1 -1
  260. package/lib/packageVersion.js.map +1 -1
  261. package/lib/pendingStateManager.d.ts +8 -2
  262. package/lib/pendingStateManager.d.ts.map +1 -1
  263. package/lib/pendingStateManager.js +21 -13
  264. package/lib/pendingStateManager.js.map +1 -1
  265. package/lib/scheduleManager.d.ts.map +1 -1
  266. package/lib/scheduleManager.js +3 -2
  267. package/lib/scheduleManager.js.map +1 -1
  268. package/lib/serializedSnapshotStorage.d.ts +2 -2
  269. package/lib/serializedSnapshotStorage.d.ts.map +1 -1
  270. package/lib/serializedSnapshotStorage.js +5 -3
  271. package/lib/serializedSnapshotStorage.js.map +1 -1
  272. package/lib/summary/index.d.ts +17 -0
  273. package/lib/summary/index.d.ts.map +1 -0
  274. package/lib/summary/index.js +16 -0
  275. package/lib/summary/index.js.map +1 -0
  276. package/lib/summary/orderedClientElection.d.ts.map +1 -0
  277. package/lib/{orderedClientElection.js → summary/orderedClientElection.js} +10 -4
  278. package/lib/summary/orderedClientElection.js.map +1 -0
  279. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  280. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
  281. package/{dist → lib/summary}/runningSummarizer.d.ts +19 -18
  282. package/lib/summary/runningSummarizer.d.ts.map +1 -0
  283. package/lib/{runningSummarizer.js → summary/runningSummarizer.js} +193 -78
  284. package/lib/summary/runningSummarizer.js.map +1 -0
  285. package/lib/{summarizer.d.ts → summary/summarizer.d.ts} +4 -6
  286. package/lib/summary/summarizer.d.ts.map +1 -0
  287. package/lib/{summarizer.js → summary/summarizer.js} +33 -73
  288. package/lib/summary/summarizer.js.map +1 -0
  289. package/lib/summary/summarizerClientElection.d.ts.map +1 -0
  290. package/lib/summary/summarizerClientElection.js.map +1 -0
  291. package/lib/summary/summarizerHandle.d.ts.map +1 -0
  292. package/lib/summary/summarizerHandle.js.map +1 -0
  293. package/{dist → lib/summary}/summarizerHeuristics.d.ts +1 -1
  294. package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
  295. package/lib/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +6 -9
  296. package/lib/summary/summarizerHeuristics.js.map +1 -0
  297. package/{dist → lib/summary}/summarizerTypes.d.ts +22 -22
  298. package/lib/summary/summarizerTypes.d.ts.map +1 -0
  299. package/lib/summary/summarizerTypes.js.map +1 -0
  300. package/lib/summary/summaryCollection.d.ts.map +1 -0
  301. package/lib/{summaryCollection.js → summary/summaryCollection.js} +18 -8
  302. package/lib/summary/summaryCollection.js.map +1 -0
  303. package/{dist → lib/summary}/summaryFormat.d.ts +1 -40
  304. package/lib/summary/summaryFormat.d.ts.map +1 -0
  305. package/lib/{summaryFormat.js → summary/summaryFormat.js} +20 -20
  306. package/lib/summary/summaryFormat.js.map +1 -0
  307. package/lib/summary/summaryGenerator.d.ts.map +1 -0
  308. package/lib/{summaryGenerator.js → summary/summaryGenerator.js} +33 -15
  309. package/lib/summary/summaryGenerator.js.map +1 -0
  310. package/lib/{summaryManager.d.ts → summary/summaryManager.d.ts} +1 -1
  311. package/lib/summary/summaryManager.d.ts.map +1 -0
  312. package/lib/{summaryManager.js → summary/summaryManager.js} +21 -9
  313. package/lib/summary/summaryManager.js.map +1 -0
  314. package/lib/throttler.d.ts +2 -2
  315. package/lib/throttler.d.ts.map +1 -1
  316. package/lib/throttler.js +4 -4
  317. package/lib/throttler.js.map +1 -1
  318. package/package.json +60 -51
  319. package/prettier.config.cjs +1 -1
  320. package/src/batchTracker.ts +54 -49
  321. package/src/blobManager.ts +825 -674
  322. package/src/connectionTelemetry.ts +280 -249
  323. package/src/containerHandleContext.ts +27 -29
  324. package/src/containerRuntime.ts +3249 -2978
  325. package/src/dataStore.ts +172 -159
  326. package/src/dataStoreContext.ts +1141 -1057
  327. package/src/dataStoreContexts.ts +178 -161
  328. package/src/dataStoreRegistry.ts +25 -20
  329. package/src/dataStores.ts +880 -731
  330. package/src/deltaScheduler.ts +158 -150
  331. package/{garbageCollection.md → src/gc/garbageCollection.md} +16 -3
  332. package/src/gc/garbageCollection.ts +1506 -0
  333. package/src/gc/gcDefinitions.ts +244 -0
  334. package/src/gc/gcHelpers.ts +86 -0
  335. package/src/gc/gcSummaryStateTracker.ts +339 -0
  336. package/src/gc/gcSweepReadyUsageDetection.ts +145 -0
  337. package/src/gc/gcUnreferencedStateTracker.ts +114 -0
  338. package/src/gc/index.ts +40 -0
  339. package/src/index.ts +67 -70
  340. package/src/opLifecycle/README.md +152 -0
  341. package/src/opLifecycle/batchManager.ts +101 -144
  342. package/src/opLifecycle/definitions.ts +33 -29
  343. package/src/opLifecycle/index.ts +5 -5
  344. package/src/opLifecycle/opCompressor.ts +55 -53
  345. package/src/opLifecycle/opDecompressor.ts +100 -81
  346. package/src/opLifecycle/opSplitter.ts +233 -188
  347. package/src/opLifecycle/outbox.ts +251 -195
  348. package/src/opLifecycle/remoteMessageProcessor.ts +62 -62
  349. package/src/opProperties.ts +11 -9
  350. package/src/packageVersion.ts +1 -1
  351. package/src/pendingStateManager.ts +396 -338
  352. package/src/scheduleManager.ts +299 -269
  353. package/src/serializedSnapshotStorage.ts +126 -112
  354. package/src/summary/index.ts +99 -0
  355. package/src/summary/orderedClientElection.ts +564 -0
  356. package/src/summary/runWhileConnectedCoordinator.ts +113 -0
  357. package/src/summary/runningSummarizer.ts +788 -0
  358. package/src/summary/summarizer.ts +386 -0
  359. package/src/summary/summarizerClientElection.ts +139 -0
  360. package/src/{summarizerHandle.ts → summary/summarizerHandle.ts} +11 -9
  361. package/src/summary/summarizerHeuristics.ts +219 -0
  362. package/src/summary/summarizerTypes.ts +521 -0
  363. package/src/summary/summaryCollection.ts +450 -0
  364. package/src/summary/summaryFormat.ts +226 -0
  365. package/src/summary/summaryGenerator.ts +505 -0
  366. package/src/summary/summaryManager.ts +423 -0
  367. package/src/throttler.ts +131 -122
  368. package/tsconfig.esnext.json +6 -6
  369. package/tsconfig.json +9 -13
  370. package/dist/garbageCollection.d.ts.map +0 -1
  371. package/dist/garbageCollection.js.map +0 -1
  372. package/dist/garbageCollectionConstants.d.ts +0 -25
  373. package/dist/garbageCollectionConstants.d.ts.map +0 -1
  374. package/dist/garbageCollectionConstants.js.map +0 -1
  375. package/dist/garbageCollectionTombstoneUtils.d.ts +0 -14
  376. package/dist/garbageCollectionTombstoneUtils.d.ts.map +0 -1
  377. package/dist/garbageCollectionTombstoneUtils.js +0 -23
  378. package/dist/garbageCollectionTombstoneUtils.js.map +0 -1
  379. package/dist/gcSweepReadyUsageDetection.d.ts.map +0 -1
  380. package/dist/gcSweepReadyUsageDetection.js.map +0 -1
  381. package/dist/orderedClientElection.d.ts.map +0 -1
  382. package/dist/orderedClientElection.js.map +0 -1
  383. package/dist/runWhileConnectedCoordinator.d.ts.map +0 -1
  384. package/dist/runWhileConnectedCoordinator.js.map +0 -1
  385. package/dist/runningSummarizer.d.ts.map +0 -1
  386. package/dist/runningSummarizer.js.map +0 -1
  387. package/dist/summarizer.d.ts.map +0 -1
  388. package/dist/summarizer.js.map +0 -1
  389. package/dist/summarizerClientElection.d.ts.map +0 -1
  390. package/dist/summarizerClientElection.js.map +0 -1
  391. package/dist/summarizerHandle.d.ts.map +0 -1
  392. package/dist/summarizerHandle.js.map +0 -1
  393. package/dist/summarizerHeuristics.d.ts.map +0 -1
  394. package/dist/summarizerHeuristics.js.map +0 -1
  395. package/dist/summarizerTypes.d.ts.map +0 -1
  396. package/dist/summarizerTypes.js.map +0 -1
  397. package/dist/summaryCollection.d.ts.map +0 -1
  398. package/dist/summaryCollection.js.map +0 -1
  399. package/dist/summaryFormat.d.ts.map +0 -1
  400. package/dist/summaryFormat.js.map +0 -1
  401. package/dist/summaryGenerator.d.ts.map +0 -1
  402. package/dist/summaryGenerator.js.map +0 -1
  403. package/dist/summaryManager.d.ts.map +0 -1
  404. package/dist/summaryManager.js.map +0 -1
  405. package/lib/garbageCollection.d.ts.map +0 -1
  406. package/lib/garbageCollection.js.map +0 -1
  407. package/lib/garbageCollectionConstants.d.ts +0 -25
  408. package/lib/garbageCollectionConstants.d.ts.map +0 -1
  409. package/lib/garbageCollectionConstants.js.map +0 -1
  410. package/lib/garbageCollectionTombstoneUtils.d.ts +0 -14
  411. package/lib/garbageCollectionTombstoneUtils.d.ts.map +0 -1
  412. package/lib/garbageCollectionTombstoneUtils.js +0 -19
  413. package/lib/garbageCollectionTombstoneUtils.js.map +0 -1
  414. package/lib/gcSweepReadyUsageDetection.d.ts.map +0 -1
  415. package/lib/gcSweepReadyUsageDetection.js.map +0 -1
  416. package/lib/orderedClientElection.d.ts.map +0 -1
  417. package/lib/orderedClientElection.js.map +0 -1
  418. package/lib/runWhileConnectedCoordinator.d.ts.map +0 -1
  419. package/lib/runWhileConnectedCoordinator.js.map +0 -1
  420. package/lib/runningSummarizer.d.ts.map +0 -1
  421. package/lib/runningSummarizer.js.map +0 -1
  422. package/lib/summarizer.d.ts.map +0 -1
  423. package/lib/summarizer.js.map +0 -1
  424. package/lib/summarizerClientElection.d.ts.map +0 -1
  425. package/lib/summarizerClientElection.js.map +0 -1
  426. package/lib/summarizerHandle.d.ts.map +0 -1
  427. package/lib/summarizerHandle.js.map +0 -1
  428. package/lib/summarizerHeuristics.d.ts.map +0 -1
  429. package/lib/summarizerHeuristics.js.map +0 -1
  430. package/lib/summarizerTypes.d.ts.map +0 -1
  431. package/lib/summarizerTypes.js.map +0 -1
  432. package/lib/summaryCollection.d.ts.map +0 -1
  433. package/lib/summaryCollection.js.map +0 -1
  434. package/lib/summaryFormat.d.ts.map +0 -1
  435. package/lib/summaryFormat.js.map +0 -1
  436. package/lib/summaryGenerator.d.ts.map +0 -1
  437. package/lib/summaryGenerator.js.map +0 -1
  438. package/lib/summaryManager.d.ts.map +0 -1
  439. package/lib/summaryManager.js.map +0 -1
  440. package/src/garbageCollection.ts +0 -1800
  441. package/src/garbageCollectionConstants.ts +0 -41
  442. package/src/garbageCollectionTombstoneUtils.ts +0 -28
  443. package/src/gcSweepReadyUsageDetection.ts +0 -139
  444. package/src/orderedClientElection.ts +0 -532
  445. package/src/runWhileConnectedCoordinator.ts +0 -106
  446. package/src/runningSummarizer.ts +0 -610
  447. package/src/summarizer.ts +0 -421
  448. package/src/summarizerClientElection.ts +0 -132
  449. package/src/summarizerHeuristics.ts +0 -222
  450. package/src/summarizerTypes.ts +0 -507
  451. package/src/summaryCollection.ts +0 -421
  452. package/src/summaryFormat.ts +0 -256
  453. package/src/summaryGenerator.ts +0 -450
  454. package/src/summaryManager.ts +0 -394
  455. /package/dist/{orderedClientElection.d.ts → summary/orderedClientElection.d.ts} +0 -0
  456. /package/dist/{runWhileConnectedCoordinator.d.ts → summary/runWhileConnectedCoordinator.d.ts} +0 -0
  457. /package/dist/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.js} +0 -0
  458. /package/dist/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +0 -0
  459. /package/dist/{summarizerClientElection.js → summary/summarizerClientElection.js} +0 -0
  460. /package/dist/{summarizerHandle.d.ts → summary/summarizerHandle.d.ts} +0 -0
  461. /package/dist/{summarizerHandle.js → summary/summarizerHandle.js} +0 -0
  462. /package/dist/{summarizerTypes.js → summary/summarizerTypes.js} +0 -0
  463. /package/dist/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +0 -0
  464. /package/dist/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +0 -0
  465. /package/lib/{orderedClientElection.d.ts → summary/orderedClientElection.d.ts} +0 -0
  466. /package/lib/{runWhileConnectedCoordinator.d.ts → summary/runWhileConnectedCoordinator.d.ts} +0 -0
  467. /package/lib/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.js} +0 -0
  468. /package/lib/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +0 -0
  469. /package/lib/{summarizerClientElection.js → summary/summarizerClientElection.js} +0 -0
  470. /package/lib/{summarizerHandle.d.ts → summary/summarizerHandle.d.ts} +0 -0
  471. /package/lib/{summarizerHandle.js → summary/summarizerHandle.js} +0 -0
  472. /package/lib/{summarizerTypes.js → summary/summarizerTypes.js} +0 -0
  473. /package/lib/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +0 -0
  474. /package/lib/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +0 -0
@@ -1,450 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
-
6
- import { ITelemetryLogger } from "@fluidframework/common-definitions";
7
- import {
8
- assert,
9
- Deferred,
10
- IPromiseTimer,
11
- IPromiseTimerResult,
12
- Timer,
13
- } from "@fluidframework/common-utils";
14
- import { MessageType } from "@fluidframework/protocol-definitions";
15
- import { PerformanceEvent, LoggingError, ChildLogger } from "@fluidframework/telemetry-utils";
16
- import { getRetryDelaySecondsFromError } from "@fluidframework/driver-utils";
17
- import { DriverErrorType } from "@fluidframework/driver-definitions";
18
- import {
19
- IAckSummaryResult,
20
- INackSummaryResult,
21
- ISummarizeOptions,
22
- IBroadcastSummaryResult,
23
- ISummarizeResults,
24
- ISummarizeHeuristicData,
25
- ISubmitSummaryOptions,
26
- SubmitSummaryResult,
27
- SummarizeResultPart,
28
- ISummaryCancellationToken,
29
- ISummarizeTelemetryProperties,
30
- SummaryGeneratorTelemetry,
31
- } from "./summarizerTypes";
32
- import { IClientSummaryWatcher } from "./summaryCollection";
33
-
34
- export type raceTimerResult<T> =
35
- { result: "done"; value: T; } |
36
- { result: IPromiseTimerResult["timerResult"]; } |
37
- { result: "cancelled"; };
38
-
39
- /** Helper function to wait for a promise or PromiseTimer to elapse. */
40
- export async function raceTimer<T>(
41
- promise: Promise<T>,
42
- timer: Promise<IPromiseTimerResult>,
43
- cancellationToken?: ISummaryCancellationToken,
44
- ): Promise<raceTimerResult<T>> {
45
- const promises: Promise<raceTimerResult<T>>[] = [
46
- promise.then((value) => ({ result: "done", value } as const)),
47
- timer.then(({ timerResult: result }) => ({ result } as const)),
48
- ];
49
- if (cancellationToken !== undefined) {
50
- promises.push(cancellationToken.waitCancelled.then(() => ({ result: "cancelled" } as const)));
51
- }
52
- return Promise.race(promises);
53
- }
54
-
55
- // Send some telemetry if generate summary takes too long
56
- const maxSummarizeTimeoutTime = 20000; // 20 sec
57
- const maxSummarizeTimeoutCount = 5; // Double and resend 5 times
58
-
59
- export type SummarizeReason =
60
- /**
61
- * Attempt to summarize after idle timeout has elapsed.
62
- * Idle timer restarts whenever an op is received. So this
63
- * triggers only after some amount of time has passed with
64
- * no ops being received.
65
- */
66
- | "idle"
67
- /**
68
- * Attempt to summarize after a maximum time since last
69
- * successful summary has passed. This measures time since
70
- * last summary ack op was processed.
71
- */
72
- | "maxTime"
73
- /**
74
- * Attempt to summarize after a maximum number of ops have
75
- * passed since the last successful summary. This compares
76
- * op sequence numbers with the reference sequence number
77
- * of the summarize op corresponding to the last summary
78
- * ack op.
79
- */
80
- | "maxOps"
81
- /**
82
- * Special case to attempt to summarize one last time before the
83
- * summarizer client closes itself. This is to prevent cases where
84
- * the summarizer client never gets a chance to summarize, because
85
- * there are too many outstanding ops and/or parent client cannot
86
- * stay connected long enough for summarizer client to catch up.
87
- */
88
- | "lastSummary"
89
- /** On-demand summary requested with specified reason. */
90
- | `onDemand;${string}`
91
- /** Enqueue summarize attempt with specified reason. */
92
- | `enqueue;${string}`;
93
-
94
- const summarizeErrors = {
95
- /**
96
- * Error encountered while generating the summary tree, uploading
97
- * it to storage, or submitting the op. It could be a result of
98
- * the client becoming disconnected while generating or an actual error.
99
- */
100
- submitSummaryFailure: "Error while generating, uploading, or submitting summary",
101
- /**
102
- * The summaryAckWaitTimeout time has elapsed before receiving the summarize op
103
- * sent by this summarize attempt. It is expected to be broadcast quickly.
104
- */
105
- summaryOpWaitTimeout: "Timeout while waiting for summarize op broadcast",
106
- /**
107
- * The summaryAckWaitTimeout time has elapsed before receiving either a
108
- * summaryAck or summaryNack op from the server in response to this
109
- * summarize attempt. It is expected that the server should respond.
110
- */
111
- summaryAckWaitTimeout: "Timeout while waiting for summaryAck/summaryNack op",
112
- /**
113
- * The server responded with a summaryNack op, thus rejecting this
114
- * summarize attempt.
115
- */
116
- summaryNack: "Server rejected summary via summaryNack op",
117
-
118
- disconnect: "Summary cancelled due to summarizer or main client disconnect",
119
- } as const;
120
-
121
- export class SummarizeResultBuilder {
122
- public readonly summarySubmitted = new Deferred<SummarizeResultPart<SubmitSummaryResult>>();
123
- public readonly summaryOpBroadcasted = new Deferred<SummarizeResultPart<IBroadcastSummaryResult>>();
124
- public readonly receivedSummaryAckOrNack =
125
- new Deferred<SummarizeResultPart<IAckSummaryResult, INackSummaryResult>>();
126
-
127
- public fail(message: string, error: any, nackSummaryResult?: INackSummaryResult, retryAfterSeconds?: number) {
128
- assert(!this.receivedSummaryAckOrNack.isCompleted,
129
- 0x25e /* "no reason to call fail if all promises have been completed" */);
130
-
131
- const result: SummarizeResultPart<undefined> =
132
- { success: false, message, data: undefined, error, retryAfterSeconds } as const;
133
- this.summarySubmitted.resolve(result);
134
- this.summaryOpBroadcasted.resolve(result);
135
- this.receivedSummaryAckOrNack.resolve({ ...result, data: nackSummaryResult });
136
- }
137
- public build(): ISummarizeResults {
138
- return {
139
- summarySubmitted: this.summarySubmitted.promise,
140
- summaryOpBroadcasted: this.summaryOpBroadcasted.promise,
141
- receivedSummaryAckOrNack: this.receivedSummaryAckOrNack.promise,
142
- } as const;
143
- }
144
- }
145
-
146
- /**
147
- * This class generates and tracks a summary attempt.
148
- */
149
- export class SummaryGenerator {
150
- private readonly summarizeTimer: Timer;
151
- constructor(
152
- private readonly pendingAckTimer: IPromiseTimer,
153
- private readonly heuristicData: ISummarizeHeuristicData,
154
- private readonly submitSummaryCallback: (options: ISubmitSummaryOptions) => Promise<SubmitSummaryResult>,
155
- private readonly raiseSummarizingError: (errorMessage: string) => void,
156
- private readonly successfulSummaryCallback: () => void,
157
- private readonly summaryWatcher: Pick<IClientSummaryWatcher, "watchSummary">,
158
- private readonly logger: ITelemetryLogger,
159
- ) {
160
- this.summarizeTimer = new Timer(
161
- maxSummarizeTimeoutTime,
162
- () => this.summarizeTimerHandler(maxSummarizeTimeoutTime, 1),
163
- );
164
- }
165
-
166
- /**
167
- * Generates summary and listens for broadcast and ack/nack.
168
- * Returns true for ack, false for nack, and undefined for failure or timeout.
169
- * @param reason - reason for summarizing
170
- * @param options - refreshLatestAck to fetch summary ack info from server,
171
- * fullTree to generate tree without any summary handles even if unchanged
172
- */
173
- public summarize(
174
- summarizeProps: ISummarizeTelemetryProperties,
175
- options: ISummarizeOptions,
176
- cancellationToken: ISummaryCancellationToken,
177
- resultsBuilder = new SummarizeResultBuilder(),
178
- ): ISummarizeResults {
179
- this.summarizeCore(summarizeProps, options, resultsBuilder, cancellationToken)
180
- .catch((error) => {
181
- const message = "UnexpectedSummarizeError";
182
- this.logger.sendErrorEvent({ eventName: message, ...summarizeProps }, error);
183
- resultsBuilder.fail(message, error);
184
- });
185
-
186
- return resultsBuilder.build();
187
- }
188
-
189
- private async summarizeCore(
190
- summarizeProps: ISummarizeTelemetryProperties,
191
- options: ISummarizeOptions,
192
- resultsBuilder: SummarizeResultBuilder,
193
- cancellationToken: ISummaryCancellationToken,
194
- ): Promise<void> {
195
- const { refreshLatestAck, fullTree } = options;
196
- const logger = ChildLogger.create(this.logger, undefined, { all: summarizeProps });
197
-
198
- // Note: timeSinceLastAttempt and timeSinceLastSummary for the
199
- // first summary are basically the time since the summarizer was loaded.
200
- const timeSinceLastAttempt = Date.now() - this.heuristicData.lastAttempt.summaryTime;
201
- const timeSinceLastSummary = Date.now() - this.heuristicData.lastSuccessfulSummary.summaryTime;
202
- let summarizeTelemetryProps: SummaryGeneratorTelemetry = {
203
- fullTree,
204
- timeSinceLastAttempt,
205
- timeSinceLastSummary,
206
- };
207
-
208
- const summarizeEvent = PerformanceEvent.start(
209
- logger,
210
- {
211
- eventName: "Summarize",
212
- refreshLatestAck,
213
- ...summarizeTelemetryProps,
214
- },
215
- { start: true, end: true, cancel: "generic" },
216
- );
217
-
218
- // Helper functions to report failures and return.
219
- const getFailMessage =
220
- (errorCode: keyof typeof summarizeErrors) => `${errorCode}: ${summarizeErrors[errorCode]}`;
221
- const fail = (
222
- errorCode: keyof typeof summarizeErrors,
223
- error?: any,
224
- properties?: SummaryGeneratorTelemetry,
225
- nackSummaryResult?: INackSummaryResult,
226
- ) => {
227
- this.raiseSummarizingError(summarizeErrors[errorCode]);
228
- // UploadSummary may fail with 429 and retryAfter - respect that
229
- // Summary Nack also can have retryAfter, it's parsed below and comes as a property.
230
- const retryAfterSeconds = getRetryDelaySecondsFromError(error);
231
-
232
- // Report any failure as an error unless it was due to cancellation (like "disconnected" error)
233
- // If failure happened on upload, we may not yet realized that socket disconnected, so check
234
- // offlineError too.
235
- const category = cancellationToken.cancelled || error?.errorType === DriverErrorType.offlineError ?
236
- "generic" : "error";
237
-
238
- const message = getFailMessage(errorCode);
239
- summarizeEvent.cancel({
240
- ...properties,
241
- reason: errorCode,
242
- category,
243
- retryAfterSeconds,
244
- }, error ?? message); // disconnect & summaryAckTimeout do not have proper error.
245
- resultsBuilder.fail(message, error, nackSummaryResult, retryAfterSeconds);
246
- };
247
-
248
- // Wait to generate and send summary
249
- this.summarizeTimer.start();
250
-
251
- // Use record type to prevent unexpected value types
252
- let summaryData: SubmitSummaryResult | undefined;
253
- try {
254
- summaryData = await this.submitSummaryCallback({
255
- fullTree,
256
- refreshLatestAck,
257
- summaryLogger: logger,
258
- cancellationToken,
259
- });
260
-
261
- // Cumulatively add telemetry properties based on how far generateSummary went.
262
- const referenceSequenceNumber = summaryData.referenceSequenceNumber;
263
- const opsSinceLastSummary =
264
- referenceSequenceNumber - this.heuristicData.lastSuccessfulSummary.refSequenceNumber;
265
- summarizeTelemetryProps = {
266
- ...summarizeTelemetryProps,
267
- referenceSequenceNumber,
268
- minimumSequenceNumber: summaryData.minimumSequenceNumber,
269
- opsSinceLastAttempt: referenceSequenceNumber - this.heuristicData.lastAttempt.refSequenceNumber,
270
- opsSinceLastSummary,
271
- };
272
- summarizeTelemetryProps = this.addSummaryDataToTelemetryProps(summaryData, summarizeTelemetryProps);
273
-
274
- if (summaryData.stage !== "submit") {
275
- return fail("submitSummaryFailure", summaryData.error, summarizeTelemetryProps);
276
- }
277
-
278
- /**
279
- * With incremental summaries, if the full tree was not summarized, only data stores that changed should
280
- * be summarized. A data store is considered changed if either or both of the following is true:
281
- * - It has received an op.
282
- * - Its reference state changed, i.e., it went from referenced to unreferenced or vice-versa.
283
- *
284
- * In the extreme case, every op can be for a different data store and each op can result in the reference
285
- * state change of multiple data stores. So, the total number of data stores that are summarized should not
286
- * exceed the number of ops since last summary + number of data store whose reference state changed.
287
- */
288
- if (!fullTree && !summaryData.forcedFullTree) {
289
- const { summarizedDataStoreCount, gcStateUpdatedDataStoreCount = 0 } = summaryData.summaryStats;
290
- if (summarizedDataStoreCount > gcStateUpdatedDataStoreCount + opsSinceLastSummary) {
291
- logger.sendErrorEvent({
292
- eventName: "IncrementalSummaryViolation",
293
- summarizedDataStoreCount,
294
- gcStateUpdatedDataStoreCount,
295
- opsSinceLastSummary,
296
- });
297
- }
298
- }
299
-
300
- // Log event here on summary success only, as Summarize_cancel duplicates failure logging.
301
- summarizeEvent.reportEvent("generate", { ...summarizeTelemetryProps });
302
- resultsBuilder.summarySubmitted.resolve({ success: true, data: summaryData });
303
- } catch (error) {
304
- return fail("submitSummaryFailure", error);
305
- } finally {
306
- this.heuristicData.recordAttempt(summaryData?.referenceSequenceNumber);
307
- this.summarizeTimer.clear();
308
- }
309
-
310
- try {
311
- const pendingTimeoutP = this.pendingAckTimer.start();
312
- const summary = this.summaryWatcher.watchSummary(summaryData.clientSequenceNumber);
313
-
314
- // Wait for broadcast
315
- const waitBroadcastResult = await raceTimer(summary.waitBroadcast(), pendingTimeoutP, cancellationToken);
316
- if (waitBroadcastResult.result === "cancelled") {
317
- return fail("disconnect");
318
- }
319
- if (waitBroadcastResult.result !== "done") {
320
- return fail("summaryOpWaitTimeout");
321
- }
322
- const summarizeOp = waitBroadcastResult.value;
323
-
324
- const broadcastDuration = Date.now() - this.heuristicData.lastAttempt.summaryTime;
325
- resultsBuilder.summaryOpBroadcasted.resolve({
326
- success: true,
327
- data: { summarizeOp, broadcastDuration },
328
- });
329
-
330
- this.heuristicData.lastAttempt.summarySequenceNumber = summarizeOp.sequenceNumber;
331
- logger.sendTelemetryEvent({
332
- eventName: "Summarize_Op",
333
- duration: broadcastDuration,
334
- referenceSequenceNumber: summarizeOp.referenceSequenceNumber,
335
- summarySequenceNumber: summarizeOp.sequenceNumber,
336
- handle: summarizeOp.contents.handle,
337
- });
338
-
339
- // Wait for ack/nack
340
- const waitAckNackResult = await raceTimer(summary.waitAckNack(), pendingTimeoutP, cancellationToken);
341
- if (waitAckNackResult.result === "cancelled") {
342
- return fail("disconnect");
343
- }
344
- if (waitAckNackResult.result !== "done") {
345
- return fail("summaryAckWaitTimeout");
346
- }
347
- const ackNackOp = waitAckNackResult.value;
348
- this.pendingAckTimer.clear();
349
-
350
- // Update for success/failure
351
- const ackNackDuration = Date.now() - this.heuristicData.lastAttempt.summaryTime;
352
-
353
- // adding new properties
354
- summarizeTelemetryProps = {
355
- ackWaitDuration: ackNackDuration,
356
- ackNackSequenceNumber: ackNackOp.sequenceNumber,
357
- summarySequenceNumber: ackNackOp.contents.summaryProposal.summarySequenceNumber,
358
- ...summarizeTelemetryProps,
359
- };
360
- if (ackNackOp.type === MessageType.SummaryAck) {
361
- this.heuristicData.markLastAttemptAsSuccessful();
362
- this.successfulSummaryCallback();
363
- summarizeEvent.end({
364
- ...summarizeTelemetryProps,
365
- handle: ackNackOp.contents.handle,
366
- });
367
- resultsBuilder.receivedSummaryAckOrNack.resolve({ success: true, data: {
368
- summaryAckOp: ackNackOp,
369
- ackNackDuration,
370
- } });
371
- } else {
372
- // Check for retryDelay in summaryNack response.
373
- assert(ackNackOp.type === MessageType.SummaryNack, 0x274 /* "type check" */);
374
- const summaryNack = ackNackOp.contents;
375
- const message = summaryNack?.message;
376
- const retryAfterSeconds = summaryNack?.retryAfter;
377
-
378
- // pre-0.58 error message prefix: summaryNack
379
- const error = new LoggingError(`Received summaryNack: ${message}`, { retryAfterSeconds });
380
-
381
- assert(getRetryDelaySecondsFromError(error) === retryAfterSeconds, 0x25f /* "retryAfterSeconds" */);
382
- // This will only set resultsBuilder.receivedSummaryAckOrNack, as other promises are already set.
383
- return fail(
384
- "summaryNack",
385
- error,
386
- { ...summarizeTelemetryProps, nackRetryAfter: retryAfterSeconds },
387
- { summaryNackOp: ackNackOp, ackNackDuration },
388
- );
389
- }
390
- } finally {
391
- this.pendingAckTimer.clear();
392
- }
393
- }
394
-
395
- private addSummaryDataToTelemetryProps(
396
- summaryData: SubmitSummaryResult,
397
- initialProps: SummaryGeneratorTelemetry,
398
- ): SummaryGeneratorTelemetry {
399
- switch (summaryData.stage) {
400
- case "base": return initialProps;
401
-
402
- case "generate": return {
403
- ...initialProps,
404
- ...summaryData.summaryStats,
405
- generateDuration: summaryData.generateDuration,
406
- };
407
-
408
- case "upload": return {
409
- ...initialProps,
410
- ...summaryData.summaryStats,
411
- generateDuration: summaryData.generateDuration,
412
- handle: summaryData.handle,
413
- uploadDuration: summaryData.uploadDuration,
414
- };
415
-
416
- case "submit": return {
417
- ...initialProps,
418
- ...summaryData.summaryStats,
419
- generateDuration: summaryData.generateDuration,
420
- handle: summaryData.handle,
421
- uploadDuration: summaryData.uploadDuration,
422
- clientSequenceNumber: summaryData.clientSequenceNumber,
423
- hasMissingOpData: this.heuristicData.hasMissingOpData,
424
- opsSizesSinceLastSummary: this.heuristicData.totalOpsSize,
425
- nonRuntimeOpsSinceLastSummary: this.heuristicData.numNonRuntimeOps,
426
- };
427
-
428
- default: assert(true, 0x397 /* Unexpected summary stage */);
429
- }
430
-
431
- return initialProps;
432
- }
433
-
434
- private summarizeTimerHandler(time: number, count: number) {
435
- this.logger.sendPerformanceEvent({
436
- eventName: "SummarizeTimeout",
437
- timeoutTime: time,
438
- timeoutCount: count,
439
- });
440
- if (count < maxSummarizeTimeoutCount) {
441
- // Double and start a new timer
442
- const nextTime = time * 2;
443
- this.summarizeTimer.start(nextTime, () => this.summarizeTimerHandler(nextTime, count + 1));
444
- }
445
- }
446
-
447
- public dispose() {
448
- this.summarizeTimer.clear();
449
- }
450
- }