@effect/cluster 0.50.5 → 0.51.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/ClusterWorkflowEngine.js +41 -81
- package/dist/cjs/ClusterWorkflowEngine.js.map +1 -1
- 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 +435 -318
- 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 +378 -0
- package/dist/cjs/SqlRunnerStorage.js.map +1 -0
- package/dist/cjs/index.js +5 -15
- package/dist/cjs/internal/entityManager.js +40 -9
- 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/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/dts/Entity.d.ts +2 -2
- 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/ClusterWorkflowEngine.js +41 -81
- package/dist/esm/ClusterWorkflowEngine.js.map +1 -1
- 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 +438 -321
- 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 +369 -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 +40 -9
- 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/ClusterWorkflowEngine.ts +38 -78
- package/src/Entity.ts +2 -7
- 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 +548 -413
- 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 +541 -0
- package/src/index.ts +4 -29
- package/src/internal/entityManager.ts +44 -10
- 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
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
|
/**
|