@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
|
@@ -1,342 +0,0 @@
|
|
|
1
|
-
import * as Arr from "effect/Array";
|
|
2
|
-
import * as Clock from "effect/Clock";
|
|
3
|
-
import * as Effect from "effect/Effect";
|
|
4
|
-
import { constFalse } from "effect/Function";
|
|
5
|
-
import * as MutableHashMap from "effect/MutableHashMap";
|
|
6
|
-
import * as MutableHashSet from "effect/MutableHashSet";
|
|
7
|
-
import * as Option from "effect/Option";
|
|
8
|
-
import { RunnerHealth } from "../RunnerHealth.js";
|
|
9
|
-
import { ShardId } from "../ShardId.js";
|
|
10
|
-
import { ShardStorage } from "../ShardStorage.js";
|
|
11
|
-
/** @internal */
|
|
12
|
-
export class State {
|
|
13
|
-
allRunners;
|
|
14
|
-
runners;
|
|
15
|
-
shards;
|
|
16
|
-
shardsPerGroup;
|
|
17
|
-
static fromStorage = /*#__PURE__*/Effect.fnUntraced(function* (shardsPerGroup) {
|
|
18
|
-
const storage = yield* ShardStorage;
|
|
19
|
-
const runnerHealth = yield* RunnerHealth;
|
|
20
|
-
// Fetch registered runners and shard assignments from cluster storage
|
|
21
|
-
const storedRunners = yield* storage.getRunners;
|
|
22
|
-
const storedAssignments = yield* storage.getAssignments;
|
|
23
|
-
// Determine which runners are still alive
|
|
24
|
-
const deadRunners = Arr.empty();
|
|
25
|
-
const aliveRunners = MutableHashMap.empty();
|
|
26
|
-
yield* Effect.forEach(storedRunners, ([address, runner]) => Effect.map(runnerHealth.isAlive(address), isAlive => {
|
|
27
|
-
if (isAlive) {
|
|
28
|
-
MutableHashMap.set(aliveRunners, address, runner);
|
|
29
|
-
} else {
|
|
30
|
-
deadRunners.push(runner);
|
|
31
|
-
}
|
|
32
|
-
}), {
|
|
33
|
-
concurrency: "unbounded",
|
|
34
|
-
discard: true
|
|
35
|
-
});
|
|
36
|
-
if (deadRunners.length > 0) {
|
|
37
|
-
yield* Effect.logWarning("Ignoring runners that are no longer considered alive:", deadRunners);
|
|
38
|
-
}
|
|
39
|
-
// Determine which shards remain unassigned to a runner
|
|
40
|
-
const assignedShards = MutableHashMap.empty();
|
|
41
|
-
const invalidAssignments = Arr.empty();
|
|
42
|
-
for (const [shard, address] of storedAssignments) {
|
|
43
|
-
if (Option.isSome(address) && MutableHashMap.has(aliveRunners, address.value)) {
|
|
44
|
-
MutableHashMap.set(assignedShards, shard, address.value);
|
|
45
|
-
} else if (Option.isSome(address)) {
|
|
46
|
-
invalidAssignments.push([shard, address.value]);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
if (invalidAssignments.length > 0) {
|
|
50
|
-
yield* Effect.logWarning("Ignoring shard assignments for runners that are no longer considered alive: ", invalidAssignments);
|
|
51
|
-
}
|
|
52
|
-
// Construct the initial state
|
|
53
|
-
const now = yield* Clock.currentTimeMillis;
|
|
54
|
-
const allRunners = MutableHashMap.empty();
|
|
55
|
-
const runnerState = new Map();
|
|
56
|
-
for (const [address, runner] of aliveRunners) {
|
|
57
|
-
const withMetadata = RunnerWithMetadata({
|
|
58
|
-
runner,
|
|
59
|
-
registeredAt: now
|
|
60
|
-
});
|
|
61
|
-
MutableHashMap.set(allRunners, address, withMetadata);
|
|
62
|
-
for (const group of runner.groups) {
|
|
63
|
-
let groupMap = runnerState.get(group);
|
|
64
|
-
if (!groupMap) {
|
|
65
|
-
groupMap = MutableHashMap.empty();
|
|
66
|
-
runnerState.set(group, groupMap);
|
|
67
|
-
}
|
|
68
|
-
MutableHashMap.set(groupMap, address, withMetadata);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
const shardState = new Map();
|
|
72
|
-
for (const group of runnerState.keys()) {
|
|
73
|
-
const groupMap = new Map();
|
|
74
|
-
shardState.set(group, groupMap);
|
|
75
|
-
for (let n = 1; n <= shardsPerGroup; n++) {
|
|
76
|
-
const shardId = new ShardId({
|
|
77
|
-
group,
|
|
78
|
-
id: n
|
|
79
|
-
});
|
|
80
|
-
groupMap.set(n, MutableHashMap.get(assignedShards, shardId));
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
return new State(allRunners, runnerState, shardState, shardsPerGroup);
|
|
84
|
-
});
|
|
85
|
-
constructor(allRunners, runners, shards, shardsPerGroup) {
|
|
86
|
-
this.allRunners = allRunners;
|
|
87
|
-
this.runners = runners;
|
|
88
|
-
this.shards = shards;
|
|
89
|
-
this.shardsPerGroup = shardsPerGroup;
|
|
90
|
-
this.assignments = MutableHashMap.empty();
|
|
91
|
-
this.perRunner = new Map();
|
|
92
|
-
for (const [address, meta] of this.allRunners) {
|
|
93
|
-
for (const group of meta.runner.groups) {
|
|
94
|
-
let runnerMap = this.perRunner.get(group);
|
|
95
|
-
if (!runnerMap) {
|
|
96
|
-
runnerMap = MutableHashMap.empty();
|
|
97
|
-
this.perRunner.set(group, runnerMap);
|
|
98
|
-
}
|
|
99
|
-
MutableHashMap.set(runnerMap, address, new Set());
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
for (const [group, groupMap] of this.shards) {
|
|
103
|
-
const perRunnerMap = this.perRunner.get(group);
|
|
104
|
-
for (const [id, address_] of groupMap) {
|
|
105
|
-
const address = Option.filter(address_, addr => MutableHashMap.has(this.allRunners, addr));
|
|
106
|
-
MutableHashMap.set(this.assignments, new ShardId({
|
|
107
|
-
group,
|
|
108
|
-
id
|
|
109
|
-
}), address);
|
|
110
|
-
if (Option.isSome(address)) {
|
|
111
|
-
Option.getOrUndefined(MutableHashMap.get(perRunnerMap, address.value))?.add(id);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
assignments;
|
|
117
|
-
perRunner;
|
|
118
|
-
addGroup(group) {
|
|
119
|
-
this.runners.set(group, MutableHashMap.empty());
|
|
120
|
-
const shardMap = new Map();
|
|
121
|
-
this.shards.set(group, shardMap);
|
|
122
|
-
for (let n = 1; n <= this.shardsPerGroup; n++) {
|
|
123
|
-
shardMap.set(n, Option.none());
|
|
124
|
-
MutableHashMap.set(this.assignments, new ShardId({
|
|
125
|
-
group,
|
|
126
|
-
id: n
|
|
127
|
-
}), Option.none());
|
|
128
|
-
}
|
|
129
|
-
const perRunnerMap = MutableHashMap.empty();
|
|
130
|
-
this.perRunner.set(group, perRunnerMap);
|
|
131
|
-
for (const [address] of this.allRunners) {
|
|
132
|
-
MutableHashMap.set(perRunnerMap, address, new Set());
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
addAssignments(shards, address) {
|
|
136
|
-
for (const shardId of shards) {
|
|
137
|
-
const currentAddress = Option.flatten(MutableHashMap.get(this.assignments, shardId));
|
|
138
|
-
MutableHashMap.set(this.assignments, shardId, address);
|
|
139
|
-
this.shards.get(shardId.group)?.set(shardId.id, address);
|
|
140
|
-
const perRunner = this.perRunner.get(shardId.group);
|
|
141
|
-
if (Option.isSome(currentAddress)) {
|
|
142
|
-
Option.getOrUndefined(MutableHashMap.get(perRunner, currentAddress.value))?.delete(shardId.id);
|
|
143
|
-
}
|
|
144
|
-
if (Option.isSome(address)) {
|
|
145
|
-
Option.getOrUndefined(MutableHashMap.get(perRunner, address.value))?.add(shardId.id);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
addRunner(runner, registeredAt) {
|
|
150
|
-
const withMetadata = RunnerWithMetadata({
|
|
151
|
-
runner,
|
|
152
|
-
registeredAt
|
|
153
|
-
});
|
|
154
|
-
MutableHashMap.set(this.allRunners, runner.address, withMetadata);
|
|
155
|
-
for (const group of runner.groups) {
|
|
156
|
-
if (!this.runners.has(group)) {
|
|
157
|
-
this.addGroup(group);
|
|
158
|
-
}
|
|
159
|
-
const groupMap = this.runners.get(group);
|
|
160
|
-
MutableHashMap.set(groupMap, runner.address, withMetadata);
|
|
161
|
-
const perRunner = this.perRunner.get(group);
|
|
162
|
-
MutableHashMap.set(perRunner, runner.address, new Set());
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
removeRunner(address) {
|
|
166
|
-
MutableHashMap.remove(this.allRunners, address);
|
|
167
|
-
for (const group of this.runners.keys()) {
|
|
168
|
-
const groupMap = this.runners.get(group);
|
|
169
|
-
MutableHashMap.remove(groupMap, address);
|
|
170
|
-
const perRunner = this.perRunner.get(group);
|
|
171
|
-
MutableHashMap.remove(perRunner, address);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
get maxVersion() {
|
|
175
|
-
if (MutableHashMap.size(this.allRunners) === 0) return Option.none();
|
|
176
|
-
let version = undefined;
|
|
177
|
-
for (const [, meta] of this.allRunners) {
|
|
178
|
-
if (version === undefined || meta.runner.version > version) {
|
|
179
|
-
version = meta.runner.version;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
return Option.some(version);
|
|
183
|
-
}
|
|
184
|
-
allRunnersHaveVersion(version) {
|
|
185
|
-
return version.pipe(Option.map(max => Arr.every(this.runnerVersions, version => version === max)), Option.getOrElse(constFalse));
|
|
186
|
-
}
|
|
187
|
-
get shardStats() {
|
|
188
|
-
const perRunner = new Map();
|
|
189
|
-
let unassigned = 0;
|
|
190
|
-
for (const [, address] of this.assignments) {
|
|
191
|
-
if (Option.isNone(address)) {
|
|
192
|
-
unassigned++;
|
|
193
|
-
continue;
|
|
194
|
-
}
|
|
195
|
-
const runner = address.value.toString();
|
|
196
|
-
const count = perRunner.get(runner) ?? 0;
|
|
197
|
-
perRunner.set(runner, count + 1);
|
|
198
|
-
}
|
|
199
|
-
return {
|
|
200
|
-
perRunner,
|
|
201
|
-
unassigned
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
shardsPerRunner(group) {
|
|
205
|
-
const shards = MutableHashMap.empty();
|
|
206
|
-
const perRunner = this.perRunner.get(group);
|
|
207
|
-
if (!perRunner || MutableHashMap.isEmpty(perRunner)) return shards;
|
|
208
|
-
for (const [address, shardSet] of perRunner) {
|
|
209
|
-
MutableHashMap.set(shards, address, new Set(shardSet));
|
|
210
|
-
}
|
|
211
|
-
return shards;
|
|
212
|
-
}
|
|
213
|
-
averageShardsPerRunner(group) {
|
|
214
|
-
const runnerCount = MutableHashMap.size(this.runners.get(group) ?? MutableHashMap.empty());
|
|
215
|
-
const shardGroup = this.shards.get(group) ?? new Map();
|
|
216
|
-
return runnerCount > 0 ? shardGroup.size / runnerCount : 0;
|
|
217
|
-
}
|
|
218
|
-
get allUnassignedShards() {
|
|
219
|
-
const unassigned = [];
|
|
220
|
-
for (const [shardId, address] of this.assignments) {
|
|
221
|
-
if (Option.isNone(address)) {
|
|
222
|
-
unassigned.push(shardId);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
return unassigned;
|
|
226
|
-
}
|
|
227
|
-
unassignedShards(group) {
|
|
228
|
-
const shardIds = [];
|
|
229
|
-
const assignments = this.shards.get(group);
|
|
230
|
-
for (const [shard, address] of assignments) {
|
|
231
|
-
if (Option.isNone(address)) {
|
|
232
|
-
shardIds.push(shard);
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
return shardIds;
|
|
236
|
-
}
|
|
237
|
-
get runnerVersions() {
|
|
238
|
-
const runnerVersions = [];
|
|
239
|
-
for (const [, meta] of this.allRunners) {
|
|
240
|
-
runnerVersions.push(meta.runner.version);
|
|
241
|
-
}
|
|
242
|
-
return runnerVersions;
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
/** @internal */
|
|
246
|
-
export const RunnerWithMetadata = runner => runner;
|
|
247
|
-
/** @internal */
|
|
248
|
-
export function decideAssignmentsForShards(state, group) {
|
|
249
|
-
const shardsPerRunner = state.shardsPerRunner(group);
|
|
250
|
-
const maxVersion = state.maxVersion;
|
|
251
|
-
const shardsToRebalance = state.unassignedShards(group);
|
|
252
|
-
if (state.allRunnersHaveVersion(maxVersion)) {
|
|
253
|
-
const averageShardsPerRunner = state.averageShardsPerRunner(group);
|
|
254
|
-
MutableHashMap.forEach(shardsPerRunner, shards => {
|
|
255
|
-
const extraShards = Math.max(0, shards.size - averageShardsPerRunner);
|
|
256
|
-
const iter = shards.values();
|
|
257
|
-
for (let i = 0; i < extraShards; i++) {
|
|
258
|
-
const shard = iter.next();
|
|
259
|
-
if (shard.done) break;
|
|
260
|
-
shardsToRebalance.push(shard.value);
|
|
261
|
-
}
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
return pickNewRunners(shardsToRebalance, state, group, shardsPerRunner, maxVersion);
|
|
265
|
-
}
|
|
266
|
-
function pickNewRunners(shardsToRebalance, state, group, shardsPerRunner, maybeMaxVersion = state.maxVersion) {
|
|
267
|
-
const addressAssignments = MutableHashMap.empty();
|
|
268
|
-
const unassignments = MutableHashMap.empty();
|
|
269
|
-
const changes = MutableHashSet.empty();
|
|
270
|
-
if (Option.isNone(maybeMaxVersion)) {
|
|
271
|
-
return [addressAssignments, unassignments, changes];
|
|
272
|
-
}
|
|
273
|
-
const maxVersion = maybeMaxVersion.value;
|
|
274
|
-
const runnerGroup = state.runners.get(group);
|
|
275
|
-
const shardsGroup = state.shards.get(group);
|
|
276
|
-
for (const shardId of shardsToRebalance) {
|
|
277
|
-
// Find the runner with the fewest assigned shards
|
|
278
|
-
let candidate;
|
|
279
|
-
let candidateShards;
|
|
280
|
-
for (const [address, shards] of shardsPerRunner) {
|
|
281
|
-
// Keep only runners with the maximum version
|
|
282
|
-
const maybeRunnerMeta = MutableHashMap.get(runnerGroup, address);
|
|
283
|
-
if (Option.isNone(maybeRunnerMeta)) continue;
|
|
284
|
-
const runnerMeta = maybeRunnerMeta.value;
|
|
285
|
-
if (runnerMeta.runner.version !== maxVersion) continue;
|
|
286
|
-
// Do not assign to a runner that has unassignments in the same rebalance
|
|
287
|
-
if (MutableHashMap.has(unassignments, address)) continue;
|
|
288
|
-
if (candidate === undefined || shards.size < candidateShards.size) {
|
|
289
|
-
candidate = address;
|
|
290
|
-
candidateShards = shards;
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
if (!candidate || !candidateShards) break;
|
|
294
|
-
// If the old runner is the same as the new runner, do nothing
|
|
295
|
-
const oldRunner = Option.getOrUndefined(shardsGroup.get(shardId) ?? Option.none());
|
|
296
|
-
if (oldRunner && oldRunner.toString() === candidate.toString()) {
|
|
297
|
-
continue;
|
|
298
|
-
}
|
|
299
|
-
const oldShards = oldRunner && Option.getOrUndefined(MutableHashMap.get(shardsPerRunner, oldRunner));
|
|
300
|
-
// If the new runner has one less, as many, or more shards than the
|
|
301
|
-
// old runner, do not change anything
|
|
302
|
-
if (oldShards && candidateShards.size + 1 >= oldShards.size) continue;
|
|
303
|
-
// Otherwise create a new assignment
|
|
304
|
-
MutableHashMap.modifyAt(addressAssignments, candidate, Option.match({
|
|
305
|
-
onNone: () => Option.some(new Set([shardId])),
|
|
306
|
-
onSome: shards => {
|
|
307
|
-
shards.add(shardId);
|
|
308
|
-
return Option.some(shards);
|
|
309
|
-
}
|
|
310
|
-
}));
|
|
311
|
-
if (oldRunner) {
|
|
312
|
-
MutableHashMap.modifyAt(unassignments, oldRunner, Option.match({
|
|
313
|
-
onNone: () => Option.some(new Set([shardId])),
|
|
314
|
-
onSome: shards => {
|
|
315
|
-
shards.add(shardId);
|
|
316
|
-
return Option.some(shards);
|
|
317
|
-
}
|
|
318
|
-
}));
|
|
319
|
-
}
|
|
320
|
-
// Move the shard to the new runner
|
|
321
|
-
candidateShards.add(shardId);
|
|
322
|
-
if (oldShards) {
|
|
323
|
-
oldShards.delete(shardId);
|
|
324
|
-
}
|
|
325
|
-
// Track changes
|
|
326
|
-
MutableHashSet.add(changes, candidate);
|
|
327
|
-
if (oldRunner) MutableHashSet.add(changes, oldRunner);
|
|
328
|
-
}
|
|
329
|
-
return [addressAssignments, unassignments, changes];
|
|
330
|
-
}
|
|
331
|
-
/** @internal */
|
|
332
|
-
export const addAllNested = (self, key, values) => {
|
|
333
|
-
const oset = MutableHashMap.get(self, key);
|
|
334
|
-
if (Option.isSome(oset)) {
|
|
335
|
-
for (const value of values) {
|
|
336
|
-
MutableHashSet.add(oset.value, value);
|
|
337
|
-
}
|
|
338
|
-
} else {
|
|
339
|
-
MutableHashMap.set(self, key, MutableHashSet.fromIterable(values));
|
|
340
|
-
}
|
|
341
|
-
};
|
|
342
|
-
//# sourceMappingURL=shardManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shardManager.js","names":["Arr","Clock","Effect","constFalse","MutableHashMap","MutableHashSet","Option","RunnerHealth","ShardId","ShardStorage","State","allRunners","runners","shards","shardsPerGroup","fromStorage","fnUntraced","storage","runnerHealth","storedRunners","getRunners","storedAssignments","getAssignments","deadRunners","empty","aliveRunners","forEach","address","runner","map","isAlive","set","push","concurrency","discard","length","logWarning","assignedShards","invalidAssignments","shard","isSome","has","value","now","currentTimeMillis","runnerState","Map","withMetadata","RunnerWithMetadata","registeredAt","group","groups","groupMap","get","shardState","keys","n","shardId","id","constructor","assignments","perRunner","meta","runnerMap","Set","perRunnerMap","address_","filter","addr","getOrUndefined","add","addGroup","shardMap","none","addAssignments","currentAddress","flatten","delete","addRunner","removeRunner","remove","maxVersion","size","version","undefined","some","allRunnersHaveVersion","pipe","max","every","runnerVersions","getOrElse","shardStats","unassigned","isNone","toString","count","shardsPerRunner","isEmpty","shardSet","averageShardsPerRunner","runnerCount","shardGroup","allUnassignedShards","unassignedShards","shardIds","decideAssignmentsForShards","state","shardsToRebalance","extraShards","Math","iter","values","i","next","done","pickNewRunners","maybeMaxVersion","addressAssignments","unassignments","changes","runnerGroup","shardsGroup","candidate","candidateShards","maybeRunnerMeta","runnerMeta","oldRunner","oldShards","modifyAt","match","onNone","onSome","addAllNested","self","key","oset","fromIterable"],"sources":["../../../src/internal/shardManager.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/src/HttpCommon.ts
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @since 1.0.0
|
|
3
|
-
*/
|
|
4
|
-
import * as HttpClient from "@effect/platform/HttpClient"
|
|
5
|
-
import * as HttpClientRequest from "@effect/platform/HttpClientRequest"
|
|
6
|
-
import * as Socket from "@effect/platform/Socket"
|
|
7
|
-
import * as RpcClient from "@effect/rpc/RpcClient"
|
|
8
|
-
import * as RpcSerialization from "@effect/rpc/RpcSerialization"
|
|
9
|
-
import * as Effect from "effect/Effect"
|
|
10
|
-
import * as Layer from "effect/Layer"
|
|
11
|
-
import { RpcClientProtocol } from "./Runners.js"
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* @since 1.0.0
|
|
15
|
-
* @category Layers
|
|
16
|
-
*/
|
|
17
|
-
export const layerClientProtocolHttp = (options: {
|
|
18
|
-
readonly path: string
|
|
19
|
-
readonly https?: boolean | undefined
|
|
20
|
-
}): Layer.Layer<
|
|
21
|
-
RpcClientProtocol,
|
|
22
|
-
never,
|
|
23
|
-
RpcSerialization.RpcSerialization | HttpClient.HttpClient
|
|
24
|
-
> =>
|
|
25
|
-
Layer.effect(
|
|
26
|
-
RpcClientProtocol,
|
|
27
|
-
Effect.gen(function*() {
|
|
28
|
-
const serialization = yield* RpcSerialization.RpcSerialization
|
|
29
|
-
const client = yield* HttpClient.HttpClient
|
|
30
|
-
const https = options.https ?? false
|
|
31
|
-
return (address) => {
|
|
32
|
-
const clientWithUrl = HttpClient.mapRequest(
|
|
33
|
-
client,
|
|
34
|
-
HttpClientRequest.prependUrl(`http${https ? "s" : ""}://${address.host}:${address.port}/${options.path}`)
|
|
35
|
-
)
|
|
36
|
-
return RpcClient.makeProtocolHttp(clientWithUrl).pipe(
|
|
37
|
-
Effect.provideService(RpcSerialization.RpcSerialization, serialization)
|
|
38
|
-
)
|
|
39
|
-
}
|
|
40
|
-
})
|
|
41
|
-
)
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* @since 1.0.0
|
|
45
|
-
* @category Layers
|
|
46
|
-
*/
|
|
47
|
-
export const layerClientProtocolWebsocket = (options: {
|
|
48
|
-
readonly path: string
|
|
49
|
-
readonly https?: boolean | undefined
|
|
50
|
-
}): Layer.Layer<
|
|
51
|
-
RpcClientProtocol,
|
|
52
|
-
never,
|
|
53
|
-
RpcSerialization.RpcSerialization | Socket.WebSocketConstructor
|
|
54
|
-
> =>
|
|
55
|
-
Layer.effect(
|
|
56
|
-
RpcClientProtocol,
|
|
57
|
-
Effect.gen(function*() {
|
|
58
|
-
const serialization = yield* RpcSerialization.RpcSerialization
|
|
59
|
-
const https = options.https ?? false
|
|
60
|
-
const constructor = yield* Socket.WebSocketConstructor
|
|
61
|
-
return Effect.fnUntraced(function*(address) {
|
|
62
|
-
const socket = yield* Socket.makeWebSocket(
|
|
63
|
-
`ws${https ? "s" : ""}://${address.host}:${address.port}/${options.path}`
|
|
64
|
-
).pipe(
|
|
65
|
-
Effect.provideService(Socket.WebSocketConstructor, constructor)
|
|
66
|
-
)
|
|
67
|
-
return yield* RpcClient.makeProtocolSocket().pipe(
|
|
68
|
-
Effect.provideService(Socket.Socket, socket),
|
|
69
|
-
Effect.provideService(RpcSerialization.RpcSerialization, serialization)
|
|
70
|
-
)
|
|
71
|
-
})
|
|
72
|
-
})
|
|
73
|
-
)
|