@fluidframework/container-runtime 2.0.0-rc.1.0.4 → 2.0.0-rc.2.0.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 (690) hide show
  1. package/{.eslintrc.js → .eslintrc.cjs} +5 -5
  2. package/{.mocharc.js → .mocharc.cjs} +1 -1
  3. package/CHANGELOG.md +54 -0
  4. package/README.md +45 -0
  5. package/{api-extractor-esm.json → api-extractor-cjs.json} +5 -1
  6. package/api-extractor-lint.json +1 -1
  7. package/api-extractor.json +1 -1
  8. package/api-report/container-runtime.api.md +68 -30
  9. package/dist/batchTracker.d.ts +1 -2
  10. package/dist/batchTracker.d.ts.map +1 -1
  11. package/dist/batchTracker.js.map +1 -1
  12. package/dist/blobManager.js.map +1 -1
  13. package/dist/channelCollection.d.ts +223 -0
  14. package/dist/channelCollection.d.ts.map +1 -0
  15. package/dist/{dataStores.js → channelCollection.js} +399 -83
  16. package/dist/channelCollection.js.map +1 -0
  17. package/dist/connectionTelemetry.d.ts +11 -1
  18. package/dist/connectionTelemetry.d.ts.map +1 -1
  19. package/dist/connectionTelemetry.js +42 -4
  20. package/dist/connectionTelemetry.js.map +1 -1
  21. package/dist/container-runtime-alpha.d.ts +98 -40
  22. package/dist/container-runtime-beta.d.ts +27 -9
  23. package/dist/container-runtime-public.d.ts +27 -9
  24. package/dist/container-runtime-untrimmed.d.ts +123 -40
  25. package/dist/containerHandleContext.d.ts +1 -1
  26. package/dist/containerHandleContext.d.ts.map +1 -1
  27. package/dist/containerHandleContext.js.map +1 -1
  28. package/dist/containerRuntime.d.ts +79 -55
  29. package/dist/containerRuntime.d.ts.map +1 -1
  30. package/dist/containerRuntime.js +541 -411
  31. package/dist/containerRuntime.js.map +1 -1
  32. package/dist/dataStore.d.ts +2 -3
  33. package/dist/dataStore.d.ts.map +1 -1
  34. package/dist/dataStore.js +12 -11
  35. package/dist/dataStore.js.map +1 -1
  36. package/dist/dataStoreContext.d.ts +71 -30
  37. package/dist/dataStoreContext.d.ts.map +1 -1
  38. package/dist/dataStoreContext.js +182 -141
  39. package/dist/dataStoreContext.js.map +1 -1
  40. package/dist/dataStoreContexts.d.ts +1 -1
  41. package/dist/dataStoreContexts.d.ts.map +1 -1
  42. package/dist/dataStoreContexts.js.map +1 -1
  43. package/dist/deltaManagerSummarizerProxy.d.ts +29 -4
  44. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
  45. package/dist/deltaManagerSummarizerProxy.js +91 -5
  46. package/dist/deltaManagerSummarizerProxy.js.map +1 -1
  47. package/dist/gc/garbageCollection.d.ts +22 -5
  48. package/dist/gc/garbageCollection.d.ts.map +1 -1
  49. package/dist/gc/garbageCollection.js +134 -75
  50. package/dist/gc/garbageCollection.js.map +1 -1
  51. package/dist/gc/gcConfigs.d.ts +2 -2
  52. package/dist/gc/gcConfigs.d.ts.map +1 -1
  53. package/dist/gc/gcConfigs.js +21 -21
  54. package/dist/gc/gcConfigs.js.map +1 -1
  55. package/dist/gc/gcDefinitions.d.ts +29 -6
  56. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  57. package/dist/gc/gcDefinitions.js +5 -1
  58. package/dist/gc/gcDefinitions.js.map +1 -1
  59. package/dist/gc/gcHelpers.d.ts +2 -2
  60. package/dist/gc/gcHelpers.d.ts.map +1 -1
  61. package/dist/gc/gcHelpers.js.map +1 -1
  62. package/dist/gc/gcReferenceGraphAlgorithm.d.ts +1 -1
  63. package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -1
  64. package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -1
  65. package/dist/gc/gcSummaryStateTracker.d.ts +12 -5
  66. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  67. package/dist/gc/gcSummaryStateTracker.js +18 -6
  68. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  69. package/dist/gc/gcTelemetry.d.ts +7 -7
  70. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  71. package/dist/gc/gcTelemetry.js +20 -20
  72. package/dist/gc/gcTelemetry.js.map +1 -1
  73. package/dist/gc/gcUnreferencedStateTracker.d.ts +6 -1
  74. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
  75. package/dist/gc/gcUnreferencedStateTracker.js +22 -11
  76. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  77. package/dist/gc/index.d.ts +8 -8
  78. package/dist/gc/index.d.ts.map +1 -1
  79. package/dist/gc/index.js +40 -38
  80. package/dist/gc/index.js.map +1 -1
  81. package/dist/index.d.ts +8 -20
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +28 -40
  84. package/dist/index.js.map +1 -1
  85. package/dist/messageTypes.d.ts +4 -4
  86. package/dist/messageTypes.d.ts.map +1 -1
  87. package/dist/messageTypes.js.map +1 -1
  88. package/dist/opLifecycle/batchManager.d.ts +2 -2
  89. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  90. package/dist/opLifecycle/batchManager.js.map +1 -1
  91. package/dist/opLifecycle/definitions.d.ts +2 -2
  92. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  93. package/dist/opLifecycle/definitions.js.map +1 -1
  94. package/dist/opLifecycle/index.d.ts +8 -8
  95. package/dist/opLifecycle/index.d.ts.map +1 -1
  96. package/dist/opLifecycle/index.js +18 -18
  97. package/dist/opLifecycle/index.js.map +1 -1
  98. package/dist/opLifecycle/opCompressor.d.ts +1 -1
  99. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  100. package/dist/opLifecycle/opCompressor.js +4 -4
  101. package/dist/opLifecycle/opCompressor.js.map +1 -1
  102. package/dist/opLifecycle/opDecompressor.d.ts +1 -1
  103. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  104. package/dist/opLifecycle/opDecompressor.js +3 -3
  105. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  106. package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
  107. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  108. package/dist/opLifecycle/opGroupingManager.js +1 -10
  109. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  110. package/dist/opLifecycle/opSplitter.d.ts +1 -1
  111. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  112. package/dist/opLifecycle/opSplitter.js +5 -5
  113. package/dist/opLifecycle/opSplitter.js.map +1 -1
  114. package/dist/opLifecycle/outbox.d.ts +7 -7
  115. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  116. package/dist/opLifecycle/outbox.js +20 -12
  117. package/dist/opLifecycle/outbox.js.map +1 -1
  118. package/dist/opLifecycle/remoteMessageProcessor.d.ts +4 -4
  119. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  120. package/dist/opLifecycle/remoteMessageProcessor.js +2 -2
  121. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  122. package/dist/package.json +3 -0
  123. package/dist/packageVersion.d.ts +1 -1
  124. package/dist/packageVersion.js +1 -1
  125. package/dist/packageVersion.js.map +1 -1
  126. package/dist/pendingStateManager.d.ts +2 -1
  127. package/dist/pendingStateManager.d.ts.map +1 -1
  128. package/dist/pendingStateManager.js +18 -10
  129. package/dist/pendingStateManager.js.map +1 -1
  130. package/dist/scheduleManager.d.ts +1 -2
  131. package/dist/scheduleManager.d.ts.map +1 -1
  132. package/dist/scheduleManager.js +5 -5
  133. package/dist/scheduleManager.js.map +1 -1
  134. package/dist/summary/index.d.ts +12 -12
  135. package/dist/summary/index.d.ts.map +1 -1
  136. package/dist/summary/index.js +43 -43
  137. package/dist/summary/index.js.map +1 -1
  138. package/dist/summary/orderedClientElection.js +8 -8
  139. package/dist/summary/orderedClientElection.js.map +1 -1
  140. package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -1
  141. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  142. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  143. package/dist/summary/runningSummarizer.d.ts +11 -10
  144. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  145. package/dist/summary/runningSummarizer.js +114 -81
  146. package/dist/summary/runningSummarizer.js.map +1 -1
  147. package/dist/summary/summarizer.d.ts +4 -4
  148. package/dist/summary/summarizer.d.ts.map +1 -1
  149. package/dist/summary/summarizer.js +6 -6
  150. package/dist/summary/summarizer.js.map +1 -1
  151. package/dist/summary/summarizerClientElection.d.ts +2 -2
  152. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  153. package/dist/summary/summarizerClientElection.js.map +1 -1
  154. package/dist/summary/summarizerHeuristics.d.ts +3 -3
  155. package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
  156. package/dist/summary/summarizerHeuristics.js.map +1 -1
  157. package/dist/summary/summarizerNode/index.d.ts +3 -3
  158. package/dist/summary/summarizerNode/index.d.ts.map +1 -1
  159. package/dist/summary/summarizerNode/index.js +4 -4
  160. package/dist/summary/summarizerNode/index.js.map +1 -1
  161. package/dist/summary/summarizerNode/summarizerNode.d.ts +17 -7
  162. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  163. package/dist/summary/summarizerNode/summarizerNode.js +45 -57
  164. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  165. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +10 -19
  166. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  167. package/dist/summary/summarizerNode/summarizerNodeUtils.js +1 -21
  168. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  169. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +5 -6
  170. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  171. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +16 -16
  172. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  173. package/dist/summary/summarizerTypes.d.ts +10 -21
  174. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  175. package/dist/summary/summarizerTypes.js.map +1 -1
  176. package/dist/summary/summaryFormat.d.ts +15 -2
  177. package/dist/summary/summaryFormat.d.ts.map +1 -1
  178. package/dist/summary/summaryFormat.js.map +1 -1
  179. package/dist/summary/summaryGenerator.d.ts +6 -5
  180. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  181. package/dist/summary/summaryGenerator.js +10 -1
  182. package/dist/summary/summaryGenerator.js.map +1 -1
  183. package/dist/summary/summaryManager.d.ts +5 -6
  184. package/dist/summary/summaryManager.d.ts.map +1 -1
  185. package/dist/summary/summaryManager.js +4 -5
  186. package/dist/summary/summaryManager.js.map +1 -1
  187. package/dist/tsdoc-metadata.json +1 -1
  188. package/lib/{batchTracker.d.mts → batchTracker.d.ts} +2 -3
  189. package/lib/batchTracker.d.ts.map +1 -0
  190. package/lib/{batchTracker.mjs → batchTracker.js} +1 -1
  191. package/lib/batchTracker.js.map +1 -0
  192. package/lib/{blobManager.d.mts → blobManager.d.ts} +1 -1
  193. package/lib/blobManager.d.ts.map +1 -0
  194. package/lib/{blobManager.mjs → blobManager.js} +1 -1
  195. package/lib/blobManager.js.map +1 -0
  196. package/lib/channelCollection.d.ts +223 -0
  197. package/lib/channelCollection.d.ts.map +1 -0
  198. package/lib/{dataStores.mjs → channelCollection.js} +384 -71
  199. package/lib/channelCollection.js.map +1 -0
  200. package/lib/{connectionTelemetry.d.mts → connectionTelemetry.d.ts} +12 -2
  201. package/lib/connectionTelemetry.d.ts.map +1 -0
  202. package/lib/{connectionTelemetry.mjs → connectionTelemetry.js} +43 -5
  203. package/lib/connectionTelemetry.js.map +1 -0
  204. package/lib/{container-runtime-alpha.d.mts → container-runtime-alpha.d.ts} +98 -40
  205. package/lib/{container-runtime-public.d.mts → container-runtime-beta.d.ts} +27 -9
  206. package/lib/{container-runtime-beta.d.mts → container-runtime-public.d.ts} +27 -9
  207. package/lib/{container-runtime-untrimmed.d.mts → container-runtime-untrimmed.d.ts} +123 -40
  208. package/lib/{containerHandleContext.d.mts → containerHandleContext.d.ts} +2 -2
  209. package/lib/containerHandleContext.d.ts.map +1 -0
  210. package/lib/{containerHandleContext.mjs → containerHandleContext.js} +1 -1
  211. package/lib/containerHandleContext.js.map +1 -0
  212. package/lib/{containerRuntime.d.mts → containerRuntime.d.ts} +84 -56
  213. package/lib/containerRuntime.d.ts.map +1 -0
  214. package/lib/{containerRuntime.mjs → containerRuntime.js} +460 -332
  215. package/lib/containerRuntime.js.map +1 -0
  216. package/lib/{dataStore.d.mts → dataStore.d.ts} +3 -4
  217. package/lib/dataStore.d.ts.map +1 -0
  218. package/lib/{dataStore.mjs → dataStore.js} +13 -12
  219. package/lib/dataStore.js.map +1 -0
  220. package/lib/{dataStoreContext.d.mts → dataStoreContext.d.ts} +72 -31
  221. package/lib/dataStoreContext.d.ts.map +1 -0
  222. package/lib/{dataStoreContext.mjs → dataStoreContext.js} +174 -133
  223. package/lib/dataStoreContext.js.map +1 -0
  224. package/lib/{dataStoreContexts.d.mts → dataStoreContexts.d.ts} +2 -2
  225. package/lib/dataStoreContexts.d.ts.map +1 -0
  226. package/lib/{dataStoreContexts.mjs → dataStoreContexts.js} +1 -1
  227. package/lib/dataStoreContexts.js.map +1 -0
  228. package/lib/{dataStoreRegistry.d.mts → dataStoreRegistry.d.ts} +1 -1
  229. package/lib/dataStoreRegistry.d.ts.map +1 -0
  230. package/lib/{dataStoreRegistry.mjs → dataStoreRegistry.js} +5 -1
  231. package/lib/dataStoreRegistry.js.map +1 -0
  232. package/{dist/deltaManagerProxyBase.d.ts → lib/deltaManagerSummarizerProxy.d.ts} +16 -7
  233. package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -0
  234. package/lib/deltaManagerSummarizerProxy.js +124 -0
  235. package/lib/deltaManagerSummarizerProxy.js.map +1 -0
  236. package/lib/{deltaScheduler.d.mts → deltaScheduler.d.ts} +1 -1
  237. package/lib/deltaScheduler.d.ts.map +1 -0
  238. package/lib/{deltaScheduler.mjs → deltaScheduler.js} +1 -1
  239. package/lib/deltaScheduler.js.map +1 -0
  240. package/lib/{error.d.mts → error.d.ts} +1 -1
  241. package/lib/error.d.ts.map +1 -0
  242. package/lib/{error.mjs → error.js} +1 -1
  243. package/lib/error.js.map +1 -0
  244. package/lib/gc/{garbageCollection.d.mts → garbageCollection.d.ts} +23 -6
  245. package/lib/gc/garbageCollection.d.ts.map +1 -0
  246. package/lib/gc/{garbageCollection.mjs → garbageCollection.js} +103 -44
  247. package/lib/gc/garbageCollection.js.map +1 -0
  248. package/lib/gc/{gcConfigs.d.mts → gcConfigs.d.ts} +3 -3
  249. package/lib/gc/gcConfigs.d.ts.map +1 -0
  250. package/lib/gc/{gcConfigs.mjs → gcConfigs.js} +3 -3
  251. package/lib/gc/gcConfigs.js.map +1 -0
  252. package/lib/gc/{gcDefinitions.d.mts → gcDefinitions.d.ts} +30 -7
  253. package/lib/gc/gcDefinitions.d.ts.map +1 -0
  254. package/lib/gc/{gcDefinitions.mjs → gcDefinitions.js} +5 -1
  255. package/lib/gc/gcDefinitions.js.map +1 -0
  256. package/lib/gc/{gcHelpers.d.mts → gcHelpers.d.ts} +3 -3
  257. package/lib/gc/{gcHelpers.d.mts.map → gcHelpers.d.ts.map} +1 -1
  258. package/lib/gc/{gcHelpers.mjs → gcHelpers.js} +1 -1
  259. package/lib/gc/gcHelpers.js.map +1 -0
  260. package/lib/gc/{gcReferenceGraphAlgorithm.d.mts → gcReferenceGraphAlgorithm.d.ts} +2 -2
  261. package/lib/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  262. package/lib/gc/{gcReferenceGraphAlgorithm.mjs → gcReferenceGraphAlgorithm.js} +1 -1
  263. package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -0
  264. package/lib/gc/{gcSummaryDefinitions.d.mts → gcSummaryDefinitions.d.ts} +1 -1
  265. package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -0
  266. package/lib/gc/{gcSummaryDefinitions.mjs → gcSummaryDefinitions.js} +1 -1
  267. package/lib/gc/gcSummaryDefinitions.js.map +1 -0
  268. package/lib/gc/{gcSummaryStateTracker.d.mts → gcSummaryStateTracker.d.ts} +13 -6
  269. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
  270. package/lib/gc/{gcSummaryStateTracker.mjs → gcSummaryStateTracker.js} +17 -5
  271. package/lib/gc/gcSummaryStateTracker.js.map +1 -0
  272. package/lib/gc/{gcTelemetry.d.mts → gcTelemetry.d.ts} +8 -8
  273. package/lib/gc/gcTelemetry.d.ts.map +1 -0
  274. package/lib/gc/{gcTelemetry.mjs → gcTelemetry.js} +5 -5
  275. package/lib/gc/gcTelemetry.js.map +1 -0
  276. package/lib/gc/{gcUnreferencedStateTracker.d.mts → gcUnreferencedStateTracker.d.ts} +7 -2
  277. package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  278. package/lib/gc/{gcUnreferencedStateTracker.mjs → gcUnreferencedStateTracker.js} +12 -2
  279. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
  280. package/lib/gc/{index.d.mts → index.d.ts} +9 -9
  281. package/lib/gc/index.d.ts.map +1 -0
  282. package/lib/gc/{index.mjs → index.js} +8 -8
  283. package/lib/gc/index.js.map +1 -0
  284. package/lib/{index.d.mts → index.d.ts} +9 -21
  285. package/lib/index.d.ts.map +1 -0
  286. package/lib/index.js +12 -0
  287. package/lib/index.js.map +1 -0
  288. package/lib/{messageTypes.d.mts → messageTypes.d.ts} +5 -5
  289. package/lib/messageTypes.d.ts.map +1 -0
  290. package/lib/{messageTypes.mjs → messageTypes.js} +1 -1
  291. package/lib/messageTypes.js.map +1 -0
  292. package/lib/{metadata.d.mts → metadata.d.ts} +1 -1
  293. package/lib/metadata.d.ts.map +1 -0
  294. package/lib/{metadata.mjs → metadata.js} +1 -1
  295. package/lib/metadata.js.map +1 -0
  296. package/lib/opLifecycle/{batchManager.d.mts → batchManager.d.ts} +3 -3
  297. package/lib/opLifecycle/batchManager.d.ts.map +1 -0
  298. package/lib/opLifecycle/{batchManager.mjs → batchManager.js} +1 -1
  299. package/lib/opLifecycle/batchManager.js.map +1 -0
  300. package/lib/opLifecycle/{definitions.d.mts → definitions.d.ts} +3 -3
  301. package/lib/opLifecycle/definitions.d.ts.map +1 -0
  302. package/lib/opLifecycle/{definitions.mjs → definitions.js} +1 -1
  303. package/lib/opLifecycle/definitions.js.map +1 -0
  304. package/lib/opLifecycle/index.d.ts +13 -0
  305. package/lib/opLifecycle/index.d.ts.map +1 -0
  306. package/lib/opLifecycle/index.js +12 -0
  307. package/lib/opLifecycle/index.js.map +1 -0
  308. package/lib/opLifecycle/{opCompressor.d.mts → opCompressor.d.ts} +2 -2
  309. package/lib/opLifecycle/opCompressor.d.ts.map +1 -0
  310. package/lib/opLifecycle/{opCompressor.mjs → opCompressor.js} +3 -3
  311. package/lib/opLifecycle/opCompressor.js.map +1 -0
  312. package/lib/opLifecycle/{opDecompressor.d.mts → opDecompressor.d.ts} +2 -2
  313. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -0
  314. package/lib/opLifecycle/{opDecompressor.mjs → opDecompressor.js} +2 -2
  315. package/lib/opLifecycle/opDecompressor.js.map +1 -0
  316. package/lib/opLifecycle/{opGroupingManager.d.mts → opGroupingManager.d.ts} +2 -2
  317. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -0
  318. package/lib/opLifecycle/{opGroupingManager.mjs → opGroupingManager.js} +2 -11
  319. package/lib/opLifecycle/opGroupingManager.js.map +1 -0
  320. package/lib/opLifecycle/{opSplitter.d.mts → opSplitter.d.ts} +2 -2
  321. package/lib/opLifecycle/opSplitter.d.ts.map +1 -0
  322. package/lib/opLifecycle/{opSplitter.mjs → opSplitter.js} +3 -3
  323. package/lib/opLifecycle/opSplitter.js.map +1 -0
  324. package/lib/opLifecycle/{outbox.d.mts → outbox.d.ts} +8 -8
  325. package/lib/opLifecycle/outbox.d.ts.map +1 -0
  326. package/lib/opLifecycle/{outbox.mjs → outbox.js} +12 -4
  327. package/lib/opLifecycle/outbox.js.map +1 -0
  328. package/lib/opLifecycle/{remoteMessageProcessor.d.mts → remoteMessageProcessor.d.ts} +5 -5
  329. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
  330. package/lib/opLifecycle/{remoteMessageProcessor.mjs → remoteMessageProcessor.js} +2 -2
  331. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -0
  332. package/lib/{opProperties.d.mts → opProperties.d.ts} +1 -1
  333. package/lib/opProperties.d.ts.map +1 -0
  334. package/lib/{opProperties.mjs → opProperties.js} +1 -1
  335. package/lib/opProperties.js.map +1 -0
  336. package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
  337. package/lib/packageVersion.d.ts.map +1 -0
  338. package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
  339. package/lib/packageVersion.js.map +1 -0
  340. package/lib/{pendingStateManager.d.mts → pendingStateManager.d.ts} +3 -2
  341. package/lib/pendingStateManager.d.ts.map +1 -0
  342. package/lib/{pendingStateManager.mjs → pendingStateManager.js} +18 -10
  343. package/lib/pendingStateManager.js.map +1 -0
  344. package/lib/{scheduleManager.d.mts → scheduleManager.d.ts} +6 -3
  345. package/lib/scheduleManager.d.ts.map +1 -0
  346. package/lib/{scheduleManager.mjs → scheduleManager.js} +3 -3
  347. package/lib/scheduleManager.js.map +1 -0
  348. package/lib/{storageServiceWithAttachBlobs.d.mts → storageServiceWithAttachBlobs.d.ts} +1 -1
  349. package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -0
  350. package/lib/{storageServiceWithAttachBlobs.mjs → storageServiceWithAttachBlobs.js} +1 -1
  351. package/lib/storageServiceWithAttachBlobs.js.map +1 -0
  352. package/lib/summary/{index.d.mts → index.d.ts} +13 -13
  353. package/lib/summary/index.d.ts.map +1 -0
  354. package/lib/summary/{index.mjs → index.js} +12 -12
  355. package/lib/summary/index.js.map +1 -0
  356. package/lib/summary/{orderedClientElection.d.mts → orderedClientElection.d.ts} +5 -1
  357. package/lib/summary/orderedClientElection.d.ts.map +1 -0
  358. package/lib/summary/{orderedClientElection.mjs → orderedClientElection.js} +2 -2
  359. package/lib/summary/orderedClientElection.js.map +1 -0
  360. package/lib/summary/{runWhileConnectedCoordinator.d.mts → runWhileConnectedCoordinator.d.ts} +2 -2
  361. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  362. package/lib/summary/{runWhileConnectedCoordinator.mjs → runWhileConnectedCoordinator.js} +1 -1
  363. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
  364. package/lib/summary/{runningSummarizer.d.mts → runningSummarizer.d.ts} +12 -11
  365. package/lib/summary/runningSummarizer.d.ts.map +1 -0
  366. package/lib/summary/{runningSummarizer.mjs → runningSummarizer.js} +108 -75
  367. package/lib/summary/runningSummarizer.js.map +1 -0
  368. package/lib/summary/{summarizer.d.mts → summarizer.d.ts} +5 -5
  369. package/lib/summary/summarizer.d.ts.map +1 -0
  370. package/lib/summary/{summarizer.mjs → summarizer.js} +4 -4
  371. package/lib/summary/summarizer.js.map +1 -0
  372. package/lib/summary/{summarizerClientElection.d.mts → summarizerClientElection.d.ts} +3 -3
  373. package/lib/summary/summarizerClientElection.d.ts.map +1 -0
  374. package/lib/summary/{summarizerClientElection.mjs → summarizerClientElection.js} +1 -1
  375. package/lib/summary/summarizerClientElection.js.map +1 -0
  376. package/lib/summary/{summarizerHeuristics.d.mts → summarizerHeuristics.d.ts} +4 -4
  377. package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
  378. package/lib/summary/{summarizerHeuristics.mjs → summarizerHeuristics.js} +1 -1
  379. package/lib/summary/summarizerHeuristics.js.map +1 -0
  380. package/lib/summary/summarizerNode/{index.d.mts → index.d.ts} +4 -4
  381. package/lib/summary/summarizerNode/index.d.ts.map +1 -0
  382. package/lib/summary/summarizerNode/index.js +7 -0
  383. package/lib/summary/summarizerNode/index.js.map +1 -0
  384. package/lib/summary/summarizerNode/{summarizerNode.d.mts → summarizerNode.d.ts} +18 -8
  385. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  386. package/lib/summary/summarizerNode/{summarizerNode.mjs → summarizerNode.js} +41 -53
  387. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
  388. package/lib/summary/summarizerNode/{summarizerNodeUtils.d.mts → summarizerNodeUtils.d.ts} +11 -20
  389. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  390. package/lib/summary/summarizerNode/{summarizerNodeUtils.mjs → summarizerNodeUtils.js} +1 -20
  391. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
  392. package/lib/summary/summarizerNode/{summarizerNodeWithGc.d.mts → summarizerNodeWithGc.d.ts} +6 -7
  393. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  394. package/lib/summary/summarizerNode/{summarizerNodeWithGc.mjs → summarizerNodeWithGc.js} +12 -12
  395. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
  396. package/lib/summary/{summarizerTypes.d.mts → summarizerTypes.d.ts} +11 -22
  397. package/lib/summary/summarizerTypes.d.ts.map +1 -0
  398. package/lib/summary/{summarizerTypes.mjs → summarizerTypes.js} +1 -1
  399. package/lib/summary/summarizerTypes.js.map +1 -0
  400. package/lib/summary/{summaryCollection.d.mts → summaryCollection.d.ts} +1 -1
  401. package/lib/summary/summaryCollection.d.ts.map +1 -0
  402. package/lib/summary/{summaryCollection.mjs → summaryCollection.js} +1 -1
  403. package/lib/summary/summaryCollection.js.map +1 -0
  404. package/lib/summary/{summaryFormat.d.mts → summaryFormat.d.ts} +16 -3
  405. package/lib/summary/summaryFormat.d.ts.map +1 -0
  406. package/lib/summary/{summaryFormat.mjs → summaryFormat.js} +1 -1
  407. package/lib/summary/summaryFormat.js.map +1 -0
  408. package/lib/summary/{summaryGenerator.d.mts → summaryGenerator.d.ts} +7 -6
  409. package/lib/summary/summaryGenerator.d.ts.map +1 -0
  410. package/lib/summary/{summaryGenerator.mjs → summaryGenerator.js} +11 -2
  411. package/lib/summary/summaryGenerator.js.map +1 -0
  412. package/lib/summary/{summaryManager.d.mts → summaryManager.d.ts} +6 -7
  413. package/lib/summary/summaryManager.d.ts.map +1 -0
  414. package/lib/summary/{summaryManager.mjs → summaryManager.js} +4 -5
  415. package/lib/summary/summaryManager.js.map +1 -0
  416. package/lib/test/batchTracker.spec.js +88 -0
  417. package/lib/test/batchTracker.spec.js.map +1 -0
  418. package/lib/test/blobManager.spec.js +835 -0
  419. package/lib/test/blobManager.spec.js.map +1 -0
  420. package/lib/test/channelCollection.spec.js +141 -0
  421. package/lib/test/channelCollection.spec.js.map +1 -0
  422. package/lib/test/containerRuntime.spec.js +1748 -0
  423. package/lib/test/containerRuntime.spec.js.map +1 -0
  424. package/lib/test/dataStoreContext.spec.js +801 -0
  425. package/lib/test/dataStoreContext.spec.js.map +1 -0
  426. package/lib/test/dataStoreCreation.spec.js +312 -0
  427. package/lib/test/dataStoreCreation.spec.js.map +1 -0
  428. package/lib/test/dataStoreRegistry.spec.js +26 -0
  429. package/lib/test/dataStoreRegistry.spec.js.map +1 -0
  430. package/lib/test/fuzz/fuzzUtils.js +66 -0
  431. package/lib/test/fuzz/fuzzUtils.js.map +1 -0
  432. package/lib/test/fuzz/summarizer.fuzz.spec.js +31 -0
  433. package/lib/test/fuzz/summarizer.fuzz.spec.js.map +1 -0
  434. package/lib/test/fuzz/summarizerFuzzMocks.js +162 -0
  435. package/lib/test/fuzz/summarizerFuzzMocks.js.map +1 -0
  436. package/lib/test/fuzz/summarizerFuzzSuite.js +106 -0
  437. package/lib/test/fuzz/summarizerFuzzSuite.js.map +1 -0
  438. package/lib/test/gc/garbageCollection.spec.js +1465 -0
  439. package/lib/test/gc/garbageCollection.spec.js.map +1 -0
  440. package/lib/test/gc/gcConfigs.spec.js +690 -0
  441. package/lib/test/gc/gcConfigs.spec.js.map +1 -0
  442. package/lib/test/gc/gcHelpers.spec.js +110 -0
  443. package/lib/test/gc/gcHelpers.spec.js.map +1 -0
  444. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +68 -0
  445. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +1 -0
  446. package/lib/test/gc/gcStats.spec.js +391 -0
  447. package/lib/test/gc/gcStats.spec.js.map +1 -0
  448. package/lib/test/gc/gcSummaryStateTracker.spec.js +228 -0
  449. package/lib/test/gc/gcSummaryStateTracker.spec.js.map +1 -0
  450. package/lib/test/gc/gcTelemetry.spec.js +530 -0
  451. package/lib/test/gc/gcTelemetry.spec.js.map +1 -0
  452. package/lib/test/gc/gcUnitTestHelpers.js +29 -0
  453. package/lib/test/gc/gcUnitTestHelpers.js.map +1 -0
  454. package/lib/test/gc/gcUnreferencedStateTracker.spec.js +192 -0
  455. package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +1 -0
  456. package/lib/test/getPendingBlobs.spec.js +193 -0
  457. package/lib/test/getPendingBlobs.spec.js.map +1 -0
  458. package/lib/test/hardwareStats.spec.js +93 -0
  459. package/lib/test/hardwareStats.spec.js.map +1 -0
  460. package/lib/test/index.js +6 -0
  461. package/lib/test/index.js.map +1 -0
  462. package/lib/test/opLifecycle/OpGroupingManager.spec.js +225 -0
  463. package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +1 -0
  464. package/lib/test/opLifecycle/batchManager.spec.js +189 -0
  465. package/lib/test/opLifecycle/batchManager.spec.js.map +1 -0
  466. package/lib/test/opLifecycle/opCompressor.spec.js +74 -0
  467. package/lib/test/opLifecycle/opCompressor.spec.js.map +1 -0
  468. package/lib/test/opLifecycle/opDecompressor.spec.js +218 -0
  469. package/lib/test/opLifecycle/opDecompressor.spec.js.map +1 -0
  470. package/lib/test/opLifecycle/opSplitter.spec.js +272 -0
  471. package/lib/test/opLifecycle/opSplitter.spec.js.map +1 -0
  472. package/lib/test/opLifecycle/outbox.spec.js +675 -0
  473. package/lib/test/opLifecycle/outbox.spec.js.map +1 -0
  474. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +196 -0
  475. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +1 -0
  476. package/lib/test/pendingStateManager.spec.js +329 -0
  477. package/lib/test/pendingStateManager.spec.js.map +1 -0
  478. package/lib/test/scheduleManager.spec.js +270 -0
  479. package/lib/test/scheduleManager.spec.js.map +1 -0
  480. package/lib/test/summarizerNode.spec.js +326 -0
  481. package/lib/test/summarizerNode.spec.js.map +1 -0
  482. package/lib/test/summarizerNodeWithGc.spec.js +318 -0
  483. package/lib/test/summarizerNodeWithGc.spec.js.map +1 -0
  484. package/lib/test/summary/orderedClientElection.spec.js +535 -0
  485. package/lib/test/summary/orderedClientElection.spec.js.map +1 -0
  486. package/lib/test/summary/runningSummarizer.spec.js +1349 -0
  487. package/lib/test/summary/runningSummarizer.spec.js.map +1 -0
  488. package/lib/test/summary/summarizer.spec.js +29 -0
  489. package/lib/test/summary/summarizer.spec.js.map +1 -0
  490. package/lib/test/summary/summarizerClientElection.spec.js +436 -0
  491. package/lib/test/summary/summarizerClientElection.spec.js.map +1 -0
  492. package/lib/test/summary/summarizerHeuristics.spec.js +289 -0
  493. package/lib/test/summary/summarizerHeuristics.spec.js.map +1 -0
  494. package/lib/test/summary/summaryCollection.spec.js +200 -0
  495. package/lib/test/summary/summaryCollection.spec.js.map +1 -0
  496. package/lib/test/summary/summaryManager.spec.js +430 -0
  497. package/lib/test/summary/summaryManager.spec.js.map +1 -0
  498. package/lib/test/summary/testQuorumClients.js +34 -0
  499. package/lib/test/summary/testQuorumClients.js.map +1 -0
  500. package/lib/test/throttler.spec.js +175 -0
  501. package/lib/test/throttler.spec.js.map +1 -0
  502. package/lib/test/types/validateContainerRuntimePrevious.generated.js +180 -0
  503. package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +1 -0
  504. package/lib/{throttler.d.mts → throttler.d.ts} +1 -1
  505. package/lib/throttler.d.ts.map +1 -0
  506. package/lib/{throttler.mjs → throttler.js} +1 -1
  507. package/lib/throttler.js.map +1 -0
  508. package/package.json +99 -88
  509. package/src/batchTracker.ts +1 -1
  510. package/src/blobManager.ts +1 -1
  511. package/src/{dataStores.ts → channelCollection.ts} +520 -84
  512. package/src/connectionTelemetry.ts +42 -3
  513. package/src/containerHandleContext.ts +1 -1
  514. package/src/containerRuntime.ts +661 -464
  515. package/src/dataStore.ts +13 -15
  516. package/src/dataStoreContext.ts +257 -184
  517. package/src/dataStoreContexts.ts +1 -1
  518. package/src/deltaManagerSummarizerProxy.ts +132 -7
  519. package/src/gc/garbageCollection.ts +121 -46
  520. package/src/gc/gcConfigs.ts +3 -3
  521. package/src/gc/gcDefinitions.ts +30 -7
  522. package/src/gc/gcHelpers.ts +2 -2
  523. package/src/gc/gcReferenceGraphAlgorithm.ts +1 -1
  524. package/src/gc/gcSummaryStateTracker.ts +19 -7
  525. package/src/gc/gcTelemetry.ts +10 -9
  526. package/src/gc/gcUnreferencedStateTracker.ts +12 -1
  527. package/src/gc/index.ts +10 -8
  528. package/src/index.ts +16 -27
  529. package/src/messageTypes.ts +4 -4
  530. package/src/opLifecycle/README.md +2 -4
  531. package/src/opLifecycle/batchManager.ts +2 -2
  532. package/src/opLifecycle/definitions.ts +2 -2
  533. package/src/opLifecycle/index.ts +8 -8
  534. package/src/opLifecycle/opCompressor.ts +3 -3
  535. package/src/opLifecycle/opDecompressor.ts +3 -3
  536. package/src/opLifecycle/opGroupingManager.ts +3 -12
  537. package/src/opLifecycle/opSplitter.ts +3 -3
  538. package/src/opLifecycle/outbox.ts +29 -9
  539. package/src/opLifecycle/remoteMessageProcessor.ts +4 -4
  540. package/src/packageVersion.ts +1 -1
  541. package/src/pendingStateManager.ts +19 -13
  542. package/src/scheduleManager.ts +4 -4
  543. package/src/summary/index.ts +13 -12
  544. package/src/summary/orderedClientElection.ts +1 -1
  545. package/src/summary/runWhileConnectedCoordinator.ts +1 -1
  546. package/src/summary/runningSummarizer.ts +141 -93
  547. package/src/summary/summarizer.ts +7 -7
  548. package/src/summary/summarizerClientElection.ts +2 -2
  549. package/src/summary/summarizerHeuristics.ts +3 -3
  550. package/src/summary/summarizerNode/index.ts +6 -3
  551. package/src/summary/summarizerNode/summarizerNode.ts +54 -69
  552. package/src/summary/summarizerNode/summarizerNodeUtils.ts +16 -34
  553. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +11 -17
  554. package/src/summary/summarizerTypes.ts +12 -24
  555. package/src/summary/summaryFormat.ts +16 -2
  556. package/src/summary/summaryGenerator.ts +16 -4
  557. package/src/summary/summaryManager.ts +6 -7
  558. package/tsconfig.cjs.json +7 -0
  559. package/tsconfig.json +2 -5
  560. package/dist/dataStores.d.ts +0 -149
  561. package/dist/dataStores.d.ts.map +0 -1
  562. package/dist/dataStores.js.map +0 -1
  563. package/dist/deltaManagerProxyBase.d.ts.map +0 -1
  564. package/dist/deltaManagerProxyBase.js +0 -77
  565. package/dist/deltaManagerProxyBase.js.map +0 -1
  566. package/lib/batchTracker.d.mts.map +0 -1
  567. package/lib/batchTracker.mjs.map +0 -1
  568. package/lib/blobManager.d.mts.map +0 -1
  569. package/lib/blobManager.mjs.map +0 -1
  570. package/lib/connectionTelemetry.d.mts.map +0 -1
  571. package/lib/connectionTelemetry.mjs.map +0 -1
  572. package/lib/containerHandleContext.d.mts.map +0 -1
  573. package/lib/containerHandleContext.mjs.map +0 -1
  574. package/lib/containerRuntime.d.mts.map +0 -1
  575. package/lib/containerRuntime.mjs.map +0 -1
  576. package/lib/dataStore.d.mts.map +0 -1
  577. package/lib/dataStore.mjs.map +0 -1
  578. package/lib/dataStoreContext.d.mts.map +0 -1
  579. package/lib/dataStoreContext.mjs.map +0 -1
  580. package/lib/dataStoreContexts.d.mts.map +0 -1
  581. package/lib/dataStoreContexts.mjs.map +0 -1
  582. package/lib/dataStoreRegistry.d.mts.map +0 -1
  583. package/lib/dataStoreRegistry.mjs.map +0 -1
  584. package/lib/dataStores.d.mts +0 -149
  585. package/lib/dataStores.d.mts.map +0 -1
  586. package/lib/dataStores.mjs.map +0 -1
  587. package/lib/deltaManagerProxyBase.d.mts +0 -35
  588. package/lib/deltaManagerProxyBase.d.mts.map +0 -1
  589. package/lib/deltaManagerProxyBase.mjs +0 -73
  590. package/lib/deltaManagerProxyBase.mjs.map +0 -1
  591. package/lib/deltaManagerSummarizerProxy.d.mts +0 -19
  592. package/lib/deltaManagerSummarizerProxy.d.mts.map +0 -1
  593. package/lib/deltaManagerSummarizerProxy.mjs +0 -38
  594. package/lib/deltaManagerSummarizerProxy.mjs.map +0 -1
  595. package/lib/deltaScheduler.d.mts.map +0 -1
  596. package/lib/deltaScheduler.mjs.map +0 -1
  597. package/lib/error.d.mts.map +0 -1
  598. package/lib/error.mjs.map +0 -1
  599. package/lib/gc/garbageCollection.d.mts.map +0 -1
  600. package/lib/gc/garbageCollection.mjs.map +0 -1
  601. package/lib/gc/gcConfigs.d.mts.map +0 -1
  602. package/lib/gc/gcConfigs.mjs.map +0 -1
  603. package/lib/gc/gcDefinitions.d.mts.map +0 -1
  604. package/lib/gc/gcDefinitions.mjs.map +0 -1
  605. package/lib/gc/gcHelpers.mjs.map +0 -1
  606. package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +0 -1
  607. package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +0 -1
  608. package/lib/gc/gcSummaryDefinitions.d.mts.map +0 -1
  609. package/lib/gc/gcSummaryDefinitions.mjs.map +0 -1
  610. package/lib/gc/gcSummaryStateTracker.d.mts.map +0 -1
  611. package/lib/gc/gcSummaryStateTracker.mjs.map +0 -1
  612. package/lib/gc/gcTelemetry.d.mts.map +0 -1
  613. package/lib/gc/gcTelemetry.mjs.map +0 -1
  614. package/lib/gc/gcUnreferencedStateTracker.d.mts.map +0 -1
  615. package/lib/gc/gcUnreferencedStateTracker.mjs.map +0 -1
  616. package/lib/gc/index.d.mts.map +0 -1
  617. package/lib/gc/index.mjs.map +0 -1
  618. package/lib/index.d.mts.map +0 -1
  619. package/lib/index.mjs +0 -24
  620. package/lib/index.mjs.map +0 -1
  621. package/lib/messageTypes.d.mts.map +0 -1
  622. package/lib/messageTypes.mjs.map +0 -1
  623. package/lib/metadata.d.mts.map +0 -1
  624. package/lib/metadata.mjs.map +0 -1
  625. package/lib/opLifecycle/batchManager.d.mts.map +0 -1
  626. package/lib/opLifecycle/batchManager.mjs.map +0 -1
  627. package/lib/opLifecycle/definitions.d.mts.map +0 -1
  628. package/lib/opLifecycle/definitions.mjs.map +0 -1
  629. package/lib/opLifecycle/index.d.mts +0 -13
  630. package/lib/opLifecycle/index.d.mts.map +0 -1
  631. package/lib/opLifecycle/index.mjs +0 -12
  632. package/lib/opLifecycle/index.mjs.map +0 -1
  633. package/lib/opLifecycle/opCompressor.d.mts.map +0 -1
  634. package/lib/opLifecycle/opCompressor.mjs.map +0 -1
  635. package/lib/opLifecycle/opDecompressor.d.mts.map +0 -1
  636. package/lib/opLifecycle/opDecompressor.mjs.map +0 -1
  637. package/lib/opLifecycle/opGroupingManager.d.mts.map +0 -1
  638. package/lib/opLifecycle/opGroupingManager.mjs.map +0 -1
  639. package/lib/opLifecycle/opSplitter.d.mts.map +0 -1
  640. package/lib/opLifecycle/opSplitter.mjs.map +0 -1
  641. package/lib/opLifecycle/outbox.d.mts.map +0 -1
  642. package/lib/opLifecycle/outbox.mjs.map +0 -1
  643. package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +0 -1
  644. package/lib/opLifecycle/remoteMessageProcessor.mjs.map +0 -1
  645. package/lib/opProperties.d.mts.map +0 -1
  646. package/lib/opProperties.mjs.map +0 -1
  647. package/lib/packageVersion.d.mts.map +0 -1
  648. package/lib/packageVersion.mjs.map +0 -1
  649. package/lib/pendingStateManager.d.mts.map +0 -1
  650. package/lib/pendingStateManager.mjs.map +0 -1
  651. package/lib/scheduleManager.d.mts.map +0 -1
  652. package/lib/scheduleManager.mjs.map +0 -1
  653. package/lib/storageServiceWithAttachBlobs.d.mts.map +0 -1
  654. package/lib/storageServiceWithAttachBlobs.mjs.map +0 -1
  655. package/lib/summary/index.d.mts.map +0 -1
  656. package/lib/summary/index.mjs.map +0 -1
  657. package/lib/summary/orderedClientElection.d.mts.map +0 -1
  658. package/lib/summary/orderedClientElection.mjs.map +0 -1
  659. package/lib/summary/runWhileConnectedCoordinator.d.mts.map +0 -1
  660. package/lib/summary/runWhileConnectedCoordinator.mjs.map +0 -1
  661. package/lib/summary/runningSummarizer.d.mts.map +0 -1
  662. package/lib/summary/runningSummarizer.mjs.map +0 -1
  663. package/lib/summary/summarizer.d.mts.map +0 -1
  664. package/lib/summary/summarizer.mjs.map +0 -1
  665. package/lib/summary/summarizerClientElection.d.mts.map +0 -1
  666. package/lib/summary/summarizerClientElection.mjs.map +0 -1
  667. package/lib/summary/summarizerHeuristics.d.mts.map +0 -1
  668. package/lib/summary/summarizerHeuristics.mjs.map +0 -1
  669. package/lib/summary/summarizerNode/index.d.mts.map +0 -1
  670. package/lib/summary/summarizerNode/index.mjs +0 -7
  671. package/lib/summary/summarizerNode/index.mjs.map +0 -1
  672. package/lib/summary/summarizerNode/summarizerNode.d.mts.map +0 -1
  673. package/lib/summary/summarizerNode/summarizerNode.mjs.map +0 -1
  674. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +0 -1
  675. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +0 -1
  676. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +0 -1
  677. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +0 -1
  678. package/lib/summary/summarizerTypes.d.mts.map +0 -1
  679. package/lib/summary/summarizerTypes.mjs.map +0 -1
  680. package/lib/summary/summaryCollection.d.mts.map +0 -1
  681. package/lib/summary/summaryCollection.mjs.map +0 -1
  682. package/lib/summary/summaryFormat.d.mts.map +0 -1
  683. package/lib/summary/summaryFormat.mjs.map +0 -1
  684. package/lib/summary/summaryGenerator.d.mts.map +0 -1
  685. package/lib/summary/summaryGenerator.mjs.map +0 -1
  686. package/lib/summary/summaryManager.d.mts.map +0 -1
  687. package/lib/summary/summaryManager.mjs.map +0 -1
  688. package/lib/throttler.d.mts.map +0 -1
  689. package/lib/throttler.mjs.map +0 -1
  690. package/src/deltaManagerProxyBase.ts +0 -111
@@ -0,0 +1,535 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { strict as assert } from "assert";
6
+ import { MockLogger } from "@fluidframework/telemetry-utils";
7
+ import { OrderedClientCollection, OrderedClientElection, } from "../../summary/index.js";
8
+ import { TestQuorumClients } from "./testQuorumClients.js";
9
+ describe("Ordered Client Collection", () => {
10
+ let orderedClients;
11
+ const mockLogger = new MockLogger();
12
+ const testQuorum = new TestQuorumClients();
13
+ let currentSequenceNumber = 0;
14
+ const testDeltaManager = {
15
+ get lastSequenceNumber() {
16
+ return currentSequenceNumber;
17
+ },
18
+ };
19
+ function addClient(clientId, sequenceNumber, interactive = true) {
20
+ if (sequenceNumber > currentSequenceNumber) {
21
+ currentSequenceNumber = sequenceNumber;
22
+ }
23
+ const details = { capabilities: { interactive } };
24
+ const c = { details };
25
+ const client = {
26
+ client: c,
27
+ sequenceNumber,
28
+ };
29
+ testQuorum.addClient(clientId, client);
30
+ }
31
+ function removeClient(clientId, opCount = 1) {
32
+ currentSequenceNumber += opCount;
33
+ testQuorum.removeClient(clientId);
34
+ }
35
+ function createOrderedClientCollection(initialClients = []) {
36
+ for (const [id, seq, int] of initialClients) {
37
+ addClient(id, seq, int);
38
+ }
39
+ orderedClients = new OrderedClientCollection(mockLogger, testDeltaManager, testQuorum);
40
+ return orderedClients;
41
+ }
42
+ function assertCollectionState(expectedCount, message = "") {
43
+ const prefix = message ? `${message} - ` : "";
44
+ assert.strictEqual(orderedClients.count, expectedCount, `${prefix}Invalid client count: ${orderedClients.count} !== ${expectedCount}`);
45
+ }
46
+ function assertOrderedClientIds(...expectedIds) {
47
+ const actualIds = orderedClients.getAllClients();
48
+ assert.strictEqual(actualIds.length, expectedIds.length, `Unexpected count of ordered client ids: ${actualIds.length} !== ${expectedIds.length}`);
49
+ for (let i = 0; i < actualIds.length; i++) {
50
+ assert.strictEqual(actualIds[i].clientId, expectedIds[i], `Unexpected ordered client id at index ${i}: ${actualIds[i].clientId} !== ${expectedIds[i]}`);
51
+ }
52
+ }
53
+ afterEach(() => {
54
+ mockLogger.events = [];
55
+ testQuorum.reset();
56
+ currentSequenceNumber = 0;
57
+ });
58
+ describe("Initialize", () => {
59
+ it("Should initialize with empty quorum", () => {
60
+ createOrderedClientCollection();
61
+ assertCollectionState(0);
62
+ assertOrderedClientIds();
63
+ });
64
+ it("Should initialize with correct count", () => {
65
+ createOrderedClientCollection([
66
+ ["a", 1, true],
67
+ ["b", 2, true],
68
+ ["s", 5, false],
69
+ ["c", 9, true],
70
+ ]);
71
+ assertCollectionState(4);
72
+ assertOrderedClientIds("a", "b", "s", "c");
73
+ });
74
+ it("Should initialize in correct order", () => {
75
+ createOrderedClientCollection([
76
+ ["c", 9, true],
77
+ ["b", 2, true],
78
+ ["a", 1, true],
79
+ ["s", 5, false],
80
+ ]);
81
+ assertCollectionState(4);
82
+ assertOrderedClientIds("a", "b", "s", "c");
83
+ });
84
+ });
85
+ describe("Ordered Client Election", () => {
86
+ let election;
87
+ let electionEventCount = 0;
88
+ function createOrderedClientElection(initialClients = [], initialState) {
89
+ createOrderedClientCollection(initialClients);
90
+ if (initialState !== undefined &&
91
+ initialState.electionSequenceNumber > currentSequenceNumber) {
92
+ currentSequenceNumber = initialState.electionSequenceNumber;
93
+ }
94
+ election = new OrderedClientElection(mockLogger.toTelemetryLogger(), orderedClients, initialState ?? currentSequenceNumber, (c) => c.client.details.capabilities.interactive);
95
+ election.on("election", () => electionEventCount++);
96
+ return election;
97
+ }
98
+ function incrementElectedClient(sequenceNumber = currentSequenceNumber) {
99
+ if (sequenceNumber > currentSequenceNumber) {
100
+ currentSequenceNumber = sequenceNumber;
101
+ }
102
+ election.incrementElectedClient(sequenceNumber);
103
+ }
104
+ function resetElectedClient(sequenceNumber = currentSequenceNumber) {
105
+ if (sequenceNumber > currentSequenceNumber) {
106
+ currentSequenceNumber = sequenceNumber;
107
+ }
108
+ election.resetElectedClient(sequenceNumber);
109
+ }
110
+ function assertElectionState(expectedTotalCount, expectedEligibleCount, expectedElectedClientId, expectedElectionSequenceNumber, message = "") {
111
+ assertCollectionState(expectedTotalCount, message);
112
+ const prefix = message ? `${message} - ` : "";
113
+ assert.strictEqual(election.eligibleCount, expectedEligibleCount, `${prefix}Invalid eligible count: ${election.eligibleCount} !== ${expectedEligibleCount}`);
114
+ assert.strictEqual(election.electedClient?.clientId, expectedElectedClientId, `${prefix}Invalid elected client id: ${election.electedClient?.clientId} !== ${expectedElectedClientId}`);
115
+ assert.strictEqual(election.electionSequenceNumber, expectedElectionSequenceNumber, `${prefix}Invalid election seq #: ${election.electionSequenceNumber} !== ${expectedElectionSequenceNumber}`);
116
+ }
117
+ function assertEvents(expectedElectionCount) {
118
+ assert.strictEqual(electionEventCount, expectedElectionCount, `Unexpected election event count: ${electionEventCount} !== ${expectedElectionCount}`);
119
+ }
120
+ function assertOrderedEligibleClientIds(...expectedIds) {
121
+ const actualIds = election.getAllEligibleClients();
122
+ assert.strictEqual(actualIds.length, expectedIds.length, `Unexpected count of ordered eligible client ids: ${actualIds.length} !== ${expectedIds.length}`);
123
+ for (let i = 0; i < actualIds.length; i++) {
124
+ assert.strictEqual(actualIds[i].clientId, expectedIds[i], `Unexpected ordered eligible client id at index ${i}: ${actualIds[i].clientId} !== ${expectedIds[i]}`);
125
+ }
126
+ }
127
+ afterEach(() => {
128
+ electionEventCount = 0;
129
+ });
130
+ describe("Initialize", () => {
131
+ const emptySerializedElection = {
132
+ electedClientId: undefined,
133
+ electedParentId: undefined,
134
+ electionSequenceNumber: 101,
135
+ };
136
+ it("Should initialize with empty quorum", () => {
137
+ createOrderedClientElection();
138
+ assertElectionState(0, 0, undefined, 0);
139
+ assertOrderedEligibleClientIds();
140
+ });
141
+ it("Should initialize with correct client counts and elected client", () => {
142
+ createOrderedClientElection([
143
+ ["a", 1, true],
144
+ ["b", 2, true],
145
+ ["s", 5, false],
146
+ ["c", 9, true],
147
+ ]);
148
+ assertElectionState(4, 3, "a", 9);
149
+ assertOrderedEligibleClientIds("a", "b", "c");
150
+ });
151
+ it("Should initialize with empty quorum at specific sequence number", () => {
152
+ currentSequenceNumber = 99;
153
+ createOrderedClientElection();
154
+ assertElectionState(0, 0, undefined, 99);
155
+ assertOrderedEligibleClientIds();
156
+ });
157
+ it("Should initialize with empty quorum and initial state", () => {
158
+ createOrderedClientElection(undefined, emptySerializedElection);
159
+ assertElectionState(0, 0, undefined, 101);
160
+ assertOrderedEligibleClientIds();
161
+ });
162
+ it("Should log error with empty quorum and initially elected client", () => {
163
+ const clientId = "x";
164
+ createOrderedClientElection(undefined, emptySerializedElection);
165
+ assertElectionState(0, 0, undefined, 101);
166
+ mockLogger.matchEvents([{ eventName: "InitialElectedClientNotFound", clientId }]);
167
+ assertOrderedEligibleClientIds();
168
+ });
169
+ it("Should initialize with correct client counts and elected client from initial state", () => {
170
+ createOrderedClientElection([
171
+ ["a", 1, true],
172
+ ["b", 2, true],
173
+ ["s", 5, false],
174
+ ["c", 9, true],
175
+ ], { electedClientId: "b", electedParentId: "b", electionSequenceNumber: 4321 });
176
+ assertElectionState(4, 3, "b", 4321);
177
+ assertOrderedEligibleClientIds("a", "b", "c");
178
+ });
179
+ it("Should log error and elect next eligible when initially elected client is ineligible", () => {
180
+ createOrderedClientElection([
181
+ ["a", 1, true],
182
+ ["b", 2, true],
183
+ ["s", 5, false],
184
+ ["s2", 7, false],
185
+ ["c", 9, true],
186
+ ], { electedClientId: "s", electedParentId: "s", electionSequenceNumber: 4321 });
187
+ assertElectionState(5, 3, "c", 4321);
188
+ mockLogger.matchEvents([
189
+ {
190
+ eventName: "InitialElectedClientIneligible",
191
+ clientId: "s",
192
+ electedClientId: "c",
193
+ },
194
+ ]);
195
+ assertOrderedEligibleClientIds("a", "b", "c");
196
+ });
197
+ it("Should log error and elect undefined when initially elected client is ineligible and last", () => {
198
+ createOrderedClientElection([
199
+ ["a", 1, true],
200
+ ["b", 2, true],
201
+ ["s", 5, false],
202
+ ["s2", 7, false],
203
+ ], { electedClientId: "s", electedParentId: "s", electionSequenceNumber: 4321 });
204
+ assertElectionState(4, 2, undefined, 4321);
205
+ mockLogger.matchEvents([
206
+ {
207
+ eventName: "InitialElectedClientIneligible",
208
+ clientId: "s",
209
+ electedClientId: undefined,
210
+ },
211
+ ]);
212
+ assertOrderedEligibleClientIds("a", "b");
213
+ });
214
+ it("Should log error when initially elected client is not found", () => {
215
+ createOrderedClientElection([
216
+ ["a", 1, true],
217
+ ["b", 2, true],
218
+ ["s", 5, false],
219
+ ["c", 9, true],
220
+ ], { electedClientId: "x", electedParentId: "x", electionSequenceNumber: 4321 });
221
+ assertElectionState(4, 3, undefined, 4321);
222
+ mockLogger.matchEvents([
223
+ { eventName: "InitialElectedClientNotFound", clientId: "x" },
224
+ ]);
225
+ assertOrderedEligibleClientIds("a", "b", "c");
226
+ });
227
+ });
228
+ describe("Add Client", () => {
229
+ it("Should add ineligible client without impacting eligible clients", () => {
230
+ createOrderedClientElection([
231
+ ["a", 1, true],
232
+ ["b", 2, true],
233
+ ["s", 5, false],
234
+ ["c", 9, true],
235
+ ]);
236
+ addClient("n", 100, false);
237
+ assertElectionState(5, 3, "a", 9);
238
+ assertEvents(0);
239
+ assertOrderedEligibleClientIds("a", "b", "c");
240
+ });
241
+ it("Should add ineligible client to empty quorum without impacting eligible clients", () => {
242
+ createOrderedClientElection();
243
+ addClient("n", 100, false);
244
+ assertElectionState(1, 0, undefined, 0);
245
+ assertEvents(0);
246
+ assertOrderedEligibleClientIds();
247
+ });
248
+ it("Should add and elect eligible client to empty quorum", () => {
249
+ createOrderedClientElection();
250
+ addClient("n", 100);
251
+ assertElectionState(1, 1, "n", 100);
252
+ assertEvents(1);
253
+ assertOrderedEligibleClientIds("n");
254
+ });
255
+ it("Should add eligible client to end", () => {
256
+ createOrderedClientElection([
257
+ ["a", 1, true],
258
+ ["b", 2, true],
259
+ ["s", 5, false],
260
+ ["c", 9, true],
261
+ ]);
262
+ addClient("n", 100);
263
+ assertElectionState(5, 4, "a", 9);
264
+ assertEvents(0);
265
+ assertOrderedEligibleClientIds("a", "b", "c", "n");
266
+ });
267
+ it("Should add eligible client to middle", () => {
268
+ // Questionable test, since this shouldn't really happen.
269
+ createOrderedClientElection([
270
+ ["a", 1, true],
271
+ ["b", 2, true],
272
+ ["s", 5, false],
273
+ ["c", 9, true],
274
+ ]);
275
+ addClient("n", 3);
276
+ assertElectionState(5, 4, "a", 9);
277
+ assertEvents(0);
278
+ assertOrderedEligibleClientIds("a", "b", "n", "c");
279
+ });
280
+ it("Should add eligible client to front", () => {
281
+ // Questionable test, since this shouldn't really happen.
282
+ createOrderedClientElection([
283
+ ["a", 1, true],
284
+ ["b", 2, true],
285
+ ["s", 5, false],
286
+ ["c", 9, true],
287
+ ]);
288
+ addClient("n", 0);
289
+ assertElectionState(5, 4, "a", 9);
290
+ assertEvents(0);
291
+ assertOrderedEligibleClientIds("n", "a", "b", "c");
292
+ });
293
+ });
294
+ describe("Remove Client", () => {
295
+ it("Should log error when removing a client from empty quorum", () => {
296
+ createOrderedClientElection();
297
+ const clientId = "x";
298
+ removeClient(clientId);
299
+ mockLogger.matchEvents([{ eventName: "ClientNotFound", clientId }]);
300
+ assertElectionState(0, 0, undefined, 0);
301
+ assertEvents(0);
302
+ assertOrderedEligibleClientIds();
303
+ });
304
+ it("Should log error when removing a client that doesn't exist", () => {
305
+ createOrderedClientElection([
306
+ ["a", 1, true],
307
+ ["b", 2, true],
308
+ ["s", 5, false],
309
+ ["c", 9, true],
310
+ ]);
311
+ const clientId = "x";
312
+ removeClient(clientId);
313
+ mockLogger.matchEvents([{ eventName: "ClientNotFound", clientId }]);
314
+ assertElectionState(4, 3, "a", 9);
315
+ assertEvents(0);
316
+ assertOrderedEligibleClientIds("a", "b", "c");
317
+ });
318
+ it("Should remove ineligible client", () => {
319
+ createOrderedClientElection([
320
+ ["a", 1, true],
321
+ ["b", 2, true],
322
+ ["s", 5, false],
323
+ ["c", 9, true],
324
+ ]);
325
+ removeClient("s", 5);
326
+ assertElectionState(3, 3, "a", 9);
327
+ assertEvents(0);
328
+ assertOrderedEligibleClientIds("a", "b", "c");
329
+ });
330
+ it("Should remove other eligible client from end", () => {
331
+ createOrderedClientElection([
332
+ ["a", 1, true],
333
+ ["b", 2, true],
334
+ ["s", 5, false],
335
+ ["c", 9, true],
336
+ ]);
337
+ removeClient("c", 5);
338
+ assertElectionState(3, 2, "a", 9);
339
+ assertEvents(0);
340
+ assertOrderedEligibleClientIds("a", "b");
341
+ });
342
+ it("Should remove elected eligible client from end", () => {
343
+ createOrderedClientElection([
344
+ ["a", 1, true],
345
+ ["b", 2, true],
346
+ ["s", 5, false],
347
+ ["c", 9, true],
348
+ ]);
349
+ incrementElectedClient(12); // elect b
350
+ incrementElectedClient(19); // elect c
351
+ assertElectionState(4, 3, "c", 19);
352
+ assertEvents(2);
353
+ removeClient("c", 5);
354
+ assertElectionState(3, 2, "a", 24);
355
+ assertEvents(3);
356
+ assertOrderedEligibleClientIds("a", "b");
357
+ });
358
+ it("Should remove other eligible client from middle", () => {
359
+ createOrderedClientElection([
360
+ ["a", 1, true],
361
+ ["b", 2, true],
362
+ ["s", 5, false],
363
+ ["c", 9, true],
364
+ ]);
365
+ removeClient("b", 5);
366
+ assertElectionState(3, 2, "a", 9);
367
+ assertEvents(0);
368
+ assertOrderedEligibleClientIds("a", "c");
369
+ });
370
+ it("Should remove elected eligible client from middle", () => {
371
+ createOrderedClientElection([
372
+ ["a", 1, true],
373
+ ["b", 2, true],
374
+ ["s", 5, false],
375
+ ["c", 9, true],
376
+ ]);
377
+ incrementElectedClient(12); // elect b
378
+ assertElectionState(4, 3, "b", 12);
379
+ assertEvents(1);
380
+ removeClient("b", 5);
381
+ assertElectionState(3, 2, "c", 17);
382
+ assertEvents(2);
383
+ assertOrderedEligibleClientIds("a", "c");
384
+ });
385
+ it("Should remove elected eligible client from front", () => {
386
+ createOrderedClientElection([
387
+ ["a", 1, true],
388
+ ["b", 2, true],
389
+ ["s", 5, false],
390
+ ["c", 9, true],
391
+ ]);
392
+ removeClient("a", 5);
393
+ assertElectionState(3, 2, "b", 14);
394
+ assertEvents(1);
395
+ assertOrderedEligibleClientIds("b", "c");
396
+ });
397
+ it("Should remove other eligible client from front", () => {
398
+ createOrderedClientElection([
399
+ ["a", 1, true],
400
+ ["b", 2, true],
401
+ ["s", 5, false],
402
+ ["c", 9, true],
403
+ ]);
404
+ incrementElectedClient(12); // elect b
405
+ assertElectionState(4, 3, "b", 12);
406
+ assertEvents(1);
407
+ removeClient("a", 5);
408
+ assertElectionState(3, 2, "b", 12);
409
+ assertEvents(1);
410
+ assertOrderedEligibleClientIds("b", "c");
411
+ });
412
+ it("Should elect next client when ineligible client is elected, then elected client is removed", () => {
413
+ createOrderedClientElection([
414
+ ["a", 1, true],
415
+ ["b", 2, true],
416
+ ["s", 5, false],
417
+ ["c", 9, true],
418
+ ], { electedClientId: "s", electedParentId: "s", electionSequenceNumber: 4321 });
419
+ removeClient("s", 1111);
420
+ assertElectionState(3, 3, "c", 4321);
421
+ removeClient("c", 1111);
422
+ assertElectionState(2, 2, "a", 6543);
423
+ assertEvents(1);
424
+ });
425
+ });
426
+ describe("Increment elected client", () => {
427
+ it("Should do nothing in empty quorum", () => {
428
+ createOrderedClientElection();
429
+ incrementElectedClient();
430
+ assertElectionState(0, 0, undefined, 0);
431
+ assertEvents(0);
432
+ });
433
+ it("Should go to next client from first", () => {
434
+ createOrderedClientElection([
435
+ ["a", 1, true],
436
+ ["b", 2, true],
437
+ ["s", 5, false],
438
+ ["c", 9, true],
439
+ ]);
440
+ incrementElectedClient(12);
441
+ assertElectionState(4, 3, "b", 12);
442
+ assertEvents(1);
443
+ });
444
+ it("Should go to next client from middle", () => {
445
+ createOrderedClientElection([
446
+ ["a", 1, true],
447
+ ["b", 2, true],
448
+ ["s", 5, false],
449
+ ["c", 9, true],
450
+ ]);
451
+ incrementElectedClient(12);
452
+ incrementElectedClient(16);
453
+ assertElectionState(4, 3, "c", 16);
454
+ assertEvents(2);
455
+ });
456
+ it("Should increment to new nodes", () => {
457
+ createOrderedClientElection([
458
+ ["a", 1, true],
459
+ ["b", 2, true],
460
+ ["s", 5, false],
461
+ ["c", 9, true],
462
+ ]);
463
+ incrementElectedClient(16);
464
+ incrementElectedClient(27); // no-op
465
+ addClient("d", 100);
466
+ incrementElectedClient(100);
467
+ addClient("e", 101);
468
+ assertElectionState(6, 5, "d", 100);
469
+ incrementElectedClient(111);
470
+ assertElectionState(6, 5, "e", 111);
471
+ addClient("f", 200);
472
+ incrementElectedClient(205);
473
+ assertElectionState(7, 6, "f", 205);
474
+ incrementElectedClient(221);
475
+ assertElectionState(7, 6, "a", 221);
476
+ addClient("g", 229);
477
+ assertElectionState(8, 7, "a", 221);
478
+ });
479
+ it("Should increment when ineligible client is elected", () => {
480
+ createOrderedClientElection([
481
+ ["a", 1, true],
482
+ ["s", 2, false],
483
+ ["b", 5, true],
484
+ ["c", 9, true],
485
+ ], { electedClientId: "s", electedParentId: "s", electionSequenceNumber: 4321 });
486
+ assertElectionState(4, 3, "b", 4321);
487
+ incrementElectedClient(7777);
488
+ assertElectionState(4, 3, "c", 7777);
489
+ assertEvents(1);
490
+ });
491
+ });
492
+ describe("Reset elected client", () => {
493
+ it("Should reset to first when not first", () => {
494
+ createOrderedClientElection([
495
+ ["a", 1, true],
496
+ ["b", 2, true],
497
+ ["s", 5, false],
498
+ ["c", 9, true],
499
+ ]);
500
+ incrementElectedClient(12);
501
+ incrementElectedClient(15);
502
+ resetElectedClient(19);
503
+ assertElectionState(4, 3, "a", 19);
504
+ assertEvents(3);
505
+ });
506
+ it("Should reset to first when undefined at end", () => {
507
+ createOrderedClientElection([
508
+ ["a", 1, true],
509
+ ["b", 2, true],
510
+ ["s", 5, false],
511
+ ["c", 9, true],
512
+ ]);
513
+ incrementElectedClient(12);
514
+ incrementElectedClient(15);
515
+ incrementElectedClient(19);
516
+ resetElectedClient(31); // no-op
517
+ assertElectionState(4, 3, "a", 19);
518
+ assertEvents(3);
519
+ });
520
+ it("Should reset to first when ineligible client is elected", () => {
521
+ createOrderedClientElection([
522
+ ["a", 1, true],
523
+ ["s", 2, false],
524
+ ["b", 5, true],
525
+ ["c", 9, true],
526
+ ], { electedClientId: "s", electedParentId: "s", electionSequenceNumber: 4321 });
527
+ assertElectionState(4, 3, "b", 4321);
528
+ resetElectedClient(7777);
529
+ assertElectionState(4, 3, "a", 7777);
530
+ assertEvents(1);
531
+ });
532
+ });
533
+ });
534
+ });
535
+ //# sourceMappingURL=orderedClientElection.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orderedClientElection.spec.js","sourceRoot":"","sources":["../../../src/test/summary/orderedClientElection.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 { ISequencedClient } from \"@fluidframework/protocol-definitions\";\nimport { MockLogger } from \"@fluidframework/telemetry-utils\";\nimport {\n\tIOrderedClientCollection,\n\tIOrderedClientElection,\n\tISerializedElection,\n\tITrackedClient,\n\tOrderedClientCollection,\n\tOrderedClientElection,\n} from \"../../summary/index.js\";\nimport { TestQuorumClients } from \"./testQuorumClients.js\";\n\ndescribe(\"Ordered Client Collection\", () => {\n\tlet orderedClients: IOrderedClientCollection;\n\tconst mockLogger = new MockLogger();\n\tconst testQuorum = new TestQuorumClients();\n\n\tlet currentSequenceNumber: number = 0;\n\tconst testDeltaManager = {\n\t\tget lastSequenceNumber() {\n\t\t\treturn currentSequenceNumber;\n\t\t},\n\t};\n\n\tfunction addClient(clientId: string, sequenceNumber: number, interactive = true) {\n\t\tif (sequenceNumber > currentSequenceNumber) {\n\t\t\tcurrentSequenceNumber = sequenceNumber;\n\t\t}\n\t\tconst details: ISequencedClient[\"client\"][\"details\"] = { capabilities: { interactive } };\n\t\tconst c: Partial<ISequencedClient[\"client\"]> = { details };\n\t\tconst client: ISequencedClient = {\n\t\t\tclient: c as ISequencedClient[\"client\"],\n\t\t\tsequenceNumber,\n\t\t};\n\t\ttestQuorum.addClient(clientId, client);\n\t}\n\tfunction removeClient(clientId: string, opCount = 1) {\n\t\tcurrentSequenceNumber += opCount;\n\t\ttestQuorum.removeClient(clientId);\n\t}\n\tfunction createOrderedClientCollection(\n\t\tinitialClients: [id: string, seq: number, int: boolean][] = [],\n\t): IOrderedClientCollection {\n\t\tfor (const [id, seq, int] of initialClients) {\n\t\t\taddClient(id, seq, int);\n\t\t}\n\t\torderedClients = new OrderedClientCollection(mockLogger, testDeltaManager, testQuorum);\n\t\treturn orderedClients;\n\t}\n\tfunction assertCollectionState(expectedCount: number, message = \"\") {\n\t\tconst prefix = message ? `${message} - ` : \"\";\n\t\tassert.strictEqual(\n\t\t\torderedClients.count,\n\t\t\texpectedCount,\n\t\t\t`${prefix}Invalid client count: ${orderedClients.count} !== ${expectedCount}`,\n\t\t);\n\t}\n\tfunction assertOrderedClientIds(...expectedIds: string[]) {\n\t\tconst actualIds = orderedClients.getAllClients();\n\t\tassert.strictEqual(\n\t\t\tactualIds.length,\n\t\t\texpectedIds.length,\n\t\t\t`Unexpected count of ordered client ids: ${actualIds.length} !== ${expectedIds.length}`,\n\t\t);\n\t\tfor (let i = 0; i < actualIds.length; i++) {\n\t\t\tassert.strictEqual(\n\t\t\t\tactualIds[i].clientId,\n\t\t\t\texpectedIds[i],\n\t\t\t\t`Unexpected ordered client id at index ${i}: ${actualIds[i].clientId} !== ${expectedIds[i]}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tafterEach(() => {\n\t\tmockLogger.events = [];\n\t\ttestQuorum.reset();\n\t\tcurrentSequenceNumber = 0;\n\t});\n\n\tdescribe(\"Initialize\", () => {\n\t\tit(\"Should initialize with empty quorum\", () => {\n\t\t\tcreateOrderedClientCollection();\n\t\t\tassertCollectionState(0);\n\t\t\tassertOrderedClientIds();\n\t\t});\n\n\t\tit(\"Should initialize with correct count\", () => {\n\t\t\tcreateOrderedClientCollection([\n\t\t\t\t[\"a\", 1, true],\n\t\t\t\t[\"b\", 2, true],\n\t\t\t\t[\"s\", 5, false],\n\t\t\t\t[\"c\", 9, true],\n\t\t\t]);\n\t\t\tassertCollectionState(4);\n\t\t\tassertOrderedClientIds(\"a\", \"b\", \"s\", \"c\");\n\t\t});\n\n\t\tit(\"Should initialize in correct order\", () => {\n\t\t\tcreateOrderedClientCollection([\n\t\t\t\t[\"c\", 9, true],\n\t\t\t\t[\"b\", 2, true],\n\t\t\t\t[\"a\", 1, true],\n\t\t\t\t[\"s\", 5, false],\n\t\t\t]);\n\t\t\tassertCollectionState(4);\n\t\t\tassertOrderedClientIds(\"a\", \"b\", \"s\", \"c\");\n\t\t});\n\t});\n\n\tdescribe(\"Ordered Client Election\", () => {\n\t\tlet election: IOrderedClientElection;\n\t\tlet electionEventCount = 0;\n\t\tfunction createOrderedClientElection(\n\t\t\tinitialClients: [id: string, seq: number, int: boolean][] = [],\n\t\t\tinitialState?: ISerializedElection,\n\t\t): IOrderedClientElection {\n\t\t\tcreateOrderedClientCollection(initialClients);\n\t\t\tif (\n\t\t\t\tinitialState !== undefined &&\n\t\t\t\tinitialState.electionSequenceNumber > currentSequenceNumber\n\t\t\t) {\n\t\t\t\tcurrentSequenceNumber = initialState.electionSequenceNumber;\n\t\t\t}\n\t\t\telection = new OrderedClientElection(\n\t\t\t\tmockLogger.toTelemetryLogger(),\n\t\t\t\torderedClients,\n\t\t\t\tinitialState ?? currentSequenceNumber,\n\t\t\t\t(c: ITrackedClient) => c.client.details.capabilities.interactive,\n\t\t\t);\n\t\t\telection.on(\"election\", () => electionEventCount++);\n\t\t\treturn election;\n\t\t}\n\t\tfunction incrementElectedClient(sequenceNumber = currentSequenceNumber) {\n\t\t\tif (sequenceNumber > currentSequenceNumber) {\n\t\t\t\tcurrentSequenceNumber = sequenceNumber;\n\t\t\t}\n\t\t\telection.incrementElectedClient(sequenceNumber);\n\t\t}\n\t\tfunction resetElectedClient(sequenceNumber = currentSequenceNumber) {\n\t\t\tif (sequenceNumber > currentSequenceNumber) {\n\t\t\t\tcurrentSequenceNumber = sequenceNumber;\n\t\t\t}\n\t\t\telection.resetElectedClient(sequenceNumber);\n\t\t}\n\t\tfunction assertElectionState(\n\t\t\texpectedTotalCount: number,\n\t\t\texpectedEligibleCount: number,\n\t\t\texpectedElectedClientId: string | undefined,\n\t\t\texpectedElectionSequenceNumber: number,\n\t\t\tmessage = \"\",\n\t\t) {\n\t\t\tassertCollectionState(expectedTotalCount, message);\n\t\t\tconst prefix = message ? `${message} - ` : \"\";\n\t\t\tassert.strictEqual(\n\t\t\t\telection.eligibleCount,\n\t\t\t\texpectedEligibleCount,\n\t\t\t\t`${prefix}Invalid eligible count: ${election.eligibleCount} !== ${expectedEligibleCount}`,\n\t\t\t);\n\t\t\tassert.strictEqual(\n\t\t\t\telection.electedClient?.clientId,\n\t\t\t\texpectedElectedClientId,\n\t\t\t\t`${prefix}Invalid elected client id: ${election.electedClient?.clientId} !== ${expectedElectedClientId}`,\n\t\t\t);\n\t\t\tassert.strictEqual(\n\t\t\t\telection.electionSequenceNumber,\n\t\t\t\texpectedElectionSequenceNumber,\n\t\t\t\t`${prefix}Invalid election seq #: ${election.electionSequenceNumber} !== ${expectedElectionSequenceNumber}`,\n\t\t\t);\n\t\t}\n\t\tfunction assertEvents(expectedElectionCount: number) {\n\t\t\tassert.strictEqual(\n\t\t\t\telectionEventCount,\n\t\t\t\texpectedElectionCount,\n\t\t\t\t`Unexpected election event count: ${electionEventCount} !== ${expectedElectionCount}`,\n\t\t\t);\n\t\t}\n\t\tfunction assertOrderedEligibleClientIds(...expectedIds: string[]) {\n\t\t\tconst actualIds = election.getAllEligibleClients();\n\t\t\tassert.strictEqual(\n\t\t\t\tactualIds.length,\n\t\t\t\texpectedIds.length,\n\t\t\t\t`Unexpected count of ordered eligible client ids: ${actualIds.length} !== ${expectedIds.length}`,\n\t\t\t);\n\t\t\tfor (let i = 0; i < actualIds.length; i++) {\n\t\t\t\tassert.strictEqual(\n\t\t\t\t\tactualIds[i].clientId,\n\t\t\t\t\texpectedIds[i],\n\t\t\t\t\t`Unexpected ordered eligible client id at index ${i}: ${actualIds[i].clientId} !== ${expectedIds[i]}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tafterEach(() => {\n\t\t\telectionEventCount = 0;\n\t\t});\n\n\t\tdescribe(\"Initialize\", () => {\n\t\t\tconst emptySerializedElection = {\n\t\t\t\telectedClientId: undefined,\n\t\t\t\telectedParentId: undefined,\n\t\t\t\telectionSequenceNumber: 101,\n\t\t\t};\n\n\t\t\tit(\"Should initialize with empty quorum\", () => {\n\t\t\t\tcreateOrderedClientElection();\n\t\t\t\tassertElectionState(0, 0, undefined, 0);\n\t\t\t\tassertOrderedEligibleClientIds();\n\t\t\t});\n\n\t\t\tit(\"Should initialize with correct client counts and elected client\", () => {\n\t\t\t\tcreateOrderedClientElection([\n\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t]);\n\t\t\t\tassertElectionState(4, 3, \"a\", 9);\n\t\t\t\tassertOrderedEligibleClientIds(\"a\", \"b\", \"c\");\n\t\t\t});\n\n\t\t\tit(\"Should initialize with empty quorum at specific sequence number\", () => {\n\t\t\t\tcurrentSequenceNumber = 99;\n\t\t\t\tcreateOrderedClientElection();\n\t\t\t\tassertElectionState(0, 0, undefined, 99);\n\t\t\t\tassertOrderedEligibleClientIds();\n\t\t\t});\n\n\t\t\tit(\"Should initialize with empty quorum and initial state\", () => {\n\t\t\t\tcreateOrderedClientElection(undefined, emptySerializedElection);\n\t\t\t\tassertElectionState(0, 0, undefined, 101);\n\t\t\t\tassertOrderedEligibleClientIds();\n\t\t\t});\n\n\t\t\tit(\"Should log error with empty quorum and initially elected client\", () => {\n\t\t\t\tconst clientId = \"x\";\n\t\t\t\tcreateOrderedClientElection(undefined, emptySerializedElection);\n\t\t\t\tassertElectionState(0, 0, undefined, 101);\n\t\t\t\tmockLogger.matchEvents([{ eventName: \"InitialElectedClientNotFound\", clientId }]);\n\t\t\t\tassertOrderedEligibleClientIds();\n\t\t\t});\n\n\t\t\tit(\"Should initialize with correct client counts and elected client from initial state\", () => {\n\t\t\t\tcreateOrderedClientElection(\n\t\t\t\t\t[\n\t\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t\t],\n\t\t\t\t\t{ electedClientId: \"b\", electedParentId: \"b\", electionSequenceNumber: 4321 },\n\t\t\t\t);\n\t\t\t\tassertElectionState(4, 3, \"b\", 4321);\n\t\t\t\tassertOrderedEligibleClientIds(\"a\", \"b\", \"c\");\n\t\t\t});\n\n\t\t\tit(\"Should log error and elect next eligible when initially elected client is ineligible\", () => {\n\t\t\t\tcreateOrderedClientElection(\n\t\t\t\t\t[\n\t\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t\t[\"s2\", 7, false],\n\t\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t\t],\n\t\t\t\t\t{ electedClientId: \"s\", electedParentId: \"s\", electionSequenceNumber: 4321 },\n\t\t\t\t);\n\t\t\t\tassertElectionState(5, 3, \"c\", 4321);\n\t\t\t\tmockLogger.matchEvents([\n\t\t\t\t\t{\n\t\t\t\t\t\teventName: \"InitialElectedClientIneligible\",\n\t\t\t\t\t\tclientId: \"s\",\n\t\t\t\t\t\telectedClientId: \"c\",\n\t\t\t\t\t},\n\t\t\t\t]);\n\t\t\t\tassertOrderedEligibleClientIds(\"a\", \"b\", \"c\");\n\t\t\t});\n\n\t\t\tit(\"Should log error and elect undefined when initially elected client is ineligible and last\", () => {\n\t\t\t\tcreateOrderedClientElection(\n\t\t\t\t\t[\n\t\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t\t[\"s2\", 7, false],\n\t\t\t\t\t],\n\t\t\t\t\t{ electedClientId: \"s\", electedParentId: \"s\", electionSequenceNumber: 4321 },\n\t\t\t\t);\n\t\t\t\tassertElectionState(4, 2, undefined, 4321);\n\t\t\t\tmockLogger.matchEvents([\n\t\t\t\t\t{\n\t\t\t\t\t\teventName: \"InitialElectedClientIneligible\",\n\t\t\t\t\t\tclientId: \"s\",\n\t\t\t\t\t\telectedClientId: undefined,\n\t\t\t\t\t},\n\t\t\t\t]);\n\t\t\t\tassertOrderedEligibleClientIds(\"a\", \"b\");\n\t\t\t});\n\n\t\t\tit(\"Should log error when initially elected client is not found\", () => {\n\t\t\t\tcreateOrderedClientElection(\n\t\t\t\t\t[\n\t\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t\t],\n\t\t\t\t\t{ electedClientId: \"x\", electedParentId: \"x\", electionSequenceNumber: 4321 },\n\t\t\t\t);\n\t\t\t\tassertElectionState(4, 3, undefined, 4321);\n\t\t\t\tmockLogger.matchEvents([\n\t\t\t\t\t{ eventName: \"InitialElectedClientNotFound\", clientId: \"x\" },\n\t\t\t\t]);\n\t\t\t\tassertOrderedEligibleClientIds(\"a\", \"b\", \"c\");\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"Add Client\", () => {\n\t\t\tit(\"Should add ineligible client without impacting eligible clients\", () => {\n\t\t\t\tcreateOrderedClientElection([\n\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t]);\n\t\t\t\taddClient(\"n\", 100, false);\n\t\t\t\tassertElectionState(5, 3, \"a\", 9);\n\t\t\t\tassertEvents(0);\n\t\t\t\tassertOrderedEligibleClientIds(\"a\", \"b\", \"c\");\n\t\t\t});\n\n\t\t\tit(\"Should add ineligible client to empty quorum without impacting eligible clients\", () => {\n\t\t\t\tcreateOrderedClientElection();\n\t\t\t\taddClient(\"n\", 100, false);\n\t\t\t\tassertElectionState(1, 0, undefined, 0);\n\t\t\t\tassertEvents(0);\n\t\t\t\tassertOrderedEligibleClientIds();\n\t\t\t});\n\n\t\t\tit(\"Should add and elect eligible client to empty quorum\", () => {\n\t\t\t\tcreateOrderedClientElection();\n\t\t\t\taddClient(\"n\", 100);\n\t\t\t\tassertElectionState(1, 1, \"n\", 100);\n\t\t\t\tassertEvents(1);\n\t\t\t\tassertOrderedEligibleClientIds(\"n\");\n\t\t\t});\n\n\t\t\tit(\"Should add eligible client to end\", () => {\n\t\t\t\tcreateOrderedClientElection([\n\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t]);\n\t\t\t\taddClient(\"n\", 100);\n\t\t\t\tassertElectionState(5, 4, \"a\", 9);\n\t\t\t\tassertEvents(0);\n\t\t\t\tassertOrderedEligibleClientIds(\"a\", \"b\", \"c\", \"n\");\n\t\t\t});\n\n\t\t\tit(\"Should add eligible client to middle\", () => {\n\t\t\t\t// Questionable test, since this shouldn't really happen.\n\t\t\t\tcreateOrderedClientElection([\n\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t]);\n\t\t\t\taddClient(\"n\", 3);\n\t\t\t\tassertElectionState(5, 4, \"a\", 9);\n\t\t\t\tassertEvents(0);\n\t\t\t\tassertOrderedEligibleClientIds(\"a\", \"b\", \"n\", \"c\");\n\t\t\t});\n\n\t\t\tit(\"Should add eligible client to front\", () => {\n\t\t\t\t// Questionable test, since this shouldn't really happen.\n\t\t\t\tcreateOrderedClientElection([\n\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t]);\n\t\t\t\taddClient(\"n\", 0);\n\t\t\t\tassertElectionState(5, 4, \"a\", 9);\n\t\t\t\tassertEvents(0);\n\t\t\t\tassertOrderedEligibleClientIds(\"n\", \"a\", \"b\", \"c\");\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"Remove Client\", () => {\n\t\t\tit(\"Should log error when removing a client from empty quorum\", () => {\n\t\t\t\tcreateOrderedClientElection();\n\t\t\t\tconst clientId = \"x\";\n\t\t\t\tremoveClient(clientId);\n\t\t\t\tmockLogger.matchEvents([{ eventName: \"ClientNotFound\", clientId }]);\n\t\t\t\tassertElectionState(0, 0, undefined, 0);\n\t\t\t\tassertEvents(0);\n\t\t\t\tassertOrderedEligibleClientIds();\n\t\t\t});\n\n\t\t\tit(\"Should log error when removing a client that doesn't exist\", () => {\n\t\t\t\tcreateOrderedClientElection([\n\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t]);\n\t\t\t\tconst clientId = \"x\";\n\t\t\t\tremoveClient(clientId);\n\t\t\t\tmockLogger.matchEvents([{ eventName: \"ClientNotFound\", clientId }]);\n\t\t\t\tassertElectionState(4, 3, \"a\", 9);\n\t\t\t\tassertEvents(0);\n\t\t\t\tassertOrderedEligibleClientIds(\"a\", \"b\", \"c\");\n\t\t\t});\n\n\t\t\tit(\"Should remove ineligible client\", () => {\n\t\t\t\tcreateOrderedClientElection([\n\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t]);\n\t\t\t\tremoveClient(\"s\", 5);\n\t\t\t\tassertElectionState(3, 3, \"a\", 9);\n\t\t\t\tassertEvents(0);\n\t\t\t\tassertOrderedEligibleClientIds(\"a\", \"b\", \"c\");\n\t\t\t});\n\n\t\t\tit(\"Should remove other eligible client from end\", () => {\n\t\t\t\tcreateOrderedClientElection([\n\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t]);\n\t\t\t\tremoveClient(\"c\", 5);\n\t\t\t\tassertElectionState(3, 2, \"a\", 9);\n\t\t\t\tassertEvents(0);\n\t\t\t\tassertOrderedEligibleClientIds(\"a\", \"b\");\n\t\t\t});\n\n\t\t\tit(\"Should remove elected eligible client from end\", () => {\n\t\t\t\tcreateOrderedClientElection([\n\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t]);\n\t\t\t\tincrementElectedClient(12); // elect b\n\t\t\t\tincrementElectedClient(19); // elect c\n\t\t\t\tassertElectionState(4, 3, \"c\", 19);\n\t\t\t\tassertEvents(2);\n\t\t\t\tremoveClient(\"c\", 5);\n\t\t\t\tassertElectionState(3, 2, \"a\", 24);\n\t\t\t\tassertEvents(3);\n\t\t\t\tassertOrderedEligibleClientIds(\"a\", \"b\");\n\t\t\t});\n\n\t\t\tit(\"Should remove other eligible client from middle\", () => {\n\t\t\t\tcreateOrderedClientElection([\n\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t]);\n\t\t\t\tremoveClient(\"b\", 5);\n\t\t\t\tassertElectionState(3, 2, \"a\", 9);\n\t\t\t\tassertEvents(0);\n\t\t\t\tassertOrderedEligibleClientIds(\"a\", \"c\");\n\t\t\t});\n\n\t\t\tit(\"Should remove elected eligible client from middle\", () => {\n\t\t\t\tcreateOrderedClientElection([\n\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t]);\n\t\t\t\tincrementElectedClient(12); // elect b\n\t\t\t\tassertElectionState(4, 3, \"b\", 12);\n\t\t\t\tassertEvents(1);\n\t\t\t\tremoveClient(\"b\", 5);\n\t\t\t\tassertElectionState(3, 2, \"c\", 17);\n\t\t\t\tassertEvents(2);\n\t\t\t\tassertOrderedEligibleClientIds(\"a\", \"c\");\n\t\t\t});\n\n\t\t\tit(\"Should remove elected eligible client from front\", () => {\n\t\t\t\tcreateOrderedClientElection([\n\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t]);\n\t\t\t\tremoveClient(\"a\", 5);\n\t\t\t\tassertElectionState(3, 2, \"b\", 14);\n\t\t\t\tassertEvents(1);\n\t\t\t\tassertOrderedEligibleClientIds(\"b\", \"c\");\n\t\t\t});\n\n\t\t\tit(\"Should remove other eligible client from front\", () => {\n\t\t\t\tcreateOrderedClientElection([\n\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t]);\n\t\t\t\tincrementElectedClient(12); // elect b\n\t\t\t\tassertElectionState(4, 3, \"b\", 12);\n\t\t\t\tassertEvents(1);\n\t\t\t\tremoveClient(\"a\", 5);\n\t\t\t\tassertElectionState(3, 2, \"b\", 12);\n\t\t\t\tassertEvents(1);\n\t\t\t\tassertOrderedEligibleClientIds(\"b\", \"c\");\n\t\t\t});\n\n\t\t\tit(\"Should elect next client when ineligible client is elected, then elected client is removed\", () => {\n\t\t\t\tcreateOrderedClientElection(\n\t\t\t\t\t[\n\t\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t\t],\n\t\t\t\t\t{ electedClientId: \"s\", electedParentId: \"s\", electionSequenceNumber: 4321 },\n\t\t\t\t);\n\t\t\t\tremoveClient(\"s\", 1111);\n\t\t\t\tassertElectionState(3, 3, \"c\", 4321);\n\t\t\t\tremoveClient(\"c\", 1111);\n\t\t\t\tassertElectionState(2, 2, \"a\", 6543);\n\t\t\t\tassertEvents(1);\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"Increment elected client\", () => {\n\t\t\tit(\"Should do nothing in empty quorum\", () => {\n\t\t\t\tcreateOrderedClientElection();\n\t\t\t\tincrementElectedClient();\n\t\t\t\tassertElectionState(0, 0, undefined, 0);\n\t\t\t\tassertEvents(0);\n\t\t\t});\n\n\t\t\tit(\"Should go to next client from first\", () => {\n\t\t\t\tcreateOrderedClientElection([\n\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t]);\n\t\t\t\tincrementElectedClient(12);\n\t\t\t\tassertElectionState(4, 3, \"b\", 12);\n\t\t\t\tassertEvents(1);\n\t\t\t});\n\n\t\t\tit(\"Should go to next client from middle\", () => {\n\t\t\t\tcreateOrderedClientElection([\n\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t]);\n\t\t\t\tincrementElectedClient(12);\n\t\t\t\tincrementElectedClient(16);\n\t\t\t\tassertElectionState(4, 3, \"c\", 16);\n\t\t\t\tassertEvents(2);\n\t\t\t});\n\n\t\t\tit(\"Should increment to new nodes\", () => {\n\t\t\t\tcreateOrderedClientElection([\n\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t]);\n\t\t\t\tincrementElectedClient(16);\n\t\t\t\tincrementElectedClient(27); // no-op\n\t\t\t\taddClient(\"d\", 100);\n\t\t\t\tincrementElectedClient(100);\n\t\t\t\taddClient(\"e\", 101);\n\t\t\t\tassertElectionState(6, 5, \"d\", 100);\n\t\t\t\tincrementElectedClient(111);\n\t\t\t\tassertElectionState(6, 5, \"e\", 111);\n\t\t\t\taddClient(\"f\", 200);\n\t\t\t\tincrementElectedClient(205);\n\t\t\t\tassertElectionState(7, 6, \"f\", 205);\n\t\t\t\tincrementElectedClient(221);\n\t\t\t\tassertElectionState(7, 6, \"a\", 221);\n\t\t\t\taddClient(\"g\", 229);\n\t\t\t\tassertElectionState(8, 7, \"a\", 221);\n\t\t\t});\n\n\t\t\tit(\"Should increment when ineligible client is elected\", () => {\n\t\t\t\tcreateOrderedClientElection(\n\t\t\t\t\t[\n\t\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t\t[\"s\", 2, false],\n\t\t\t\t\t\t[\"b\", 5, true],\n\t\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t\t],\n\t\t\t\t\t{ electedClientId: \"s\", electedParentId: \"s\", electionSequenceNumber: 4321 },\n\t\t\t\t);\n\t\t\t\tassertElectionState(4, 3, \"b\", 4321);\n\t\t\t\tincrementElectedClient(7777);\n\t\t\t\tassertElectionState(4, 3, \"c\", 7777);\n\t\t\t\tassertEvents(1);\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"Reset elected client\", () => {\n\t\t\tit(\"Should reset to first when not first\", () => {\n\t\t\t\tcreateOrderedClientElection([\n\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t]);\n\t\t\t\tincrementElectedClient(12);\n\t\t\t\tincrementElectedClient(15);\n\t\t\t\tresetElectedClient(19);\n\t\t\t\tassertElectionState(4, 3, \"a\", 19);\n\t\t\t\tassertEvents(3);\n\t\t\t});\n\n\t\t\tit(\"Should reset to first when undefined at end\", () => {\n\t\t\t\tcreateOrderedClientElection([\n\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t[\"b\", 2, true],\n\t\t\t\t\t[\"s\", 5, false],\n\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t]);\n\t\t\t\tincrementElectedClient(12);\n\t\t\t\tincrementElectedClient(15);\n\t\t\t\tincrementElectedClient(19);\n\t\t\t\tresetElectedClient(31); // no-op\n\t\t\t\tassertElectionState(4, 3, \"a\", 19);\n\t\t\t\tassertEvents(3);\n\t\t\t});\n\n\t\t\tit(\"Should reset to first when ineligible client is elected\", () => {\n\t\t\t\tcreateOrderedClientElection(\n\t\t\t\t\t[\n\t\t\t\t\t\t[\"a\", 1, true],\n\t\t\t\t\t\t[\"s\", 2, false],\n\t\t\t\t\t\t[\"b\", 5, true],\n\t\t\t\t\t\t[\"c\", 9, true],\n\t\t\t\t\t],\n\t\t\t\t\t{ electedClientId: \"s\", electedParentId: \"s\", electionSequenceNumber: 4321 },\n\t\t\t\t);\n\t\t\t\tassertElectionState(4, 3, \"b\", 4321);\n\t\t\t\tresetElectedClient(7777);\n\t\t\t\tassertElectionState(4, 3, \"a\", 7777);\n\t\t\t\tassertEvents(1);\n\t\t\t});\n\t\t});\n\t});\n});\n"]}