@effect/cluster 0.28.4 → 0.29.1

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 +731 -91
  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 +64 -133
  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 +729 -90
  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 +1059 -186
  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
@@ -0,0 +1,292 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as SqlClient from "@effect/sql/SqlClient"
5
+ import type { SqlError } from "@effect/sql/SqlError"
6
+ import * as Arr from "effect/Array"
7
+ import * as Effect from "effect/Effect"
8
+ import * as Layer from "effect/Layer"
9
+ import { PersistenceError } from "./ClusterError.js"
10
+ import * as ShardStorage from "./ShardStorage.js"
11
+
12
+ /**
13
+ * @since 1.0.0
14
+ * @category Constructors
15
+ */
16
+ export const make = Effect.fnUntraced(function*(options?: {
17
+ readonly prefix?: string | undefined
18
+ }) {
19
+ const sql = (yield* SqlClient.SqlClient).withoutTransforms()
20
+ const prefix = options?.prefix ?? "cluster"
21
+ const table = (name: string) => `${prefix}_${name}`
22
+
23
+ const runnersTable = table("runners")
24
+ const runnersTableSql = sql(runnersTable)
25
+
26
+ yield* sql.onDialectOrElse({
27
+ mssql: () =>
28
+ sql`
29
+ IF OBJECT_ID(N'${runnersTableSql}', N'U') IS NULL
30
+ CREATE TABLE ${runnersTableSql} (
31
+ address VARCHAR(255) PRIMARY KEY,
32
+ runner TEXT NOT NULL
33
+ )
34
+ `,
35
+ mysql: () =>
36
+ sql`
37
+ CREATE TABLE IF NOT EXISTS ${runnersTableSql} (
38
+ address VARCHAR(255) PRIMARY KEY,
39
+ runner TEXT NOT NULL
40
+ )
41
+ `,
42
+ pg: () =>
43
+ sql`
44
+ CREATE TABLE IF NOT EXISTS ${runnersTableSql} (
45
+ address VARCHAR(255) PRIMARY KEY,
46
+ runner TEXT NOT NULL
47
+ )
48
+ `,
49
+ orElse: () =>
50
+ // sqlite
51
+ sql`
52
+ CREATE TABLE IF NOT EXISTS ${runnersTableSql} (
53
+ address TEXT PRIMARY KEY,
54
+ runner TEXT NOT NULL
55
+ )
56
+ `
57
+ })
58
+
59
+ const shardsTable = table("shards")
60
+ const shardsTableSql = sql(shardsTable)
61
+
62
+ yield* sql.onDialectOrElse({
63
+ mssql: () =>
64
+ sql`
65
+ IF OBJECT_ID(N'${shardsTableSql}', N'U') IS NULL
66
+ CREATE TABLE ${shardsTableSql} (
67
+ shard_id INT PRIMARY KEY,
68
+ address VARCHAR(255)
69
+ )
70
+ `,
71
+ mysql: () =>
72
+ sql`
73
+ CREATE TABLE IF NOT EXISTS ${shardsTableSql} (
74
+ shard_id INT PRIMARY KEY,
75
+ address VARCHAR(255)
76
+ )
77
+ `,
78
+ pg: () =>
79
+ sql`
80
+ CREATE TABLE IF NOT EXISTS ${shardsTableSql} (
81
+ shard_id INT PRIMARY KEY,
82
+ address VARCHAR(255)
83
+ )
84
+ `,
85
+ orElse: () =>
86
+ // sqlite
87
+ sql`
88
+ CREATE TABLE IF NOT EXISTS ${shardsTableSql} (
89
+ shard_id INTEGER PRIMARY KEY,
90
+ address TEXT
91
+ )
92
+ `
93
+ })
94
+
95
+ const locksTable = table("locks")
96
+ const locksTableSql = sql(locksTable)
97
+
98
+ yield* sql.onDialectOrElse({
99
+ mssql: () =>
100
+ sql`
101
+ IF OBJECT_ID(N'${locksTableSql}', N'U') IS NULL
102
+ CREATE TABLE ${locksTableSql} (
103
+ shard_id INT PRIMARY KEY,
104
+ address VARCHAR(255) NOT NULL,
105
+ acquired_at DATETIME NOT NULL
106
+ )
107
+ `,
108
+ mysql: () =>
109
+ sql`
110
+ CREATE TABLE IF NOT EXISTS ${locksTableSql} (
111
+ shard_id INT PRIMARY KEY,
112
+ address VARCHAR(255) NOT NULL,
113
+ acquired_at DATETIME NOT NULL
114
+ )
115
+ `,
116
+ pg: () =>
117
+ sql`
118
+ CREATE TABLE IF NOT EXISTS ${locksTableSql} (
119
+ shard_id INT PRIMARY KEY,
120
+ address VARCHAR(255) NOT NULL,
121
+ acquired_at TIMESTAMP NOT NULL
122
+ )
123
+ `,
124
+ orElse: () =>
125
+ // sqlite
126
+ sql`
127
+ CREATE TABLE IF NOT EXISTS ${locksTableSql} (
128
+ shard_id INTEGER PRIMARY KEY,
129
+ address TEXT NOT NULL,
130
+ acquired_at DATETIME NOT NULL
131
+ )
132
+ `
133
+ })
134
+
135
+ const sqlNowString = sql.onDialectOrElse({
136
+ pg: () => "NOW()",
137
+ mysql: () => "NOW()",
138
+ mssql: () => "GETDATE()",
139
+ orElse: () => "CURRENT_TIMESTAMP"
140
+ })
141
+ const sqlNow = sql.literal(sqlNowString)
142
+
143
+ const lockExpiresAt = sql.onDialectOrElse({
144
+ pg: () => sql`${sqlNow} - INTERVAL '120 seconds'`,
145
+ mysql: () => sql`DATE_SUB(${sqlNow}, INTERVAL 120 SECOND)`,
146
+ mssql: () => sql`DATEADD(SECOND, -120, ${sqlNow})`,
147
+ orElse: () => sql`datetime(${sqlNow}, '-120 seconds')`
148
+ })
149
+
150
+ const acquireLock = sql.onDialectOrElse({
151
+ pg: () => (address: string, values: Array<any>) =>
152
+ sql`
153
+ INSERT INTO ${locksTableSql} (shard_id, address, acquired_at) VALUES ${sql.csv(values)}
154
+ ON CONFLICT (shard_id) DO UPDATE
155
+ SET address = ${address}, acquired_at = ${sqlNow}
156
+ WHERE ${locksTableSql}.address = ${address}
157
+ OR ${locksTableSql}.acquired_at < ${lockExpiresAt}
158
+ `,
159
+ mysql: () => (_address: string, values: Array<any>) =>
160
+ sql`
161
+ INSERT INTO ${locksTableSql} (shard_id, address, acquired_at) VALUES ${sql.csv(values)}
162
+ ON DUPLICATE KEY UPDATE
163
+ address = IF(address = VALUES(address) OR acquired_at < ${lockExpiresAt}, VALUES(address), address),
164
+ acquired_at = IF(address = VALUES(address) OR acquired_at < ${lockExpiresAt}, VALUES(acquired_at), acquired_at)
165
+ `.unprepared,
166
+ mssql: () => (_address: string, values: Array<any>) =>
167
+ sql`
168
+ MERGE ${locksTableSql} WITH (HOLDLOCK) AS target
169
+ USING (SELECT * FROM (VALUES ${sql.csv(values)})) AS source (shard_id, address, acquired_at)
170
+ ON target.shard_id = source.shard_id
171
+ WHEN MATCHED AND (target.address = source.address OR DATEDIFF(SECOND, target.acquired_at, ${sqlNow}) > 120) THEN
172
+ UPDATE SET address = source.address, acquired_at = source.acquired_at
173
+ WHEN NOT MATCHED THEN
174
+ INSERT (shard_id, address, acquired_at)
175
+ VALUES (source.shard_id, source.address, source.acquired_at);
176
+ `,
177
+ orElse: () => (address: string, values: Array<any>) =>
178
+ // sqlite
179
+ sql`
180
+ WITH source(shard_id, address, acquired_at) AS (VALUES ${sql.csv(values)})
181
+ INSERT INTO ${locksTableSql} (shard_id, address, acquired_at)
182
+ SELECT source.shard_id, source.address, source.acquired_at
183
+ FROM source
184
+ WHERE NOT EXISTS (
185
+ SELECT 1 FROM ${locksTableSql}
186
+ WHERE shard_id = source.shard_id
187
+ AND address != ${address}
188
+ AND (strftime('%s', ${sqlNow}) - strftime('%s', acquired_at)) <= 120
189
+ )
190
+ ON CONFLICT(shard_id) DO UPDATE
191
+ SET address = ${address}, acquired_at = ${sqlNow}
192
+ `
193
+ })
194
+
195
+ const forUpdate = sql.onDialectOrElse({
196
+ sqlite: () => sql.literal(""),
197
+ orElse: () => sql.literal("FOR UPDATE")
198
+ })
199
+
200
+ return yield* ShardStorage.makeEncoded({
201
+ getAssignments: sql`SELECT shard_id, address FROM ${shardsTableSql} ORDER BY shard_id`.values.pipe(
202
+ PersistenceError.refail
203
+ ) as any,
204
+
205
+ saveAssignments: (assignments) => {
206
+ const remove = sql`DELETE FROM ${shardsTableSql}`
207
+ if (assignments.length === 0) {
208
+ return PersistenceError.refail(remove)
209
+ }
210
+ const values = assignments.map(([shardId, address]) => sql`(${shardId}, ${address})`)
211
+ return remove.pipe(
212
+ Effect.andThen(sql`INSERT INTO ${shardsTableSql} (shard_id, address) VALUES ${sql.csv(values)}`.unprepared),
213
+ sql.withTransaction,
214
+ PersistenceError.refail
215
+ )
216
+ },
217
+
218
+ getRunners: sql`SELECT address, runner FROM ${runnersTableSql}`.values.pipe(
219
+ PersistenceError.refail,
220
+ Effect.map(Arr.map(([address, runner]) => [String(address), String(runner)] as const))
221
+ ),
222
+
223
+ saveRunners: (runners) => {
224
+ const remove = sql`DELETE FROM ${runnersTableSql}`
225
+ if (runners.length === 0) {
226
+ return PersistenceError.refail(remove)
227
+ }
228
+ const values = runners.map(([address, runner]) => sql`(${address}, ${runner})`)
229
+ const insert = sql`INSERT INTO ${runnersTableSql} (address, runner) VALUES ${sql.csv(values)}`.unprepared
230
+ return remove.pipe(
231
+ Effect.andThen(insert),
232
+ sql.withTransaction,
233
+ PersistenceError.refail
234
+ )
235
+ },
236
+
237
+ acquire: Effect.fnUntraced(
238
+ function*(address, shardIds) {
239
+ const values = shardIds.map((shardId) => sql`(${shardId}, ${address}, ${sqlNow})`)
240
+ yield* acquireLock(address, values)
241
+ const currentLocks = yield* sql<{ shard_id: number }>`
242
+ SELECT shard_id FROM ${sql(locksTable)}
243
+ WHERE address = ${address} AND ${sql.in("shard_id", shardIds)}
244
+ ${forUpdate}
245
+ `
246
+ return currentLocks.map((row) => row.shard_id)
247
+ },
248
+ sql.withTransaction,
249
+ PersistenceError.refail
250
+ ),
251
+
252
+ refresh: (address, shardIds) =>
253
+ sql`UPDATE ${locksTableSql} SET acquired_at = ${sqlNow} WHERE address = ${address} AND ${
254
+ sql.in("shard_id", shardIds)
255
+ }`.pipe(
256
+ Effect.andThen(
257
+ sql`SELECT shard_id FROM ${locksTableSql} WHERE address = ${address} AND acquired_at >= ${lockExpiresAt} ${forUpdate}`
258
+ .values
259
+ ),
260
+ Effect.map((rows) => rows.map((row) => Number(row[0]))),
261
+ PersistenceError.refail
262
+ ),
263
+
264
+ release: (address, shardId) =>
265
+ sql`DELETE FROM ${locksTableSql} WHERE address = ${address} AND shard_id = ${shardId}`
266
+ .pipe(PersistenceError.refail),
267
+
268
+ releaseAll: (address) =>
269
+ sql`DELETE FROM ${locksTableSql} WHERE address = ${address}`.pipe(
270
+ PersistenceError.refail
271
+ )
272
+ })
273
+ })
274
+
275
+ /**
276
+ * @since 1.0.0
277
+ * @category Layers
278
+ */
279
+ export const layer: Layer.Layer<
280
+ ShardStorage.ShardStorage,
281
+ SqlError,
282
+ SqlClient.SqlClient
283
+ > = Layer.effect(ShardStorage.ShardStorage, make())
284
+
285
+ /**
286
+ * @since 1.0.0
287
+ * @category Layers
288
+ */
289
+ export const layerWith = (options: {
290
+ readonly prefix?: string | undefined
291
+ }): Layer.Layer<ShardStorage.ShardStorage, SqlError, SqlClient.SqlClient> =>
292
+ Layer.scoped(ShardStorage.ShardStorage, make(options))
@@ -0,0 +1,82 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Clock from "effect/Clock"
5
+ import * as Duration from "effect/Duration"
6
+ import * as Effect from "effect/Effect"
7
+ import * as Layer from "effect/Layer"
8
+ import * as Schedule from "effect/Schedule"
9
+ import type { Scope } from "effect/Scope"
10
+ import { ShardManagerClient } from "./ShardManager.js"
11
+
12
+ /**
13
+ * @since 1.0.0
14
+ * @category Constructors
15
+ */
16
+ export const make: (getRemoteTime: Effect.Effect<number, never, never>) => Effect.Effect<
17
+ Clock.Clock,
18
+ never,
19
+ Scope
20
+ > = Effect.fnUntraced(function*(getRemoteTime) {
21
+ const clock = yield* Effect.clock
22
+
23
+ let driftMillis = 0
24
+ let driftNanos = BigInt(0)
25
+
26
+ yield* getRemoteTime.pipe(
27
+ Effect.timed,
28
+ Effect.map(([duration, shardManagerTime]) => {
29
+ const halfTrip = Duration.unsafeDivide(duration, 2)
30
+ shardManagerTime = shardManagerTime + Duration.toMillis(halfTrip) + 1
31
+ const selfTime = clock.unsafeCurrentTimeMillis()
32
+ return shardManagerTime - selfTime
33
+ }),
34
+ Effect.replicateEffect(5),
35
+ Effect.flatMap((drifts) => {
36
+ drifts.sort()
37
+ const drift = (driftMillis + drifts[2]) / 2
38
+ driftMillis = Math.round(drift)
39
+ driftNanos = BigInt(Math.round(drift * 1_000_000))
40
+ return Effect.logDebug("Current drift", driftMillis)
41
+ }),
42
+ Effect.andThen(Effect.sleep(Duration.minutes(5))),
43
+ Effect.forever,
44
+ Effect.sandbox,
45
+ Effect.retry(Schedule.spaced(Duration.minutes(1))),
46
+ Effect.annotateLogs({
47
+ package: "@effect/cluster",
48
+ service: "SynchronizedClock"
49
+ }),
50
+ Effect.forkScoped
51
+ )
52
+
53
+ function unsafeCurrentTimeMillis() {
54
+ return clock.unsafeCurrentTimeMillis() + driftMillis
55
+ }
56
+ function unsafeCurrentTimeNanos() {
57
+ return clock.unsafeCurrentTimeNanos() + driftNanos
58
+ }
59
+
60
+ return Clock.Clock.of({
61
+ [Clock.ClockTypeId]: Clock.ClockTypeId,
62
+ sleep: clock.sleep,
63
+ unsafeCurrentTimeMillis,
64
+ unsafeCurrentTimeNanos,
65
+ currentTimeMillis: Effect.sync(unsafeCurrentTimeMillis),
66
+ currentTimeNanos: Effect.sync(unsafeCurrentTimeNanos)
67
+ })
68
+ })
69
+
70
+ /**
71
+ * @since 1.0.0
72
+ * @category Layers
73
+ */
74
+ export const layer: Layer.Layer<
75
+ never,
76
+ never,
77
+ ShardManagerClient
78
+ > = Layer.unwrapScoped(Effect.gen(function*() {
79
+ const shardManager = yield* ShardManagerClient
80
+ const clock = yield* make(shardManager.getTime)
81
+ return Layer.setClock(clock)
82
+ }))
package/src/index.ts CHANGED
@@ -1,97 +1,102 @@
1
1
  /**
2
2
  * @since 1.0.0
3
3
  */
4
- export * as AtLeastOnce from "./AtLeastOnce.js"
4
+ export * as ClusterError from "./ClusterError.js"
5
5
 
6
6
  /**
7
7
  * @since 1.0.0
8
8
  */
9
- export * as AtLeastOnceStorage from "./AtLeastOnceStorage.js"
9
+ export * as ClusterMetrics from "./ClusterMetrics.js"
10
10
 
11
11
  /**
12
12
  * @since 1.0.0
13
13
  */
14
- export * as Broadcaster from "./Broadcaster.js"
14
+ export * as ClusterSchema from "./ClusterSchema.js"
15
15
 
16
16
  /**
17
17
  * @since 1.0.0
18
18
  */
19
- export * as ManagerConfig from "./ManagerConfig.js"
19
+ export * as DeliverAt from "./DeliverAt.js"
20
20
 
21
21
  /**
22
22
  * @since 1.0.0
23
23
  */
24
- export * as Message from "./Message.js"
24
+ export * as Entity from "./Entity.js"
25
25
 
26
26
  /**
27
27
  * @since 1.0.0
28
28
  */
29
- export * as MessageState from "./MessageState.js"
29
+ export * as EntityAddress from "./EntityAddress.js"
30
30
 
31
31
  /**
32
32
  * @since 1.0.0
33
33
  */
34
- export * as Messenger from "./Messenger.js"
34
+ export * as EntityId from "./EntityId.js"
35
35
 
36
36
  /**
37
37
  * @since 1.0.0
38
38
  */
39
- export * as Pod from "./Pod.js"
39
+ export * as EntityType from "./EntityType.js"
40
40
 
41
41
  /**
42
42
  * @since 1.0.0
43
43
  */
44
- export * as PodAddress from "./PodAddress.js"
44
+ export * as Envelope from "./Envelope.js"
45
45
 
46
46
  /**
47
47
  * @since 1.0.0
48
48
  */
49
- export * as Pods from "./Pods.js"
49
+ export * as HttpCommon from "./HttpCommon.js"
50
50
 
51
51
  /**
52
52
  * @since 1.0.0
53
53
  */
54
- export * as PodsHealth from "./PodsHealth.js"
54
+ export * as HttpRunner from "./HttpRunner.js"
55
55
 
56
56
  /**
57
57
  * @since 1.0.0
58
58
  */
59
- export * as PoisonPill from "./PoisonPill.js"
59
+ export * as HttpShardManager from "./HttpShardManager.js"
60
60
 
61
61
  /**
62
62
  * @since 1.0.0
63
63
  */
64
- export * as RecipientAddress from "./RecipientAddress.js"
64
+ export * as Message from "./Message.js"
65
65
 
66
66
  /**
67
67
  * @since 1.0.0
68
68
  */
69
- export * as RecipientBehaviour from "./RecipientBehaviour.js"
69
+ export * as MessageStorage from "./MessageStorage.js"
70
70
 
71
71
  /**
72
72
  * @since 1.0.0
73
73
  */
74
- export * as RecipientBehaviourContext from "./RecipientBehaviourContext.js"
74
+ export * as Reply from "./Reply.js"
75
75
 
76
76
  /**
77
77
  * @since 1.0.0
78
78
  */
79
- export * as RecipientType from "./RecipientType.js"
79
+ export * as Runner from "./Runner.js"
80
80
 
81
81
  /**
82
82
  * @since 1.0.0
83
83
  */
84
- export * as Serialization from "./Serialization.js"
84
+ export * as RunnerAddress from "./RunnerAddress.js"
85
85
 
86
86
  /**
87
87
  * @since 1.0.0
88
88
  */
89
- export * as SerializedEnvelope from "./SerializedEnvelope.js"
89
+ export * as RunnerHealth from "./RunnerHealth.js"
90
90
 
91
91
  /**
92
92
  * @since 1.0.0
93
93
  */
94
- export * as SerializedMessage from "./SerializedMessage.js"
94
+ export * as RunnerServer from "./RunnerServer.js"
95
+
96
+ /**
97
+ * @since 1.0.0
98
+ */
99
+ export * as Runners from "./Runners.js"
95
100
 
96
101
  /**
97
102
  * @since 1.0.0
@@ -106,7 +111,7 @@ export * as ShardManager from "./ShardManager.js"
106
111
  /**
107
112
  * @since 1.0.0
108
113
  */
109
- export * as ShardManagerClient from "./ShardManagerClient.js"
114
+ export * as ShardStorage from "./ShardStorage.js"
110
115
 
111
116
  /**
112
117
  * @since 1.0.0
@@ -121,19 +126,44 @@ export * as ShardingConfig from "./ShardingConfig.js"
121
126
  /**
122
127
  * @since 1.0.0
123
128
  */
124
- export * as ShardingEvent from "./ShardingEvent.js"
129
+ export * as ShardingRegistrationEvent from "./ShardingRegistrationEvent.js"
130
+
131
+ /**
132
+ * @since 1.0.0
133
+ */
134
+ export * as Singleton from "./Singleton.js"
125
135
 
126
136
  /**
127
137
  * @since 1.0.0
128
138
  */
129
- export * as ShardingException from "./ShardingException.js"
139
+ export * as SingletonAddress from "./SingletonAddress.js"
130
140
 
131
141
  /**
132
142
  * @since 1.0.0
133
143
  */
134
- export * as ShardingRegistrationEvent from "./ShardingRegistrationEvent.js"
144
+ export * as Snowflake from "./Snowflake.js"
145
+
146
+ /**
147
+ * @since 1.0.0
148
+ */
149
+ export * as SocketRunner from "./SocketRunner.js"
150
+
151
+ /**
152
+ * @since 1.0.0
153
+ */
154
+ export * as SocketShardManager from "./SocketShardManager.js"
155
+
156
+ /**
157
+ * @since 1.0.0
158
+ */
159
+ export * as SqlMessageStorage from "./SqlMessageStorage.js"
160
+
161
+ /**
162
+ * @since 1.0.0
163
+ */
164
+ export * as SqlShardStorage from "./SqlShardStorage.js"
135
165
 
136
166
  /**
137
167
  * @since 1.0.0
138
168
  */
139
- export * as Storage from "./Storage.js"
169
+ export * as SynchronizedClock from "./SynchronizedClock.js"