@effect/cluster 0.28.4 → 0.29.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 (626) hide show
  1. package/ClusterError/package.json +6 -0
  2. package/ClusterMetrics/package.json +6 -0
  3. package/ClusterSchema/package.json +6 -0
  4. package/DeliverAt/package.json +6 -0
  5. package/Entity/package.json +6 -0
  6. package/EntityAddress/package.json +6 -0
  7. package/EntityId/package.json +6 -0
  8. package/EntityType/package.json +6 -0
  9. package/Envelope/package.json +6 -0
  10. package/HttpCommon/package.json +6 -0
  11. package/HttpRunner/package.json +6 -0
  12. package/HttpShardManager/package.json +6 -0
  13. package/MachineId/package.json +6 -0
  14. package/MessageStorage/package.json +6 -0
  15. package/README.md +2 -2
  16. package/Reply/package.json +6 -0
  17. package/Runner/package.json +6 -0
  18. package/RunnerAddress/package.json +6 -0
  19. package/RunnerHealth/package.json +6 -0
  20. package/RunnerServer/package.json +6 -0
  21. package/Runners/package.json +6 -0
  22. package/ShardStorage/package.json +6 -0
  23. package/Singleton/package.json +6 -0
  24. package/SingletonAddress/package.json +6 -0
  25. package/Snowflake/package.json +6 -0
  26. package/SocketRunner/package.json +6 -0
  27. package/SocketShardManager/package.json +6 -0
  28. package/SqlMessageStorage/package.json +6 -0
  29. package/SqlShardStorage/package.json +6 -0
  30. package/SynchronizedClock/package.json +6 -0
  31. package/dist/cjs/ClusterError.js +180 -0
  32. package/dist/cjs/ClusterError.js.map +1 -0
  33. package/dist/cjs/ClusterMetrics.js +63 -0
  34. package/dist/cjs/ClusterMetrics.js.map +1 -0
  35. package/dist/cjs/{Pods.js → ClusterSchema.js} +10 -22
  36. package/dist/cjs/ClusterSchema.js.map +1 -0
  37. package/dist/cjs/DeliverAt.js +30 -0
  38. package/dist/cjs/DeliverAt.js.map +1 -0
  39. package/dist/cjs/Entity.js +187 -0
  40. package/dist/cjs/Entity.js.map +1 -0
  41. package/dist/cjs/EntityAddress.js +54 -0
  42. package/dist/cjs/EntityAddress.js.map +1 -0
  43. package/dist/cjs/{AtLeastOnce.js → EntityId.js} +6 -7
  44. package/dist/cjs/EntityId.js.map +1 -0
  45. package/dist/cjs/{ShardManagerClient.js → EntityType.js} +5 -16
  46. package/dist/cjs/EntityType.js.map +1 -0
  47. package/dist/cjs/Envelope.js +168 -0
  48. package/dist/cjs/Envelope.js.map +1 -0
  49. package/dist/cjs/HttpCommon.js +49 -0
  50. package/dist/cjs/HttpCommon.js.map +1 -0
  51. package/dist/cjs/HttpRunner.js +108 -0
  52. package/dist/cjs/HttpRunner.js.map +1 -0
  53. package/dist/cjs/HttpShardManager.js +140 -0
  54. package/dist/cjs/HttpShardManager.js.map +1 -0
  55. package/dist/cjs/{AtLeastOnceStorage.js → MachineId.js} +11 -9
  56. package/dist/cjs/MachineId.js.map +1 -0
  57. package/dist/cjs/Message.js +99 -18
  58. package/dist/cjs/Message.js.map +1 -1
  59. package/dist/cjs/MessageStorage.js +356 -0
  60. package/dist/cjs/MessageStorage.js.map +1 -0
  61. package/dist/cjs/Reply.js +200 -0
  62. package/dist/cjs/Reply.js.map +1 -0
  63. package/dist/cjs/Runner.js +79 -0
  64. package/dist/cjs/Runner.js.map +1 -0
  65. package/dist/cjs/RunnerAddress.js +63 -0
  66. package/dist/cjs/RunnerAddress.js.map +1 -0
  67. package/dist/cjs/RunnerHealth.js +68 -0
  68. package/dist/cjs/RunnerHealth.js.map +1 -0
  69. package/dist/cjs/RunnerServer.js +125 -0
  70. package/dist/cjs/RunnerServer.js.map +1 -0
  71. package/dist/cjs/Runners.js +344 -0
  72. package/dist/cjs/Runners.js.map +1 -0
  73. package/dist/cjs/ShardId.js +7 -46
  74. package/dist/cjs/ShardId.js.map +1 -1
  75. package/dist/cjs/ShardManager.js +493 -8
  76. package/dist/cjs/ShardManager.js.map +1 -1
  77. package/dist/cjs/ShardStorage.js +139 -0
  78. package/dist/cjs/ShardStorage.js.map +1 -0
  79. package/dist/cjs/Sharding.js +732 -88
  80. package/dist/cjs/Sharding.js.map +1 -1
  81. package/dist/cjs/ShardingConfig.js +85 -18
  82. package/dist/cjs/ShardingConfig.js.map +1 -1
  83. package/dist/cjs/ShardingRegistrationEvent.js +26 -32
  84. package/dist/cjs/ShardingRegistrationEvent.js.map +1 -1
  85. package/dist/cjs/{ManagerConfig.js → Singleton.js} +11 -20
  86. package/dist/cjs/Singleton.js.map +1 -0
  87. package/dist/cjs/SingletonAddress.js +50 -0
  88. package/dist/cjs/SingletonAddress.js.map +1 -0
  89. package/dist/cjs/Snowflake.js +133 -0
  90. package/dist/cjs/Snowflake.js.map +1 -0
  91. package/dist/cjs/SocketRunner.js +40 -0
  92. package/dist/cjs/SocketRunner.js.map +1 -0
  93. package/dist/cjs/SocketShardManager.js +33 -0
  94. package/dist/cjs/SocketShardManager.js.map +1 -0
  95. package/dist/cjs/SqlMessageStorage.js +668 -0
  96. package/dist/cjs/SqlMessageStorage.js.map +1 -0
  97. package/dist/cjs/SqlShardStorage.js +228 -0
  98. package/dist/cjs/SqlShardStorage.js.map +1 -0
  99. package/dist/cjs/SynchronizedClock.js +66 -0
  100. package/dist/cjs/SynchronizedClock.js.map +1 -0
  101. package/dist/cjs/index.js +57 -45
  102. package/dist/cjs/internal/entityManager.js +311 -143
  103. package/dist/cjs/internal/entityManager.js.map +1 -1
  104. package/dist/cjs/internal/entityReaper.js +47 -0
  105. package/dist/cjs/internal/entityReaper.js.map +1 -0
  106. package/dist/cjs/internal/hash.js +20 -0
  107. package/dist/cjs/internal/hash.js.map +1 -0
  108. package/dist/cjs/internal/interruptors.js +9 -0
  109. package/dist/cjs/internal/interruptors.js.map +1 -0
  110. package/dist/cjs/internal/resourceMap.js +88 -0
  111. package/dist/cjs/internal/resourceMap.js.map +1 -0
  112. package/dist/cjs/internal/resourceRef.js +92 -0
  113. package/dist/cjs/internal/resourceRef.js.map +1 -0
  114. package/dist/cjs/internal/shardManager.js +219 -235
  115. package/dist/cjs/internal/shardManager.js.map +1 -1
  116. package/dist/dts/ClusterError.d.ts +169 -0
  117. package/dist/dts/ClusterError.d.ts.map +1 -0
  118. package/dist/dts/ClusterMetrics.d.ts +50 -0
  119. package/dist/dts/ClusterMetrics.d.ts.map +1 -0
  120. package/dist/dts/ClusterSchema.d.ts +13 -0
  121. package/dist/dts/ClusterSchema.d.ts.map +1 -0
  122. package/dist/dts/DeliverAt.d.ts +27 -0
  123. package/dist/dts/DeliverAt.d.ts.map +1 -0
  124. package/dist/dts/Entity.d.ts +180 -0
  125. package/dist/dts/Entity.d.ts.map +1 -0
  126. package/dist/dts/EntityAddress.d.ts +55 -0
  127. package/dist/dts/EntityAddress.d.ts.map +1 -0
  128. package/dist/dts/EntityId.d.ts +15 -0
  129. package/dist/dts/EntityId.d.ts.map +1 -0
  130. package/dist/dts/EntityType.d.ts +15 -0
  131. package/dist/dts/EntityType.d.ts.map +1 -0
  132. package/dist/dts/Envelope.d.ts +252 -0
  133. package/dist/dts/Envelope.d.ts.map +1 -0
  134. package/dist/dts/HttpCommon.d.ts +25 -0
  135. package/dist/dts/HttpCommon.d.ts.map +1 -0
  136. package/dist/dts/HttpRunner.d.ts +76 -0
  137. package/dist/dts/HttpRunner.d.ts.map +1 -0
  138. package/dist/dts/HttpShardManager.d.ts +119 -0
  139. package/dist/dts/HttpShardManager.d.ts.map +1 -0
  140. package/dist/dts/MachineId.d.ts +20 -0
  141. package/dist/dts/MachineId.d.ts.map +1 -0
  142. package/dist/dts/Message.d.ts +91 -74
  143. package/dist/dts/Message.d.ts.map +1 -1
  144. package/dist/dts/MessageStorage.d.ts +336 -0
  145. package/dist/dts/MessageStorage.d.ts.map +1 -0
  146. package/dist/dts/Reply.d.ts +171 -0
  147. package/dist/dts/Reply.d.ts.map +1 -0
  148. package/dist/dts/Runner.d.ts +81 -0
  149. package/dist/dts/Runner.d.ts.map +1 -0
  150. package/dist/dts/RunnerAddress.d.ts +56 -0
  151. package/dist/dts/RunnerAddress.d.ts.map +1 -0
  152. package/dist/dts/RunnerHealth.d.ts +54 -0
  153. package/dist/dts/RunnerHealth.d.ts.map +1 -0
  154. package/dist/dts/RunnerServer.d.ts +44 -0
  155. package/dist/dts/RunnerServer.d.ts.map +1 -0
  156. package/dist/dts/Runners.d.ts +161 -0
  157. package/dist/dts/Runners.d.ts.map +1 -0
  158. package/dist/dts/ShardId.d.ts +5 -55
  159. package/dist/dts/ShardId.d.ts.map +1 -1
  160. package/dist/dts/ShardManager.d.ts +435 -23
  161. package/dist/dts/ShardManager.d.ts.map +1 -1
  162. package/dist/dts/ShardStorage.d.ts +200 -0
  163. package/dist/dts/ShardStorage.d.ts.map +1 -0
  164. package/dist/dts/Sharding.d.ts +109 -131
  165. package/dist/dts/Sharding.d.ts.map +1 -1
  166. package/dist/dts/ShardingConfig.d.ts +147 -44
  167. package/dist/dts/ShardingConfig.d.ts.map +1 -1
  168. package/dist/dts/ShardingRegistrationEvent.d.ts +38 -23
  169. package/dist/dts/ShardingRegistrationEvent.d.ts.map +1 -1
  170. package/dist/dts/Singleton.d.ts +13 -0
  171. package/dist/dts/Singleton.d.ts.map +1 -0
  172. package/dist/dts/SingletonAddress.d.ts +49 -0
  173. package/dist/dts/SingletonAddress.d.ts.map +1 -0
  174. package/dist/dts/Snowflake.d.ts +121 -0
  175. package/dist/dts/Snowflake.d.ts.map +1 -0
  176. package/dist/dts/SocketRunner.d.ts +22 -0
  177. package/dist/dts/SocketRunner.d.ts.map +1 -0
  178. package/dist/dts/SocketShardManager.d.ts +17 -0
  179. package/dist/dts/SocketShardManager.d.ts.map +1 -0
  180. package/dist/dts/SqlMessageStorage.d.ts +43 -0
  181. package/dist/dts/SqlMessageStorage.d.ts.map +1 -0
  182. package/dist/dts/SqlShardStorage.d.ts +38 -0
  183. package/dist/dts/SqlShardStorage.d.ts.map +1 -0
  184. package/dist/dts/SynchronizedClock.d.ts +19 -0
  185. package/dist/dts/SynchronizedClock.d.ts.map +1 -0
  186. package/dist/dts/index.d.ts +48 -24
  187. package/dist/dts/index.d.ts.map +1 -1
  188. package/dist/dts/internal/entityReaper.d.ts +2 -0
  189. package/dist/dts/internal/entityReaper.d.ts.map +1 -0
  190. package/dist/dts/internal/hash.d.ts +2 -0
  191. package/dist/dts/internal/hash.d.ts.map +1 -0
  192. package/dist/dts/internal/interruptors.d.ts +2 -0
  193. package/dist/dts/internal/interruptors.d.ts.map +1 -0
  194. package/dist/dts/internal/resourceMap.d.ts +22 -0
  195. package/dist/dts/internal/resourceMap.d.ts.map +1 -0
  196. package/dist/dts/internal/resourceRef.d.ts +25 -0
  197. package/dist/dts/internal/resourceRef.d.ts.map +1 -0
  198. package/dist/dts/internal/shardManager.d.ts +1 -11
  199. package/dist/dts/internal/shardManager.d.ts.map +1 -1
  200. package/dist/esm/ClusterError.js +164 -0
  201. package/dist/esm/ClusterError.js.map +1 -0
  202. package/dist/esm/ClusterMetrics.js +54 -0
  203. package/dist/esm/ClusterMetrics.js.map +1 -0
  204. package/dist/esm/ClusterSchema.js +13 -0
  205. package/dist/esm/ClusterSchema.js.map +1 -0
  206. package/dist/esm/DeliverAt.js +22 -0
  207. package/dist/esm/DeliverAt.js.map +1 -0
  208. package/dist/esm/Entity.js +173 -0
  209. package/dist/esm/Entity.js.map +1 -0
  210. package/dist/esm/EntityAddress.js +44 -0
  211. package/dist/esm/EntityAddress.js.map +1 -0
  212. package/dist/esm/EntityId.js +10 -0
  213. package/dist/esm/EntityId.js.map +1 -0
  214. package/dist/esm/EntityType.js +10 -0
  215. package/dist/esm/EntityType.js.map +1 -0
  216. package/dist/esm/Envelope.js +154 -0
  217. package/dist/esm/Envelope.js.map +1 -0
  218. package/dist/esm/HttpCommon.js +38 -0
  219. package/dist/esm/HttpCommon.js.map +1 -0
  220. package/dist/esm/HttpRunner.js +98 -0
  221. package/dist/esm/HttpRunner.js.map +1 -0
  222. package/dist/esm/HttpShardManager.js +128 -0
  223. package/dist/esm/HttpShardManager.js.map +1 -0
  224. package/dist/esm/MachineId.js +17 -0
  225. package/dist/esm/MachineId.js.map +1 -0
  226. package/dist/esm/Message.js +88 -17
  227. package/dist/esm/Message.js.map +1 -1
  228. package/dist/esm/MessageStorage.js +345 -0
  229. package/dist/esm/MessageStorage.js.map +1 -0
  230. package/dist/esm/Reply.js +184 -0
  231. package/dist/esm/Reply.js.map +1 -0
  232. package/dist/esm/Runner.js +68 -0
  233. package/dist/esm/Runner.js.map +1 -0
  234. package/dist/esm/RunnerAddress.js +52 -0
  235. package/dist/esm/RunnerAddress.js.map +1 -0
  236. package/dist/esm/RunnerHealth.js +58 -0
  237. package/dist/esm/RunnerHealth.js.map +1 -0
  238. package/dist/esm/RunnerServer.js +116 -0
  239. package/dist/esm/RunnerServer.js.map +1 -0
  240. package/dist/esm/Runners.js +332 -0
  241. package/dist/esm/Runners.js.map +1 -0
  242. package/dist/esm/ShardId.js +5 -42
  243. package/dist/esm/ShardId.js.map +1 -1
  244. package/dist/esm/ShardManager.js +486 -7
  245. package/dist/esm/ShardManager.js.map +1 -1
  246. package/dist/esm/ShardStorage.js +129 -0
  247. package/dist/esm/ShardStorage.js.map +1 -0
  248. package/dist/esm/Sharding.js +730 -87
  249. package/dist/esm/Sharding.js.map +1 -1
  250. package/dist/esm/ShardingConfig.js +80 -17
  251. package/dist/esm/ShardingConfig.js.map +1 -1
  252. package/dist/esm/ShardingRegistrationEvent.js +19 -29
  253. package/dist/esm/ShardingRegistrationEvent.js.map +1 -1
  254. package/dist/esm/Singleton.js +15 -0
  255. package/dist/esm/Singleton.js.map +1 -0
  256. package/dist/esm/SingletonAddress.js +40 -0
  257. package/dist/esm/SingletonAddress.js.map +1 -0
  258. package/dist/esm/Snowflake.js +117 -0
  259. package/dist/esm/Snowflake.js.map +1 -0
  260. package/dist/esm/SocketRunner.js +31 -0
  261. package/dist/esm/SocketRunner.js.map +1 -0
  262. package/dist/esm/SocketShardManager.js +24 -0
  263. package/dist/esm/SocketShardManager.js.map +1 -0
  264. package/dist/esm/SqlMessageStorage.js +658 -0
  265. package/dist/esm/SqlMessageStorage.js.map +1 -0
  266. package/dist/esm/SqlShardStorage.js +218 -0
  267. package/dist/esm/SqlShardStorage.js.map +1 -0
  268. package/dist/esm/SynchronizedClock.js +57 -0
  269. package/dist/esm/SynchronizedClock.js.map +1 -0
  270. package/dist/esm/index.js +48 -24
  271. package/dist/esm/index.js.map +1 -1
  272. package/dist/esm/internal/entityManager.js +311 -142
  273. package/dist/esm/internal/entityManager.js.map +1 -1
  274. package/dist/esm/internal/entityReaper.js +38 -0
  275. package/dist/esm/internal/entityReaper.js.map +1 -0
  276. package/dist/esm/internal/hash.js +12 -0
  277. package/dist/esm/internal/hash.js.map +1 -0
  278. package/dist/esm/internal/interruptors.js +3 -0
  279. package/dist/esm/internal/interruptors.js.map +1 -0
  280. package/dist/esm/internal/resourceMap.js +79 -0
  281. package/dist/esm/internal/resourceMap.js.map +1 -0
  282. package/dist/esm/internal/resourceRef.js +83 -0
  283. package/dist/esm/internal/resourceRef.js.map +1 -0
  284. package/dist/esm/internal/shardManager.js +217 -233
  285. package/dist/esm/internal/shardManager.js.map +1 -1
  286. package/package.json +212 -154
  287. package/src/ClusterError.ts +193 -0
  288. package/src/ClusterMetrics.ts +62 -0
  289. package/src/ClusterSchema.ts +13 -0
  290. package/src/DeliverAt.ts +36 -0
  291. package/src/Entity.ts +438 -0
  292. package/src/EntityAddress.ts +55 -0
  293. package/src/EntityId.ts +16 -0
  294. package/src/EntityType.ts +16 -0
  295. package/src/Envelope.ts +352 -0
  296. package/src/HttpCommon.ts +73 -0
  297. package/src/HttpRunner.ts +196 -0
  298. package/src/HttpShardManager.ts +273 -0
  299. package/src/MachineId.ts +27 -0
  300. package/src/Message.ts +143 -92
  301. package/src/MessageStorage.ts +697 -0
  302. package/src/Reply.ts +295 -0
  303. package/src/Runner.ts +84 -0
  304. package/src/RunnerAddress.ts +61 -0
  305. package/src/RunnerHealth.ts +87 -0
  306. package/src/RunnerServer.ts +156 -0
  307. package/src/Runners.ts +533 -0
  308. package/src/ShardId.ts +10 -62
  309. package/src/ShardManager.ts +780 -29
  310. package/src/ShardStorage.ts +289 -0
  311. package/src/Sharding.ts +1060 -183
  312. package/src/ShardingConfig.ts +186 -45
  313. package/src/ShardingRegistrationEvent.ts +38 -39
  314. package/src/Singleton.ts +20 -0
  315. package/src/SingletonAddress.ts +47 -0
  316. package/src/Snowflake.ts +194 -0
  317. package/src/SocketRunner.ts +59 -0
  318. package/src/SocketShardManager.ts +48 -0
  319. package/src/SqlMessageStorage.ts +833 -0
  320. package/src/SqlShardStorage.ts +292 -0
  321. package/src/SynchronizedClock.ts +82 -0
  322. package/src/index.ts +54 -24
  323. package/src/internal/entityManager.ts +464 -361
  324. package/src/internal/entityReaper.ts +53 -0
  325. package/src/internal/hash.ts +11 -0
  326. package/src/internal/interruptors.ts +4 -0
  327. package/src/internal/resourceMap.ts +89 -0
  328. package/src/internal/resourceRef.ts +88 -0
  329. package/src/internal/shardManager.ts +273 -546
  330. package/AtLeastOnce/package.json +0 -6
  331. package/AtLeastOnceStorage/package.json +0 -6
  332. package/Broadcaster/package.json +0 -6
  333. package/ManagerConfig/package.json +0 -6
  334. package/MessageState/package.json +0 -6
  335. package/Messenger/package.json +0 -6
  336. package/Pod/package.json +0 -6
  337. package/PodAddress/package.json +0 -6
  338. package/Pods/package.json +0 -6
  339. package/PodsHealth/package.json +0 -6
  340. package/PoisonPill/package.json +0 -6
  341. package/RecipientAddress/package.json +0 -6
  342. package/RecipientBehaviour/package.json +0 -6
  343. package/RecipientBehaviourContext/package.json +0 -6
  344. package/RecipientType/package.json +0 -6
  345. package/Serialization/package.json +0 -6
  346. package/SerializedEnvelope/package.json +0 -6
  347. package/SerializedMessage/package.json +0 -6
  348. package/ShardManagerClient/package.json +0 -6
  349. package/ShardingEvent/package.json +0 -6
  350. package/ShardingException/package.json +0 -6
  351. package/Storage/package.json +0 -6
  352. package/dist/cjs/AtLeastOnce.js.map +0 -1
  353. package/dist/cjs/AtLeastOnceStorage.js.map +0 -1
  354. package/dist/cjs/Broadcaster.js +0 -6
  355. package/dist/cjs/Broadcaster.js.map +0 -1
  356. package/dist/cjs/ManagerConfig.js.map +0 -1
  357. package/dist/cjs/MessageState.js +0 -55
  358. package/dist/cjs/MessageState.js.map +0 -1
  359. package/dist/cjs/Messenger.js +0 -6
  360. package/dist/cjs/Messenger.js.map +0 -1
  361. package/dist/cjs/Pod.js +0 -78
  362. package/dist/cjs/Pod.js.map +0 -1
  363. package/dist/cjs/PodAddress.js +0 -77
  364. package/dist/cjs/PodAddress.js.map +0 -1
  365. package/dist/cjs/Pods.js.map +0 -1
  366. package/dist/cjs/PodsHealth.js +0 -41
  367. package/dist/cjs/PodsHealth.js.map +0 -1
  368. package/dist/cjs/PoisonPill.js +0 -78
  369. package/dist/cjs/PoisonPill.js.map +0 -1
  370. package/dist/cjs/RecipientAddress.js +0 -79
  371. package/dist/cjs/RecipientAddress.js.map +0 -1
  372. package/dist/cjs/RecipientBehaviour.js +0 -38
  373. package/dist/cjs/RecipientBehaviour.js.map +0 -1
  374. package/dist/cjs/RecipientBehaviourContext.js +0 -64
  375. package/dist/cjs/RecipientBehaviourContext.js.map +0 -1
  376. package/dist/cjs/RecipientType.js +0 -123
  377. package/dist/cjs/RecipientType.js.map +0 -1
  378. package/dist/cjs/Serialization.js +0 -32
  379. package/dist/cjs/Serialization.js.map +0 -1
  380. package/dist/cjs/SerializedEnvelope.js +0 -87
  381. package/dist/cjs/SerializedEnvelope.js.map +0 -1
  382. package/dist/cjs/SerializedMessage.js +0 -64
  383. package/dist/cjs/SerializedMessage.js.map +0 -1
  384. package/dist/cjs/ShardManagerClient.js.map +0 -1
  385. package/dist/cjs/ShardingEvent.js +0 -72
  386. package/dist/cjs/ShardingEvent.js.map +0 -1
  387. package/dist/cjs/ShardingException.js +0 -107
  388. package/dist/cjs/ShardingException.js.map +0 -1
  389. package/dist/cjs/Storage.js +0 -40
  390. package/dist/cjs/Storage.js.map +0 -1
  391. package/dist/cjs/internal/atLeastOnce.js +0 -35
  392. package/dist/cjs/internal/atLeastOnce.js.map +0 -1
  393. package/dist/cjs/internal/atLeastOnceStorage.js +0 -163
  394. package/dist/cjs/internal/atLeastOnceStorage.js.map +0 -1
  395. package/dist/cjs/internal/entityState.js +0 -47
  396. package/dist/cjs/internal/entityState.js.map +0 -1
  397. package/dist/cjs/internal/managerConfig.js +0 -46
  398. package/dist/cjs/internal/managerConfig.js.map +0 -1
  399. package/dist/cjs/internal/message.js +0 -48
  400. package/dist/cjs/internal/message.js.map +0 -1
  401. package/dist/cjs/internal/messageState.js +0 -79
  402. package/dist/cjs/internal/messageState.js.map +0 -1
  403. package/dist/cjs/internal/podWithMetadata.js +0 -54
  404. package/dist/cjs/internal/podWithMetadata.js.map +0 -1
  405. package/dist/cjs/internal/pods.js +0 -35
  406. package/dist/cjs/internal/pods.js.map +0 -1
  407. package/dist/cjs/internal/podsHealth.js +0 -40
  408. package/dist/cjs/internal/podsHealth.js.map +0 -1
  409. package/dist/cjs/internal/recipientBehaviour.js +0 -52
  410. package/dist/cjs/internal/recipientBehaviour.js.map +0 -1
  411. package/dist/cjs/internal/recipientBehaviourContext.js +0 -36
  412. package/dist/cjs/internal/recipientBehaviourContext.js.map +0 -1
  413. package/dist/cjs/internal/serialization.js +0 -48
  414. package/dist/cjs/internal/serialization.js.map +0 -1
  415. package/dist/cjs/internal/shardManagerClient.js +0 -48
  416. package/dist/cjs/internal/shardManagerClient.js.map +0 -1
  417. package/dist/cjs/internal/shardManagerState.js +0 -44
  418. package/dist/cjs/internal/shardManagerState.js.map +0 -1
  419. package/dist/cjs/internal/sharding.js +0 -306
  420. package/dist/cjs/internal/sharding.js.map +0 -1
  421. package/dist/cjs/internal/shardingConfig.js +0 -56
  422. package/dist/cjs/internal/shardingConfig.js.map +0 -1
  423. package/dist/cjs/internal/storage.js +0 -52
  424. package/dist/cjs/internal/storage.js.map +0 -1
  425. package/dist/cjs/internal/utils.js +0 -69
  426. package/dist/cjs/internal/utils.js.map +0 -1
  427. package/dist/dts/AtLeastOnce.d.ts +0 -20
  428. package/dist/dts/AtLeastOnce.d.ts.map +0 -1
  429. package/dist/dts/AtLeastOnceStorage.d.ts +0 -75
  430. package/dist/dts/AtLeastOnceStorage.d.ts.map +0 -1
  431. package/dist/dts/Broadcaster.d.ts +0 -32
  432. package/dist/dts/Broadcaster.d.ts.map +0 -1
  433. package/dist/dts/ManagerConfig.d.ts +0 -61
  434. package/dist/dts/ManagerConfig.d.ts.map +0 -1
  435. package/dist/dts/MessageState.d.ts +0 -107
  436. package/dist/dts/MessageState.d.ts.map +0 -1
  437. package/dist/dts/Messenger.d.ts +0 -32
  438. package/dist/dts/Messenger.d.ts.map +0 -1
  439. package/dist/dts/Pod.d.ts +0 -81
  440. package/dist/dts/Pod.d.ts.map +0 -1
  441. package/dist/dts/PodAddress.d.ts +0 -80
  442. package/dist/dts/PodAddress.d.ts.map +0 -1
  443. package/dist/dts/Pods.d.ts +0 -78
  444. package/dist/dts/Pods.d.ts.map +0 -1
  445. package/dist/dts/PodsHealth.d.ts +0 -66
  446. package/dist/dts/PodsHealth.d.ts.map +0 -1
  447. package/dist/dts/PoisonPill.d.ts +0 -78
  448. package/dist/dts/PoisonPill.d.ts.map +0 -1
  449. package/dist/dts/RecipientAddress.d.ts +0 -57
  450. package/dist/dts/RecipientAddress.d.ts.map +0 -1
  451. package/dist/dts/RecipientBehaviour.d.ts +0 -72
  452. package/dist/dts/RecipientBehaviour.d.ts.map +0 -1
  453. package/dist/dts/RecipientBehaviourContext.d.ts +0 -83
  454. package/dist/dts/RecipientBehaviourContext.d.ts.map +0 -1
  455. package/dist/dts/RecipientType.d.ts +0 -93
  456. package/dist/dts/RecipientType.d.ts.map +0 -1
  457. package/dist/dts/Serialization.d.ts +0 -58
  458. package/dist/dts/Serialization.d.ts.map +0 -1
  459. package/dist/dts/SerializedEnvelope.d.ts +0 -86
  460. package/dist/dts/SerializedEnvelope.d.ts.map +0 -1
  461. package/dist/dts/SerializedMessage.d.ts +0 -66
  462. package/dist/dts/SerializedMessage.d.ts.map +0 -1
  463. package/dist/dts/ShardManagerClient.d.ts +0 -50
  464. package/dist/dts/ShardManagerClient.d.ts.map +0 -1
  465. package/dist/dts/ShardingEvent.d.ts +0 -90
  466. package/dist/dts/ShardingEvent.d.ts.map +0 -1
  467. package/dist/dts/ShardingException.d.ts +0 -125
  468. package/dist/dts/ShardingException.d.ts.map +0 -1
  469. package/dist/dts/Storage.d.ts +0 -78
  470. package/dist/dts/Storage.d.ts.map +0 -1
  471. package/dist/dts/internal/atLeastOnce.d.ts +0 -2
  472. package/dist/dts/internal/atLeastOnce.d.ts.map +0 -1
  473. package/dist/dts/internal/atLeastOnceStorage.d.ts +0 -2
  474. package/dist/dts/internal/atLeastOnceStorage.d.ts.map +0 -1
  475. package/dist/dts/internal/entityState.d.ts +0 -21
  476. package/dist/dts/internal/entityState.d.ts.map +0 -1
  477. package/dist/dts/internal/managerConfig.d.ts +0 -2
  478. package/dist/dts/internal/managerConfig.d.ts.map +0 -1
  479. package/dist/dts/internal/message.d.ts +0 -9
  480. package/dist/dts/internal/message.d.ts.map +0 -1
  481. package/dist/dts/internal/messageState.d.ts +0 -2
  482. package/dist/dts/internal/messageState.d.ts.map +0 -1
  483. package/dist/dts/internal/podWithMetadata.d.ts +0 -2
  484. package/dist/dts/internal/podWithMetadata.d.ts.map +0 -1
  485. package/dist/dts/internal/pods.d.ts +0 -2
  486. package/dist/dts/internal/pods.d.ts.map +0 -1
  487. package/dist/dts/internal/podsHealth.d.ts +0 -2
  488. package/dist/dts/internal/podsHealth.d.ts.map +0 -1
  489. package/dist/dts/internal/recipientBehaviour.d.ts +0 -2
  490. package/dist/dts/internal/recipientBehaviour.d.ts.map +0 -1
  491. package/dist/dts/internal/recipientBehaviourContext.d.ts +0 -2
  492. package/dist/dts/internal/recipientBehaviourContext.d.ts.map +0 -1
  493. package/dist/dts/internal/serialization.d.ts +0 -2
  494. package/dist/dts/internal/serialization.d.ts.map +0 -1
  495. package/dist/dts/internal/shardManagerClient.d.ts +0 -2
  496. package/dist/dts/internal/shardManagerClient.d.ts.map +0 -1
  497. package/dist/dts/internal/shardManagerState.d.ts +0 -26
  498. package/dist/dts/internal/shardManagerState.d.ts.map +0 -1
  499. package/dist/dts/internal/sharding.d.ts +0 -2
  500. package/dist/dts/internal/sharding.d.ts.map +0 -1
  501. package/dist/dts/internal/shardingConfig.d.ts +0 -2
  502. package/dist/dts/internal/shardingConfig.d.ts.map +0 -1
  503. package/dist/dts/internal/storage.d.ts +0 -2
  504. package/dist/dts/internal/storage.d.ts.map +0 -1
  505. package/dist/dts/internal/utils.d.ts +0 -2
  506. package/dist/dts/internal/utils.d.ts.map +0 -1
  507. package/dist/esm/AtLeastOnce.js +0 -12
  508. package/dist/esm/AtLeastOnce.js.map +0 -1
  509. package/dist/esm/AtLeastOnceStorage.js +0 -17
  510. package/dist/esm/AtLeastOnceStorage.js.map +0 -1
  511. package/dist/esm/Broadcaster.js +0 -2
  512. package/dist/esm/Broadcaster.js.map +0 -1
  513. package/dist/esm/ManagerConfig.js +0 -26
  514. package/dist/esm/ManagerConfig.js.map +0 -1
  515. package/dist/esm/MessageState.js +0 -47
  516. package/dist/esm/MessageState.js.map +0 -1
  517. package/dist/esm/Messenger.js +0 -2
  518. package/dist/esm/Messenger.js.map +0 -1
  519. package/dist/esm/Pod.js +0 -65
  520. package/dist/esm/Pod.js.map +0 -1
  521. package/dist/esm/PodAddress.js +0 -64
  522. package/dist/esm/PodAddress.js.map +0 -1
  523. package/dist/esm/Pods.js +0 -27
  524. package/dist/esm/Pods.js.map +0 -1
  525. package/dist/esm/PodsHealth.js +0 -33
  526. package/dist/esm/PodsHealth.js.map +0 -1
  527. package/dist/esm/PoisonPill.js +0 -65
  528. package/dist/esm/PoisonPill.js.map +0 -1
  529. package/dist/esm/RecipientAddress.js +0 -67
  530. package/dist/esm/RecipientAddress.js.map +0 -1
  531. package/dist/esm/RecipientBehaviour.js +0 -30
  532. package/dist/esm/RecipientBehaviour.js.map +0 -1
  533. package/dist/esm/RecipientBehaviourContext.js +0 -56
  534. package/dist/esm/RecipientBehaviourContext.js.map +0 -1
  535. package/dist/esm/RecipientType.js +0 -108
  536. package/dist/esm/RecipientType.js.map +0 -1
  537. package/dist/esm/Serialization.js +0 -24
  538. package/dist/esm/Serialization.js.map +0 -1
  539. package/dist/esm/SerializedEnvelope.js +0 -74
  540. package/dist/esm/SerializedEnvelope.js.map +0 -1
  541. package/dist/esm/SerializedMessage.js +0 -51
  542. package/dist/esm/SerializedMessage.js.map +0 -1
  543. package/dist/esm/ShardManagerClient.js +0 -22
  544. package/dist/esm/ShardManagerClient.js.map +0 -1
  545. package/dist/esm/ShardingEvent.js +0 -62
  546. package/dist/esm/ShardingEvent.js.map +0 -1
  547. package/dist/esm/ShardingException.js +0 -91
  548. package/dist/esm/ShardingException.js.map +0 -1
  549. package/dist/esm/Storage.js +0 -32
  550. package/dist/esm/Storage.js.map +0 -1
  551. package/dist/esm/internal/atLeastOnce.js +0 -26
  552. package/dist/esm/internal/atLeastOnce.js.map +0 -1
  553. package/dist/esm/internal/atLeastOnceStorage.js +0 -154
  554. package/dist/esm/internal/atLeastOnceStorage.js.map +0 -1
  555. package/dist/esm/internal/entityState.js +0 -35
  556. package/dist/esm/internal/entityState.js.map +0 -1
  557. package/dist/esm/internal/managerConfig.js +0 -38
  558. package/dist/esm/internal/managerConfig.js.map +0 -1
  559. package/dist/esm/internal/message.js +0 -35
  560. package/dist/esm/internal/message.js.map +0 -1
  561. package/dist/esm/internal/messageState.js +0 -66
  562. package/dist/esm/internal/messageState.js.map +0 -1
  563. package/dist/esm/internal/podWithMetadata.js +0 -41
  564. package/dist/esm/internal/podWithMetadata.js.map +0 -1
  565. package/dist/esm/internal/pods.js +0 -25
  566. package/dist/esm/internal/pods.js.map +0 -1
  567. package/dist/esm/internal/podsHealth.js +0 -30
  568. package/dist/esm/internal/podsHealth.js.map +0 -1
  569. package/dist/esm/internal/recipientBehaviour.js +0 -42
  570. package/dist/esm/internal/recipientBehaviour.js.map +0 -1
  571. package/dist/esm/internal/recipientBehaviourContext.js +0 -26
  572. package/dist/esm/internal/recipientBehaviourContext.js.map +0 -1
  573. package/dist/esm/internal/serialization.js +0 -38
  574. package/dist/esm/internal/serialization.js.map +0 -1
  575. package/dist/esm/internal/shardManagerClient.js +0 -38
  576. package/dist/esm/internal/shardManagerClient.js.map +0 -1
  577. package/dist/esm/internal/shardManagerState.js +0 -36
  578. package/dist/esm/internal/shardManagerState.js.map +0 -1
  579. package/dist/esm/internal/sharding.js +0 -288
  580. package/dist/esm/internal/sharding.js.map +0 -1
  581. package/dist/esm/internal/shardingConfig.js +0 -47
  582. package/dist/esm/internal/shardingConfig.js.map +0 -1
  583. package/dist/esm/internal/storage.js +0 -42
  584. package/dist/esm/internal/storage.js.map +0 -1
  585. package/dist/esm/internal/utils.js +0 -56
  586. package/dist/esm/internal/utils.js.map +0 -1
  587. package/src/AtLeastOnce.ts +0 -28
  588. package/src/AtLeastOnceStorage.ts +0 -96
  589. package/src/Broadcaster.ts +0 -48
  590. package/src/ManagerConfig.ts +0 -67
  591. package/src/MessageState.ts +0 -126
  592. package/src/Messenger.ts +0 -40
  593. package/src/Pod.ts +0 -95
  594. package/src/PodAddress.ts +0 -94
  595. package/src/Pods.ts +0 -100
  596. package/src/PodsHealth.ts +0 -74
  597. package/src/PoisonPill.ts +0 -105
  598. package/src/RecipientAddress.ts +0 -72
  599. package/src/RecipientBehaviour.ts +0 -108
  600. package/src/RecipientBehaviourContext.ts +0 -101
  601. package/src/RecipientType.ts +0 -134
  602. package/src/Serialization.ts +0 -72
  603. package/src/SerializedEnvelope.ts +0 -108
  604. package/src/SerializedMessage.ts +0 -82
  605. package/src/ShardManagerClient.ts +0 -57
  606. package/src/ShardingEvent.ts +0 -121
  607. package/src/ShardingException.ts +0 -151
  608. package/src/Storage.ts +0 -92
  609. package/src/internal/atLeastOnce.ts +0 -59
  610. package/src/internal/atLeastOnceStorage.ts +0 -218
  611. package/src/internal/entityState.ts +0 -64
  612. package/src/internal/managerConfig.ts +0 -84
  613. package/src/internal/message.ts +0 -63
  614. package/src/internal/messageState.ts +0 -98
  615. package/src/internal/podWithMetadata.ts +0 -72
  616. package/src/internal/pods.ts +0 -29
  617. package/src/internal/podsHealth.ts +0 -39
  618. package/src/internal/recipientBehaviour.ts +0 -133
  619. package/src/internal/recipientBehaviourContext.ts +0 -70
  620. package/src/internal/serialization.ts +0 -63
  621. package/src/internal/shardManagerClient.ts +0 -49
  622. package/src/internal/shardManagerState.ts +0 -80
  623. package/src/internal/sharding.ts +0 -789
  624. package/src/internal/shardingConfig.ts +0 -97
  625. package/src/internal/storage.ts +0 -60
  626. package/src/internal/utils.ts +0 -54
@@ -1,256 +1,240 @@
1
- /**
2
- * @since 1.0.0
3
- */
4
- import * as Chunk from "effect/Chunk";
1
+ import * as Arr from "effect/Array";
5
2
  import * as Clock from "effect/Clock";
6
- import { GenericTag } from "effect/Context";
7
3
  import * as Effect from "effect/Effect";
8
- import { equals } from "effect/Equal";
9
- import { pipe } from "effect/Function";
10
- import * as HashMap from "effect/HashMap";
11
- import * as HashSet from "effect/HashSet";
12
- import * as Layer from "effect/Layer";
13
- import * as List from "effect/List";
4
+ import { constFalse } from "effect/Function";
5
+ import * as MutableHashMap from "effect/MutableHashMap";
6
+ import * as MutableHashSet from "effect/MutableHashSet";
14
7
  import * as Option from "effect/Option";
15
- import * as PubSub from "effect/PubSub";
16
- import * as Schedule from "effect/Schedule";
17
- import * as Stream from "effect/Stream";
18
- import * as RefSynchronized from "effect/SynchronizedRef";
19
- import * as ManagerConfig from "../ManagerConfig.js";
20
- import * as Pods from "../Pods.js";
21
- import * as PodsHealth from "../PodsHealth.js";
22
- import * as ShardId from "../ShardId.js";
23
- import * as ShardingEvent from "../ShardingEvent.js";
24
- import * as ShardingException from "../ShardingException.js";
25
- import * as Storage from "../Storage.js";
26
- import * as PodWithMetadata from "./podWithMetadata.js";
27
- import * as ShardManagerState from "./shardManagerState.js";
28
- import { groupBy, minByOption } from "./utils.js";
8
+ import * as Order from "effect/Order";
9
+ import { RunnerHealth } from "../RunnerHealth.js";
10
+ import { ShardId } from "../ShardId.js";
11
+ import { ShardStorage } from "../ShardStorage.js";
29
12
  /** @internal */
30
- const ShardManagerSymbolKey = "@effect/cluster/ShardManager";
31
- /** @internal */
32
- export const ShardManagerTypeId = /*#__PURE__*/Symbol.for(ShardManagerSymbolKey);
33
- /** @internal */
34
- export const shardManagerTag = /*#__PURE__*/GenericTag(ShardManagerSymbolKey);
35
- /** @internal */
36
- function make(layerScope, stateRef, rebalanceSemaphore, eventsHub, healthApi, podApi, stateRepository, config) {
37
- const getAssignments = pipe(RefSynchronized.get(stateRef), Effect.map(_ => _.shards));
38
- const getShardingEvents = Stream.fromPubSub(eventsHub);
39
- function register(pod) {
40
- return pipe(Effect.logDebug("Registering " + pod.address + "@" + pod.version), Effect.zipRight(RefSynchronized.updateAndGetEffect(stateRef, state => pipe(Effect.flatMap(Effect.clock, _ => _.currentTimeMillis), Effect.map(cdt => ShardManagerState.make(HashMap.set(state.pods, pod.address, PodWithMetadata.make(pod, cdt)), state.shards))))), Effect.zipLeft(PubSub.publish(eventsHub, ShardingEvent.PodRegistered(pod.address))), Effect.flatMap(state => Effect.when(rebalance(false), () => HashSet.size(state.unassignedShards) > 0)), Effect.zipRight(Effect.forkIn(layerScope)(persistPods)), Effect.asVoid);
13
+ export class State {
14
+ runners;
15
+ shards;
16
+ static fromStorage = /*#__PURE__*/Effect.fnUntraced(function* (numberOfShards) {
17
+ const storage = yield* ShardStorage;
18
+ const runnerHealth = yield* RunnerHealth;
19
+ // Fetch registered runners and shard assignments from cluster storage
20
+ const storedRunners = yield* storage.getRunners;
21
+ const storedAssignments = yield* storage.getAssignments;
22
+ // Determine which runners are still alive
23
+ const deadRunners = Arr.empty();
24
+ const aliveRunners = MutableHashMap.empty();
25
+ yield* Effect.forEach(storedRunners, ([address, runner]) => Effect.map(runnerHealth.isAlive(address), isAlive => {
26
+ if (isAlive) {
27
+ MutableHashMap.set(aliveRunners, address, runner);
28
+ } else {
29
+ deadRunners.push(runner);
30
+ }
31
+ }), {
32
+ concurrency: "unbounded",
33
+ discard: true
34
+ });
35
+ if (deadRunners.length > 0) {
36
+ yield* Effect.logWarning("Ignoring runners that are no longer considered alive:", deadRunners);
37
+ }
38
+ // Determine which shards remain unassigned to a runner
39
+ const assignedShards = new Map();
40
+ const invalidAssignments = Arr.empty();
41
+ for (const [shard, address] of storedAssignments) {
42
+ if (Option.isSome(address) && MutableHashMap.has(aliveRunners, address.value)) {
43
+ assignedShards.set(shard, address.value);
44
+ } else if (Option.isSome(address)) {
45
+ invalidAssignments.push([shard, address.value]);
46
+ }
47
+ }
48
+ if (invalidAssignments.length > 0) {
49
+ yield* Effect.logWarning("Ignoring shard assignments for runners that are no longer considered alive: ", invalidAssignments);
50
+ }
51
+ // Construct the initial state
52
+ const now = yield* Clock.currentTimeMillis;
53
+ const runnerState = MutableHashMap.empty();
54
+ for (const [address, runner] of aliveRunners) {
55
+ MutableHashMap.set(runnerState, address, RunnerWithMetadata({
56
+ runner,
57
+ registeredAt: now
58
+ }));
59
+ }
60
+ const shardState = new Map();
61
+ for (let n = 1; n <= numberOfShards; n++) {
62
+ const shardId = ShardId.make(n);
63
+ shardState.set(shardId, Option.fromNullable(assignedShards.get(shardId)));
64
+ }
65
+ return new State(runnerState, shardState);
66
+ });
67
+ constructor(runners, shards) {
68
+ this.runners = runners;
69
+ this.shards = shards;
41
70
  }
42
- function stateHasPod(podAddress) {
43
- return pipe(RefSynchronized.get(stateRef), Effect.map(_ => HashMap.has(_.pods, podAddress)));
71
+ get maxVersion() {
72
+ if (MutableHashMap.size(this.runners) === 0) return Option.none();
73
+ let version = undefined;
74
+ for (const [, meta] of this.runners) {
75
+ if (version === undefined || meta.runner.version > version) {
76
+ version = meta.runner.version;
77
+ }
78
+ }
79
+ return Option.some(version);
44
80
  }
45
- function notifyUnhealthyPod(podAddress) {
46
- return pipe(Effect.whenEffect(pipe(PubSub.publish(eventsHub, ShardingEvent.PodHealthChecked(podAddress)), Effect.zipRight(Effect.unlessEffect(Effect.zipRight(Effect.logWarning(`${podAddress} is not alive, unregistering`), unregister(podAddress)), healthApi.isAlive(podAddress)))), stateHasPod(podAddress)), Effect.asVoid);
81
+ allRunnersHaveVersion(version) {
82
+ return version.pipe(Option.map(max => Arr.every(this.runnerVersions, version => version === max)), Option.getOrElse(constFalse));
47
83
  }
48
- const checkAllPodsHealth = pipe(RefSynchronized.get(stateRef), Effect.map(_ => HashMap.keySet(_.pods)), Effect.flatMap(_ => Effect.forEach(_, notifyUnhealthyPod, {
49
- concurrency: 4,
50
- discard: true
51
- })));
52
- function unregister(podAddress) {
53
- const eff = pipe(Effect.Do, Effect.zipLeft(Effect.logDebug(`Unregistering ${podAddress}`)), Effect.bind("unassignments", _ => pipe(stateRef, RefSynchronized.modify(state => [pipe(state.shards, HashMap.filter(pod => equals(pod)(Option.some(podAddress))), HashMap.keySet), {
54
- ...state,
55
- pods: HashMap.remove(state.pods, podAddress),
56
- shards: HashMap.map(state.shards, _ => equals(_)(Option.some(podAddress)) ? Option.none() : _)
57
- }]))), Effect.tap(_ => PubSub.publish(eventsHub, ShardingEvent.PodUnregistered(podAddress))), Effect.tap(_ => Effect.when(PubSub.publish(eventsHub, ShardingEvent.ShardsUnassigned(podAddress, _.unassignments)), () => HashSet.size(_.unassignments) > 0)), Effect.zipLeft(Effect.forkIn(layerScope)(persistPods)), Effect.zipLeft(Effect.forkIn(layerScope)(rebalance(true))));
58
- return Effect.asVoid(Effect.whenEffect(eff, stateHasPod(podAddress)));
84
+ get shardsPerRunner() {
85
+ const shards = MutableHashMap.empty();
86
+ if (MutableHashMap.isEmpty(this.runners)) return shards;
87
+ MutableHashMap.forEach(this.runners, (_, address) => {
88
+ MutableHashMap.set(shards, address, new Set());
89
+ });
90
+ for (const [shard, address] of this.shards) {
91
+ if (Option.isNone(address)) continue;
92
+ const shardIds = Option.getOrUndefined(MutableHashMap.get(shards, address.value));
93
+ shardIds.add(shard);
94
+ }
95
+ return shards;
59
96
  }
60
- function withRetry(zio) {
61
- return pipe(zio, Effect.retry(pipe(Schedule.spaced(config.persistRetryInterval), Schedule.andThen(Schedule.recurs(config.persistRetryCount)))), Effect.ignore);
97
+ get averageShardsPerRunner() {
98
+ const runnerCount = MutableHashMap.size(this.runners);
99
+ return runnerCount > 0 ? this.shards.size / runnerCount : 0;
62
100
  }
63
- const persistAssignments = withRetry(pipe(RefSynchronized.get(stateRef), Effect.flatMap(state => stateRepository.saveAssignments(state.shards))));
64
- const persistPods = withRetry(pipe(RefSynchronized.get(stateRef), Effect.flatMap(state => stateRepository.savePods(HashMap.map(state.pods, v => v.pod)))));
65
- function updateShardsState(shards, pod) {
66
- return RefSynchronized.updateEffect(stateRef, state => {
67
- if (Option.isSome(pod) && !HashMap.has(state.pods, pod.value)) {
68
- return Effect.fail(new ShardingException.PodNoLongerRegisteredException({
69
- podAddress: pod.value
70
- }));
101
+ get unassignedShards() {
102
+ const shardIds = [];
103
+ for (const [shard, address] of this.shards) {
104
+ if (Option.isNone(address)) {
105
+ shardIds.push(shard);
71
106
  }
72
- return Effect.succeed({
73
- ...state,
74
- shards: pipe(state.shards, HashMap.map((assignment, shard) => HashSet.has(shards, shard) ? pod : assignment))
75
- });
76
- });
107
+ }
108
+ return shardIds;
77
109
  }
78
- function rebalance(rebalanceImmediately) {
79
- const algo = Effect.gen(function* () {
80
- const state = yield* RefSynchronized.get(stateRef);
81
- const [assignments, unassignments] = rebalanceImmediately || HashSet.size(state.unassignedShards) > 0 ? decideAssignmentsForUnassignedShards(state) : decideAssignmentsForUnbalancedShards(state, config.rebalanceRate);
82
- const areChanges = HashMap.size(assignments) > 0 || HashMap.size(unassignments) > 0;
83
- if (areChanges) {
84
- yield* Effect.logDebug("Rebalance (rebalanceImmidiately=" + JSON.stringify(rebalanceImmediately) + ")");
85
- }
86
- const failedPingedPods = yield* pipe(HashSet.union(HashMap.keySet(assignments), HashMap.keySet(unassignments)), Effect.forEach(pod => pipe(podApi.ping(pod), Effect.timeout(config.pingTimeout), Effect.match({
87
- onFailure: () => Chunk.fromIterable([pod]),
88
- onSuccess: () => Chunk.empty()
89
- })), {
90
- concurrency: "inherit"
91
- }), Effect.map(Chunk.fromIterable), Effect.map(_ => Chunk.flatten(_)), Effect.map(HashSet.fromIterable));
92
- const shardsToRemove = pipe(List.fromIterable(assignments), List.appendAll(List.fromIterable(unassignments)), List.filter(([pod, __]) => HashSet.has(failedPingedPods, pod)), List.map(([_, shards]) => List.fromIterable(shards)), List.flatMap(_ => _),
93
- // TODO: List is missing flatMap
94
- HashSet.fromIterable);
95
- const readyAssignments = pipe(assignments, HashMap.map(HashSet.difference(shardsToRemove)), HashMap.filter(__ => HashSet.size(__) > 0));
96
- const readyUnassignments = pipe(unassignments, HashMap.map(HashSet.difference(shardsToRemove)), HashMap.filter(__ => HashSet.size(__) > 0));
97
- const [failedUnassignedPods, failedUnassignedShards] = yield* pipe(Effect.forEach(readyUnassignments, ([pod, shards]) => pipe(podApi.unassignShards(pod, shards), Effect.zipRight(updateShardsState(shards, Option.none())), Effect.matchEffect({
98
- onFailure: () => Effect.succeed([HashSet.fromIterable([pod]), shards]),
99
- onSuccess: () => pipe(PubSub.publish(eventsHub, ShardingEvent.ShardsUnassigned(pod, shards)), Effect.as([HashSet.empty(), HashSet.empty()]))
100
- })), {
101
- concurrency: "inherit"
102
- }), Effect.map(Chunk.fromIterable), Effect.map(_ => Chunk.unzip(_)), Effect.map(([pods, shards]) => [Chunk.map(pods, Chunk.fromIterable), Chunk.map(shards, Chunk.fromIterable)]), Effect.map(([pods, shards]) => [HashSet.fromIterable(Chunk.flatten(pods)), HashSet.fromIterable(Chunk.flatten(shards))]));
103
- // remove assignments of shards that couldn't be unassigned, as well as faulty pods.
104
- const filteredAssignments = pipe(HashMap.removeMany(readyAssignments, failedUnassignedPods), HashMap.map((shards, __) => HashSet.difference(shards, failedUnassignedShards)));
105
- // then do the assignments
106
- const failedAssignedPods = yield* pipe(Effect.forEach(filteredAssignments, ([pod, shards]) => pipe(podApi.assignShards(pod, shards), Effect.zipRight(updateShardsState(shards, Option.some(pod))), Effect.matchEffect({
107
- onFailure: () => Effect.succeed(Chunk.fromIterable([pod])),
108
- onSuccess: () => pipe(PubSub.publish(eventsHub, ShardingEvent.ShardsAssigned(pod, shards)), Effect.as(Chunk.empty()))
109
- })), {
110
- concurrency: "inherit"
111
- }), Effect.map(Chunk.fromIterable), Effect.map(_ => Chunk.flatten(_)), Effect.map(HashSet.fromIterable));
112
- const failedPods = HashSet.union(HashSet.union(failedPingedPods, failedUnassignedPods), failedAssignedPods);
113
- // check if failing pods are still up
114
- yield* Effect.forkIn(layerScope)(Effect.forEach(failedPods, _ => notifyUnhealthyPod(_), {
115
- discard: true
116
- }));
117
- if (HashSet.size(failedPods) > 0) {
118
- yield* Effect.logDebug("Failed to rebalance pods: " + failedPods + " failed pinged: " + failedPingedPods + " failed assigned: " + failedAssignedPods + " failed unassigned: " + failedUnassignedPods);
119
- }
120
- // retry rebalancing later if there was any failure
121
- if (HashSet.size(failedPods) > 0 && rebalanceImmediately) {
122
- yield* pipe(Effect.sleep(config.rebalanceRetryInterval), Effect.zipRight(rebalance(rebalanceImmediately)), Effect.forkIn(layerScope));
123
- }
124
- // persist state changes to Redis
125
- if (areChanges) {
126
- yield* Effect.forkIn(layerScope)(persistAssignments);
127
- }
128
- });
129
- return rebalanceSemaphore.withPermits(1)(algo);
110
+ get runnerVersions() {
111
+ const runnerVersions = [];
112
+ for (const [, meta] of this.runners) {
113
+ runnerVersions.push(meta.runner.version);
114
+ }
115
+ return runnerVersions;
130
116
  }
131
- return {
132
- getAssignments,
133
- getShardingEvents,
134
- register,
135
- unregister,
136
- persistPods,
137
- rebalance,
138
- notifyUnhealthyPod,
139
- checkAllPodsHealth
140
- };
141
117
  }
142
118
  /** @internal */
119
+ export const RunnerWithMetadata = runner => runner;
120
+ /** @internal */
143
121
  export function decideAssignmentsForUnassignedShards(state) {
144
- return pickNewPods(List.fromIterable(state.unassignedShards), state, true, 1);
122
+ return pickNewRunners(state.unassignedShards, state, true, 1);
145
123
  }
124
+ const allocationOrder = /*#__PURE__*/Order.combine( /*#__PURE__*/Order.mapInput(Order.number, ([, shards]) => shards), /*#__PURE__*/Order.mapInput(Order.number, ([,, registeredAt]) => registeredAt));
146
125
  /** @internal */
147
- export function decideAssignmentsForUnbalancedShards(state, rebalanceRate) {
148
- // don't do regular rebalance in the middle of a rolling update
149
- const extraShardsToAllocate = state.allPodsHaveMaxVersion ? pipe(state.shardsPerPod, HashMap.flatMap((shards, _) => {
150
- // count how many extra shards compared to the average
151
- const extraShards = Math.max(HashSet.size(shards) - state.averageShardsPerPod.value, 0);
152
- return pipe(HashMap.empty(), HashMap.set(_, HashSet.fromIterable(List.take(List.fromIterable(shards), extraShards))));
153
- }), HashSet.fromIterable, HashSet.map(_ => _[1]), HashSet.flatMap(_ => _)) : HashSet.empty();
154
- /*
155
- TODO: port sortBy
156
- val sortedShardsToRebalance = extraShardsToAllocate.toList.sortBy { shard =>
157
- // handle unassigned shards first, then shards on the pods with most shards, then shards on old pods
158
- state.shards.get(shard).flatten.fold((Int.MinValue, OffsetDateTime.MIN)) { pod =>
159
- (
160
- state.shardsPerPod.get(pod).fold(Int.MinValue)(-_.size),
161
- state.pods.get(pod).fold(OffsetDateTime.MIN)(_.registered)
162
- )
126
+ export function decideAssignmentsForUnbalancedShards(state, rate) {
127
+ const shardsPerRunner = state.shardsPerRunner;
128
+ const maxVersion = state.maxVersion;
129
+ const extraShardsToAllocate = Arr.empty();
130
+ if (state.allRunnersHaveVersion(maxVersion)) {
131
+ const averageShardsPerRunner = state.averageShardsPerRunner;
132
+ MutableHashMap.forEach(shardsPerRunner, shards => {
133
+ // Count how many extra shards there are compared to the average
134
+ const extraShards = Math.max(0, shards.size - averageShardsPerRunner);
135
+ for (const shard of takeRandom(shards, extraShards)) {
136
+ const maybeAddress = state.shards.get(shard) ?? Option.none();
137
+ if (Option.isNone(maybeAddress)) {
138
+ extraShardsToAllocate.push([shard, Number.MIN_SAFE_INTEGER, Number.MIN_SAFE_INTEGER]);
139
+ continue;
140
+ }
141
+ const address = maybeAddress.value;
142
+ extraShardsToAllocate.push([shard, Option.match(MutableHashMap.get(shardsPerRunner, address), {
143
+ onNone: () => Number.MIN_SAFE_INTEGER,
144
+ onSome: shards => -shards.size
145
+ }), Option.match(MutableHashMap.get(state.runners, address), {
146
+ onNone: () => Number.MIN_SAFE_INTEGER,
147
+ onSome: meta => meta.registeredAt
148
+ })]);
163
149
  }
164
- }
165
- * */
166
- const sortedShardsToRebalance = List.fromIterable(extraShardsToAllocate);
167
- return pickNewPods(sortedShardsToRebalance, state, false, rebalanceRate);
150
+ });
151
+ }
152
+ const sortedShardsToRebalance = extraShardsToAllocate.sort(allocationOrder).map(([shard]) => shard);
153
+ return pickNewRunners(sortedShardsToRebalance, state, false, rate, shardsPerRunner, maxVersion);
168
154
  }
169
- function pickNewPods(shardsToRebalance, state, rebalanceImmediately, rebalanceRate) {
170
- const [_, assignments] = pipe(List.reduce(shardsToRebalance, [state.shardsPerPod, List.empty()], ([shardsPerPod, assignments], shard) => {
171
- const unassignedPods = pipe(assignments, List.flatMap(([shard, _]) => pipe(HashMap.get(state.shards, shard), Option.flatten, Option.toArray, List.fromIterable)));
172
- // find pod with least amount of shards
173
- return pipe(
174
- // keep only pods with the max version
175
- HashMap.filter(shardsPerPod, (_, pod) => {
176
- const maxVersion = state.maxVersion;
177
- if (Option.isNone(maxVersion)) return true;
178
- return pipe(HashMap.get(state.pods, pod), Option.map(PodWithMetadata.extractVersion), Option.map(_ => PodWithMetadata.compareVersion(_, maxVersion.value) === 0), Option.getOrElse(() => false));
179
- }),
180
- // don't assign too many shards to the same pods, unless we need rebalance immediately
181
- HashMap.filter((_, pod) => {
182
- if (rebalanceImmediately) return true;
183
- return pipe(assignments, List.filter(([_, p]) => equals(p)(pod)), List.size) < HashMap.size(state.shards) * rebalanceRate;
184
- }),
185
- // don't assign to a pod that was unassigned in the same rebalance
186
- HashMap.filter((_, pod) => !Option.isSome(List.findFirst(unassignedPods, equals(pod)))), minByOption(([_, pods]) => HashSet.size(pods)), Option.match({
187
- onNone: () => [shardsPerPod, assignments],
188
- onSome: ([pod, shards]) => {
189
- const oldPod = Option.flatten(HashMap.get(state.shards, shard));
190
- // if old pod is same as new pod, don't change anything
191
- if (equals(oldPod)(pod)) {
192
- return [shardsPerPod, assignments];
193
- // if the new pod has more, as much, or only 1 less shard than the old pod, don't change anything
194
- } else if (Option.match(HashMap.get(shardsPerPod, pod), {
195
- onNone: () => 0,
196
- onSome: HashSet.size
197
- }) + 1 >= Option.match(oldPod, {
198
- onNone: () => Number.MAX_SAFE_INTEGER,
199
- onSome: _ => Option.match(HashMap.get(shardsPerPod, _), {
200
- onNone: () => 0,
201
- onSome: HashSet.size
202
- })
203
- })) {
204
- return [shardsPerPod, assignments];
205
- // otherwise, create a new assignment
206
- } else {
207
- const unassigned = Option.match(oldPod, {
208
- onNone: () => shardsPerPod,
209
- onSome: oldPod => HashMap.modify(shardsPerPod, oldPod, HashSet.remove(shard))
210
- });
211
- return [HashMap.modify(unassigned, pod, _ => HashSet.add(shards, shard)), List.prepend(assignments, [shard, pod])];
212
- }
155
+ function pickNewRunners(shardsToRebalance, state, immediate, rate, shardsPerRunner = state.shardsPerRunner, maybeMaxVersion = state.maxVersion) {
156
+ const addressAssignments = MutableHashMap.empty();
157
+ const unassignments = MutableHashMap.empty();
158
+ const changes = MutableHashSet.empty();
159
+ if (Option.isNone(maybeMaxVersion)) {
160
+ return [addressAssignments, unassignments, changes];
161
+ }
162
+ const maxVersion = maybeMaxVersion.value;
163
+ for (const shardId of shardsToRebalance) {
164
+ // Find the runner with the fewest assigned shards
165
+ let candidate;
166
+ let candidateShards;
167
+ for (const [address, shards] of shardsPerRunner) {
168
+ // Keep only runners with the maximum version
169
+ const maybeRunnerMeta = MutableHashMap.get(state.runners, address);
170
+ if (Option.isNone(maybeRunnerMeta)) continue;
171
+ const runnerMeta = maybeRunnerMeta.value;
172
+ if (runnerMeta.runner.version !== maxVersion) continue;
173
+ // Do not assign to a runner that has unassignments in the same rebalance
174
+ if (MutableHashMap.has(unassignments, address)) continue;
175
+ // Do not assign too many shards to each runner unless rebalancing must
176
+ // occur immediately
177
+ if (!immediate) {
178
+ const assignmentCount = Option.getOrUndefined(MutableHashMap.get(addressAssignments, address))?.size ?? 0;
179
+ if (assignmentCount >= state.shards.size * rate) continue;
180
+ }
181
+ if (candidate === undefined || shards.size < candidateShards.size) {
182
+ candidate = address;
183
+ candidateShards = shards;
184
+ }
185
+ }
186
+ if (!candidate || !candidateShards) break;
187
+ // If the old runner is the same as the new runner, do nothing
188
+ const oldRunner = Option.getOrUndefined(state.shards.get(shardId) ?? Option.none());
189
+ if (oldRunner && oldRunner.toString() === candidate.toString()) {
190
+ continue;
191
+ }
192
+ const oldShards = oldRunner && Option.getOrUndefined(MutableHashMap.get(shardsPerRunner, oldRunner));
193
+ // If the new runner has one less, as many, or more shards than the
194
+ // old runner, do not change anything
195
+ if (oldShards && candidateShards.size + 1 >= oldShards.size) continue;
196
+ // Otherwise create a new assignment
197
+ MutableHashMap.modifyAt(addressAssignments, candidate, Option.match({
198
+ onNone: () => Option.some(new Set([shardId])),
199
+ onSome: shards => {
200
+ shards.add(shardId);
201
+ return Option.some(shards);
213
202
  }
214
203
  }));
215
- }));
216
- const unassignments = List.flatMap(assignments, ([shard, _]) => pipe(Option.flatten(HashMap.get(state.shards, shard)), Option.map(_ => [shard, _]), Option.match({
217
- onNone: List.empty,
218
- onSome: List.of
219
- })));
220
- const assignmentsPerPod = pipe(assignments, groupBy(([_, pod]) => pod), HashMap.map(HashSet.map(([shardId, _]) => shardId)));
221
- const unassignmentsPerPod = pipe(unassignments, groupBy(([_, pod]) => pod), HashMap.map(HashSet.map(([shardId, _]) => shardId)));
222
- return [assignmentsPerPod, unassignmentsPerPod];
204
+ if (oldRunner) {
205
+ MutableHashMap.modifyAt(unassignments, oldRunner, Option.match({
206
+ onNone: () => Option.some(new Set([shardId])),
207
+ onSome: shards => {
208
+ shards.add(shardId);
209
+ return Option.some(shards);
210
+ }
211
+ }));
212
+ }
213
+ // Move the shard to the new runner
214
+ candidateShards.add(shardId);
215
+ if (oldShards) {
216
+ oldShards.delete(shardId);
217
+ }
218
+ // Track changes
219
+ MutableHashSet.add(changes, candidate);
220
+ if (oldRunner) MutableHashSet.add(changes, oldRunner);
221
+ }
222
+ return [addressAssignments, unassignments, changes];
223
+ }
224
+ function takeRandom(self, n) {
225
+ const array = Array.from(self);
226
+ let currentIndex = array.length;
227
+ while (currentIndex != 0) {
228
+ const randomIndex = Math.floor(Math.random() * currentIndex);
229
+ currentIndex = currentIndex - 1;
230
+ swap(array, currentIndex, randomIndex);
231
+ }
232
+ return n < array.length ? array.slice(0, n) : array;
233
+ }
234
+ function swap(array, i, j) {
235
+ const tmp = array[i];
236
+ array[i] = array[j];
237
+ array[j] = tmp;
238
+ return array;
223
239
  }
224
- /**
225
- * @since 1.0.0
226
- * @category layers
227
- */
228
- export const live = /*#__PURE__*/Effect.gen(function* () {
229
- const config = yield* ManagerConfig.ManagerConfig;
230
- const stateRepository = yield* Storage.Storage;
231
- const healthApi = yield* PodsHealth.PodsHealth;
232
- const podsApi = yield* Pods.Pods;
233
- const layerScope = yield* Effect.scope;
234
- const pods = yield* stateRepository.getPods;
235
- const assignments = yield* stateRepository.getAssignments;
236
- const filteredPods = yield* pipe(Effect.filter(pods, ([podAddress]) => healthApi.isAlive(podAddress), {
237
- concurrency: "inherit"
238
- }), Effect.map(HashMap.fromIterable));
239
- const filteredAssignments = HashMap.filter(assignments, pod => Option.isSome(pod) && HashMap.has(filteredPods, pod.value));
240
- const cdt = yield* Clock.currentTimeMillis;
241
- const initialState = ShardManagerState.make(HashMap.map(filteredPods, pod => PodWithMetadata.make(pod, cdt)), HashMap.union(filteredAssignments, pipe(Chunk.range(1, config.numberOfShards), Chunk.map(n => [ShardId.make(n), Option.none()]), HashMap.fromIterable)));
242
- const state = yield* RefSynchronized.make(initialState);
243
- const rebalanceSemaphore = yield* Effect.makeSemaphore(1);
244
- const eventsHub = yield* PubSub.unbounded();
245
- const shardManager = make(layerScope, state, rebalanceSemaphore, eventsHub, healthApi, podsApi, stateRepository, config);
246
- yield* Effect.forkIn(layerScope)(shardManager.persistPods);
247
- // rebalance immediately if there are unassigned shards
248
- yield* shardManager.rebalance(HashSet.size(initialState.unassignedShards) > 0);
249
- // start a regular rebalance at the given interval
250
- yield* pipe(shardManager.rebalance(false), Effect.repeat(Schedule.spaced(config.rebalanceInterval)), Effect.forkIn(layerScope));
251
- // log info events
252
- yield* pipe(shardManager.getShardingEvents, Stream.mapEffect(_ => Effect.logDebug(JSON.stringify(_))), Stream.runDrain, Effect.forkIn(layerScope));
253
- yield* Effect.logDebug("Shard Manager loaded");
254
- return shardManager;
255
- }).pipe( /*#__PURE__*/Layer.scoped(shardManagerTag));
256
240
  //# sourceMappingURL=shardManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shardManager.js","names":["Chunk","Clock","GenericTag","Effect","equals","pipe","HashMap","HashSet","Layer","List","Option","PubSub","Schedule","Stream","RefSynchronized","ManagerConfig","Pods","PodsHealth","ShardId","ShardingEvent","ShardingException","Storage","PodWithMetadata","ShardManagerState","groupBy","minByOption","ShardManagerSymbolKey","ShardManagerTypeId","Symbol","for","shardManagerTag","make","layerScope","stateRef","rebalanceSemaphore","eventsHub","healthApi","podApi","stateRepository","config","getAssignments","get","map","_","shards","getShardingEvents","fromPubSub","register","pod","logDebug","address","version","zipRight","updateAndGetEffect","state","flatMap","clock","currentTimeMillis","cdt","set","pods","zipLeft","publish","PodRegistered","when","rebalance","size","unassignedShards","forkIn","persistPods","asVoid","stateHasPod","podAddress","has","notifyUnhealthyPod","whenEffect","PodHealthChecked","unlessEffect","logWarning","unregister","isAlive","checkAllPodsHealth","keySet","forEach","concurrency","discard","eff","Do","bind","modify","filter","some","remove","none","tap","PodUnregistered","ShardsUnassigned","unassignments","withRetry","zio","retry","spaced","persistRetryInterval","andThen","recurs","persistRetryCount","ignore","persistAssignments","saveAssignments","savePods","v","updateShardsState","updateEffect","isSome","value","fail","PodNoLongerRegisteredException","succeed","assignment","shard","rebalanceImmediately","algo","gen","assignments","decideAssignmentsForUnassignedShards","decideAssignmentsForUnbalancedShards","rebalanceRate","areChanges","JSON","stringify","failedPingedPods","union","ping","timeout","pingTimeout","match","onFailure","fromIterable","onSuccess","empty","flatten","shardsToRemove","appendAll","__","readyAssignments","difference","readyUnassignments","failedUnassignedPods","failedUnassignedShards","unassignShards","matchEffect","as","unzip","filteredAssignments","removeMany","failedAssignedPods","assignShards","ShardsAssigned","failedPods","sleep","rebalanceRetryInterval","withPermits","pickNewPods","extraShardsToAllocate","allPodsHaveMaxVersion","shardsPerPod","extraShards","Math","max","averageShardsPerPod","take","sortedShardsToRebalance","shardsToRebalance","reduce","unassignedPods","toArray","maxVersion","isNone","extractVersion","compareVersion","getOrElse","p","findFirst","onNone","onSome","oldPod","Number","MAX_SAFE_INTEGER","unassigned","add","prepend","of","assignmentsPerPod","shardId","unassignmentsPerPod","live","podsApi","scope","getPods","filteredPods","initialState","range","numberOfShards","n","makeSemaphore","unbounded","shardManager","repeat","rebalanceInterval","mapEffect","runDrain","scoped"],"sources":["../../../src/internal/shardManager.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"shardManager.js","names":["Arr","Clock","Effect","constFalse","MutableHashMap","MutableHashSet","Option","Order","RunnerHealth","ShardId","ShardStorage","State","runners","shards","fromStorage","fnUntraced","numberOfShards","storage","runnerHealth","storedRunners","getRunners","storedAssignments","getAssignments","deadRunners","empty","aliveRunners","forEach","address","runner","map","isAlive","set","push","concurrency","discard","length","logWarning","assignedShards","Map","invalidAssignments","shard","isSome","has","value","now","currentTimeMillis","runnerState","RunnerWithMetadata","registeredAt","shardState","n","shardId","make","fromNullable","get","constructor","maxVersion","size","none","version","undefined","meta","some","allRunnersHaveVersion","pipe","max","every","runnerVersions","getOrElse","shardsPerRunner","isEmpty","_","Set","isNone","shardIds","getOrUndefined","add","averageShardsPerRunner","runnerCount","unassignedShards","decideAssignmentsForUnassignedShards","state","pickNewRunners","allocationOrder","combine","mapInput","number","decideAssignmentsForUnbalancedShards","rate","extraShardsToAllocate","extraShards","Math","takeRandom","maybeAddress","Number","MIN_SAFE_INTEGER","match","onNone","onSome","sortedShardsToRebalance","sort","shardsToRebalance","immediate","maybeMaxVersion","addressAssignments","unassignments","changes","candidate","candidateShards","maybeRunnerMeta","runnerMeta","assignmentCount","oldRunner","toString","oldShards","modifyAt","delete","self","array","Array","from","currentIndex","randomIndex","floor","random","swap","slice","i","j","tmp"],"sources":["../../../src/internal/shardManager.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}