@effect/cluster 0.50.6 → 0.52.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 (232) hide show
  1. package/RunnerStorage/package.json +6 -0
  2. package/SqlRunnerStorage/package.json +6 -0
  3. package/dist/cjs/ClusterError.js +2 -24
  4. package/dist/cjs/ClusterError.js.map +1 -1
  5. package/dist/cjs/ClusterMetrics.js +13 -15
  6. package/dist/cjs/ClusterMetrics.js.map +1 -1
  7. package/dist/cjs/ClusterSchema.js +17 -2
  8. package/dist/cjs/ClusterSchema.js.map +1 -1
  9. package/dist/cjs/ClusterWorkflowEngine.js +50 -83
  10. package/dist/cjs/ClusterWorkflowEngine.js.map +1 -1
  11. package/dist/cjs/Entity.js +1 -13
  12. package/dist/cjs/Entity.js.map +1 -1
  13. package/dist/cjs/EntityAddress.js +9 -1
  14. package/dist/cjs/EntityAddress.js.map +1 -1
  15. package/dist/cjs/EntityId.js +7 -1
  16. package/dist/cjs/EntityId.js.map +1 -1
  17. package/dist/cjs/EntityProxy.js +1 -1
  18. package/dist/cjs/EntityProxy.js.map +1 -1
  19. package/dist/cjs/HttpRunner.js +69 -43
  20. package/dist/cjs/HttpRunner.js.map +1 -1
  21. package/dist/cjs/MessageStorage.js +64 -16
  22. package/dist/cjs/MessageStorage.js.map +1 -1
  23. package/dist/cjs/Runner.js +3 -3
  24. package/dist/cjs/Runner.js.map +1 -1
  25. package/dist/cjs/RunnerAddress.js +7 -0
  26. package/dist/cjs/RunnerAddress.js.map +1 -1
  27. package/dist/cjs/RunnerHealth.js +91 -32
  28. package/dist/cjs/RunnerHealth.js.map +1 -1
  29. package/dist/cjs/RunnerServer.js +38 -24
  30. package/dist/cjs/RunnerServer.js.map +1 -1
  31. package/dist/cjs/RunnerStorage.js +100 -0
  32. package/dist/cjs/RunnerStorage.js.map +1 -0
  33. package/dist/cjs/Runners.js +18 -22
  34. package/dist/cjs/Runners.js.map +1 -1
  35. package/dist/cjs/ShardId.js +17 -7
  36. package/dist/cjs/ShardId.js.map +1 -1
  37. package/dist/cjs/Sharding.js +444 -320
  38. package/dist/cjs/Sharding.js.map +1 -1
  39. package/dist/cjs/ShardingConfig.js +10 -14
  40. package/dist/cjs/ShardingConfig.js.map +1 -1
  41. package/dist/cjs/Snowflake.js +1 -1
  42. package/dist/cjs/SocketRunner.js +1 -1
  43. package/dist/cjs/SocketRunner.js.map +1 -1
  44. package/dist/cjs/SqlMessageStorage.js +22 -28
  45. package/dist/cjs/SqlMessageStorage.js.map +1 -1
  46. package/dist/cjs/SqlRunnerStorage.js +375 -0
  47. package/dist/cjs/SqlRunnerStorage.js.map +1 -0
  48. package/dist/cjs/index.js +5 -15
  49. package/dist/cjs/internal/entityManager.js +42 -23
  50. package/dist/cjs/internal/entityManager.js.map +1 -1
  51. package/dist/dts/ClusterError.d.ts +0 -22
  52. package/dist/dts/ClusterError.d.ts.map +1 -1
  53. package/dist/dts/ClusterMetrics.d.ts +4 -14
  54. package/dist/dts/ClusterMetrics.d.ts.map +1 -1
  55. package/dist/dts/ClusterSchema.d.ts +9 -1
  56. package/dist/dts/ClusterSchema.d.ts.map +1 -1
  57. package/dist/dts/ClusterWorkflowEngine.d.ts.map +1 -1
  58. package/dist/dts/Entity.d.ts +3 -14
  59. package/dist/dts/Entity.d.ts.map +1 -1
  60. package/dist/dts/EntityAddress.d.ts +11 -0
  61. package/dist/dts/EntityAddress.d.ts.map +1 -1
  62. package/dist/dts/EntityId.d.ts +5 -0
  63. package/dist/dts/EntityId.d.ts.map +1 -1
  64. package/dist/dts/EntityProxy.d.ts +5 -6
  65. package/dist/dts/EntityProxy.d.ts.map +1 -1
  66. package/dist/dts/HttpRunner.d.ts +48 -25
  67. package/dist/dts/HttpRunner.d.ts.map +1 -1
  68. package/dist/dts/MessageStorage.d.ts +13 -5
  69. package/dist/dts/MessageStorage.d.ts.map +1 -1
  70. package/dist/dts/Runner.d.ts +4 -4
  71. package/dist/dts/Runner.d.ts.map +1 -1
  72. package/dist/dts/RunnerAddress.d.ts +5 -0
  73. package/dist/dts/RunnerAddress.d.ts.map +1 -1
  74. package/dist/dts/RunnerHealth.d.ts +24 -16
  75. package/dist/dts/RunnerHealth.d.ts.map +1 -1
  76. package/dist/dts/RunnerServer.d.ts +5 -4
  77. package/dist/dts/RunnerServer.d.ts.map +1 -1
  78. package/dist/dts/{ShardStorage.d.ts → RunnerStorage.d.ts} +41 -54
  79. package/dist/dts/RunnerStorage.d.ts.map +1 -0
  80. package/dist/dts/Runners.d.ts +15 -11
  81. package/dist/dts/Runners.d.ts.map +1 -1
  82. package/dist/dts/ShardId.d.ts +1 -1
  83. package/dist/dts/ShardId.d.ts.map +1 -1
  84. package/dist/dts/Sharding.d.ts +20 -10
  85. package/dist/dts/Sharding.d.ts.map +1 -1
  86. package/dist/dts/ShardingConfig.d.ts +40 -14
  87. package/dist/dts/ShardingConfig.d.ts.map +1 -1
  88. package/dist/dts/SocketRunner.d.ts +4 -3
  89. package/dist/dts/SocketRunner.d.ts.map +1 -1
  90. package/dist/dts/SqlMessageStorage.d.ts +2 -3
  91. package/dist/dts/SqlMessageStorage.d.ts.map +1 -1
  92. package/dist/dts/SqlRunnerStorage.d.ts +40 -0
  93. package/dist/dts/SqlRunnerStorage.d.ts.map +1 -0
  94. package/dist/dts/index.d.ts +4 -24
  95. package/dist/dts/index.d.ts.map +1 -1
  96. package/dist/esm/ClusterError.js +0 -21
  97. package/dist/esm/ClusterError.js.map +1 -1
  98. package/dist/esm/ClusterMetrics.js +12 -14
  99. package/dist/esm/ClusterMetrics.js.map +1 -1
  100. package/dist/esm/ClusterSchema.js +17 -2
  101. package/dist/esm/ClusterSchema.js.map +1 -1
  102. package/dist/esm/ClusterWorkflowEngine.js +50 -83
  103. package/dist/esm/ClusterWorkflowEngine.js.map +1 -1
  104. package/dist/esm/Entity.js +0 -12
  105. package/dist/esm/Entity.js.map +1 -1
  106. package/dist/esm/EntityAddress.js +7 -0
  107. package/dist/esm/EntityAddress.js.map +1 -1
  108. package/dist/esm/EntityId.js +5 -0
  109. package/dist/esm/EntityId.js.map +1 -1
  110. package/dist/esm/EntityProxy.js +2 -2
  111. package/dist/esm/EntityProxy.js.map +1 -1
  112. package/dist/esm/HttpRunner.js +62 -39
  113. package/dist/esm/HttpRunner.js.map +1 -1
  114. package/dist/esm/MessageStorage.js +65 -17
  115. package/dist/esm/MessageStorage.js.map +1 -1
  116. package/dist/esm/Runner.js +3 -3
  117. package/dist/esm/Runner.js.map +1 -1
  118. package/dist/esm/RunnerAddress.js +7 -0
  119. package/dist/esm/RunnerAddress.js.map +1 -1
  120. package/dist/esm/RunnerHealth.js +88 -30
  121. package/dist/esm/RunnerHealth.js.map +1 -1
  122. package/dist/esm/RunnerServer.js +38 -24
  123. package/dist/esm/RunnerServer.js.map +1 -1
  124. package/dist/esm/RunnerStorage.js +90 -0
  125. package/dist/esm/RunnerStorage.js.map +1 -0
  126. package/dist/esm/Runners.js +19 -23
  127. package/dist/esm/Runners.js.map +1 -1
  128. package/dist/esm/ShardId.js +16 -6
  129. package/dist/esm/ShardId.js.map +1 -1
  130. package/dist/esm/Sharding.js +447 -323
  131. package/dist/esm/Sharding.js.map +1 -1
  132. package/dist/esm/ShardingConfig.js +10 -14
  133. package/dist/esm/ShardingConfig.js.map +1 -1
  134. package/dist/esm/Snowflake.js +1 -1
  135. package/dist/esm/SocketRunner.js +1 -1
  136. package/dist/esm/SocketRunner.js.map +1 -1
  137. package/dist/esm/SqlMessageStorage.js +22 -28
  138. package/dist/esm/SqlMessageStorage.js.map +1 -1
  139. package/dist/esm/SqlRunnerStorage.js +366 -0
  140. package/dist/esm/SqlRunnerStorage.js.map +1 -0
  141. package/dist/esm/index.js +4 -24
  142. package/dist/esm/index.js.map +1 -1
  143. package/dist/esm/internal/entityManager.js +41 -22
  144. package/dist/esm/internal/entityManager.js.map +1 -1
  145. package/package.json +20 -60
  146. package/src/ClusterError.ts +0 -24
  147. package/src/ClusterMetrics.ts +12 -16
  148. package/src/ClusterSchema.ts +17 -2
  149. package/src/ClusterWorkflowEngine.ts +48 -80
  150. package/src/Entity.ts +3 -21
  151. package/src/EntityAddress.ts +10 -0
  152. package/src/EntityId.ts +6 -0
  153. package/src/EntityProxy.ts +10 -10
  154. package/src/HttpRunner.ts +132 -67
  155. package/src/MessageStorage.ts +89 -24
  156. package/src/Runner.ts +4 -4
  157. package/src/RunnerAddress.ts +8 -0
  158. package/src/RunnerHealth.ts +119 -56
  159. package/src/RunnerServer.ts +64 -47
  160. package/src/RunnerStorage.ts +218 -0
  161. package/src/Runners.ts +32 -45
  162. package/src/ShardId.ts +14 -3
  163. package/src/Sharding.ts +561 -417
  164. package/src/ShardingConfig.ts +39 -31
  165. package/src/Snowflake.ts +1 -1
  166. package/src/SocketRunner.ts +6 -4
  167. package/src/SqlMessageStorage.ts +28 -30
  168. package/src/SqlRunnerStorage.ts +537 -0
  169. package/src/index.ts +4 -29
  170. package/src/internal/entityManager.ts +45 -29
  171. package/HttpCommon/package.json +0 -6
  172. package/HttpShardManager/package.json +0 -6
  173. package/ShardManager/package.json +0 -6
  174. package/ShardStorage/package.json +0 -6
  175. package/SocketShardManager/package.json +0 -6
  176. package/SqlShardStorage/package.json +0 -6
  177. package/SynchronizedClock/package.json +0 -6
  178. package/dist/cjs/HttpCommon.js +0 -48
  179. package/dist/cjs/HttpCommon.js.map +0 -1
  180. package/dist/cjs/HttpShardManager.js +0 -139
  181. package/dist/cjs/HttpShardManager.js.map +0 -1
  182. package/dist/cjs/ShardManager.js +0 -549
  183. package/dist/cjs/ShardManager.js.map +0 -1
  184. package/dist/cjs/ShardStorage.js +0 -151
  185. package/dist/cjs/ShardStorage.js.map +0 -1
  186. package/dist/cjs/SocketShardManager.js +0 -32
  187. package/dist/cjs/SocketShardManager.js.map +0 -1
  188. package/dist/cjs/SqlShardStorage.js +0 -253
  189. package/dist/cjs/SqlShardStorage.js.map +0 -1
  190. package/dist/cjs/SynchronizedClock.js +0 -65
  191. package/dist/cjs/SynchronizedClock.js.map +0 -1
  192. package/dist/cjs/internal/shardManager.js +0 -353
  193. package/dist/cjs/internal/shardManager.js.map +0 -1
  194. package/dist/dts/HttpCommon.d.ts +0 -25
  195. package/dist/dts/HttpCommon.d.ts.map +0 -1
  196. package/dist/dts/HttpShardManager.d.ts +0 -119
  197. package/dist/dts/HttpShardManager.d.ts.map +0 -1
  198. package/dist/dts/ShardManager.d.ts +0 -459
  199. package/dist/dts/ShardManager.d.ts.map +0 -1
  200. package/dist/dts/ShardStorage.d.ts.map +0 -1
  201. package/dist/dts/SocketShardManager.d.ts +0 -17
  202. package/dist/dts/SocketShardManager.d.ts.map +0 -1
  203. package/dist/dts/SqlShardStorage.d.ts +0 -38
  204. package/dist/dts/SqlShardStorage.d.ts.map +0 -1
  205. package/dist/dts/SynchronizedClock.d.ts +0 -19
  206. package/dist/dts/SynchronizedClock.d.ts.map +0 -1
  207. package/dist/dts/internal/shardManager.d.ts +0 -2
  208. package/dist/dts/internal/shardManager.d.ts.map +0 -1
  209. package/dist/esm/HttpCommon.js +0 -38
  210. package/dist/esm/HttpCommon.js.map +0 -1
  211. package/dist/esm/HttpShardManager.js +0 -128
  212. package/dist/esm/HttpShardManager.js.map +0 -1
  213. package/dist/esm/ShardManager.js +0 -535
  214. package/dist/esm/ShardManager.js.map +0 -1
  215. package/dist/esm/ShardStorage.js +0 -141
  216. package/dist/esm/ShardStorage.js.map +0 -1
  217. package/dist/esm/SocketShardManager.js +0 -24
  218. package/dist/esm/SocketShardManager.js.map +0 -1
  219. package/dist/esm/SqlShardStorage.js +0 -244
  220. package/dist/esm/SqlShardStorage.js.map +0 -1
  221. package/dist/esm/SynchronizedClock.js +0 -57
  222. package/dist/esm/SynchronizedClock.js.map +0 -1
  223. package/dist/esm/internal/shardManager.js +0 -342
  224. package/dist/esm/internal/shardManager.js.map +0 -1
  225. package/src/HttpCommon.ts +0 -73
  226. package/src/HttpShardManager.ts +0 -273
  227. package/src/ShardManager.ts +0 -823
  228. package/src/ShardStorage.ts +0 -297
  229. package/src/SocketShardManager.ts +0 -48
  230. package/src/SqlShardStorage.ts +0 -329
  231. package/src/SynchronizedClock.ts +0 -82
  232. package/src/internal/shardManager.ts +0 -412
@@ -4,6 +4,7 @@
4
4
  import * as Equal from "effect/Equal";
5
5
  import * as Hash from "effect/Hash";
6
6
  import { NodeInspectSymbol } from "effect/Inspectable";
7
+ import * as PrimaryKey from "effect/PrimaryKey";
7
8
  import * as Schema from "effect/Schema";
8
9
  const SymbolKey = "@effect/cluster/RunnerAddress";
9
10
  /**
@@ -23,6 +24,12 @@ export class RunnerAddress extends /*#__PURE__*/Schema.Class(SymbolKey)({
23
24
  * @since 1.0.0
24
25
  */
25
26
  [TypeId] = TypeId;
27
+ /**
28
+ * @since 1.0.0
29
+ */
30
+ [PrimaryKey.symbol]() {
31
+ return `${this.host}:${this.port}`;
32
+ }
26
33
  /**
27
34
  * @since 1.0.0
28
35
  */
@@ -1 +1 @@
1
- {"version":3,"file":"RunnerAddress.js","names":["Equal","Hash","NodeInspectSymbol","Schema","SymbolKey","TypeId","Symbol","for","RunnerAddress","Class","host","NonEmptyString","port","Int","symbol","that","cached","string","toString","make"],"sources":["../../src/RunnerAddress.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,IAAI,MAAM,aAAa;AACnC,SAASC,iBAAiB,QAAQ,oBAAoB;AACtD,OAAO,KAAKC,MAAM,MAAM,eAAe;AAEvC,MAAMC,SAAS,GAAG,+BAA+B;AAEjD;;;;AAIA,OAAO,MAAMC,MAAM,gBAAkBC,MAAM,CAACC,GAAG,CAACH,SAAS,CAAC;AAQ1D;;;;AAIA,OAAM,MAAOI,aAAc,sBAAQL,MAAM,CAACM,KAAK,CAAgBL,SAAS,CAAC,CAAC;EACxEM,IAAI,EAAEP,MAAM,CAACQ,cAAc;EAC3BC,IAAI,EAAET,MAAM,CAACU;CACd,CAAC;EACA;;;EAGS,CAACR,MAAM,IAAIA,MAAM;EAE1B;;;EAGA,CAACL,KAAK,CAACc,MAAM,EAAEC,IAAmB;IAChC,OAAO,IAAI,CAACL,IAAI,KAAKK,IAAI,CAACL,IAAI,IAAI,IAAI,CAACE,IAAI,KAAKG,IAAI,CAACH,IAAI;EAC3D;EAEA;;;EAGA,CAACX,IAAI,CAACa,MAAM,IAAC;IACX,OAAOb,IAAI,CAACe,MAAM,CAAC,IAAI,EAAEf,IAAI,CAACgB,MAAM,CAAC,IAAI,CAACC,QAAQ,EAAE,CAAC,CAAC;EACxD;EAEA;;;EAGAA,QAAQA,CAAA;IACN,OAAO,iBAAiB,IAAI,CAACR,IAAI,IAAI,IAAI,CAACE,IAAI,GAAG;EACnD;EAEA;;;EAGA,CAACV,iBAAiB,IAAC;IACjB,OAAO,IAAI,CAACgB,QAAQ,EAAE;EACxB;;AAGF;;;;AAIA,OAAO,MAAMC,IAAI,GAAGA,CAACT,IAAY,EAAEE,IAAY,KAAoB,IAAIJ,aAAa,CAAC;EAAEE,IAAI;EAAEE;AAAI,CAAE,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"RunnerAddress.js","names":["Equal","Hash","NodeInspectSymbol","PrimaryKey","Schema","SymbolKey","TypeId","Symbol","for","RunnerAddress","Class","host","NonEmptyString","port","Int","symbol","that","cached","string","toString","make"],"sources":["../../src/RunnerAddress.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,IAAI,MAAM,aAAa;AACnC,SAASC,iBAAiB,QAAQ,oBAAoB;AACtD,OAAO,KAAKC,UAAU,MAAM,mBAAmB;AAC/C,OAAO,KAAKC,MAAM,MAAM,eAAe;AAEvC,MAAMC,SAAS,GAAG,+BAA+B;AAEjD;;;;AAIA,OAAO,MAAMC,MAAM,gBAAkBC,MAAM,CAACC,GAAG,CAACH,SAAS,CAAC;AAQ1D;;;;AAIA,OAAM,MAAOI,aAAc,sBAAQL,MAAM,CAACM,KAAK,CAAgBL,SAAS,CAAC,CAAC;EACxEM,IAAI,EAAEP,MAAM,CAACQ,cAAc;EAC3BC,IAAI,EAAET,MAAM,CAACU;CACd,CAAC;EACA;;;EAGS,CAACR,MAAM,IAAIA,MAAM;EAE1B;;;EAGA,CAACH,UAAU,CAACY,MAAM,IAAC;IACjB,OAAO,GAAG,IAAI,CAACJ,IAAI,IAAI,IAAI,CAACE,IAAI,EAAE;EACpC;EAEA;;;EAGA,CAACb,KAAK,CAACe,MAAM,EAAEC,IAAmB;IAChC,OAAO,IAAI,CAACL,IAAI,KAAKK,IAAI,CAACL,IAAI,IAAI,IAAI,CAACE,IAAI,KAAKG,IAAI,CAACH,IAAI;EAC3D;EAEA;;;EAGA,CAACZ,IAAI,CAACc,MAAM,IAAC;IACX,OAAOd,IAAI,CAACgB,MAAM,CAAC,IAAI,EAAEhB,IAAI,CAACiB,MAAM,CAAC,IAAI,CAACC,QAAQ,EAAE,CAAC,CAAC;EACxD;EAEA;;;EAGAA,QAAQA,CAAA;IACN,OAAO,iBAAiB,IAAI,CAACR,IAAI,IAAI,IAAI,CAACE,IAAI,GAAG;EACnD;EAEA;;;EAGA,CAACX,iBAAiB,IAAC;IACjB,OAAO,IAAI,CAACiB,QAAQ,EAAE;EACxB;;AAGF;;;;AAIA,OAAO,MAAMC,IAAI,GAAGA,CAACT,IAAY,EAAEE,IAAY,KAAoB,IAAIJ,aAAa,CAAC;EAAEE,IAAI;EAAEE;AAAI,CAAE,CAAC","ignoreList":[]}
@@ -1,11 +1,16 @@
1
1
  /**
2
2
  * @since 1.0.0
3
3
  */
4
+ import * as FileSystem from "@effect/platform/FileSystem";
5
+ import * as HttpClient from "@effect/platform/HttpClient";
6
+ import * as HttpClientRequest from "@effect/platform/HttpClientRequest";
7
+ import * as HttpClientResponse from "@effect/platform/HttpClientResponse";
4
8
  import * as Context from "effect/Context";
5
9
  import * as Effect from "effect/Effect";
10
+ import { identity } from "effect/Function";
6
11
  import * as Layer from "effect/Layer";
7
- import * as RcMap from "effect/RcMap";
8
- import * as MessageStorage from "./MessageStorage.js";
12
+ import * as Schedule from "effect/Schedule";
13
+ import * as Schema from "effect/Schema";
9
14
  import * as Runners from "./Runners.js";
10
15
  /**
11
16
  * Represents the service used to check if a Runner is healthy.
@@ -18,26 +23,6 @@ import * as Runners from "./Runners.js";
18
23
  * @category models
19
24
  */
20
25
  export class RunnerHealth extends /*#__PURE__*/Context.Tag("@effect/cluster/RunnerHealth")() {}
21
- /**
22
- * @since 1.0.0
23
- * @category Constructors
24
- */
25
- export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
26
- const connections = yield* RcMap.make({
27
- lookup: _address => Effect.void
28
- });
29
- const onConnection = address => RcMap.get(connections, address);
30
- const isAlive = Effect.fnUntraced(function* (address) {
31
- if (yield* RcMap.has(connections, address)) {
32
- return true;
33
- }
34
- return yield* options.isAlive(address);
35
- });
36
- return RunnerHealth.of({
37
- onConnection,
38
- isAlive
39
- });
40
- });
41
26
  /**
42
27
  * A layer which will **always** consider a Runner healthy.
43
28
  *
@@ -46,21 +31,23 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
46
31
  * @since 1.0.0
47
32
  * @category layers
48
33
  */
49
- export const layerNoop = /*#__PURE__*/Layer.scoped(RunnerHealth, /*#__PURE__*/make({
34
+ export const layerNoop = /*#__PURE__*/Layer.succeed(RunnerHealth, {
50
35
  isAlive: () => Effect.succeed(true)
51
- }));
36
+ });
52
37
  /**
53
38
  * @since 1.0.0
54
39
  * @category Constructors
55
40
  */
56
41
  export const makePing = /*#__PURE__*/Effect.gen(function* () {
57
42
  const runners = yield* Runners.Runners;
43
+ const schedule = Schedule.spaced(500);
58
44
  function isAlive(address) {
59
- return runners.ping(address).pipe(Effect.timeout(3000), Effect.retry({
60
- times: 3
45
+ return runners.ping(address).pipe(Effect.timeout(10_000), Effect.retry({
46
+ times: 5,
47
+ schedule
61
48
  }), Effect.isSuccess);
62
49
  }
63
- return yield* make({
50
+ return RunnerHealth.of({
64
51
  isAlive
65
52
  });
66
53
  });
@@ -70,12 +57,83 @@ export const makePing = /*#__PURE__*/Effect.gen(function* () {
70
57
  * @since 1.0.0
71
58
  * @category layers
72
59
  */
73
- export const layer = /*#__PURE__*/Layer.scoped(RunnerHealth, makePing);
60
+ export const layerPing = /*#__PURE__*/Layer.scoped(RunnerHealth, makePing);
74
61
  /**
75
- * A layer which will ping a Runner directly to check if it is healthy.
62
+ * @since 1.0.0
63
+ * @category Constructors
64
+ */
65
+ export const makeK8s = /*#__PURE__*/Effect.fnUntraced(function* (options) {
66
+ const fs = yield* FileSystem.FileSystem;
67
+ const token = yield* fs.readFileString("/var/run/secrets/kubernetes.io/serviceaccount/token").pipe(Effect.option);
68
+ const client = (yield* HttpClient.HttpClient).pipe(HttpClient.filterStatusOk);
69
+ const baseRequest = HttpClientRequest.get("https://kubernetes.default.svc/api").pipe(token._tag === "Some" ? HttpClientRequest.bearerToken(token.value.trim()) : identity);
70
+ const getPods = baseRequest.pipe(HttpClientRequest.appendUrl(options?.namespace ? `/v1/namespaces/${options.namespace}/pods` : "/v1/pods"), HttpClientRequest.setUrlParam("fieldSelector", "status.phase=Running"), options?.labelSelector ? HttpClientRequest.setUrlParam("labelSelector", options.labelSelector) : identity);
71
+ const allPods = yield* client.execute(getPods).pipe(Effect.flatMap(HttpClientResponse.schemaBodyJson(PodList)), Effect.map(list => {
72
+ const pods = new Map();
73
+ for (let i = 0; i < list.items.length; i++) {
74
+ const pod = list.items[i];
75
+ pods.set(pod.status.podIP, pod);
76
+ }
77
+ return pods;
78
+ }), Effect.tapErrorCause(cause => Effect.logWarning("Failed to fetch pods from Kubernetes API", cause)), Effect.cachedWithTTL("10 seconds"));
79
+ return RunnerHealth.of({
80
+ isAlive: address => allPods.pipe(Effect.map(pods => pods.get(address.host)?.isReady ?? false), Effect.catchAllCause(() => Effect.succeed(true)))
81
+ });
82
+ });
83
+ class Pod extends /*#__PURE__*/Schema.Class("effect/cluster/RunnerHealth/Pod")({
84
+ status: /*#__PURE__*/Schema.Struct({
85
+ phase: Schema.String,
86
+ conditions: /*#__PURE__*/Schema.Array(/*#__PURE__*/Schema.Struct({
87
+ type: Schema.String,
88
+ status: Schema.String,
89
+ lastTransitionTime: Schema.String
90
+ })),
91
+ podIP: Schema.String
92
+ })
93
+ }) {
94
+ get isReady() {
95
+ let initializedAt;
96
+ let readyAt;
97
+ for (let i = 0; i < this.status.conditions.length; i++) {
98
+ const condition = this.status.conditions[i];
99
+ switch (condition.type) {
100
+ case "Initialized":
101
+ {
102
+ if (condition.status !== "True") {
103
+ return true;
104
+ }
105
+ initializedAt = condition.lastTransitionTime;
106
+ break;
107
+ }
108
+ case "Ready":
109
+ {
110
+ if (condition.status === "True") {
111
+ return true;
112
+ }
113
+ readyAt = condition.lastTransitionTime;
114
+ break;
115
+ }
116
+ }
117
+ }
118
+ // if the pod is still booting up, consider it ready as it would have
119
+ // already registered itself with RunnerStorage by now
120
+ return initializedAt === readyAt;
121
+ }
122
+ }
123
+ const PodList = /*#__PURE__*/Schema.Struct({
124
+ items: /*#__PURE__*/Schema.Array(Pod)
125
+ });
126
+ /**
127
+ * A layer which will check the Kubernetes API to see if a Runner is healthy.
128
+ *
129
+ * The provided HttpClient will need to add the pod's CA certificate to its
130
+ * trusted root certificates in order to communicate with the Kubernetes API.
131
+ *
132
+ * The pod service account will also need to have permissions to list pods in
133
+ * order to use this layer.
76
134
  *
77
135
  * @since 1.0.0
78
136
  * @category layers
79
137
  */
80
- export const layerRpc = /*#__PURE__*/layer.pipe(/*#__PURE__*/Layer.provide(Runners.layerRpc), /*#__PURE__*/Layer.provide(MessageStorage.layerNoop));
138
+ export const layerK8s = options => Layer.effect(RunnerHealth, makeK8s(options));
81
139
  //# sourceMappingURL=RunnerHealth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RunnerHealth.js","names":["Context","Effect","Layer","RcMap","MessageStorage","Runners","RunnerHealth","Tag","make","fnUntraced","options","connections","lookup","_address","void","onConnection","address","get","isAlive","has","of","layerNoop","scoped","succeed","makePing","gen","runners","ping","pipe","timeout","retry","times","isSuccess","layer","layerRpc","provide"],"sources":["../../src/RunnerHealth.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,KAAK,MAAM,cAAc;AAErC,OAAO,KAAKC,cAAc,MAAM,qBAAqB;AAErD,OAAO,KAAKC,OAAO,MAAM,cAAc;AAGvC;;;;;;;;;;AAUA,OAAM,MAAOC,YAAa,sBAAQN,OAAO,CAACO,GAAG,CAAC,8BAA8B,CAAC,EAU1E;AAEH;;;;AAIA,OAAO,MAAMC,IAAI,gBAMbP,MAAM,CAACQ,UAAU,CAAC,WAAUC,OAE/B;EACC,MAAMC,WAAW,GAAG,OAAOR,KAAK,CAACK,IAAI,CAAC;IACpCI,MAAM,EAAGC,QAAuB,IAAKZ,MAAM,CAACa;GAC7C,CAAC;EAEF,MAAMC,YAAY,GAAIC,OAAsB,IAAKb,KAAK,CAACc,GAAG,CAACN,WAAW,EAAEK,OAAO,CAAC;EAChF,MAAME,OAAO,GAAGjB,MAAM,CAACQ,UAAU,CAAC,WAAUO,OAAsB;IAChE,IAAI,OAAOb,KAAK,CAACgB,GAAG,CAACR,WAAW,EAAEK,OAAO,CAAC,EAAE;MAC1C,OAAO,IAAI;IACb;IACA,OAAO,OAAON,OAAO,CAACQ,OAAO,CAACF,OAAO,CAAC;EACxC,CAAC,CAAC;EAEF,OAAOV,YAAY,CAACc,EAAE,CAAC;IACrBL,YAAY;IACZG;GACD,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;AAQA,OAAO,MAAMG,SAAS,gBAAGnB,KAAK,CAACoB,MAAM,CACnChB,YAAY,eACZE,IAAI,CAAC;EACHU,OAAO,EAAEA,CAAA,KAAMjB,MAAM,CAACsB,OAAO,CAAC,IAAI;CACnC,CAAC,CACH;AAED;;;;AAIA,OAAO,MAAMC,QAAQ,gBAIjBvB,MAAM,CAACwB,GAAG,CAAC,aAAS;EACtB,MAAMC,OAAO,GAAG,OAAOrB,OAAO,CAACA,OAAO;EAEtC,SAASa,OAAOA,CAACF,OAAsB;IACrC,OAAOU,OAAO,CAACC,IAAI,CAACX,OAAO,CAAC,CAACY,IAAI,CAC/B3B,MAAM,CAAC4B,OAAO,CAAC,IAAI,CAAC,EACpB5B,MAAM,CAAC6B,KAAK,CAAC;MAAEC,KAAK,EAAE;IAAC,CAAE,CAAC,EAC1B9B,MAAM,CAAC+B,SAAS,CACjB;EACH;EAEA,OAAO,OAAOxB,IAAI,CAAC;IAAEU;EAAO,CAAE,CAAC;AACjC,CAAC,CAAC;AAEF;;;;;;AAMA,OAAO,MAAMe,KAAK,gBAId/B,KAAK,CAACoB,MAAM,CAAChB,YAAY,EAAEkB,QAAQ,CAAC;AAExC;;;;;;AAMA,OAAO,MAAMU,QAAQ,gBAIjBD,KAAK,CAACL,IAAI,cACZ1B,KAAK,CAACiC,OAAO,CAAC9B,OAAO,CAAC6B,QAAQ,CAAC,eAC/BhC,KAAK,CAACiC,OAAO,CAAC/B,cAAc,CAACiB,SAAS,CAAC,CACxC","ignoreList":[]}
1
+ {"version":3,"file":"RunnerHealth.js","names":["FileSystem","HttpClient","HttpClientRequest","HttpClientResponse","Context","Effect","identity","Layer","Schedule","Schema","Runners","RunnerHealth","Tag","layerNoop","succeed","isAlive","makePing","gen","runners","schedule","spaced","address","ping","pipe","timeout","retry","times","isSuccess","of","layerPing","scoped","makeK8s","fnUntraced","options","fs","token","readFileString","option","client","filterStatusOk","baseRequest","get","_tag","bearerToken","value","trim","getPods","appendUrl","namespace","setUrlParam","labelSelector","allPods","execute","flatMap","schemaBodyJson","PodList","map","list","pods","Map","i","items","length","pod","set","status","podIP","tapErrorCause","cause","logWarning","cachedWithTTL","host","isReady","catchAllCause","Pod","Class","Struct","phase","String","conditions","Array","type","lastTransitionTime","initializedAt","readyAt","condition","layerK8s","effect"],"sources":["../../src/RunnerHealth.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -3,20 +3,19 @@
3
3
  */
4
4
  import * as RpcServer from "@effect/rpc/RpcServer";
5
5
  import * as Effect from "effect/Effect";
6
+ import * as Fiber from "effect/Fiber";
6
7
  import { constant } from "effect/Function";
7
8
  import * as Layer from "effect/Layer";
8
9
  import * as Mailbox from "effect/Mailbox";
9
10
  import * as Option from "effect/Option";
10
- import * as ClusterError from "./ClusterError.js";
11
+ import * as Runtime from "effect/Runtime";
11
12
  import * as Message from "./Message.js";
12
13
  import * as MessageStorage from "./MessageStorage.js";
13
14
  import * as Reply from "./Reply.js";
15
+ import * as RunnerHealth from "./RunnerHealth.js";
14
16
  import * as Runners from "./Runners.js";
15
17
  import * as Sharding from "./Sharding.js";
16
18
  import { ShardingConfig } from "./ShardingConfig.js";
17
- import * as ShardManager from "./ShardManager.js";
18
- import * as ShardStorage from "./ShardStorage.js";
19
- import * as SynchronizedClock from "./SynchronizedClock.js";
20
19
  const constVoid = /*#__PURE__*/constant(Effect.void);
21
20
  /**
22
21
  * @since 1.0.0
@@ -40,27 +39,41 @@ export const layerHandlers = /*#__PURE__*/Runners.Rpcs.toLayer(/*#__PURE__*/Effe
40
39
  persisted,
41
40
  request
42
41
  }) => {
43
- let resume;
44
- let replyEncoded;
42
+ let replyEncoded = undefined;
43
+ let resume = reply => {
44
+ replyEncoded = reply;
45
+ };
45
46
  const message = new Message.IncomingRequest({
46
47
  envelope: request,
47
48
  lastSentReply: Option.none(),
48
49
  respond(reply) {
49
- return Effect.flatMap(Reply.serialize(reply), reply => {
50
- if (resume) {
51
- resume(Effect.succeed(reply));
52
- } else {
53
- replyEncoded = reply;
54
- }
55
- return Effect.void;
56
- });
50
+ resume(Effect.orDie(Reply.serialize(reply)));
51
+ return Effect.void;
57
52
  }
58
53
  });
59
- return Effect.zipRight(persisted ? Effect.zipRight(storage.registerReplyHandler(message, Effect.sync(() => resume(Effect.fail(new ClusterError.EntityNotAssignedToRunner({
60
- address: request.address
61
- }))))), sharding.notify(message)) : sharding.send(message), Effect.async(resume_ => {
54
+ if (persisted) {
55
+ return Effect.async(resume_ => {
56
+ resume = resume_;
57
+ const parent = Option.getOrThrow(Fiber.getCurrentFiber());
58
+ const runtime = Runtime.make({
59
+ context: parent.currentContext,
60
+ runtimeFlags: Runtime.defaultRuntimeFlags,
61
+ fiberRefs: parent.getFiberRefs()
62
+ });
63
+ const onExit = exit => {
64
+ if (exit._tag === "Failure") {
65
+ resume(exit);
66
+ }
67
+ };
68
+ const fiber = Runtime.runFork(runtime)(storage.registerReplyHandler(message));
69
+ fiber.addObserver(onExit);
70
+ Runtime.runFork(runtime)(Effect.catchTag(sharding.notify(message, constWaitUntilRead), "AlreadyProcessingMessage", () => Effect.void)).addObserver(onExit);
71
+ return Fiber.interrupt(fiber);
72
+ });
73
+ }
74
+ return Effect.zipRight(sharding.send(message), Effect.async(resume_ => {
62
75
  if (replyEncoded) {
63
- resume_(Effect.succeed(replyEncoded));
76
+ resume_(replyEncoded);
64
77
  } else {
65
78
  resume = resume_;
66
79
  }
@@ -80,9 +93,7 @@ export const layerHandlers = /*#__PURE__*/Runners.Rpcs.toLayer(/*#__PURE__*/Effe
80
93
  });
81
94
  }
82
95
  });
83
- return Effect.as(persisted ? Effect.zipRight(storage.registerReplyHandler(message, Effect.suspend(() => mailbox.fail(new ClusterError.EntityNotAssignedToRunner({
84
- address: request.address
85
- })))), sharding.notify(message)) : sharding.send(message), mailbox);
96
+ return Effect.as(persisted ? Effect.zipRight(storage.registerReplyHandler(message).pipe(Effect.onError(cause => mailbox.failCause(cause)), Effect.forkScoped, Effect.interruptible), sharding.notify(message, constWaitUntilRead)) : sharding.send(message), mailbox);
86
97
  }),
87
98
  Envelope: ({
88
99
  envelope
@@ -91,6 +102,9 @@ export const layerHandlers = /*#__PURE__*/Runners.Rpcs.toLayer(/*#__PURE__*/Effe
91
102
  }))
92
103
  };
93
104
  }));
105
+ const constWaitUntilRead = {
106
+ waitUntilRead: true
107
+ };
94
108
  /**
95
109
  * The `RunnerServer` recieves messages from other Runners and forwards them to the
96
110
  * `Sharding` layer.
@@ -110,18 +124,18 @@ export const layer = /*#__PURE__*/RpcServer.layer(Runners.Rpcs, {
110
124
  * @since 1.0.0
111
125
  * @category Layers
112
126
  */
113
- export const layerWithClients = /*#__PURE__*/layer.pipe(/*#__PURE__*/Layer.provideMerge(Sharding.layer), /*#__PURE__*/Layer.provideMerge(Runners.layerRpc), /*#__PURE__*/Layer.provideMerge(SynchronizedClock.layer), /*#__PURE__*/Layer.provide(ShardManager.layerClientRpc));
127
+ export const layerWithClients = /*#__PURE__*/layer.pipe(/*#__PURE__*/Layer.provideMerge(Sharding.layer), /*#__PURE__*/Layer.provideMerge(Runners.layerRpc));
114
128
  /**
115
129
  * A `Runners` layer that is client only.
116
130
  *
117
- * It will not register with the ShardManager and recieve shard assignments,
131
+ * It will not register with RunnerStorage and recieve shard assignments,
118
132
  * so this layer can be used to embed a cluster client inside another effect
119
133
  * application.
120
134
  *
121
135
  * @since 1.0.0
122
136
  * @category Layers
123
137
  */
124
- export const layerClientOnly = /*#__PURE__*/Sharding.layer.pipe(/*#__PURE__*/Layer.provideMerge(Runners.layerRpc), /*#__PURE__*/Layer.provide(ShardManager.layerClientRpc), /*#__PURE__*/Layer.provide(ShardStorage.layerNoop), /*#__PURE__*/Layer.updateService(ShardingConfig, config => ({
138
+ export const layerClientOnly = /*#__PURE__*/Sharding.layer.pipe(/*#__PURE__*/Layer.provideMerge(Runners.layerRpc), /*#__PURE__*/Layer.provide(RunnerHealth.layerNoop), /*#__PURE__*/Layer.updateService(ShardingConfig, config => ({
125
139
  ...config,
126
140
  runnerAddress: Option.none()
127
141
  })));
@@ -1 +1 @@
1
- {"version":3,"file":"RunnerServer.js","names":["RpcServer","Effect","constant","Layer","Mailbox","Option","ClusterError","Message","MessageStorage","Reply","Runners","Sharding","ShardingConfig","ShardManager","ShardStorage","SynchronizedClock","constVoid","void","layerHandlers","Rpcs","toLayer","gen","sharding","storage","Ping","Notify","envelope","notify","_tag","IncomingRequest","respond","lastSentReply","none","IncomingEnvelope","persisted","request","resume","replyEncoded","message","reply","flatMap","serialize","succeed","zipRight","registerReplyHandler","sync","fail","EntityNotAssignedToRunner","address","send","async","resume_","Stream","make","mailbox","unsafeOffer","as","suspend","Envelope","layer","spanPrefix","disableTracing","pipe","provide","layerWithClients","provideMerge","layerRpc","layerClientRpc","layerClientOnly","layerNoop","updateService","config","runnerAddress"],"sources":["../../src/RunnerServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"RunnerServer.js","names":["RpcServer","Effect","Fiber","constant","Layer","Mailbox","Option","Runtime","Message","MessageStorage","Reply","RunnerHealth","Runners","Sharding","ShardingConfig","constVoid","void","layerHandlers","Rpcs","toLayer","gen","sharding","storage","Ping","Notify","envelope","notify","_tag","IncomingRequest","respond","lastSentReply","none","IncomingEnvelope","persisted","request","replyEncoded","undefined","resume","reply","message","orDie","serialize","async","resume_","parent","getOrThrow","getCurrentFiber","runtime","make","context","currentContext","runtimeFlags","defaultRuntimeFlags","fiberRefs","getFiberRefs","onExit","exit","fiber","runFork","registerReplyHandler","addObserver","catchTag","constWaitUntilRead","interrupt","zipRight","send","Stream","flatMap","mailbox","unsafeOffer","as","pipe","onError","cause","failCause","forkScoped","interruptible","Envelope","waitUntilRead","layer","spanPrefix","disableTracing","provide","layerWithClients","provideMerge","layerRpc","layerClientOnly","layerNoop","updateService","config","runnerAddress"],"sources":["../../src/RunnerServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import { isNonEmptyArray } from "effect/Array";
5
+ import * as Context from "effect/Context";
6
+ import * as Effect from "effect/Effect";
7
+ import * as Layer from "effect/Layer";
8
+ import * as MutableHashMap from "effect/MutableHashMap";
9
+ import * as MachineId from "./MachineId.js";
10
+ import { Runner } from "./Runner.js";
11
+ import { ShardId } from "./ShardId.js";
12
+ /**
13
+ * Represents a generic interface to the persistent storage required by the
14
+ * cluster.
15
+ *
16
+ * @since 1.0.0
17
+ * @category models
18
+ */
19
+ export class RunnerStorage extends /*#__PURE__*/Context.Tag("@effect/cluster/RunnerStorage")() {}
20
+ /**
21
+ * @since 1.0.0
22
+ * @category layers
23
+ */
24
+ export const makeEncoded = encoded => RunnerStorage.of({
25
+ getRunners: Effect.gen(function* () {
26
+ const runners = yield* encoded.getRunners;
27
+ const results = [];
28
+ for (let i = 0; i < runners.length; i++) {
29
+ const [runner, healthy] = runners[i];
30
+ try {
31
+ results.push([Runner.decodeSync(runner), healthy]);
32
+ } catch {
33
+ //
34
+ }
35
+ }
36
+ return results;
37
+ }),
38
+ register: (runner, healthy) => Effect.map(encoded.register(encodeRunnerAddress(runner.address), Runner.encodeSync(runner), healthy), MachineId.make),
39
+ unregister: address => encoded.unregister(encodeRunnerAddress(address)),
40
+ setRunnerHealth: (address, healthy) => encoded.setRunnerHealth(encodeRunnerAddress(address), healthy),
41
+ acquire: (address, shardIds) => {
42
+ const arr = Array.from(shardIds, id => id.toString());
43
+ if (!isNonEmptyArray(arr)) return Effect.succeed([]);
44
+ return encoded.acquire(encodeRunnerAddress(address), arr).pipe(Effect.map(shards => shards.map(ShardId.fromString)));
45
+ },
46
+ refresh: (address, shardIds) => encoded.refresh(encodeRunnerAddress(address), Array.from(shardIds, id => id.toString())).pipe(Effect.map(shards => shards.map(ShardId.fromString))),
47
+ release(address, shardId) {
48
+ return encoded.release(encodeRunnerAddress(address), shardId.toString());
49
+ },
50
+ releaseAll(address) {
51
+ return encoded.releaseAll(encodeRunnerAddress(address));
52
+ }
53
+ });
54
+ /**
55
+ * @since 1.0.0
56
+ * @category constructors
57
+ */
58
+ export const makeMemory = /*#__PURE__*/Effect.gen(function* () {
59
+ const runners = MutableHashMap.empty();
60
+ let acquired = [];
61
+ let id = 0;
62
+ return RunnerStorage.of({
63
+ getRunners: Effect.sync(() => Array.from(MutableHashMap.values(runners), runner => [runner, true])),
64
+ register: runner => Effect.sync(() => {
65
+ MutableHashMap.set(runners, runner.address, runner);
66
+ return MachineId.make(id++);
67
+ }),
68
+ unregister: address => Effect.sync(() => {
69
+ MutableHashMap.remove(runners, address);
70
+ }),
71
+ setRunnerHealth: () => Effect.void,
72
+ acquire: (_address, shardIds) => {
73
+ acquired = Array.from(shardIds);
74
+ return Effect.succeed(Array.from(shardIds));
75
+ },
76
+ refresh: () => Effect.sync(() => acquired),
77
+ release: () => Effect.void,
78
+ releaseAll: () => Effect.void
79
+ });
80
+ });
81
+ /**
82
+ * @since 1.0.0
83
+ * @category layers
84
+ */
85
+ export const layerMemory = /*#__PURE__*/Layer.effect(RunnerStorage)(makeMemory);
86
+ // -------------------------------------------------------------------------------------
87
+ // internal
88
+ // -------------------------------------------------------------------------------------
89
+ const encodeRunnerAddress = runnerAddress => `${runnerAddress.host}:${runnerAddress.port}`;
90
+ //# sourceMappingURL=RunnerStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunnerStorage.js","names":["isNonEmptyArray","Context","Effect","Layer","MutableHashMap","MachineId","Runner","ShardId","RunnerStorage","Tag","makeEncoded","encoded","of","getRunners","gen","runners","results","i","length","runner","healthy","push","decodeSync","register","map","encodeRunnerAddress","address","encodeSync","make","unregister","setRunnerHealth","acquire","shardIds","arr","Array","from","id","toString","succeed","pipe","shards","fromString","refresh","release","shardId","releaseAll","makeMemory","empty","acquired","sync","values","set","remove","void","_address","layerMemory","effect","runnerAddress","host","port"],"sources":["../../src/RunnerStorage.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -14,7 +14,7 @@ import * as Layer from "effect/Layer";
14
14
  import * as Option from "effect/Option";
15
15
  import * as RcMap from "effect/RcMap";
16
16
  import * as Schema from "effect/Schema";
17
- import { AlreadyProcessingMessage, EntityNotAssignedToRunner, EntityNotManagedByRunner, MailboxFull, RunnerUnavailable } from "./ClusterError.js";
17
+ import { AlreadyProcessingMessage, EntityNotAssignedToRunner, MailboxFull, RunnerUnavailable } from "./ClusterError.js";
18
18
  import { Persisted } from "./ClusterSchema.js";
19
19
  import * as Envelope from "./Envelope.js";
20
20
  import * as Message from "./Message.js";
@@ -127,6 +127,7 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
127
127
  for (const message of entry.messages) {
128
128
  yield* message.respond(reply);
129
129
  }
130
+ // wait for ack
130
131
  yield* entry.latch.await;
131
132
  }
132
133
  entry.replies = [];
@@ -143,6 +144,7 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
143
144
  const storageLatch = Effect.unsafeMakeLatch(false);
144
145
  if (storage !== MessageStorage.noop) {
145
146
  yield* Effect.gen(function* () {
147
+ const foundRequests = new Set();
146
148
  while (true) {
147
149
  yield* storageLatch.await;
148
150
  storageLatch.unsafeClose();
@@ -151,7 +153,6 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
151
153
  module: "Runners",
152
154
  fiber: "Read replies loop"
153
155
  }), [])));
154
- const foundRequests = new Set();
155
156
  // put the replies into the storage requests and then open the latches
156
157
  for (let i = 0; i < replies.length; i++) {
157
158
  const reply = replies[i];
@@ -162,6 +163,7 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
162
163
  foundRequests.add(entry);
163
164
  }
164
165
  foundRequests.forEach(entry => entry.latch.unsafeOpen());
166
+ foundRequests.clear();
165
167
  }
166
168
  }).pipe(Effect.interruptible, Effect.forkIn(runnersScope));
167
169
  yield* Effect.suspend(() => {
@@ -201,12 +203,7 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
201
203
  return Effect.catchAll(options.send({
202
204
  address: options_.address.value,
203
205
  message
204
- }), error => {
205
- if (error._tag === "EntityNotManagedByRunner") {
206
- return Effect.fail(error);
207
- }
208
- return replyFromStorage(message);
209
- });
206
+ }), _ => replyFromStorage(message));
210
207
  }
211
208
  return options.notify(options_).pipe(Effect.andThen(replyFromStorage(message)));
212
209
  });
@@ -216,7 +213,7 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
216
213
  if (options.discard || message._tag === "OutgoingEnvelope") {
217
214
  return Effect.catchTag(options.notify(Message.incomingLocalFromOutgoing(message)), "EntityNotAssignedToRunner", () => Effect.void);
218
215
  } else if (!duplicate && options.storageOnly !== true) {
219
- return storage.registerReplyHandler(message, Effect.suspend(() => replyFromStorage(message).pipe(Effect.forkIn(runnersScope), Effect.interruptible))).pipe(Effect.andThen(options.notify(Message.incomingLocalFromOutgoing(message))), Effect.catchTag("EntityNotAssignedToRunner", () => Effect.void));
216
+ return options.notify(Message.incomingLocalFromOutgoing(message)).pipe(Effect.andThen(storage.registerReplyHandler(message)), Effect.catchTag("EntityNotAssignedToRunner", () => replyFromStorage(message)));
220
217
  }
221
218
  return options.notify(Message.incomingLocalFromOutgoing(message)).pipe(Effect.catchTag("EntityNotAssignedToRunner", () => Effect.void), Effect.andThen(replyFromStorage(message)));
222
219
  });
@@ -230,18 +227,19 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
230
227
  export const makeNoop = /*#__PURE__*/make({
231
228
  send: ({
232
229
  message
233
- }) => Effect.fail(new EntityNotManagedByRunner({
230
+ }) => Effect.fail(new EntityNotAssignedToRunner({
234
231
  address: message.envelope.address
235
232
  })),
236
233
  notify: () => Effect.void,
237
- ping: () => Effect.void
234
+ ping: () => Effect.void,
235
+ onRunnerUnavailable: () => Effect.void
238
236
  });
239
237
  /**
240
238
  * @since 1.0.0
241
239
  * @category Layers
242
240
  */
243
241
  export const layerNoop = /*#__PURE__*/Layer.scoped(Runners, makeNoop).pipe(/*#__PURE__*/Layer.provide([Snowflake.layerGenerator]));
244
- const rpcErrors = /*#__PURE__*/Schema.Union(EntityNotManagedByRunner, EntityNotAssignedToRunner, MailboxFull, AlreadyProcessingMessage);
242
+ const rpcErrors = /*#__PURE__*/Schema.Union(EntityNotAssignedToRunner, MailboxFull, AlreadyProcessingMessage);
245
243
  /**
246
244
  * @since 1.0.0
247
245
  * @category Rpcs
@@ -251,7 +249,7 @@ export class Rpcs extends /*#__PURE__*/RpcGroup.make(/*#__PURE__*/Rpc.make("Ping
251
249
  envelope: Envelope.PartialEncoded
252
250
  },
253
251
  success: Schema.Void,
254
- error: /*#__PURE__*/Schema.Union(EntityNotManagedByRunner, EntityNotAssignedToRunner, AlreadyProcessingMessage)
252
+ error: /*#__PURE__*/Schema.Union(EntityNotAssignedToRunner, AlreadyProcessingMessage)
255
253
  }), /*#__PURE__*/Rpc.make("Effect", {
256
254
  payload: {
257
255
  request: Envelope.PartialEncodedRequest,
@@ -295,9 +293,11 @@ export const makeRpc = /*#__PURE__*/Effect.gen(function* () {
295
293
  });
296
294
  return yield* make({
297
295
  ping(address) {
298
- return RcMap.get(clients, address).pipe(Effect.flatMap(client => client.Ping()), Effect.catchAllCause(() => Effect.fail(new RunnerUnavailable({
299
- address
300
- }))), Effect.scoped);
296
+ return RcMap.get(clients, address).pipe(Effect.flatMap(client => client.Ping()), Effect.catchAllCause(() => {
297
+ return Effect.zipRight(RcMap.invalidate(clients, address), Effect.fail(new RunnerUnavailable({
298
+ address
299
+ })));
300
+ }), Effect.scoped);
301
301
  },
302
302
  send({
303
303
  address,
@@ -358,13 +358,9 @@ export const makeRpc = /*#__PURE__*/Effect.gen(function* () {
358
358
  const envelope = message.envelope;
359
359
  return RcMap.get(clients, address.value).pipe(Effect.flatMap(client => client.Notify({
360
360
  envelope
361
- })), Effect.scoped, Effect.catchAll(error => {
362
- if (error._tag === "EntityNotManagedByRunner") {
363
- return Effect.fail(error);
364
- }
365
- return Effect.void;
366
- }));
367
- }
361
+ })), Effect.scoped, Effect.ignore);
362
+ },
363
+ onRunnerUnavailable: address => RcMap.invalidate(clients, address)
368
364
  });
369
365
  });
370
366
  /**