@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.
- package/RunnerStorage/package.json +6 -0
- package/SqlRunnerStorage/package.json +6 -0
- package/dist/cjs/ClusterError.js +2 -24
- package/dist/cjs/ClusterError.js.map +1 -1
- package/dist/cjs/ClusterMetrics.js +13 -15
- package/dist/cjs/ClusterMetrics.js.map +1 -1
- package/dist/cjs/ClusterSchema.js +17 -2
- package/dist/cjs/ClusterSchema.js.map +1 -1
- package/dist/cjs/ClusterWorkflowEngine.js +50 -83
- package/dist/cjs/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cjs/Entity.js +1 -13
- package/dist/cjs/Entity.js.map +1 -1
- package/dist/cjs/EntityAddress.js +9 -1
- package/dist/cjs/EntityAddress.js.map +1 -1
- package/dist/cjs/EntityId.js +7 -1
- package/dist/cjs/EntityId.js.map +1 -1
- package/dist/cjs/EntityProxy.js +1 -1
- package/dist/cjs/EntityProxy.js.map +1 -1
- package/dist/cjs/HttpRunner.js +69 -43
- package/dist/cjs/HttpRunner.js.map +1 -1
- package/dist/cjs/MessageStorage.js +64 -16
- package/dist/cjs/MessageStorage.js.map +1 -1
- package/dist/cjs/Runner.js +3 -3
- package/dist/cjs/Runner.js.map +1 -1
- package/dist/cjs/RunnerAddress.js +7 -0
- package/dist/cjs/RunnerAddress.js.map +1 -1
- package/dist/cjs/RunnerHealth.js +91 -32
- package/dist/cjs/RunnerHealth.js.map +1 -1
- package/dist/cjs/RunnerServer.js +38 -24
- package/dist/cjs/RunnerServer.js.map +1 -1
- package/dist/cjs/RunnerStorage.js +100 -0
- package/dist/cjs/RunnerStorage.js.map +1 -0
- package/dist/cjs/Runners.js +18 -22
- package/dist/cjs/Runners.js.map +1 -1
- package/dist/cjs/ShardId.js +17 -7
- package/dist/cjs/ShardId.js.map +1 -1
- package/dist/cjs/Sharding.js +444 -320
- package/dist/cjs/Sharding.js.map +1 -1
- package/dist/cjs/ShardingConfig.js +10 -14
- package/dist/cjs/ShardingConfig.js.map +1 -1
- package/dist/cjs/Snowflake.js +1 -1
- package/dist/cjs/SocketRunner.js +1 -1
- package/dist/cjs/SocketRunner.js.map +1 -1
- package/dist/cjs/SqlMessageStorage.js +22 -28
- package/dist/cjs/SqlMessageStorage.js.map +1 -1
- package/dist/cjs/SqlRunnerStorage.js +375 -0
- package/dist/cjs/SqlRunnerStorage.js.map +1 -0
- package/dist/cjs/index.js +5 -15
- package/dist/cjs/internal/entityManager.js +42 -23
- package/dist/cjs/internal/entityManager.js.map +1 -1
- package/dist/dts/ClusterError.d.ts +0 -22
- package/dist/dts/ClusterError.d.ts.map +1 -1
- package/dist/dts/ClusterMetrics.d.ts +4 -14
- package/dist/dts/ClusterMetrics.d.ts.map +1 -1
- package/dist/dts/ClusterSchema.d.ts +9 -1
- package/dist/dts/ClusterSchema.d.ts.map +1 -1
- package/dist/dts/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/dts/Entity.d.ts +3 -14
- package/dist/dts/Entity.d.ts.map +1 -1
- package/dist/dts/EntityAddress.d.ts +11 -0
- package/dist/dts/EntityAddress.d.ts.map +1 -1
- package/dist/dts/EntityId.d.ts +5 -0
- package/dist/dts/EntityId.d.ts.map +1 -1
- package/dist/dts/EntityProxy.d.ts +5 -6
- package/dist/dts/EntityProxy.d.ts.map +1 -1
- package/dist/dts/HttpRunner.d.ts +48 -25
- package/dist/dts/HttpRunner.d.ts.map +1 -1
- package/dist/dts/MessageStorage.d.ts +13 -5
- package/dist/dts/MessageStorage.d.ts.map +1 -1
- package/dist/dts/Runner.d.ts +4 -4
- package/dist/dts/Runner.d.ts.map +1 -1
- package/dist/dts/RunnerAddress.d.ts +5 -0
- package/dist/dts/RunnerAddress.d.ts.map +1 -1
- package/dist/dts/RunnerHealth.d.ts +24 -16
- package/dist/dts/RunnerHealth.d.ts.map +1 -1
- package/dist/dts/RunnerServer.d.ts +5 -4
- package/dist/dts/RunnerServer.d.ts.map +1 -1
- package/dist/dts/{ShardStorage.d.ts → RunnerStorage.d.ts} +41 -54
- package/dist/dts/RunnerStorage.d.ts.map +1 -0
- package/dist/dts/Runners.d.ts +15 -11
- package/dist/dts/Runners.d.ts.map +1 -1
- package/dist/dts/ShardId.d.ts +1 -1
- package/dist/dts/ShardId.d.ts.map +1 -1
- package/dist/dts/Sharding.d.ts +20 -10
- package/dist/dts/Sharding.d.ts.map +1 -1
- package/dist/dts/ShardingConfig.d.ts +40 -14
- package/dist/dts/ShardingConfig.d.ts.map +1 -1
- package/dist/dts/SocketRunner.d.ts +4 -3
- package/dist/dts/SocketRunner.d.ts.map +1 -1
- package/dist/dts/SqlMessageStorage.d.ts +2 -3
- package/dist/dts/SqlMessageStorage.d.ts.map +1 -1
- package/dist/dts/SqlRunnerStorage.d.ts +40 -0
- package/dist/dts/SqlRunnerStorage.d.ts.map +1 -0
- package/dist/dts/index.d.ts +4 -24
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/esm/ClusterError.js +0 -21
- package/dist/esm/ClusterError.js.map +1 -1
- package/dist/esm/ClusterMetrics.js +12 -14
- package/dist/esm/ClusterMetrics.js.map +1 -1
- package/dist/esm/ClusterSchema.js +17 -2
- package/dist/esm/ClusterSchema.js.map +1 -1
- package/dist/esm/ClusterWorkflowEngine.js +50 -83
- package/dist/esm/ClusterWorkflowEngine.js.map +1 -1
- package/dist/esm/Entity.js +0 -12
- package/dist/esm/Entity.js.map +1 -1
- package/dist/esm/EntityAddress.js +7 -0
- package/dist/esm/EntityAddress.js.map +1 -1
- package/dist/esm/EntityId.js +5 -0
- package/dist/esm/EntityId.js.map +1 -1
- package/dist/esm/EntityProxy.js +2 -2
- package/dist/esm/EntityProxy.js.map +1 -1
- package/dist/esm/HttpRunner.js +62 -39
- package/dist/esm/HttpRunner.js.map +1 -1
- package/dist/esm/MessageStorage.js +65 -17
- package/dist/esm/MessageStorage.js.map +1 -1
- package/dist/esm/Runner.js +3 -3
- package/dist/esm/Runner.js.map +1 -1
- package/dist/esm/RunnerAddress.js +7 -0
- package/dist/esm/RunnerAddress.js.map +1 -1
- package/dist/esm/RunnerHealth.js +88 -30
- package/dist/esm/RunnerHealth.js.map +1 -1
- package/dist/esm/RunnerServer.js +38 -24
- package/dist/esm/RunnerServer.js.map +1 -1
- package/dist/esm/RunnerStorage.js +90 -0
- package/dist/esm/RunnerStorage.js.map +1 -0
- package/dist/esm/Runners.js +19 -23
- package/dist/esm/Runners.js.map +1 -1
- package/dist/esm/ShardId.js +16 -6
- package/dist/esm/ShardId.js.map +1 -1
- package/dist/esm/Sharding.js +447 -323
- package/dist/esm/Sharding.js.map +1 -1
- package/dist/esm/ShardingConfig.js +10 -14
- package/dist/esm/ShardingConfig.js.map +1 -1
- package/dist/esm/Snowflake.js +1 -1
- package/dist/esm/SocketRunner.js +1 -1
- package/dist/esm/SocketRunner.js.map +1 -1
- package/dist/esm/SqlMessageStorage.js +22 -28
- package/dist/esm/SqlMessageStorage.js.map +1 -1
- package/dist/esm/SqlRunnerStorage.js +366 -0
- package/dist/esm/SqlRunnerStorage.js.map +1 -0
- package/dist/esm/index.js +4 -24
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/entityManager.js +41 -22
- package/dist/esm/internal/entityManager.js.map +1 -1
- package/package.json +20 -60
- package/src/ClusterError.ts +0 -24
- package/src/ClusterMetrics.ts +12 -16
- package/src/ClusterSchema.ts +17 -2
- package/src/ClusterWorkflowEngine.ts +48 -80
- package/src/Entity.ts +3 -21
- package/src/EntityAddress.ts +10 -0
- package/src/EntityId.ts +6 -0
- package/src/EntityProxy.ts +10 -10
- package/src/HttpRunner.ts +132 -67
- package/src/MessageStorage.ts +89 -24
- package/src/Runner.ts +4 -4
- package/src/RunnerAddress.ts +8 -0
- package/src/RunnerHealth.ts +119 -56
- package/src/RunnerServer.ts +64 -47
- package/src/RunnerStorage.ts +218 -0
- package/src/Runners.ts +32 -45
- package/src/ShardId.ts +14 -3
- package/src/Sharding.ts +561 -417
- package/src/ShardingConfig.ts +39 -31
- package/src/Snowflake.ts +1 -1
- package/src/SocketRunner.ts +6 -4
- package/src/SqlMessageStorage.ts +28 -30
- package/src/SqlRunnerStorage.ts +537 -0
- package/src/index.ts +4 -29
- package/src/internal/entityManager.ts +45 -29
- package/HttpCommon/package.json +0 -6
- package/HttpShardManager/package.json +0 -6
- package/ShardManager/package.json +0 -6
- package/ShardStorage/package.json +0 -6
- package/SocketShardManager/package.json +0 -6
- package/SqlShardStorage/package.json +0 -6
- package/SynchronizedClock/package.json +0 -6
- package/dist/cjs/HttpCommon.js +0 -48
- package/dist/cjs/HttpCommon.js.map +0 -1
- package/dist/cjs/HttpShardManager.js +0 -139
- package/dist/cjs/HttpShardManager.js.map +0 -1
- package/dist/cjs/ShardManager.js +0 -549
- package/dist/cjs/ShardManager.js.map +0 -1
- package/dist/cjs/ShardStorage.js +0 -151
- package/dist/cjs/ShardStorage.js.map +0 -1
- package/dist/cjs/SocketShardManager.js +0 -32
- package/dist/cjs/SocketShardManager.js.map +0 -1
- package/dist/cjs/SqlShardStorage.js +0 -253
- package/dist/cjs/SqlShardStorage.js.map +0 -1
- package/dist/cjs/SynchronizedClock.js +0 -65
- package/dist/cjs/SynchronizedClock.js.map +0 -1
- package/dist/cjs/internal/shardManager.js +0 -353
- package/dist/cjs/internal/shardManager.js.map +0 -1
- package/dist/dts/HttpCommon.d.ts +0 -25
- package/dist/dts/HttpCommon.d.ts.map +0 -1
- package/dist/dts/HttpShardManager.d.ts +0 -119
- package/dist/dts/HttpShardManager.d.ts.map +0 -1
- package/dist/dts/ShardManager.d.ts +0 -459
- package/dist/dts/ShardManager.d.ts.map +0 -1
- package/dist/dts/ShardStorage.d.ts.map +0 -1
- package/dist/dts/SocketShardManager.d.ts +0 -17
- package/dist/dts/SocketShardManager.d.ts.map +0 -1
- package/dist/dts/SqlShardStorage.d.ts +0 -38
- package/dist/dts/SqlShardStorage.d.ts.map +0 -1
- package/dist/dts/SynchronizedClock.d.ts +0 -19
- package/dist/dts/SynchronizedClock.d.ts.map +0 -1
- package/dist/dts/internal/shardManager.d.ts +0 -2
- package/dist/dts/internal/shardManager.d.ts.map +0 -1
- package/dist/esm/HttpCommon.js +0 -38
- package/dist/esm/HttpCommon.js.map +0 -1
- package/dist/esm/HttpShardManager.js +0 -128
- package/dist/esm/HttpShardManager.js.map +0 -1
- package/dist/esm/ShardManager.js +0 -535
- package/dist/esm/ShardManager.js.map +0 -1
- package/dist/esm/ShardStorage.js +0 -141
- package/dist/esm/ShardStorage.js.map +0 -1
- package/dist/esm/SocketShardManager.js +0 -24
- package/dist/esm/SocketShardManager.js.map +0 -1
- package/dist/esm/SqlShardStorage.js +0 -244
- package/dist/esm/SqlShardStorage.js.map +0 -1
- package/dist/esm/SynchronizedClock.js +0 -57
- package/dist/esm/SynchronizedClock.js.map +0 -1
- package/dist/esm/internal/shardManager.js +0 -342
- package/dist/esm/internal/shardManager.js.map +0 -1
- package/src/HttpCommon.ts +0 -73
- package/src/HttpShardManager.ts +0 -273
- package/src/ShardManager.ts +0 -823
- package/src/ShardStorage.ts +0 -297
- package/src/SocketShardManager.ts +0 -48
- package/src/SqlShardStorage.ts +0 -329
- package/src/SynchronizedClock.ts +0 -82
- 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,
|
|
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":[]}
|
package/dist/esm/RunnerHealth.js
CHANGED
|
@@ -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
|
|
8
|
-
import * as
|
|
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.
|
|
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(
|
|
60
|
-
times:
|
|
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
|
|
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
|
|
60
|
+
export const layerPing = /*#__PURE__*/Layer.scoped(RunnerHealth, makePing);
|
|
74
61
|
/**
|
|
75
|
-
*
|
|
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
|
|
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","
|
|
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":[]}
|
package/dist/esm/RunnerServer.js
CHANGED
|
@@ -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
|
|
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
|
|
44
|
-
let
|
|
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
|
-
|
|
50
|
-
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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_(
|
|
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
|
|
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)
|
|
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
|
|
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(
|
|
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","
|
|
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":[]}
|
package/dist/esm/Runners.js
CHANGED
|
@@ -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,
|
|
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
|
-
}),
|
|
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
|
|
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
|
|
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(
|
|
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(
|
|
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(() =>
|
|
299
|
-
address
|
|
300
|
-
|
|
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.
|
|
362
|
-
|
|
363
|
-
|
|
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
|
/**
|