@fluidframework/container-runtime 2.0.0-dev-rc.2.0.0.245554 → 2.0.0-dev-rc.3.0.0.250606

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 (459) hide show
  1. package/api-report/container-runtime.api.md +81 -27
  2. package/dist/batchTracker.d.ts +1 -1
  3. package/dist/batchTracker.d.ts.map +1 -1
  4. package/dist/batchTracker.js +2 -2
  5. package/dist/batchTracker.js.map +1 -1
  6. package/dist/blobManager.d.ts +3 -3
  7. package/dist/blobManager.d.ts.map +1 -1
  8. package/dist/blobManager.js +3 -3
  9. package/dist/blobManager.js.map +1 -1
  10. package/dist/channelCollection.d.ts +6 -5
  11. package/dist/channelCollection.d.ts.map +1 -1
  12. package/dist/channelCollection.js +57 -19
  13. package/dist/channelCollection.js.map +1 -1
  14. package/dist/connectionTelemetry.d.ts +2 -2
  15. package/dist/connectionTelemetry.d.ts.map +1 -1
  16. package/dist/connectionTelemetry.js +3 -3
  17. package/dist/connectionTelemetry.js.map +1 -1
  18. package/dist/container-runtime-alpha.d.ts +205 -12
  19. package/dist/container-runtime-beta.d.ts +16 -3
  20. package/dist/container-runtime-public.d.ts +16 -3
  21. package/dist/container-runtime-untrimmed.d.ts +207 -26
  22. package/dist/containerHandleContext.d.ts.map +1 -1
  23. package/dist/containerHandleContext.js.map +1 -1
  24. package/dist/containerRuntime.d.ts +32 -26
  25. package/dist/containerRuntime.d.ts.map +1 -1
  26. package/dist/containerRuntime.js +235 -133
  27. package/dist/containerRuntime.js.map +1 -1
  28. package/dist/dataStore.d.ts +1 -1
  29. package/dist/dataStore.d.ts.map +1 -1
  30. package/dist/dataStore.js +2 -2
  31. package/dist/dataStore.js.map +1 -1
  32. package/dist/dataStoreContext.d.ts +4 -4
  33. package/dist/dataStoreContext.d.ts.map +1 -1
  34. package/dist/dataStoreContext.js +18 -18
  35. package/dist/dataStoreContext.js.map +1 -1
  36. package/dist/dataStoreContexts.d.ts.map +1 -1
  37. package/dist/dataStoreContexts.js.map +1 -1
  38. package/dist/dataStoreRegistry.d.ts +4 -0
  39. package/dist/dataStoreRegistry.d.ts.map +1 -1
  40. package/dist/dataStoreRegistry.js +2 -2
  41. package/dist/dataStoreRegistry.js.map +1 -1
  42. package/dist/deltaScheduler.d.ts +1 -1
  43. package/dist/deltaScheduler.d.ts.map +1 -1
  44. package/dist/deltaScheduler.js +1 -1
  45. package/dist/deltaScheduler.js.map +1 -1
  46. package/dist/gc/garbageCollection.d.ts +1 -1
  47. package/dist/gc/garbageCollection.d.ts.map +1 -1
  48. package/dist/gc/garbageCollection.js +1 -1
  49. package/dist/gc/garbageCollection.js.map +1 -1
  50. package/dist/gc/gcConfigs.d.ts +1 -1
  51. package/dist/gc/gcConfigs.d.ts.map +1 -1
  52. package/dist/gc/gcConfigs.js.map +1 -1
  53. package/dist/gc/gcDefinitions.d.ts +1 -1
  54. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  55. package/dist/gc/gcDefinitions.js.map +1 -1
  56. package/dist/gc/gcHelpers.d.ts.map +1 -1
  57. package/dist/gc/gcHelpers.js.map +1 -1
  58. package/dist/gc/gcSummaryStateTracker.d.ts +1 -1
  59. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  60. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  61. package/dist/gc/gcTelemetry.d.ts +1 -1
  62. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  63. package/dist/gc/gcTelemetry.js.map +1 -1
  64. package/dist/index.d.ts +2 -2
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +4 -2
  67. package/dist/index.js.map +1 -1
  68. package/dist/messageTypes.d.ts +11 -5
  69. package/dist/messageTypes.d.ts.map +1 -1
  70. package/dist/messageTypes.js +4 -0
  71. package/dist/messageTypes.js.map +1 -1
  72. package/dist/opLifecycle/definitions.d.ts +1 -19
  73. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  74. package/dist/opLifecycle/definitions.js.map +1 -1
  75. package/dist/opLifecycle/index.d.ts +3 -3
  76. package/dist/opLifecycle/index.d.ts.map +1 -1
  77. package/dist/opLifecycle/index.js +3 -1
  78. package/dist/opLifecycle/index.js.map +1 -1
  79. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  80. package/dist/opLifecycle/opCompressor.js +2 -3
  81. package/dist/opLifecycle/opCompressor.js.map +1 -1
  82. package/dist/opLifecycle/opDecompressor.d.ts +15 -4
  83. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  84. package/dist/opLifecycle/opDecompressor.js +60 -61
  85. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  86. package/dist/opLifecycle/opGroupingManager.d.ts +2 -1
  87. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  88. package/dist/opLifecycle/opGroupingManager.js +9 -11
  89. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  90. package/dist/opLifecycle/opSplitter.d.ts +11 -3
  91. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  92. package/dist/opLifecycle/opSplitter.js +48 -38
  93. package/dist/opLifecycle/opSplitter.js.map +1 -1
  94. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  95. package/dist/opLifecycle/outbox.js +18 -17
  96. package/dist/opLifecycle/outbox.js.map +1 -1
  97. package/dist/opLifecycle/remoteMessageProcessor.d.ts +8 -0
  98. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  99. package/dist/opLifecycle/remoteMessageProcessor.js +36 -32
  100. package/dist/opLifecycle/remoteMessageProcessor.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 +1 -1
  105. package/dist/pendingStateManager.d.ts.map +1 -1
  106. package/dist/pendingStateManager.js.map +1 -1
  107. package/dist/scheduleManager.d.ts +1 -1
  108. package/dist/scheduleManager.d.ts.map +1 -1
  109. package/dist/scheduleManager.js +6 -2
  110. package/dist/scheduleManager.js.map +1 -1
  111. package/dist/summary/documentSchema.d.ts +178 -0
  112. package/dist/summary/documentSchema.d.ts.map +1 -0
  113. package/dist/summary/documentSchema.js +345 -0
  114. package/dist/summary/documentSchema.js.map +1 -0
  115. package/dist/summary/index.d.ts +2 -1
  116. package/dist/summary/index.d.ts.map +1 -1
  117. package/dist/summary/index.js +4 -1
  118. package/dist/summary/index.js.map +1 -1
  119. package/dist/summary/orderedClientElection.d.ts +2 -2
  120. package/dist/summary/orderedClientElection.d.ts.map +1 -1
  121. package/dist/summary/orderedClientElection.js +7 -2
  122. package/dist/summary/orderedClientElection.js.map +1 -1
  123. package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -1
  124. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  125. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  126. package/dist/summary/runningSummarizer.d.ts +2 -2
  127. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  128. package/dist/summary/runningSummarizer.js +2 -2
  129. package/dist/summary/runningSummarizer.js.map +1 -1
  130. package/dist/summary/summarizer.d.ts +2 -2
  131. package/dist/summary/summarizer.d.ts.map +1 -1
  132. package/dist/summary/summarizer.js +2 -2
  133. package/dist/summary/summarizer.js.map +1 -1
  134. package/dist/summary/summarizerClientElection.d.ts +2 -2
  135. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  136. package/dist/summary/summarizerClientElection.js.map +1 -1
  137. package/dist/summary/summarizerHeuristics.d.ts +1 -1
  138. package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
  139. package/dist/summary/summarizerHeuristics.js.map +1 -1
  140. package/dist/summary/summarizerNode/summarizerNode.d.ts +2 -2
  141. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  142. package/dist/summary/summarizerNode/summarizerNode.js +3 -3
  143. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  144. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +1 -1
  145. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  146. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  147. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +1 -1
  148. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  149. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +1 -1
  150. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  151. package/dist/summary/summarizerTypes.d.ts +3 -3
  152. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  153. package/dist/summary/summarizerTypes.js.map +1 -1
  154. package/dist/summary/summaryCollection.d.ts +2 -2
  155. package/dist/summary/summaryCollection.d.ts.map +1 -1
  156. package/dist/summary/summaryCollection.js +1 -1
  157. package/dist/summary/summaryCollection.js.map +1 -1
  158. package/dist/summary/summaryFormat.d.ts +5 -16
  159. package/dist/summary/summaryFormat.d.ts.map +1 -1
  160. package/dist/summary/summaryFormat.js.map +1 -1
  161. package/dist/summary/summaryGenerator.d.ts +2 -2
  162. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  163. package/dist/summary/summaryGenerator.js +2 -2
  164. package/dist/summary/summaryGenerator.js.map +1 -1
  165. package/dist/summary/summaryManager.d.ts +1 -1
  166. package/dist/summary/summaryManager.d.ts.map +1 -1
  167. package/dist/summary/summaryManager.js +2 -2
  168. package/dist/summary/summaryManager.js.map +1 -1
  169. package/lib/batchTracker.d.ts +1 -1
  170. package/lib/batchTracker.d.ts.map +1 -1
  171. package/lib/batchTracker.js +2 -2
  172. package/lib/batchTracker.js.map +1 -1
  173. package/lib/blobManager.d.ts +3 -3
  174. package/lib/blobManager.d.ts.map +1 -1
  175. package/lib/blobManager.js +5 -5
  176. package/lib/blobManager.js.map +1 -1
  177. package/lib/channelCollection.d.ts +6 -5
  178. package/lib/channelCollection.d.ts.map +1 -1
  179. package/lib/channelCollection.js +59 -21
  180. package/lib/channelCollection.js.map +1 -1
  181. package/lib/connectionTelemetry.d.ts +2 -2
  182. package/lib/connectionTelemetry.d.ts.map +1 -1
  183. package/lib/connectionTelemetry.js +3 -3
  184. package/lib/connectionTelemetry.js.map +1 -1
  185. package/lib/container-runtime-alpha.d.ts +205 -12
  186. package/lib/container-runtime-beta.d.ts +16 -3
  187. package/lib/container-runtime-public.d.ts +16 -3
  188. package/lib/container-runtime-untrimmed.d.ts +207 -26
  189. package/lib/containerHandleContext.d.ts.map +1 -1
  190. package/lib/containerHandleContext.js.map +1 -1
  191. package/lib/containerRuntime.d.ts +32 -26
  192. package/lib/containerRuntime.d.ts.map +1 -1
  193. package/lib/containerRuntime.js +197 -95
  194. package/lib/containerRuntime.js.map +1 -1
  195. package/lib/dataStore.d.ts +1 -1
  196. package/lib/dataStore.d.ts.map +1 -1
  197. package/lib/dataStore.js +2 -2
  198. package/lib/dataStore.js.map +1 -1
  199. package/lib/dataStoreContext.d.ts +4 -4
  200. package/lib/dataStoreContext.d.ts.map +1 -1
  201. package/lib/dataStoreContext.js +3 -3
  202. package/lib/dataStoreContext.js.map +1 -1
  203. package/lib/dataStoreContexts.d.ts.map +1 -1
  204. package/lib/dataStoreContexts.js.map +1 -1
  205. package/lib/dataStoreRegistry.d.ts +4 -0
  206. package/lib/dataStoreRegistry.d.ts.map +1 -1
  207. package/lib/dataStoreRegistry.js.map +1 -1
  208. package/lib/deltaScheduler.d.ts +1 -1
  209. package/lib/deltaScheduler.d.ts.map +1 -1
  210. package/lib/deltaScheduler.js +1 -1
  211. package/lib/deltaScheduler.js.map +1 -1
  212. package/lib/gc/garbageCollection.d.ts +1 -1
  213. package/lib/gc/garbageCollection.d.ts.map +1 -1
  214. package/lib/gc/garbageCollection.js +3 -3
  215. package/lib/gc/garbageCollection.js.map +1 -1
  216. package/lib/gc/gcConfigs.d.ts +1 -1
  217. package/lib/gc/gcConfigs.d.ts.map +1 -1
  218. package/lib/gc/gcConfigs.js +1 -1
  219. package/lib/gc/gcConfigs.js.map +1 -1
  220. package/lib/gc/gcDefinitions.d.ts +1 -1
  221. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  222. package/lib/gc/gcDefinitions.js.map +1 -1
  223. package/lib/gc/gcHelpers.d.ts.map +1 -1
  224. package/lib/gc/gcHelpers.js.map +1 -1
  225. package/lib/gc/gcSummaryStateTracker.d.ts +1 -1
  226. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
  227. package/lib/gc/gcSummaryStateTracker.js +1 -1
  228. package/lib/gc/gcSummaryStateTracker.js.map +1 -1
  229. package/lib/gc/gcTelemetry.d.ts +1 -1
  230. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  231. package/lib/gc/gcTelemetry.js +1 -1
  232. package/lib/gc/gcTelemetry.js.map +1 -1
  233. package/lib/index.d.ts +2 -2
  234. package/lib/index.d.ts.map +1 -1
  235. package/lib/index.js +2 -2
  236. package/lib/index.js.map +1 -1
  237. package/lib/messageTypes.d.ts +11 -5
  238. package/lib/messageTypes.d.ts.map +1 -1
  239. package/lib/messageTypes.js +4 -0
  240. package/lib/messageTypes.js.map +1 -1
  241. package/lib/opLifecycle/definitions.d.ts +1 -19
  242. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  243. package/lib/opLifecycle/definitions.js.map +1 -1
  244. package/lib/opLifecycle/index.d.ts +3 -3
  245. package/lib/opLifecycle/index.d.ts.map +1 -1
  246. package/lib/opLifecycle/index.js +2 -2
  247. package/lib/opLifecycle/index.js.map +1 -1
  248. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  249. package/lib/opLifecycle/opCompressor.js +2 -3
  250. package/lib/opLifecycle/opCompressor.js.map +1 -1
  251. package/lib/opLifecycle/opDecompressor.d.ts +15 -4
  252. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  253. package/lib/opLifecycle/opDecompressor.js +60 -61
  254. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  255. package/lib/opLifecycle/opGroupingManager.d.ts +2 -1
  256. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
  257. package/lib/opLifecycle/opGroupingManager.js +7 -10
  258. package/lib/opLifecycle/opGroupingManager.js.map +1 -1
  259. package/lib/opLifecycle/opSplitter.d.ts +11 -3
  260. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  261. package/lib/opLifecycle/opSplitter.js +46 -37
  262. package/lib/opLifecycle/opSplitter.js.map +1 -1
  263. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  264. package/lib/opLifecycle/outbox.js +18 -17
  265. package/lib/opLifecycle/outbox.js.map +1 -1
  266. package/lib/opLifecycle/remoteMessageProcessor.d.ts +8 -0
  267. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  268. package/lib/opLifecycle/remoteMessageProcessor.js +36 -32
  269. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  270. package/lib/packageVersion.d.ts +1 -1
  271. package/lib/packageVersion.js +1 -1
  272. package/lib/packageVersion.js.map +1 -1
  273. package/lib/pendingStateManager.d.ts +1 -1
  274. package/lib/pendingStateManager.d.ts.map +1 -1
  275. package/lib/pendingStateManager.js.map +1 -1
  276. package/lib/scheduleManager.d.ts +1 -1
  277. package/lib/scheduleManager.d.ts.map +1 -1
  278. package/lib/scheduleManager.js +6 -2
  279. package/lib/scheduleManager.js.map +1 -1
  280. package/lib/summary/documentSchema.d.ts +178 -0
  281. package/lib/summary/documentSchema.d.ts.map +1 -0
  282. package/lib/summary/documentSchema.js +341 -0
  283. package/lib/summary/documentSchema.js.map +1 -0
  284. package/lib/summary/index.d.ts +2 -1
  285. package/lib/summary/index.d.ts.map +1 -1
  286. package/lib/summary/index.js +1 -0
  287. package/lib/summary/index.js.map +1 -1
  288. package/lib/summary/orderedClientElection.d.ts +2 -2
  289. package/lib/summary/orderedClientElection.d.ts.map +1 -1
  290. package/lib/summary/orderedClientElection.js +7 -2
  291. package/lib/summary/orderedClientElection.js.map +1 -1
  292. package/lib/summary/runWhileConnectedCoordinator.d.ts +1 -1
  293. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  294. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
  295. package/lib/summary/runningSummarizer.d.ts +2 -2
  296. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  297. package/lib/summary/runningSummarizer.js +3 -3
  298. package/lib/summary/runningSummarizer.js.map +1 -1
  299. package/lib/summary/summarizer.d.ts +2 -2
  300. package/lib/summary/summarizer.d.ts.map +1 -1
  301. package/lib/summary/summarizer.js +3 -3
  302. package/lib/summary/summarizer.js.map +1 -1
  303. package/lib/summary/summarizerClientElection.d.ts +2 -2
  304. package/lib/summary/summarizerClientElection.d.ts.map +1 -1
  305. package/lib/summary/summarizerClientElection.js.map +1 -1
  306. package/lib/summary/summarizerHeuristics.d.ts +1 -1
  307. package/lib/summary/summarizerHeuristics.d.ts.map +1 -1
  308. package/lib/summary/summarizerHeuristics.js.map +1 -1
  309. package/lib/summary/summarizerNode/summarizerNode.d.ts +2 -2
  310. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  311. package/lib/summary/summarizerNode/summarizerNode.js +4 -4
  312. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  313. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +1 -1
  314. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  315. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  316. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +1 -1
  317. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  318. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +1 -1
  319. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  320. package/lib/summary/summarizerTypes.d.ts +3 -3
  321. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  322. package/lib/summary/summarizerTypes.js.map +1 -1
  323. package/lib/summary/summaryCollection.d.ts +2 -2
  324. package/lib/summary/summaryCollection.d.ts.map +1 -1
  325. package/lib/summary/summaryCollection.js +1 -1
  326. package/lib/summary/summaryCollection.js.map +1 -1
  327. package/lib/summary/summaryFormat.d.ts +5 -16
  328. package/lib/summary/summaryFormat.d.ts.map +1 -1
  329. package/lib/summary/summaryFormat.js +1 -1
  330. package/lib/summary/summaryFormat.js.map +1 -1
  331. package/lib/summary/summaryGenerator.d.ts +2 -2
  332. package/lib/summary/summaryGenerator.d.ts.map +1 -1
  333. package/lib/summary/summaryGenerator.js +3 -3
  334. package/lib/summary/summaryGenerator.js.map +1 -1
  335. package/lib/summary/summaryManager.d.ts +1 -1
  336. package/lib/summary/summaryManager.d.ts.map +1 -1
  337. package/lib/summary/summaryManager.js +2 -2
  338. package/lib/summary/summaryManager.js.map +1 -1
  339. package/lib/test/blobManager.spec.js +3 -3
  340. package/lib/test/blobManager.spec.js.map +1 -1
  341. package/lib/test/containerRuntime.spec.js +6 -4
  342. package/lib/test/containerRuntime.spec.js.map +1 -1
  343. package/lib/test/dataStoreContext.spec.js +4 -4
  344. package/lib/test/dataStoreContext.spec.js.map +1 -1
  345. package/lib/test/dataStoreCreation.spec.js +1 -1
  346. package/lib/test/dataStoreCreation.spec.js.map +1 -1
  347. package/lib/test/dataStoreRegistry.spec.js.map +1 -1
  348. package/lib/test/documentSchema.spec.js +282 -0
  349. package/lib/test/documentSchema.spec.js.map +1 -0
  350. package/lib/test/fuzz/fuzzUtils.js +11 -7
  351. package/lib/test/fuzz/fuzzUtils.js.map +1 -1
  352. package/lib/test/fuzz/summarizer.fuzz.spec.js +9 -7
  353. package/lib/test/fuzz/summarizer.fuzz.spec.js.map +1 -1
  354. package/lib/test/fuzz/summarizerFuzzMocks.js +43 -25
  355. package/lib/test/fuzz/summarizerFuzzMocks.js.map +1 -1
  356. package/lib/test/fuzz/summarizerFuzzSuite.js +7 -4
  357. package/lib/test/fuzz/summarizerFuzzSuite.js.map +1 -1
  358. package/lib/test/gc/garbageCollection.spec.js +5 -5
  359. package/lib/test/gc/garbageCollection.spec.js.map +1 -1
  360. package/lib/test/gc/gcConfigs.spec.js +2 -2
  361. package/lib/test/gc/gcConfigs.spec.js.map +1 -1
  362. package/lib/test/gc/gcHelpers.spec.js.map +1 -1
  363. package/lib/test/gc/gcStats.spec.js +2 -2
  364. package/lib/test/gc/gcStats.spec.js.map +1 -1
  365. package/lib/test/gc/gcSummaryStateTracker.spec.js +1 -1
  366. package/lib/test/gc/gcSummaryStateTracker.spec.js.map +1 -1
  367. package/lib/test/gc/gcTelemetry.spec.js +3 -3
  368. package/lib/test/gc/gcTelemetry.spec.js.map +1 -1
  369. package/lib/test/gc/gcUnreferencedStateTracker.spec.js +1 -1
  370. package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +1 -1
  371. package/lib/test/getPendingBlobs.spec.js +1 -1
  372. package/lib/test/getPendingBlobs.spec.js.map +1 -1
  373. package/lib/test/hardwareStats.spec.js +1 -1
  374. package/lib/test/hardwareStats.spec.js.map +1 -1
  375. package/lib/test/opLifecycle/OpGroupingManager.spec.js +95 -118
  376. package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +1 -1
  377. package/lib/test/opLifecycle/batchManager.spec.js +1 -1
  378. package/lib/test/opLifecycle/batchManager.spec.js.map +1 -1
  379. package/lib/test/opLifecycle/opCompressor.spec.js +0 -1
  380. package/lib/test/opLifecycle/opCompressor.spec.js.map +1 -1
  381. package/lib/test/opLifecycle/opDecompressor.spec.js +60 -55
  382. package/lib/test/opLifecycle/opDecompressor.spec.js.map +1 -1
  383. package/lib/test/opLifecycle/opSplitter.spec.js +56 -41
  384. package/lib/test/opLifecycle/opSplitter.spec.js.map +1 -1
  385. package/lib/test/opLifecycle/outbox.spec.js +118 -10
  386. package/lib/test/opLifecycle/outbox.spec.js.map +1 -1
  387. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +115 -91
  388. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +1 -1
  389. package/lib/test/pendingStateManager.spec.js +1 -1
  390. package/lib/test/pendingStateManager.spec.js.map +1 -1
  391. package/lib/test/scheduleManager.spec.js +1 -1
  392. package/lib/test/scheduleManager.spec.js.map +1 -1
  393. package/lib/test/summarizerNode.spec.js +1 -1
  394. package/lib/test/summarizerNode.spec.js.map +1 -1
  395. package/lib/test/summarizerNodeWithGc.spec.js +1 -1
  396. package/lib/test/summarizerNodeWithGc.spec.js.map +1 -1
  397. package/lib/test/summary/runningSummarizer.spec.js +4 -4
  398. package/lib/test/summary/runningSummarizer.spec.js.map +1 -1
  399. package/lib/test/summary/summarizer.spec.js.map +1 -1
  400. package/lib/test/summary/summarizerClientElection.spec.js +2 -2
  401. package/lib/test/summary/summarizerClientElection.spec.js.map +1 -1
  402. package/lib/test/summary/summarizerHeuristics.spec.js +1 -1
  403. package/lib/test/summary/summarizerHeuristics.spec.js.map +1 -1
  404. package/lib/test/summary/summaryCollection.spec.js +1 -1
  405. package/lib/test/summary/summaryCollection.spec.js.map +1 -1
  406. package/lib/test/summary/summaryManager.spec.js +3 -3
  407. package/lib/test/summary/summaryManager.spec.js.map +1 -1
  408. package/lib/test/throttler.spec.js +1 -1
  409. package/lib/test/throttler.spec.js.map +1 -1
  410. package/lib/test/types/validateContainerRuntimePrevious.generated.js +6 -4
  411. package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +1 -1
  412. package/package.json +35 -21
  413. package/src/batchTracker.ts +3 -3
  414. package/src/blobManager.ts +15 -15
  415. package/src/channelCollection.ts +90 -44
  416. package/src/connectionTelemetry.ts +10 -10
  417. package/src/containerHandleContext.ts +1 -1
  418. package/src/containerRuntime.ts +375 -213
  419. package/src/dataStore.ts +2 -2
  420. package/src/dataStoreContext.ts +19 -19
  421. package/src/dataStoreContexts.ts +2 -2
  422. package/src/dataStoreRegistry.ts +2 -1
  423. package/src/deltaScheduler.ts +1 -1
  424. package/src/gc/garbageCollection.ts +12 -12
  425. package/src/gc/gcConfigs.ts +11 -11
  426. package/src/gc/gcDefinitions.ts +2 -2
  427. package/src/gc/gcHelpers.ts +2 -2
  428. package/src/gc/gcSummaryStateTracker.ts +4 -4
  429. package/src/gc/gcTelemetry.ts +6 -6
  430. package/src/index.ts +8 -1
  431. package/src/messageTypes.ts +18 -5
  432. package/src/opLifecycle/README.md +89 -0
  433. package/src/opLifecycle/definitions.ts +1 -20
  434. package/src/opLifecycle/index.ts +3 -9
  435. package/src/opLifecycle/opCompressor.ts +4 -5
  436. package/src/opLifecycle/opDecompressor.ts +83 -100
  437. package/src/opLifecycle/opGroupingManager.ts +9 -12
  438. package/src/opLifecycle/opSplitter.ts +73 -47
  439. package/src/opLifecycle/outbox.ts +26 -37
  440. package/src/opLifecycle/remoteMessageProcessor.ts +41 -55
  441. package/src/packageVersion.ts +1 -1
  442. package/src/pendingStateManager.ts +2 -2
  443. package/src/scheduleManager.ts +8 -7
  444. package/src/summary/documentSchema.ts +553 -0
  445. package/src/summary/index.ts +10 -1
  446. package/src/summary/orderedClientElection.ts +7 -5
  447. package/src/summary/runWhileConnectedCoordinator.ts +1 -1
  448. package/src/summary/runningSummarizer.ts +19 -19
  449. package/src/summary/summarizer.ts +14 -14
  450. package/src/summary/summarizerClientElection.ts +2 -2
  451. package/src/summary/summarizerHeuristics.ts +2 -2
  452. package/src/summary/summarizerNode/summarizerNode.ts +15 -15
  453. package/src/summary/summarizerNode/summarizerNodeUtils.ts +1 -1
  454. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +4 -4
  455. package/src/summary/summarizerTypes.ts +3 -3
  456. package/src/summary/summaryCollection.ts +3 -3
  457. package/src/summary/summaryFormat.ts +8 -19
  458. package/src/summary/summaryGenerator.ts +10 -10
  459. package/src/summary/summaryManager.ts +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"summaryManager.spec.js","sourceRoot":"","sources":["../../../src/test/summary/summaryManager.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\nimport sinon from \"sinon\";\nimport { Deferred } from \"@fluidframework/core-utils\";\nimport { TypedEventEmitter } from \"@fluid-internal/client-utils\";\nimport { IFluidHandle, IFluidLoadable } from \"@fluidframework/core-interfaces\";\nimport {\n\tIDocumentMessage,\n\tISequencedDocumentMessage,\n\tMessageType,\n} from \"@fluidframework/protocol-definitions\";\nimport { MockLogger } from \"@fluidframework/telemetry-utils\";\nimport { MockDeltaManager } from \"@fluidframework/test-runtime-utils\";\nimport { IDeltaManager } from \"@fluidframework/container-definitions\";\nimport { DefaultSummaryConfiguration } from \"../../containerRuntime.js\";\nimport {\n\tIConnectedEvents,\n\tIConnectedState,\n\tISummaryManagerConfig,\n\tSummaryManager,\n\tSummaryManagerState,\n\tSummarizer,\n\tISummarizer,\n\tISummarizerEvents,\n\tSummarizerStopReason,\n\tISummarizerClientElection,\n\tISummarizerClientElectionEvents,\n\tRunningSummarizer,\n\tSummarizeHeuristicData,\n\tSummaryCollection,\n\tISummaryOpMessage,\n\tneverCancelledSummaryToken,\n\tISummarizerRuntime,\n} from \"../../summary/index.js\";\n\nclass MockRuntime {\n\tconstructor(\n\t\tpublic readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,\n\t) {}\n\tpublic on(\n\t\t_event: \"op\",\n\t\t_listener: (op: ISequencedDocumentMessage, runtimeMessage?: boolean) => void,\n\t) {\n\t\treturn this;\n\t}\n\n\tpublic off(\n\t\t_event: \"op\",\n\t\t_listener: (op: ISequencedDocumentMessage, runtimeMessage?: boolean) => void,\n\t) {\n\t\treturn this;\n\t}\n}\n\ndescribe(\"Summary Manager\", () => {\n\tlet clock: sinon.SinonFakeTimers;\n\tbefore(() => {\n\t\tclock = sinon.useFakeTimers();\n\t});\n\tafter(() => clock.restore());\n\tconst flushPromises = async () => new Promise((resolve) => process.nextTick(resolve));\n\tconst thisClientId = \"this\";\n\tconst mockLogger = new MockLogger();\n\tconst mockDeltaManager = new MockDeltaManager();\n\tconst mockRuntime = new MockRuntime(mockDeltaManager);\n\tlet summaryManager: SummaryManager;\n\tlet runningSummarizer: RunningSummarizer;\n\t// let runCount: number;\n\tconst summarizerClientId = \"test\";\n\n\t// Fake objects\n\tconst summaryCollection = new SummaryCollection(\n\t\tmockDeltaManager,\n\t\tmockLogger.toTelemetryLogger(),\n\t);\n\tconst throttler = {\n\t\tdelayMs: 0,\n\t\tnumAttempts: 0,\n\t\tgetDelay() {\n\t\t\treturn this.delayMs;\n\t\t},\n\t\tmaxDelayMs: 0,\n\t\tdelayWindowMs: 0,\n\t\tdelayFn: () => 0,\n\t};\n\n\tconst summaryOp: ISummaryOpMessage = {\n\t\tclientId: \"clientId\",\n\t\tclientSequenceNumber: 5,\n\t\tminimumSequenceNumber: 5,\n\t\treferenceSequenceNumber: 5,\n\t\tsequenceNumber: 6,\n\t\ttimestamp: 6,\n\t\ttype: MessageType.Summarize,\n\t\tcontents: {\n\t\t\thandle: \"OpHandle\",\n\t\t\thead: \"head\",\n\t\t\tmessage: \"message\",\n\t\t\tparents: [\"parents\"],\n\t\t},\n\t};\n\n\tclass TestConnectedState\n\t\textends TypedEventEmitter<IConnectedEvents>\n\t\timplements IConnectedState\n\t{\n\t\tpublic connected = false;\n\t\tpublic clientId: string | undefined;\n\n\t\tpublic connect() {\n\t\t\tthis.connected = true;\n\t\t\tthis.clientId = thisClientId;\n\t\t\tthis.emit(\"connected\", this.clientId);\n\t\t}\n\n\t\tpublic disconnect() {\n\t\t\tthis.connected = false;\n\t\t\tthis.emit(\"disconnected\");\n\t\t}\n\t}\n\n\tclass TestSummarizer extends TypedEventEmitter<ISummarizerEvents> implements ISummarizer {\n\t\tprivate notImplemented(): never {\n\t\t\tthrow Error(\"not implemented\");\n\t\t}\n\t\tpublic onBehalfOf: string | undefined;\n\t\tpublic state: \"notStarted\" | \"running\" | \"stopped\" = \"notStarted\";\n\t\tpublic readonly stopDeferred = new Deferred<string | undefined>();\n\t\tpublic readonly runDeferred = new Deferred<void>();\n\n\t\tconstructor() {\n\t\t\tsuper();\n\t\t}\n\t\tpublic async setSummarizer(): Promise<Summarizer> {\n\t\t\tthis.notImplemented();\n\t\t}\n\t\tpublic get cancelled() {\n\t\t\t// Approximation, as ideally it should become cancelled immediately after stop() call\n\t\t\treturn this.state !== \"running\";\n\t\t}\n\t\tpublic close() {}\n\t\tpublic stop(reason?: string): void {\n\t\t\tthis.stopDeferred.resolve(reason);\n\t\t}\n\t\tpublic async run(onBehalfOf: string): Promise<SummarizerStopReason> {\n\t\t\tthis.onBehalfOf = onBehalfOf;\n\t\t\tthis.state = \"running\";\n\t\t\trunningSummarizer = await RunningSummarizer.start(\n\t\t\t\tmockLogger,\n\t\t\t\tsummaryCollection.createWatcher(summarizerClientId),\n\t\t\t\t{\n\t\t\t\t\t...DefaultSummaryConfiguration,\n\t\t\t\t\t...{\n\t\t\t\t\t\tinitialSummarizerDelayMs: 0,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// submitSummaryCallback\n\t\t\t\tasync (options) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstage: \"base\",\n\t\t\t\t\t\tminimumSequenceNumber: 0,\n\t\t\t\t\t\treferenceSequenceNumber: 0,\n\t\t\t\t\t\terror: undefined,\n\t\t\t\t\t} as const;\n\t\t\t\t},\n\t\t\t\tasync (options) => {},\n\t\t\t\tnew SummarizeHeuristicData(0, { refSequenceNumber: 0, summaryTime: Date.now() }),\n\t\t\t\tsummaryCollection,\n\t\t\t\tneverCancelledSummaryToken,\n\t\t\t\t// stopSummarizerCallback\n\t\t\t\t(reason) => {},\n\t\t\t\tmockRuntime as any as ISummarizerRuntime,\n\t\t\t);\n\t\t\tawait Promise.all([this.stopDeferred.promise, this.runDeferred.promise]);\n\t\t\tawait runningSummarizer.waitStop(true);\n\t\t\tthis.state = \"stopped\";\n\t\t\treturn \"summarizerClientDisconnected\";\n\t\t}\n\n\t\tpublic readonly summarizeOnDemand: ISummarizer[\"summarizeOnDemand\"] = () =>\n\t\t\tthis.notImplemented();\n\t\tpublic readonly enqueueSummarize: ISummarizer[\"enqueueSummarize\"] = () =>\n\t\t\tthis.notImplemented();\n\t\tpublic get IFluidLoadable(): IFluidLoadable {\n\t\t\treturn this.notImplemented();\n\t\t}\n\t\tpublic get handle(): IFluidHandle {\n\t\t\treturn this.notImplemented();\n\t\t}\n\t}\n\n\tclass TestSummarizerClientElection\n\t\textends TypedEventEmitter<ISummarizerClientElectionEvents>\n\t\timplements ISummarizerClientElection\n\t{\n\t\tpublic electedClientId: string | undefined;\n\t\tpublic get electedParentId() {\n\t\t\treturn this.electedClientId;\n\t\t}\n\n\t\tpublic electClient(clientId: string | undefined) {\n\t\t\tthis.electedClientId = clientId;\n\t\t\tthis.emit(\"electedSummarizerChanged\");\n\t\t}\n\t}\n\n\tlet clientElection: TestSummarizerClientElection;\n\tlet connectedState: TestConnectedState;\n\tlet summarizer: TestSummarizer;\n\tlet requestCalls = 0;\n\tlet requestDeferred = new Deferred<void>();\n\n\t/**\n\t * Mocks the request Summarizer function by incrementing a call counter.\n\t * The requestDeferred object must be resolved outside of this function\n\t * by calling completeSummarizerRequest() before this function will complete.\n\t * This is used to simulate delaying the request call for testing the\n\t * SummaryManager state machine timings.\n\t */\n\tconst requestSummarizer = async (): Promise<ISummarizer> => {\n\t\tsummarizer = new TestSummarizer();\n\t\trequestCalls++;\n\t\trequestDeferred = new Deferred();\n\t\tawait requestDeferred.promise;\n\t\treturn summarizer;\n\t};\n\n\t/** Completes the pending request Summarizer call. */\n\tconst completeSummarizerRequest = () => requestDeferred.resolve();\n\n\tfunction createSummaryManager({\n\t\tconnected = false,\n\t\t...config\n\t}: Readonly<Partial<{ connected?: boolean } & ISummaryManagerConfig>> = {}) {\n\t\tconnectedState = new TestConnectedState();\n\t\tif (connected) {\n\t\t\tconnectedState.connect();\n\t\t}\n\t\tclientElection = new TestSummarizerClientElection();\n\t\tsummaryManager = new SummaryManager(\n\t\t\tclientElection,\n\t\t\tconnectedState,\n\t\t\tsummaryCollection,\n\t\t\tmockLogger,\n\t\t\trequestSummarizer,\n\t\t\tthrottler,\n\t\t\tconfig,\n\t\t);\n\t\tsummaryManager.start();\n\t}\n\n\tfunction assertState(expectedState: SummaryManagerState, message: string) {\n\t\tassert.strictEqual(summaryManager.currentState, expectedState, message);\n\t}\n\n\tfunction assertRequests(count: number, message?: string) {\n\t\tconst prefix = message ? `${message} - ` : \"\";\n\t\tassert.strictEqual(requestCalls, count, `${prefix}Unexpected request count`);\n\t}\n\n\tafterEach(() => {\n\t\tclientElection.removeAllListeners();\n\t\tsummarizer.removeAllListeners();\n\t\tconnectedState.removeAllListeners();\n\t\tthrottler.delayMs = 0;\n\t\tmockDeltaManager.lastSequenceNumber = 0;\n\t\trequestCalls = 0;\n\t\tclock.reset();\n\t});\n\n\tit(\"Should become summarizer if connected, then elected; stop summarizer after disconnect\", async () => {\n\t\tcreateSummaryManager({ opsToBypassInitialDelay: 0 });\n\t\tassertState(SummaryManagerState.Off, \"should start off\");\n\t\tconnectedState.connect();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Off, \"connected but not yet elected\");\n\t\tclientElection.electClient(\"other\");\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Off, \"connected but other client elected\");\n\t\tclientElection.electClient(thisClientId);\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Running, \"should request summarizer\");\n\t\tassertRequests(1, \"should have requested summarizer\");\n\t\tcompleteSummarizerRequest();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\tconnectedState.disconnect();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Stopping, \"should be stopping after disconnect\");\n\t\tsummarizer.runDeferred.resolve();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Off, \"should be off after summarizer finishes running\");\n\t\tassertRequests(1, \"should not have requested summarizer again\");\n\t});\n\n\tit(\"Should become summarizer if elected, then connected; stop summarizer after unelected\", async () => {\n\t\tcreateSummaryManager({ opsToBypassInitialDelay: 0, initialDelayMs: 0 });\n\t\tassertState(SummaryManagerState.Off, \"should start off\");\n\t\tclientElection.electClient(thisClientId);\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Off, \"elected but not yet connected\");\n\t\tconnectedState.connect();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Running, \"should request summarizer\");\n\t\tassertRequests(1, \"should have requested summarizer\");\n\t\tcompleteSummarizerRequest();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\tclientElection.electClient(\"other\");\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Stopping, \"should be stopping after other client elected\");\n\t\tsummarizer.runDeferred.resolve();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Off, \"should be off after summarizer finishes running\");\n\t\tassertRequests(1, \"should not have requested summarizer again\");\n\t});\n\n\tit(\"Should restart if summarizer closes itself\", async () => {\n\t\tcreateSummaryManager({ opsToBypassInitialDelay: 0 });\n\t\tassertState(SummaryManagerState.Off, \"should start off\");\n\t\tconnectedState.connect();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Off, \"connected but not yet elected\");\n\t\tclientElection.electClient(thisClientId);\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Running, \"should request summarizer\");\n\t\tassertRequests(1, \"should have requested summarizer\");\n\t\tcompleteSummarizerRequest();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\tsummarizer.stop(); // Simulate summarizer stopping itself\n\t\tsummarizer.runDeferred.resolve();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Running, \"should restart itself\");\n\t\tassertRequests(2, \"should have requested a new summarizer\");\n\t\tcompleteSummarizerRequest();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Running, \"should be running new summarizer\");\n\t});\n\n\tdescribe(\"Start Summarizer Delay\", () => {\n\t\tit(\"Should wait for initial delay before first start\", async () => {\n\t\t\tmockDeltaManager.lastSequenceNumber = 999; // 999 < 1000, so do not bypass\n\t\t\tcreateSummaryManager({\n\t\t\t\tinitialDelayMs: 2000,\n\t\t\t\topsToBypassInitialDelay: 1000,\n\t\t\t\tconnected: true,\n\t\t\t});\n\t\t\tclientElection.electClient(thisClientId);\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Starting, \"should enter starting state immediately\");\n\t\t\tclock.tick(1999);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(0, \"should not have requested summarizer yet\");\n\t\t\tclock.tick(1);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(1, \"should request summarizer after initial delay\");\n\t\t\tcompleteSummarizerRequest();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\t});\n\n\t\tit(\"Should bypass initial delay if enough ops have already passed\", async () => {\n\t\t\tmockDeltaManager.lastSequenceNumber = 1000; // seq >= opsToBypass, so bypass\n\t\t\tcreateSummaryManager({\n\t\t\t\tinitialDelayMs: 2000,\n\t\t\t\topsToBypassInitialDelay: 1000,\n\t\t\t\tconnected: true,\n\t\t\t});\n\t\t\tclientElection.electClient(thisClientId);\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"should enter starting state immediately\");\n\t\t\tassertRequests(1, \"should request summarizer immediately, bypassing initial delay\");\n\t\t\tcompleteSummarizerRequest();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\t});\n\n\t\t// This test attempts to validate a case where summarizer client does not wait\n\t\t// initial delay if there are enough unsummarized ops.\n\t\t// The way it was implemented (and tested here) is that it only worked if given\n\t\t// client was selected to be a summarizer in the past, then got disconnected and later\n\t\t// again was elected a summarizer and at that moment we had enough ops to cut short wait.\n\t\t// If we want to cut short such wait, we should do it properly by listening for incoming ops\n\t\t// and cut wait short based on op count when a single op triggers overflow, i.e.\n\t\t// make it work in main scenario, not some corner case that does not matter.\n\t\t// Issue #7273 tracks making appropriate product and test change and re-enable the test.\n\t\tit(\"Should bypass initial delay if enough ops pass later\", async () => {\n\t\t\tmockDeltaManager.lastSequenceNumber = 500;\n\t\t\tcreateSummaryManager({\n\t\t\t\tinitialDelayMs: 2000,\n\t\t\t\topsToBypassInitialDelay: 1000,\n\t\t\t\tconnected: true,\n\t\t\t});\n\t\t\tclientElection.electClient(thisClientId);\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Starting, \"should enter starting state immediately\");\n\t\t\tclock.tick(1999);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(0, \"should not have requested summarizer yet\");\n\t\t\tmockDeltaManager.lastSequenceNumber = 999; // seq < opsToBypass. No bypass.\n\t\t\tmockDeltaManager.emit(\"op\", summaryOp);\n\t\t\tclientElection.electClient(thisClientId); // force trigger refresh\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(0, \"still should not have requested summarizer yet\");\n\t\t\tmockDeltaManager.lastSequenceNumber = 1000; // Bypass now\n\t\t\tmockDeltaManager.emit(\"op\", summaryOp);\n\t\t\tclientElection.electClient(thisClientId); // force trigger refresh\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(1, \"should request summarizer, bypassing initial delay\");\n\t\t\tcompleteSummarizerRequest();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\t});\n\n\t\tit(\"Should bypass initial delay if enough ops pass and summarize if disconnected\", async () => {\n\t\t\tmockDeltaManager.lastSequenceNumber = 1001; // seq > opsToBypass\n\t\t\tcreateSummaryManager({\n\t\t\t\tinitialDelayMs: 0,\n\t\t\t\topsToBypassInitialDelay: 1000,\n\t\t\t\tconnected: true,\n\t\t\t});\n\t\t\tclientElection.electClient(thisClientId);\n\t\t\tconnectedState.disconnect(); // To enforce stopReasonCanRunLastSummary == true.\n\t\t\tawait flushPromises();\n\t\t\tmockDeltaManager.emit(\"op\", summaryOp);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(1, \"should request summarizer and run the last summary.\");\n\t\t\tcompleteSummarizerRequest();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\t});\n\n\t\tit(\"Should create last summary when summarizer created without delay, then disconnected\", async () => {\n\t\t\tthrottler.delayMs = 0;\n\t\t\tcreateSummaryManager({\n\t\t\t\topsToBypassInitialDelay: 0,\n\t\t\t\tconnected: false,\n\t\t\t});\n\t\t\tclientElection.electClient(thisClientId);\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Off, \"not connected\");\n\t\t\tmockDeltaManager.lastSequenceNumber = 10001;\n\t\t\tconnectedState.connect();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"Summarizer should be starting\");\n\t\t\tassertRequests(1, \"Should begin without delay\");\n\t\t\tcompleteSummarizerRequest();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"Should be running\");\n\t\t\tconnectedState.disconnect();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Stopping, \"Should be stopping\");\n\t\t});\n\n\t\tit(\"Should wait for throttler delay before starting summarizer\", async () => {\n\t\t\tthrottler.delayMs = 100;\n\t\t\tcreateSummaryManager({\n\t\t\t\topsToBypassInitialDelay: 0,\n\t\t\t\tconnected: true,\n\t\t\t});\n\t\t\tclientElection.electClient(thisClientId);\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Starting, \"should enter starting state immediately\");\n\t\t\tclock.tick(99);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(0, \"should not have requested summarizer yet\");\n\t\t\tclock.tick(1);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(1, \"should request summarizer after throttler delay\");\n\t\t\tcompleteSummarizerRequest();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\t});\n\n\t\tit(\"Should wait for longer delay (initial) before starting summarizer\", async () => {\n\t\t\tthrottler.delayMs = 100;\n\t\t\tcreateSummaryManager({\n\t\t\t\tinitialDelayMs: 2000,\n\t\t\t\topsToBypassInitialDelay: 1000,\n\t\t\t\tconnected: true,\n\t\t\t});\n\t\t\tclientElection.electClient(thisClientId);\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Starting, \"should enter starting state immediately\");\n\t\t\tclock.tick(1999);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(0, \"should not have requested summarizer yet\");\n\t\t\tclock.tick(1);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(1, \"should request summarizer after both delays\");\n\t\t\tcompleteSummarizerRequest();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\t});\n\n\t\tit(\"Should wait for longer delay (throttler) before starting summarizer\", async () => {\n\t\t\tthrottler.delayMs = 100;\n\t\t\tcreateSummaryManager({\n\t\t\t\tinitialDelayMs: 50,\n\t\t\t\topsToBypassInitialDelay: 1000,\n\t\t\t\tconnected: true,\n\t\t\t});\n\t\t\tclientElection.electClient(thisClientId);\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Starting, \"should enter starting state immediately\");\n\t\t\tclock.tick(99);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(0, \"should not have requested summarizer yet\");\n\t\t\tclock.tick(1);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(1, \"should request summarizer after both delays\");\n\t\t\tcompleteSummarizerRequest();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\t});\n\t});\n});\n"]}
1
+ {"version":3,"file":"summaryManager.spec.js","sourceRoot":"","sources":["../../../src/test/summary/summaryManager.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\nimport { TypedEventEmitter } from \"@fluid-internal/client-utils\";\nimport { IDeltaManager } from \"@fluidframework/container-definitions\";\nimport { IFluidHandle, IFluidLoadable } from \"@fluidframework/core-interfaces\";\nimport { Deferred } from \"@fluidframework/core-utils\";\nimport {\n\tIDocumentMessage,\n\tISequencedDocumentMessage,\n\tMessageType,\n} from \"@fluidframework/protocol-definitions\";\nimport { MockLogger } from \"@fluidframework/telemetry-utils\";\nimport { MockDeltaManager } from \"@fluidframework/test-runtime-utils\";\nimport sinon from \"sinon\";\nimport { DefaultSummaryConfiguration } from \"../../containerRuntime.js\";\nimport {\n\tIConnectedEvents,\n\tIConnectedState,\n\tISummarizer,\n\tISummarizerClientElection,\n\tISummarizerClientElectionEvents,\n\tISummarizerEvents,\n\tISummarizerRuntime,\n\tISummaryManagerConfig,\n\tISummaryOpMessage,\n\tRunningSummarizer,\n\tSummarizeHeuristicData,\n\tSummarizer,\n\tSummarizerStopReason,\n\tSummaryCollection,\n\tSummaryManager,\n\tSummaryManagerState,\n\tneverCancelledSummaryToken,\n} from \"../../summary/index.js\";\n\nclass MockRuntime {\n\tconstructor(\n\t\tpublic readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,\n\t) {}\n\tpublic on(\n\t\t_event: \"op\",\n\t\t_listener: (op: ISequencedDocumentMessage, runtimeMessage?: boolean) => void,\n\t) {\n\t\treturn this;\n\t}\n\n\tpublic off(\n\t\t_event: \"op\",\n\t\t_listener: (op: ISequencedDocumentMessage, runtimeMessage?: boolean) => void,\n\t) {\n\t\treturn this;\n\t}\n}\n\ndescribe(\"Summary Manager\", () => {\n\tlet clock: sinon.SinonFakeTimers;\n\tbefore(() => {\n\t\tclock = sinon.useFakeTimers();\n\t});\n\tafter(() => clock.restore());\n\tconst flushPromises = async () => new Promise((resolve) => process.nextTick(resolve));\n\tconst thisClientId = \"this\";\n\tconst mockLogger = new MockLogger();\n\tconst mockDeltaManager = new MockDeltaManager();\n\tconst mockRuntime = new MockRuntime(mockDeltaManager);\n\tlet summaryManager: SummaryManager;\n\tlet runningSummarizer: RunningSummarizer;\n\t// let runCount: number;\n\tconst summarizerClientId = \"test\";\n\n\t// Fake objects\n\tconst summaryCollection = new SummaryCollection(\n\t\tmockDeltaManager,\n\t\tmockLogger.toTelemetryLogger(),\n\t);\n\tconst throttler = {\n\t\tdelayMs: 0,\n\t\tnumAttempts: 0,\n\t\tgetDelay() {\n\t\t\treturn this.delayMs;\n\t\t},\n\t\tmaxDelayMs: 0,\n\t\tdelayWindowMs: 0,\n\t\tdelayFn: () => 0,\n\t};\n\n\tconst summaryOp: ISummaryOpMessage = {\n\t\tclientId: \"clientId\",\n\t\tclientSequenceNumber: 5,\n\t\tminimumSequenceNumber: 5,\n\t\treferenceSequenceNumber: 5,\n\t\tsequenceNumber: 6,\n\t\ttimestamp: 6,\n\t\ttype: MessageType.Summarize,\n\t\tcontents: {\n\t\t\thandle: \"OpHandle\",\n\t\t\thead: \"head\",\n\t\t\tmessage: \"message\",\n\t\t\tparents: [\"parents\"],\n\t\t},\n\t};\n\n\tclass TestConnectedState\n\t\textends TypedEventEmitter<IConnectedEvents>\n\t\timplements IConnectedState\n\t{\n\t\tpublic connected = false;\n\t\tpublic clientId: string | undefined;\n\n\t\tpublic connect() {\n\t\t\tthis.connected = true;\n\t\t\tthis.clientId = thisClientId;\n\t\t\tthis.emit(\"connected\", this.clientId);\n\t\t}\n\n\t\tpublic disconnect() {\n\t\t\tthis.connected = false;\n\t\t\tthis.emit(\"disconnected\");\n\t\t}\n\t}\n\n\tclass TestSummarizer extends TypedEventEmitter<ISummarizerEvents> implements ISummarizer {\n\t\tprivate notImplemented(): never {\n\t\t\tthrow Error(\"not implemented\");\n\t\t}\n\t\tpublic onBehalfOf: string | undefined;\n\t\tpublic state: \"notStarted\" | \"running\" | \"stopped\" = \"notStarted\";\n\t\tpublic readonly stopDeferred = new Deferred<string | undefined>();\n\t\tpublic readonly runDeferred = new Deferred<void>();\n\n\t\tconstructor() {\n\t\t\tsuper();\n\t\t}\n\t\tpublic async setSummarizer(): Promise<Summarizer> {\n\t\t\tthis.notImplemented();\n\t\t}\n\t\tpublic get cancelled() {\n\t\t\t// Approximation, as ideally it should become cancelled immediately after stop() call\n\t\t\treturn this.state !== \"running\";\n\t\t}\n\t\tpublic close() {}\n\t\tpublic stop(reason?: string): void {\n\t\t\tthis.stopDeferred.resolve(reason);\n\t\t}\n\t\tpublic async run(onBehalfOf: string): Promise<SummarizerStopReason> {\n\t\t\tthis.onBehalfOf = onBehalfOf;\n\t\t\tthis.state = \"running\";\n\t\t\trunningSummarizer = await RunningSummarizer.start(\n\t\t\t\tmockLogger,\n\t\t\t\tsummaryCollection.createWatcher(summarizerClientId),\n\t\t\t\t{\n\t\t\t\t\t...DefaultSummaryConfiguration,\n\t\t\t\t\t...{\n\t\t\t\t\t\tinitialSummarizerDelayMs: 0,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// submitSummaryCallback\n\t\t\t\tasync (options) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstage: \"base\",\n\t\t\t\t\t\tminimumSequenceNumber: 0,\n\t\t\t\t\t\treferenceSequenceNumber: 0,\n\t\t\t\t\t\terror: undefined,\n\t\t\t\t\t} as const;\n\t\t\t\t},\n\t\t\t\tasync (options) => {},\n\t\t\t\tnew SummarizeHeuristicData(0, { refSequenceNumber: 0, summaryTime: Date.now() }),\n\t\t\t\tsummaryCollection,\n\t\t\t\tneverCancelledSummaryToken,\n\t\t\t\t// stopSummarizerCallback\n\t\t\t\t(reason) => {},\n\t\t\t\tmockRuntime as any as ISummarizerRuntime,\n\t\t\t);\n\t\t\tawait Promise.all([this.stopDeferred.promise, this.runDeferred.promise]);\n\t\t\tawait runningSummarizer.waitStop(true);\n\t\t\tthis.state = \"stopped\";\n\t\t\treturn \"summarizerClientDisconnected\";\n\t\t}\n\n\t\tpublic readonly summarizeOnDemand: ISummarizer[\"summarizeOnDemand\"] = () =>\n\t\t\tthis.notImplemented();\n\t\tpublic readonly enqueueSummarize: ISummarizer[\"enqueueSummarize\"] = () =>\n\t\t\tthis.notImplemented();\n\t\tpublic get IFluidLoadable(): IFluidLoadable {\n\t\t\treturn this.notImplemented();\n\t\t}\n\t\tpublic get handle(): IFluidHandle {\n\t\t\treturn this.notImplemented();\n\t\t}\n\t}\n\n\tclass TestSummarizerClientElection\n\t\textends TypedEventEmitter<ISummarizerClientElectionEvents>\n\t\timplements ISummarizerClientElection\n\t{\n\t\tpublic electedClientId: string | undefined;\n\t\tpublic get electedParentId() {\n\t\t\treturn this.electedClientId;\n\t\t}\n\n\t\tpublic electClient(clientId: string | undefined) {\n\t\t\tthis.electedClientId = clientId;\n\t\t\tthis.emit(\"electedSummarizerChanged\");\n\t\t}\n\t}\n\n\tlet clientElection: TestSummarizerClientElection;\n\tlet connectedState: TestConnectedState;\n\tlet summarizer: TestSummarizer;\n\tlet requestCalls = 0;\n\tlet requestDeferred = new Deferred<void>();\n\n\t/**\n\t * Mocks the request Summarizer function by incrementing a call counter.\n\t * The requestDeferred object must be resolved outside of this function\n\t * by calling completeSummarizerRequest() before this function will complete.\n\t * This is used to simulate delaying the request call for testing the\n\t * SummaryManager state machine timings.\n\t */\n\tconst requestSummarizer = async (): Promise<ISummarizer> => {\n\t\tsummarizer = new TestSummarizer();\n\t\trequestCalls++;\n\t\trequestDeferred = new Deferred();\n\t\tawait requestDeferred.promise;\n\t\treturn summarizer;\n\t};\n\n\t/** Completes the pending request Summarizer call. */\n\tconst completeSummarizerRequest = () => requestDeferred.resolve();\n\n\tfunction createSummaryManager({\n\t\tconnected = false,\n\t\t...config\n\t}: Readonly<Partial<{ connected?: boolean } & ISummaryManagerConfig>> = {}) {\n\t\tconnectedState = new TestConnectedState();\n\t\tif (connected) {\n\t\t\tconnectedState.connect();\n\t\t}\n\t\tclientElection = new TestSummarizerClientElection();\n\t\tsummaryManager = new SummaryManager(\n\t\t\tclientElection,\n\t\t\tconnectedState,\n\t\t\tsummaryCollection,\n\t\t\tmockLogger,\n\t\t\trequestSummarizer,\n\t\t\tthrottler,\n\t\t\tconfig,\n\t\t);\n\t\tsummaryManager.start();\n\t}\n\n\tfunction assertState(expectedState: SummaryManagerState, message: string) {\n\t\tassert.strictEqual(summaryManager.currentState, expectedState, message);\n\t}\n\n\tfunction assertRequests(count: number, message?: string) {\n\t\tconst prefix = message ? `${message} - ` : \"\";\n\t\tassert.strictEqual(requestCalls, count, `${prefix}Unexpected request count`);\n\t}\n\n\tafterEach(() => {\n\t\tclientElection.removeAllListeners();\n\t\tsummarizer.removeAllListeners();\n\t\tconnectedState.removeAllListeners();\n\t\tthrottler.delayMs = 0;\n\t\tmockDeltaManager.lastSequenceNumber = 0;\n\t\trequestCalls = 0;\n\t\tclock.reset();\n\t});\n\n\tit(\"Should become summarizer if connected, then elected; stop summarizer after disconnect\", async () => {\n\t\tcreateSummaryManager({ opsToBypassInitialDelay: 0 });\n\t\tassertState(SummaryManagerState.Off, \"should start off\");\n\t\tconnectedState.connect();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Off, \"connected but not yet elected\");\n\t\tclientElection.electClient(\"other\");\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Off, \"connected but other client elected\");\n\t\tclientElection.electClient(thisClientId);\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Running, \"should request summarizer\");\n\t\tassertRequests(1, \"should have requested summarizer\");\n\t\tcompleteSummarizerRequest();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\tconnectedState.disconnect();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Stopping, \"should be stopping after disconnect\");\n\t\tsummarizer.runDeferred.resolve();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Off, \"should be off after summarizer finishes running\");\n\t\tassertRequests(1, \"should not have requested summarizer again\");\n\t});\n\n\tit(\"Should become summarizer if elected, then connected; stop summarizer after unelected\", async () => {\n\t\tcreateSummaryManager({ opsToBypassInitialDelay: 0, initialDelayMs: 0 });\n\t\tassertState(SummaryManagerState.Off, \"should start off\");\n\t\tclientElection.electClient(thisClientId);\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Off, \"elected but not yet connected\");\n\t\tconnectedState.connect();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Running, \"should request summarizer\");\n\t\tassertRequests(1, \"should have requested summarizer\");\n\t\tcompleteSummarizerRequest();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\tclientElection.electClient(\"other\");\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Stopping, \"should be stopping after other client elected\");\n\t\tsummarizer.runDeferred.resolve();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Off, \"should be off after summarizer finishes running\");\n\t\tassertRequests(1, \"should not have requested summarizer again\");\n\t});\n\n\tit(\"Should restart if summarizer closes itself\", async () => {\n\t\tcreateSummaryManager({ opsToBypassInitialDelay: 0 });\n\t\tassertState(SummaryManagerState.Off, \"should start off\");\n\t\tconnectedState.connect();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Off, \"connected but not yet elected\");\n\t\tclientElection.electClient(thisClientId);\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Running, \"should request summarizer\");\n\t\tassertRequests(1, \"should have requested summarizer\");\n\t\tcompleteSummarizerRequest();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\tsummarizer.stop(); // Simulate summarizer stopping itself\n\t\tsummarizer.runDeferred.resolve();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Running, \"should restart itself\");\n\t\tassertRequests(2, \"should have requested a new summarizer\");\n\t\tcompleteSummarizerRequest();\n\t\tawait flushPromises();\n\t\tassertState(SummaryManagerState.Running, \"should be running new summarizer\");\n\t});\n\n\tdescribe(\"Start Summarizer Delay\", () => {\n\t\tit(\"Should wait for initial delay before first start\", async () => {\n\t\t\tmockDeltaManager.lastSequenceNumber = 999; // 999 < 1000, so do not bypass\n\t\t\tcreateSummaryManager({\n\t\t\t\tinitialDelayMs: 2000,\n\t\t\t\topsToBypassInitialDelay: 1000,\n\t\t\t\tconnected: true,\n\t\t\t});\n\t\t\tclientElection.electClient(thisClientId);\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Starting, \"should enter starting state immediately\");\n\t\t\tclock.tick(1999);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(0, \"should not have requested summarizer yet\");\n\t\t\tclock.tick(1);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(1, \"should request summarizer after initial delay\");\n\t\t\tcompleteSummarizerRequest();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\t});\n\n\t\tit(\"Should bypass initial delay if enough ops have already passed\", async () => {\n\t\t\tmockDeltaManager.lastSequenceNumber = 1000; // seq >= opsToBypass, so bypass\n\t\t\tcreateSummaryManager({\n\t\t\t\tinitialDelayMs: 2000,\n\t\t\t\topsToBypassInitialDelay: 1000,\n\t\t\t\tconnected: true,\n\t\t\t});\n\t\t\tclientElection.electClient(thisClientId);\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"should enter starting state immediately\");\n\t\t\tassertRequests(1, \"should request summarizer immediately, bypassing initial delay\");\n\t\t\tcompleteSummarizerRequest();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\t});\n\n\t\t// This test attempts to validate a case where summarizer client does not wait\n\t\t// initial delay if there are enough unsummarized ops.\n\t\t// The way it was implemented (and tested here) is that it only worked if given\n\t\t// client was selected to be a summarizer in the past, then got disconnected and later\n\t\t// again was elected a summarizer and at that moment we had enough ops to cut short wait.\n\t\t// If we want to cut short such wait, we should do it properly by listening for incoming ops\n\t\t// and cut wait short based on op count when a single op triggers overflow, i.e.\n\t\t// make it work in main scenario, not some corner case that does not matter.\n\t\t// Issue #7273 tracks making appropriate product and test change and re-enable the test.\n\t\tit(\"Should bypass initial delay if enough ops pass later\", async () => {\n\t\t\tmockDeltaManager.lastSequenceNumber = 500;\n\t\t\tcreateSummaryManager({\n\t\t\t\tinitialDelayMs: 2000,\n\t\t\t\topsToBypassInitialDelay: 1000,\n\t\t\t\tconnected: true,\n\t\t\t});\n\t\t\tclientElection.electClient(thisClientId);\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Starting, \"should enter starting state immediately\");\n\t\t\tclock.tick(1999);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(0, \"should not have requested summarizer yet\");\n\t\t\tmockDeltaManager.lastSequenceNumber = 999; // seq < opsToBypass. No bypass.\n\t\t\tmockDeltaManager.emit(\"op\", summaryOp);\n\t\t\tclientElection.electClient(thisClientId); // force trigger refresh\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(0, \"still should not have requested summarizer yet\");\n\t\t\tmockDeltaManager.lastSequenceNumber = 1000; // Bypass now\n\t\t\tmockDeltaManager.emit(\"op\", summaryOp);\n\t\t\tclientElection.electClient(thisClientId); // force trigger refresh\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(1, \"should request summarizer, bypassing initial delay\");\n\t\t\tcompleteSummarizerRequest();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\t});\n\n\t\tit(\"Should bypass initial delay if enough ops pass and summarize if disconnected\", async () => {\n\t\t\tmockDeltaManager.lastSequenceNumber = 1001; // seq > opsToBypass\n\t\t\tcreateSummaryManager({\n\t\t\t\tinitialDelayMs: 0,\n\t\t\t\topsToBypassInitialDelay: 1000,\n\t\t\t\tconnected: true,\n\t\t\t});\n\t\t\tclientElection.electClient(thisClientId);\n\t\t\tconnectedState.disconnect(); // To enforce stopReasonCanRunLastSummary == true.\n\t\t\tawait flushPromises();\n\t\t\tmockDeltaManager.emit(\"op\", summaryOp);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(1, \"should request summarizer and run the last summary.\");\n\t\t\tcompleteSummarizerRequest();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\t});\n\n\t\tit(\"Should create last summary when summarizer created without delay, then disconnected\", async () => {\n\t\t\tthrottler.delayMs = 0;\n\t\t\tcreateSummaryManager({\n\t\t\t\topsToBypassInitialDelay: 0,\n\t\t\t\tconnected: false,\n\t\t\t});\n\t\t\tclientElection.electClient(thisClientId);\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Off, \"not connected\");\n\t\t\tmockDeltaManager.lastSequenceNumber = 10001;\n\t\t\tconnectedState.connect();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"Summarizer should be starting\");\n\t\t\tassertRequests(1, \"Should begin without delay\");\n\t\t\tcompleteSummarizerRequest();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"Should be running\");\n\t\t\tconnectedState.disconnect();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Stopping, \"Should be stopping\");\n\t\t});\n\n\t\tit(\"Should wait for throttler delay before starting summarizer\", async () => {\n\t\t\tthrottler.delayMs = 100;\n\t\t\tcreateSummaryManager({\n\t\t\t\topsToBypassInitialDelay: 0,\n\t\t\t\tconnected: true,\n\t\t\t});\n\t\t\tclientElection.electClient(thisClientId);\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Starting, \"should enter starting state immediately\");\n\t\t\tclock.tick(99);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(0, \"should not have requested summarizer yet\");\n\t\t\tclock.tick(1);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(1, \"should request summarizer after throttler delay\");\n\t\t\tcompleteSummarizerRequest();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\t});\n\n\t\tit(\"Should wait for longer delay (initial) before starting summarizer\", async () => {\n\t\t\tthrottler.delayMs = 100;\n\t\t\tcreateSummaryManager({\n\t\t\t\tinitialDelayMs: 2000,\n\t\t\t\topsToBypassInitialDelay: 1000,\n\t\t\t\tconnected: true,\n\t\t\t});\n\t\t\tclientElection.electClient(thisClientId);\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Starting, \"should enter starting state immediately\");\n\t\t\tclock.tick(1999);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(0, \"should not have requested summarizer yet\");\n\t\t\tclock.tick(1);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(1, \"should request summarizer after both delays\");\n\t\t\tcompleteSummarizerRequest();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\t});\n\n\t\tit(\"Should wait for longer delay (throttler) before starting summarizer\", async () => {\n\t\t\tthrottler.delayMs = 100;\n\t\t\tcreateSummaryManager({\n\t\t\t\tinitialDelayMs: 50,\n\t\t\t\topsToBypassInitialDelay: 1000,\n\t\t\t\tconnected: true,\n\t\t\t});\n\t\t\tclientElection.electClient(thisClientId);\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Starting, \"should enter starting state immediately\");\n\t\t\tclock.tick(99);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(0, \"should not have requested summarizer yet\");\n\t\t\tclock.tick(1);\n\t\t\tawait flushPromises();\n\t\t\tassertRequests(1, \"should request summarizer after both delays\");\n\t\t\tcompleteSummarizerRequest();\n\t\t\tawait flushPromises();\n\t\t\tassertState(SummaryManagerState.Running, \"summarizer should be running\");\n\t\t});\n\t});\n});\n"]}
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { strict as assert } from "assert";
6
6
  import sinon from "sinon";
7
- import { formExponentialFn, formExponentialFnWithAttemptOffset, formLinearFn, Throttler, } from "../throttler.js";
7
+ import { Throttler, formExponentialFn, formExponentialFnWithAttemptOffset, formLinearFn, } from "../throttler.js";
8
8
  describe("Throttler", () => {
9
9
  let throttler;
10
10
  let clock;
@@ -1 +1 @@
1
- {"version":3,"file":"throttler.spec.js","sourceRoot":"","sources":["../../src/test/throttler.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { strict as assert } from \"assert\";\nimport sinon from \"sinon\";\nimport {\n\tformExponentialFn,\n\tformExponentialFnWithAttemptOffset,\n\tformLinearFn,\n\tThrottler,\n} from \"../throttler.js\";\n\ndescribe(\"Throttler\", () => {\n\tlet throttler: Throttler;\n\tlet clock: sinon.SinonFakeTimers;\n\tbefore(() => {\n\t\tclock = sinon.useFakeTimers();\n\t});\n\tafter(() => clock.restore());\n\tafterEach(() => clock.reset());\n\n\tfunction assertAscending(array: readonly number[]) {\n\t\tif (array.length < 1) {\n\t\t\treturn;\n\t\t}\n\t\tlet prev = array[0];\n\t\tfor (const item of array) {\n\t\t\tassert(item >= prev, \"out of order\");\n\t\t\tprev = item;\n\t\t}\n\t}\n\n\tfunction getDelayAndTick(): number {\n\t\tconst delay = throttler.getDelay();\n\t\tclock.tick(delay);\n\t\tassert.strictEqual(\n\t\t\tthrottler.latestAttemptTime,\n\t\t\tDate.now(),\n\t\t\t\"getDelayAndTick should yield latestAttemptTime === now\",\n\t\t);\n\t\tassertAscending(throttler.getAttempts());\n\t\treturn delay;\n\t}\n\n\tfunction runTests({\n\t\tmessage,\n\t\tdelayWindowMs,\n\t\tmaxDelayMs,\n\t\tdelayFn,\n\t\texpectedDelays,\n\t}: {\n\t\tmessage: string;\n\t\tdelayWindowMs: number;\n\t\tmaxDelayMs: number;\n\t\tdelayFn: (numAttempts: number) => number;\n\t\texpectedDelays: number[];\n\t}) {\n\t\tdescribe(message, () => {\n\t\t\tbeforeEach(() => {\n\t\t\t\tthrottler = new Throttler(delayWindowMs, maxDelayMs, delayFn);\n\t\t\t});\n\t\t\tconst expectedMaxAttempts = expectedDelays.length;\n\t\t\tconst expectedDelayAt = (attempt: number) =>\n\t\t\t\tattempt >= expectedMaxAttempts ? maxDelayMs : expectedDelays[attempt];\n\n\t\t\tit(\"Should initially have zero delay\", () => {\n\t\t\t\tassert.strictEqual(throttler.getDelay(), 0);\n\t\t\t});\n\n\t\t\tit(\"Should increase as expected with instant failures\", () => {\n\t\t\t\tfor (const expectedDelay of expectedDelays.concat([\n\t\t\t\t\tmaxDelayMs,\n\t\t\t\t\tmaxDelayMs,\n\t\t\t\t\tmaxDelayMs,\n\t\t\t\t\tmaxDelayMs,\n\t\t\t\t])) {\n\t\t\t\t\tassert.strictEqual(getDelayAndTick(), expectedDelay);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tit(\"Should remain zero delay with long pauses between getDelay calls\", () => {\n\t\t\t\tfor (let i = 0; i < 5; i++) {\n\t\t\t\t\tassert.strictEqual(getDelayAndTick(), 0, `iteration ${i}`);\n\t\t\t\t\tclock.tick(delayWindowMs);\n\t\t\t\t}\n\t\t\t\tassert.strictEqual(getDelayAndTick(), 0);\n\n\t\t\t\t// This time barely keep it in the window, giving a delay.\n\t\t\t\tclock.tick(delayWindowMs - 1);\n\t\t\t\tassert.strictEqual(getDelayAndTick(), expectedDelayAt(1));\n\t\t\t});\n\n\t\t\tit(\"Should not increase with long pauses between getDelay calls\", () => {\n\t\t\t\tconst oneThirdTicks = Math.floor(delayWindowMs / 3);\n\t\t\t\tconst remainingTicks = delayWindowMs - 2 * oneThirdTicks;\n\n\t\t\t\t// Accumulate some attempts first.\n\t\t\t\tassert.strictEqual(getDelayAndTick(), 0);\n\t\t\t\tclock.tick(oneThirdTicks);\n\t\t\t\tassert.strictEqual(getDelayAndTick(), expectedDelayAt(1));\n\t\t\t\tclock.tick(oneThirdTicks);\n\t\t\t\tassert.strictEqual(getDelayAndTick(), expectedDelayAt(2));\n\t\t\t\tclock.tick(remainingTicks);\n\n\t\t\t\t// Loop through attempts periodically dropping off.\n\t\t\t\tfor (let i = 0; i < 100; i++) {\n\t\t\t\t\tassert.strictEqual(getDelayAndTick(), expectedDelays[2], `iteration ${i}`);\n\t\t\t\t\tclock.tick(i % 3 === 2 ? remainingTicks : oneThirdTicks);\n\t\t\t\t}\n\t\t\t\tassert.strictEqual(getDelayAndTick(), expectedDelayAt(2));\n\n\t\t\t\t// This time fail instantly, giving a later delay.\n\t\t\t\tassert.strictEqual(getDelayAndTick(), expectedDelayAt(3));\n\t\t\t});\n\n\t\t\tit(\"Should stop increasing number of attempts after max\", () => {\n\t\t\t\tfor (let i = 0; i < expectedMaxAttempts; i++) {\n\t\t\t\t\tgetDelayAndTick();\n\t\t\t\t\tassert.strictEqual(throttler.numAttempts, i + 1, `loop 1; iteration ${i}`);\n\t\t\t\t}\n\t\t\t\tfor (let i = 0; i < 100; i++) {\n\t\t\t\t\tgetDelayAndTick();\n\t\t\t\t\tassert.strictEqual(\n\t\t\t\t\t\tthrottler.numAttempts,\n\t\t\t\t\t\texpectedMaxAttempts,\n\t\t\t\t\t\t`loop 2; iteration ${i}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tit(\"State should be corrected if delay is bypassed\", () => {\n\t\t\t\t// First 2 attempts are allowed to be instant.\n\t\t\t\tassert.strictEqual(getDelayAndTick(), 0);\n\t\t\t\tassert.strictEqual(throttler.getDelay(), expectedDelayAt(1));\n\n\t\t\t\t// This attempt is too soon, since we have not delayed 20ms.\n\t\t\t\tassert.strictEqual(getDelayAndTick(), expectedDelayAt(2));\n\t\t\t});\n\t\t});\n\t}\n\n\trunTests({\n\t\tmessage: \"Exponential Delay\",\n\t\t// 60 second delay window. We ignore attempts that are more\n\t\t// than 60 seconds ago. We are always subtracting the actual\n\t\t// delay time for this window.\n\t\tdelayWindowMs: 60 * 1000,\n\t\t// 30 second maximum delay. After delays reach this length,\n\t\t// subsequent attempts will also use the max delay, unless\n\t\t// enough extra time passes between attempts for some of the\n\t\t// previous start times to drop off out of the window.\n\t\tmaxDelayMs: 30 * 1000,\n\t\t// Exponential delay: [prev x 2 + 20] (0ms, 20ms, 60ms, 140ms, etc)\n\t\t// Equivalent reduction with G = 1, F = 0:\n\t\t/** f(n) = C x (B^n - G) + F = C x B^n + (F - C x G) = C x B^n - C */\n\t\tdelayFn: formExponentialFn({ coefficient: 20, offset: -20 }),\n\t\texpectedDelays: [0, 20, 60, 140, 300, 620, 1260, 2540, 5100, 10220, 20460],\n\t});\n\n\trunTests({\n\t\tmessage: \"Exponential Delay with attempt offset\",\n\t\t// 60 second delay window. We ignore attempts that are more\n\t\t// than 60 seconds ago. We are always subtracting the actual\n\t\t// delay time for this window.\n\t\tdelayWindowMs: 60 * 1000,\n\t\t// 30 second maximum delay. After delays reach this length,\n\t\t// subsequent attempts will also use the max delay, unless\n\t\t// enough extra time passes between attempts for some of the\n\t\t// previous start times to drop off out of the window.\n\t\tmaxDelayMs: 30 * 1000,\n\t\t// Exponential delay: [0, 20, then prev x 2] (0ms, 20ms, 40ms, 80ms, etc)\n\t\t// # | calculation | delay | cumulative delay\n\t\t// ---|-------------------------------|-----------|-----------------\n\t\t// 1 | SPECIAL CASE: 0 = 0 x 20 = | 0 ms | 0 ms\n\t\t// 2 | 2^( 1 - 1) x 20 = 1 x 20 = | 20 ms | 20 ms\n\t\t// 3 | 2^( 2 - 1) x 20 = 2 x 20 = | 40 ms | 60 ms\n\t\t// 4 | 2^( 3 - 1) x 20 = 4 x 20 = | 80 ms | 140 ms\n\t\t// 5 | 2^( 4 - 1) x 20 = 8 x 20 = | 160 ms | 300 ms\n\t\t// 6 | 2^( 5 - 1) x 20 = 16 x 20 = | 320 ms | 620 ms\n\t\t// 7 | 2^( 6 - 1) x 20 = 32 x 20 = | 640 ms | 1,260 ms\n\t\t// 8 | 2^( 7 - 1) x 20 = 64 x 20 = | 1,280 ms | 2,540 ms\n\t\t// 9 | 2^( 8 - 1) x 20 = 128 x 20 = | 2,560 ms | 5,100 ms\n\t\t// 10 | 2^( 9 - 1) x 20 = 256 x 20 = | 5,120 ms | 10,220 ms\n\t\t// 11 | 2^(10 - 1) x 20 = 512 x 20 = | 10,240 ms | 20,460 ms\n\t\t// 12 | 2^(11 - 1) x 20 = 1024 x 20 = | 20,480 ms | 40,940 ms\n\t\t// 13 | 2^(12 - 1) x 20 = 2048 x 20 = | 30,000 ms | 70,940 ms (MAX)\n\t\t// 14 | 2^(13 - 1) x 20 = 5096 x 20 = | 30,000 ms |100,940 ms (MAX)\n\t\tdelayFn: formExponentialFnWithAttemptOffset(-1, {\n\t\t\tcoefficient: 20,\n\t\t\tinitialDelay: 0,\n\t\t}),\n\t\texpectedDelays: [0, 20, 40, 80, 160, 320, 640, 1280, 2560, 5120, 10240, 20480],\n\t});\n\n\trunTests({\n\t\tmessage: \"Linear Delay\",\n\t\t// 60 ms delay window. We ignore attempts that are more\n\t\t// than 60 ms ago. We are always subtracting the actual\n\t\t// delay time for this window.\n\t\tdelayWindowMs: 60,\n\t\t// 30 ms maximum delay. After delays reach this length,\n\t\t// subsequent attempts will also use the max delay, unless\n\t\t// enough extra time passes between attempts for some of the\n\t\t// previous start times to drop off out of the window.\n\t\tmaxDelayMs: 30,\n\t\t// Linear delay: (0ms, 10ms, 20ms, 30ms, etc)\n\t\t// # | calculation | delay | cumulative delay\n\t\t// ---|-------------|-------|-----------------\n\t\t// 1 | 10 x 0 = | 0 ms | 0 ms\n\t\t// 2 | 10 x 1 = | 10 ms | 10 ms\n\t\t// 3 | 10 x 2 = | 20 ms | 30 ms\n\t\t// 4 | 10 x 3 = | 30 ms | 60 ms (MAX)\n\t\t// 5 | 10 x 4 = | 30 ms | 90 ms (MAX)\n\t\tdelayFn: formLinearFn({ coefficient: 10 }),\n\t\texpectedDelays: [0, 10, 20],\n\t});\n});\n"]}
1
+ {"version":3,"file":"throttler.spec.js","sourceRoot":"","sources":["../../src/test/throttler.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\nimport sinon from \"sinon\";\nimport {\n\tThrottler,\n\tformExponentialFn,\n\tformExponentialFnWithAttemptOffset,\n\tformLinearFn,\n} from \"../throttler.js\";\n\ndescribe(\"Throttler\", () => {\n\tlet throttler: Throttler;\n\tlet clock: sinon.SinonFakeTimers;\n\tbefore(() => {\n\t\tclock = sinon.useFakeTimers();\n\t});\n\tafter(() => clock.restore());\n\tafterEach(() => clock.reset());\n\n\tfunction assertAscending(array: readonly number[]) {\n\t\tif (array.length < 1) {\n\t\t\treturn;\n\t\t}\n\t\tlet prev = array[0];\n\t\tfor (const item of array) {\n\t\t\tassert(item >= prev, \"out of order\");\n\t\t\tprev = item;\n\t\t}\n\t}\n\n\tfunction getDelayAndTick(): number {\n\t\tconst delay = throttler.getDelay();\n\t\tclock.tick(delay);\n\t\tassert.strictEqual(\n\t\t\tthrottler.latestAttemptTime,\n\t\t\tDate.now(),\n\t\t\t\"getDelayAndTick should yield latestAttemptTime === now\",\n\t\t);\n\t\tassertAscending(throttler.getAttempts());\n\t\treturn delay;\n\t}\n\n\tfunction runTests({\n\t\tmessage,\n\t\tdelayWindowMs,\n\t\tmaxDelayMs,\n\t\tdelayFn,\n\t\texpectedDelays,\n\t}: {\n\t\tmessage: string;\n\t\tdelayWindowMs: number;\n\t\tmaxDelayMs: number;\n\t\tdelayFn: (numAttempts: number) => number;\n\t\texpectedDelays: number[];\n\t}) {\n\t\tdescribe(message, () => {\n\t\t\tbeforeEach(() => {\n\t\t\t\tthrottler = new Throttler(delayWindowMs, maxDelayMs, delayFn);\n\t\t\t});\n\t\t\tconst expectedMaxAttempts = expectedDelays.length;\n\t\t\tconst expectedDelayAt = (attempt: number) =>\n\t\t\t\tattempt >= expectedMaxAttempts ? maxDelayMs : expectedDelays[attempt];\n\n\t\t\tit(\"Should initially have zero delay\", () => {\n\t\t\t\tassert.strictEqual(throttler.getDelay(), 0);\n\t\t\t});\n\n\t\t\tit(\"Should increase as expected with instant failures\", () => {\n\t\t\t\tfor (const expectedDelay of expectedDelays.concat([\n\t\t\t\t\tmaxDelayMs,\n\t\t\t\t\tmaxDelayMs,\n\t\t\t\t\tmaxDelayMs,\n\t\t\t\t\tmaxDelayMs,\n\t\t\t\t])) {\n\t\t\t\t\tassert.strictEqual(getDelayAndTick(), expectedDelay);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tit(\"Should remain zero delay with long pauses between getDelay calls\", () => {\n\t\t\t\tfor (let i = 0; i < 5; i++) {\n\t\t\t\t\tassert.strictEqual(getDelayAndTick(), 0, `iteration ${i}`);\n\t\t\t\t\tclock.tick(delayWindowMs);\n\t\t\t\t}\n\t\t\t\tassert.strictEqual(getDelayAndTick(), 0);\n\n\t\t\t\t// This time barely keep it in the window, giving a delay.\n\t\t\t\tclock.tick(delayWindowMs - 1);\n\t\t\t\tassert.strictEqual(getDelayAndTick(), expectedDelayAt(1));\n\t\t\t});\n\n\t\t\tit(\"Should not increase with long pauses between getDelay calls\", () => {\n\t\t\t\tconst oneThirdTicks = Math.floor(delayWindowMs / 3);\n\t\t\t\tconst remainingTicks = delayWindowMs - 2 * oneThirdTicks;\n\n\t\t\t\t// Accumulate some attempts first.\n\t\t\t\tassert.strictEqual(getDelayAndTick(), 0);\n\t\t\t\tclock.tick(oneThirdTicks);\n\t\t\t\tassert.strictEqual(getDelayAndTick(), expectedDelayAt(1));\n\t\t\t\tclock.tick(oneThirdTicks);\n\t\t\t\tassert.strictEqual(getDelayAndTick(), expectedDelayAt(2));\n\t\t\t\tclock.tick(remainingTicks);\n\n\t\t\t\t// Loop through attempts periodically dropping off.\n\t\t\t\tfor (let i = 0; i < 100; i++) {\n\t\t\t\t\tassert.strictEqual(getDelayAndTick(), expectedDelays[2], `iteration ${i}`);\n\t\t\t\t\tclock.tick(i % 3 === 2 ? remainingTicks : oneThirdTicks);\n\t\t\t\t}\n\t\t\t\tassert.strictEqual(getDelayAndTick(), expectedDelayAt(2));\n\n\t\t\t\t// This time fail instantly, giving a later delay.\n\t\t\t\tassert.strictEqual(getDelayAndTick(), expectedDelayAt(3));\n\t\t\t});\n\n\t\t\tit(\"Should stop increasing number of attempts after max\", () => {\n\t\t\t\tfor (let i = 0; i < expectedMaxAttempts; i++) {\n\t\t\t\t\tgetDelayAndTick();\n\t\t\t\t\tassert.strictEqual(throttler.numAttempts, i + 1, `loop 1; iteration ${i}`);\n\t\t\t\t}\n\t\t\t\tfor (let i = 0; i < 100; i++) {\n\t\t\t\t\tgetDelayAndTick();\n\t\t\t\t\tassert.strictEqual(\n\t\t\t\t\t\tthrottler.numAttempts,\n\t\t\t\t\t\texpectedMaxAttempts,\n\t\t\t\t\t\t`loop 2; iteration ${i}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tit(\"State should be corrected if delay is bypassed\", () => {\n\t\t\t\t// First 2 attempts are allowed to be instant.\n\t\t\t\tassert.strictEqual(getDelayAndTick(), 0);\n\t\t\t\tassert.strictEqual(throttler.getDelay(), expectedDelayAt(1));\n\n\t\t\t\t// This attempt is too soon, since we have not delayed 20ms.\n\t\t\t\tassert.strictEqual(getDelayAndTick(), expectedDelayAt(2));\n\t\t\t});\n\t\t});\n\t}\n\n\trunTests({\n\t\tmessage: \"Exponential Delay\",\n\t\t// 60 second delay window. We ignore attempts that are more\n\t\t// than 60 seconds ago. We are always subtracting the actual\n\t\t// delay time for this window.\n\t\tdelayWindowMs: 60 * 1000,\n\t\t// 30 second maximum delay. After delays reach this length,\n\t\t// subsequent attempts will also use the max delay, unless\n\t\t// enough extra time passes between attempts for some of the\n\t\t// previous start times to drop off out of the window.\n\t\tmaxDelayMs: 30 * 1000,\n\t\t// Exponential delay: [prev x 2 + 20] (0ms, 20ms, 60ms, 140ms, etc)\n\t\t// Equivalent reduction with G = 1, F = 0:\n\t\t/** f(n) = C x (B^n - G) + F = C x B^n + (F - C x G) = C x B^n - C */\n\t\tdelayFn: formExponentialFn({ coefficient: 20, offset: -20 }),\n\t\texpectedDelays: [0, 20, 60, 140, 300, 620, 1260, 2540, 5100, 10220, 20460],\n\t});\n\n\trunTests({\n\t\tmessage: \"Exponential Delay with attempt offset\",\n\t\t// 60 second delay window. We ignore attempts that are more\n\t\t// than 60 seconds ago. We are always subtracting the actual\n\t\t// delay time for this window.\n\t\tdelayWindowMs: 60 * 1000,\n\t\t// 30 second maximum delay. After delays reach this length,\n\t\t// subsequent attempts will also use the max delay, unless\n\t\t// enough extra time passes between attempts for some of the\n\t\t// previous start times to drop off out of the window.\n\t\tmaxDelayMs: 30 * 1000,\n\t\t// Exponential delay: [0, 20, then prev x 2] (0ms, 20ms, 40ms, 80ms, etc)\n\t\t// # | calculation | delay | cumulative delay\n\t\t// ---|-------------------------------|-----------|-----------------\n\t\t// 1 | SPECIAL CASE: 0 = 0 x 20 = | 0 ms | 0 ms\n\t\t// 2 | 2^( 1 - 1) x 20 = 1 x 20 = | 20 ms | 20 ms\n\t\t// 3 | 2^( 2 - 1) x 20 = 2 x 20 = | 40 ms | 60 ms\n\t\t// 4 | 2^( 3 - 1) x 20 = 4 x 20 = | 80 ms | 140 ms\n\t\t// 5 | 2^( 4 - 1) x 20 = 8 x 20 = | 160 ms | 300 ms\n\t\t// 6 | 2^( 5 - 1) x 20 = 16 x 20 = | 320 ms | 620 ms\n\t\t// 7 | 2^( 6 - 1) x 20 = 32 x 20 = | 640 ms | 1,260 ms\n\t\t// 8 | 2^( 7 - 1) x 20 = 64 x 20 = | 1,280 ms | 2,540 ms\n\t\t// 9 | 2^( 8 - 1) x 20 = 128 x 20 = | 2,560 ms | 5,100 ms\n\t\t// 10 | 2^( 9 - 1) x 20 = 256 x 20 = | 5,120 ms | 10,220 ms\n\t\t// 11 | 2^(10 - 1) x 20 = 512 x 20 = | 10,240 ms | 20,460 ms\n\t\t// 12 | 2^(11 - 1) x 20 = 1024 x 20 = | 20,480 ms | 40,940 ms\n\t\t// 13 | 2^(12 - 1) x 20 = 2048 x 20 = | 30,000 ms | 70,940 ms (MAX)\n\t\t// 14 | 2^(13 - 1) x 20 = 5096 x 20 = | 30,000 ms |100,940 ms (MAX)\n\t\tdelayFn: formExponentialFnWithAttemptOffset(-1, {\n\t\t\tcoefficient: 20,\n\t\t\tinitialDelay: 0,\n\t\t}),\n\t\texpectedDelays: [0, 20, 40, 80, 160, 320, 640, 1280, 2560, 5120, 10240, 20480],\n\t});\n\n\trunTests({\n\t\tmessage: \"Linear Delay\",\n\t\t// 60 ms delay window. We ignore attempts that are more\n\t\t// than 60 ms ago. We are always subtracting the actual\n\t\t// delay time for this window.\n\t\tdelayWindowMs: 60,\n\t\t// 30 ms maximum delay. After delays reach this length,\n\t\t// subsequent attempts will also use the max delay, unless\n\t\t// enough extra time passes between attempts for some of the\n\t\t// previous start times to drop off out of the window.\n\t\tmaxDelayMs: 30,\n\t\t// Linear delay: (0ms, 10ms, 20ms, 30ms, etc)\n\t\t// # | calculation | delay | cumulative delay\n\t\t// ---|-------------|-------|-----------------\n\t\t// 1 | 10 x 0 = | 0 ms | 0 ms\n\t\t// 2 | 10 x 1 = | 10 ms | 10 ms\n\t\t// 3 | 10 x 2 = | 20 ms | 30 ms\n\t\t// 4 | 10 x 3 = | 30 ms | 60 ms (MAX)\n\t\t// 5 | 10 x 4 = | 30 ms | 90 ms (MAX)\n\t\tdelayFn: formLinearFn({ coefficient: 10 }),\n\t\texpectedDelays: [0, 10, 20],\n\t});\n});\n"]}
@@ -45,7 +45,9 @@ use_old_InterfaceDeclaration_ICancellableSummarizerController(get_current_Interf
45
45
  use_current_InterfaceDeclaration_ICancellationToken(get_old_InterfaceDeclaration_ICancellationToken());
46
46
  use_old_InterfaceDeclaration_ICancellationToken(get_current_InterfaceDeclaration_ICancellationToken());
47
47
  use_current_InterfaceDeclaration_IChunkedOp(get_old_InterfaceDeclaration_IChunkedOp());
48
- use_old_InterfaceDeclaration_IChunkedOp(get_current_InterfaceDeclaration_IChunkedOp());
48
+ use_old_InterfaceDeclaration_IChunkedOp(
49
+ // @ts-expect-error compatibility expected to be broken
50
+ get_current_InterfaceDeclaration_IChunkedOp());
49
51
  use_current_InterfaceDeclaration_IClientSummaryWatcher(get_old_InterfaceDeclaration_IClientSummaryWatcher());
50
52
  use_old_InterfaceDeclaration_IClientSummaryWatcher(get_current_InterfaceDeclaration_IClientSummaryWatcher());
51
53
  use_current_InterfaceDeclaration_ICompressionRuntimeOptions(get_old_InterfaceDeclaration_ICompressionRuntimeOptions());
@@ -55,7 +57,9 @@ use_old_InterfaceDeclaration_IConnectableRuntime(get_current_InterfaceDeclaratio
55
57
  use_current_InterfaceDeclaration_IContainerRuntimeMessageCompatDetails(get_old_InterfaceDeclaration_IContainerRuntimeMessageCompatDetails());
56
58
  use_old_InterfaceDeclaration_IContainerRuntimeMessageCompatDetails(get_current_InterfaceDeclaration_IContainerRuntimeMessageCompatDetails());
57
59
  use_current_InterfaceDeclaration_IContainerRuntimeMetadata(get_old_InterfaceDeclaration_IContainerRuntimeMetadata());
58
- use_old_InterfaceDeclaration_IContainerRuntimeMetadata(get_current_InterfaceDeclaration_IContainerRuntimeMetadata());
60
+ use_old_InterfaceDeclaration_IContainerRuntimeMetadata(
61
+ // @ts-expect-error compatibility expected to be broken
62
+ get_current_InterfaceDeclaration_IContainerRuntimeMetadata());
59
63
  use_current_InterfaceDeclaration_IContainerRuntimeOptions(
60
64
  // @ts-expect-error compatibility expected to be broken
61
65
  get_old_InterfaceDeclaration_IContainerRuntimeOptions());
@@ -150,8 +154,6 @@ use_current_InterfaceDeclaration_RecentlyAddedContainerRuntimeMessageDetails(get
150
154
  use_old_InterfaceDeclaration_RecentlyAddedContainerRuntimeMessageDetails(get_current_InterfaceDeclaration_RecentlyAddedContainerRuntimeMessageDetails());
151
155
  use_current_EnumDeclaration_RuntimeHeaders(get_old_EnumDeclaration_RuntimeHeaders());
152
156
  use_old_EnumDeclaration_RuntimeHeaders(get_current_EnumDeclaration_RuntimeHeaders());
153
- use_current_EnumDeclaration_RuntimeMessage(get_old_EnumDeclaration_RuntimeMessage());
154
- use_old_EnumDeclaration_RuntimeMessage(get_current_EnumDeclaration_RuntimeMessage());
155
157
  use_current_InterfaceDeclaration_SubmitSummaryFailureData(get_old_InterfaceDeclaration_SubmitSummaryFailureData());
156
158
  use_old_InterfaceDeclaration_SubmitSummaryFailureData(get_current_InterfaceDeclaration_SubmitSummaryFailureData());
157
159
  use_current_TypeAliasDeclaration_SubmitSummaryResult(get_old_TypeAliasDeclaration_SubmitSummaryResult());