@effect/cluster 0.37.1 → 0.38.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/ClusterCron/package.json +6 -0
- package/dist/cjs/ClusterCron.js +86 -0
- package/dist/cjs/ClusterCron.js.map +1 -0
- package/dist/cjs/ClusterSchema.js +9 -1
- package/dist/cjs/ClusterSchema.js.map +1 -1
- package/dist/cjs/ClusterWorkflowEngine.js +99 -78
- package/dist/cjs/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cjs/Entity.js +6 -1
- package/dist/cjs/Entity.js.map +1 -1
- package/dist/cjs/EntityAddress.js +8 -1
- package/dist/cjs/EntityAddress.js.map +1 -1
- package/dist/cjs/MessageStorage.js +6 -4
- package/dist/cjs/MessageStorage.js.map +1 -1
- package/dist/cjs/Runner.js +15 -0
- package/dist/cjs/Runner.js.map +1 -1
- package/dist/cjs/RunnerAddress.js +8 -1
- package/dist/cjs/RunnerAddress.js.map +1 -1
- package/dist/cjs/Runners.js +5 -0
- package/dist/cjs/Runners.js.map +1 -1
- package/dist/cjs/ShardId.js +75 -7
- package/dist/cjs/ShardId.js.map +1 -1
- package/dist/cjs/ShardManager.js +63 -43
- package/dist/cjs/ShardManager.js.map +1 -1
- package/dist/cjs/ShardStorage.js +45 -36
- package/dist/cjs/ShardStorage.js.map +1 -1
- package/dist/cjs/Sharding.js +45 -37
- package/dist/cjs/Sharding.js.map +1 -1
- package/dist/cjs/ShardingConfig.js +9 -2
- package/dist/cjs/ShardingConfig.js.map +1 -1
- package/dist/cjs/Singleton.js +2 -2
- package/dist/cjs/Singleton.js.map +1 -1
- package/dist/cjs/SingletonAddress.js +2 -2
- package/dist/cjs/SingletonAddress.js.map +1 -1
- package/dist/cjs/SqlMessageStorage.js +32 -27
- package/dist/cjs/SqlMessageStorage.js.map +1 -1
- package/dist/cjs/SqlShardStorage.js +14 -14
- package/dist/cjs/SqlShardStorage.js.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/internal/entityManager.js +2 -1
- package/dist/cjs/internal/entityManager.js.map +1 -1
- package/dist/cjs/internal/shardManager.js +138 -37
- package/dist/cjs/internal/shardManager.js.map +1 -1
- package/dist/dts/ClusterCron.d.ts +37 -0
- package/dist/dts/ClusterCron.d.ts.map +1 -0
- package/dist/dts/ClusterSchema.d.ts +8 -0
- package/dist/dts/ClusterSchema.d.ts.map +1 -1
- package/dist/dts/ClusterWorkflowEngine.d.ts +4 -4
- package/dist/dts/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/dts/Entity.d.ts +10 -0
- package/dist/dts/Entity.d.ts.map +1 -1
- package/dist/dts/EntityAddress.d.ts +9 -3
- package/dist/dts/EntityAddress.d.ts.map +1 -1
- package/dist/dts/MessageStorage.d.ts +3 -3
- package/dist/dts/MessageStorage.d.ts.map +1 -1
- package/dist/dts/Runner.d.ts +15 -0
- 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/Runners.d.ts.map +1 -1
- package/dist/dts/ShardId.d.ts +60 -6
- package/dist/dts/ShardId.d.ts.map +1 -1
- package/dist/dts/ShardManager.d.ts +13 -13
- package/dist/dts/ShardManager.d.ts.map +1 -1
- package/dist/dts/ShardStorage.d.ts +11 -14
- package/dist/dts/ShardStorage.d.ts.map +1 -1
- package/dist/dts/Sharding.d.ts +4 -2
- package/dist/dts/Sharding.d.ts.map +1 -1
- package/dist/dts/ShardingConfig.d.ts +32 -6
- package/dist/dts/ShardingConfig.d.ts.map +1 -1
- package/dist/dts/Singleton.d.ts +3 -1
- package/dist/dts/Singleton.d.ts.map +1 -1
- package/dist/dts/SingletonAddress.d.ts +4 -3
- package/dist/dts/SingletonAddress.d.ts.map +1 -1
- package/dist/dts/SqlMessageStorage.d.ts +3 -2
- package/dist/dts/SqlMessageStorage.d.ts.map +1 -1
- package/dist/dts/SqlShardStorage.d.ts +1 -1
- package/dist/dts/index.d.ts +4 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/esm/ClusterCron.js +77 -0
- package/dist/esm/ClusterCron.js.map +1 -0
- package/dist/esm/ClusterSchema.js +7 -0
- package/dist/esm/ClusterSchema.js.map +1 -1
- package/dist/esm/ClusterWorkflowEngine.js +99 -78
- package/dist/esm/ClusterWorkflowEngine.js.map +1 -1
- package/dist/esm/Entity.js +6 -1
- package/dist/esm/Entity.js.map +1 -1
- package/dist/esm/EntityAddress.js +8 -1
- package/dist/esm/EntityAddress.js.map +1 -1
- package/dist/esm/MessageStorage.js +6 -4
- package/dist/esm/MessageStorage.js.map +1 -1
- package/dist/esm/Runner.js +15 -0
- package/dist/esm/Runner.js.map +1 -1
- package/dist/esm/RunnerAddress.js +8 -1
- package/dist/esm/RunnerAddress.js.map +1 -1
- package/dist/esm/Runners.js +5 -0
- package/dist/esm/Runners.js.map +1 -1
- package/dist/esm/ShardId.js +73 -6
- package/dist/esm/ShardId.js.map +1 -1
- package/dist/esm/ShardManager.js +64 -45
- package/dist/esm/ShardManager.js.map +1 -1
- package/dist/esm/ShardStorage.js +44 -36
- package/dist/esm/ShardStorage.js.map +1 -1
- package/dist/esm/Sharding.js +45 -37
- package/dist/esm/Sharding.js.map +1 -1
- package/dist/esm/ShardingConfig.js +9 -2
- package/dist/esm/ShardingConfig.js.map +1 -1
- package/dist/esm/Singleton.js +2 -2
- package/dist/esm/Singleton.js.map +1 -1
- package/dist/esm/SingletonAddress.js +2 -2
- package/dist/esm/SingletonAddress.js.map +1 -1
- package/dist/esm/SqlMessageStorage.js +32 -27
- package/dist/esm/SqlMessageStorage.js.map +1 -1
- package/dist/esm/SqlShardStorage.js +14 -14
- package/dist/esm/SqlShardStorage.js.map +1 -1
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/entityManager.js +2 -1
- package/dist/esm/internal/entityManager.js.map +1 -1
- package/dist/esm/internal/shardManager.js +136 -36
- package/dist/esm/internal/shardManager.js.map +1 -1
- package/package.json +13 -5
- package/src/ClusterCron.ts +129 -0
- package/src/ClusterSchema.ts +9 -0
- package/src/ClusterWorkflowEngine.ts +93 -58
- package/src/Entity.ts +20 -1
- package/src/EntityAddress.ts +11 -1
- package/src/MessageStorage.ts +12 -7
- package/src/Runner.ts +18 -0
- package/src/RunnerAddress.ts +9 -1
- package/src/Runners.ts +5 -0
- package/src/ShardId.ts +81 -11
- package/src/ShardManager.ts +74 -45
- package/src/ShardStorage.ts +51 -47
- package/src/Sharding.ts +45 -39
- package/src/ShardingConfig.ts +36 -7
- package/src/Singleton.ts +5 -2
- package/src/SingletonAddress.ts +2 -2
- package/src/SqlMessageStorage.ts +36 -30
- package/src/SqlShardStorage.ts +15 -15
- package/src/index.ts +5 -0
- package/src/internal/entityManager.ts +2 -1
- package/src/internal/shardManager.ts +158 -52
@@ -11,9 +11,11 @@ import { ShardId } from "../ShardId.js";
|
|
11
11
|
import { ShardStorage } from "../ShardStorage.js";
|
12
12
|
/** @internal */
|
13
13
|
export class State {
|
14
|
+
allRunners;
|
14
15
|
runners;
|
15
16
|
shards;
|
16
|
-
|
17
|
+
shardsPerGroup;
|
18
|
+
static fromStorage = /*#__PURE__*/Effect.fnUntraced(function* (shardsPerGroup) {
|
17
19
|
const storage = yield* ShardStorage;
|
18
20
|
const runnerHealth = yield* RunnerHealth;
|
19
21
|
// Fetch registered runners and shard assignments from cluster storage
|
@@ -36,11 +38,11 @@ export class State {
|
|
36
38
|
yield* Effect.logWarning("Ignoring runners that are no longer considered alive:", deadRunners);
|
37
39
|
}
|
38
40
|
// Determine which shards remain unassigned to a runner
|
39
|
-
const assignedShards =
|
41
|
+
const assignedShards = MutableHashMap.empty();
|
40
42
|
const invalidAssignments = Arr.empty();
|
41
43
|
for (const [shard, address] of storedAssignments) {
|
42
44
|
if (Option.isSome(address) && MutableHashMap.has(aliveRunners, address.value)) {
|
43
|
-
|
45
|
+
MutableHashMap.set(assignedShards, shard, address.value);
|
44
46
|
} else if (Option.isSome(address)) {
|
45
47
|
invalidAssignments.push([shard, address.value]);
|
46
48
|
}
|
@@ -50,28 +52,98 @@ export class State {
|
|
50
52
|
}
|
51
53
|
// Construct the initial state
|
52
54
|
const now = yield* Clock.currentTimeMillis;
|
53
|
-
const
|
55
|
+
const allRunners = MutableHashMap.empty();
|
56
|
+
const runnerState = new Map();
|
57
|
+
// for (const group of groups) {
|
58
|
+
// runnerState.set(group, MutableHashMap.empty<RunnerAddress, RunnerWithMetadata>())
|
59
|
+
// }
|
54
60
|
for (const [address, runner] of aliveRunners) {
|
55
|
-
|
61
|
+
const withMetadata = RunnerWithMetadata({
|
56
62
|
runner,
|
57
63
|
registeredAt: now
|
58
|
-
})
|
64
|
+
});
|
65
|
+
MutableHashMap.set(allRunners, address, withMetadata);
|
66
|
+
for (const group of runner.groups) {
|
67
|
+
let groupMap = runnerState.get(group);
|
68
|
+
if (!groupMap) {
|
69
|
+
groupMap = MutableHashMap.empty();
|
70
|
+
runnerState.set(group, groupMap);
|
71
|
+
}
|
72
|
+
MutableHashMap.set(groupMap, address, withMetadata);
|
73
|
+
}
|
59
74
|
}
|
60
75
|
const shardState = new Map();
|
61
|
-
for (
|
62
|
-
const
|
63
|
-
shardState.set(
|
76
|
+
for (const group of runnerState.keys()) {
|
77
|
+
const groupMap = new Map();
|
78
|
+
shardState.set(group, groupMap);
|
79
|
+
for (let n = 1; n <= shardsPerGroup; n++) {
|
80
|
+
const shardId = new ShardId({
|
81
|
+
group,
|
82
|
+
id: n
|
83
|
+
});
|
84
|
+
groupMap.set(n, MutableHashMap.get(assignedShards, shardId));
|
85
|
+
}
|
64
86
|
}
|
65
|
-
return new State(runnerState, shardState);
|
87
|
+
return new State(allRunners, runnerState, shardState, shardsPerGroup);
|
66
88
|
});
|
67
|
-
constructor(runners, shards) {
|
89
|
+
constructor(allRunners, runners, shards, shardsPerGroup) {
|
90
|
+
this.allRunners = allRunners;
|
68
91
|
this.runners = runners;
|
69
92
|
this.shards = shards;
|
93
|
+
this.shardsPerGroup = shardsPerGroup;
|
94
|
+
this.assignments = MutableHashMap.empty();
|
95
|
+
for (const [group, groupMap] of this.shards) {
|
96
|
+
for (const [id, address] of groupMap) {
|
97
|
+
MutableHashMap.set(this.assignments, new ShardId({
|
98
|
+
group,
|
99
|
+
id
|
100
|
+
}), address);
|
101
|
+
}
|
102
|
+
}
|
103
|
+
}
|
104
|
+
assignments;
|
105
|
+
addGroup(group) {
|
106
|
+
this.runners.set(group, MutableHashMap.empty());
|
107
|
+
const shardMap = new Map();
|
108
|
+
for (let n = 1; n <= this.shardsPerGroup; n++) {
|
109
|
+
shardMap.set(n, Option.none());
|
110
|
+
MutableHashMap.set(this.assignments, new ShardId({
|
111
|
+
group,
|
112
|
+
id: n
|
113
|
+
}), Option.none());
|
114
|
+
}
|
115
|
+
this.shards.set(group, shardMap);
|
116
|
+
}
|
117
|
+
addAssignments(shards, address) {
|
118
|
+
for (const shardId of shards) {
|
119
|
+
MutableHashMap.set(this.assignments, shardId, address);
|
120
|
+
this.shards.get(shardId.group)?.set(shardId.id, address);
|
121
|
+
}
|
122
|
+
}
|
123
|
+
addRunner(runner, registeredAt) {
|
124
|
+
const withMetadata = RunnerWithMetadata({
|
125
|
+
runner,
|
126
|
+
registeredAt
|
127
|
+
});
|
128
|
+
MutableHashMap.set(this.allRunners, runner.address, withMetadata);
|
129
|
+
for (const group of runner.groups) {
|
130
|
+
if (!this.runners.has(group)) {
|
131
|
+
this.addGroup(group);
|
132
|
+
}
|
133
|
+
const groupMap = this.runners.get(group);
|
134
|
+
MutableHashMap.set(groupMap, runner.address, withMetadata);
|
135
|
+
}
|
136
|
+
}
|
137
|
+
removeRunner(address) {
|
138
|
+
MutableHashMap.remove(this.allRunners, address);
|
139
|
+
for (const groupMap of this.runners.values()) {
|
140
|
+
MutableHashMap.remove(groupMap, address);
|
141
|
+
}
|
70
142
|
}
|
71
143
|
get maxVersion() {
|
72
|
-
if (MutableHashMap.size(this.
|
144
|
+
if (MutableHashMap.size(this.allRunners) === 0) return Option.none();
|
73
145
|
let version = undefined;
|
74
|
-
for (const [, meta] of this.
|
146
|
+
for (const [, meta] of this.allRunners) {
|
75
147
|
if (version === undefined || meta.runner.version > version) {
|
76
148
|
version = meta.runner.version;
|
77
149
|
}
|
@@ -81,26 +153,39 @@ export class State {
|
|
81
153
|
allRunnersHaveVersion(version) {
|
82
154
|
return version.pipe(Option.map(max => Arr.every(this.runnerVersions, version => version === max)), Option.getOrElse(constFalse));
|
83
155
|
}
|
84
|
-
|
156
|
+
shardsPerRunner(group) {
|
157
|
+
const groupRunners = this.runners.get(group);
|
85
158
|
const shards = MutableHashMap.empty();
|
86
|
-
if (MutableHashMap.isEmpty(
|
87
|
-
MutableHashMap.forEach(
|
159
|
+
if (!groupRunners || MutableHashMap.isEmpty(groupRunners)) return shards;
|
160
|
+
MutableHashMap.forEach(groupRunners, (_, address) => {
|
88
161
|
MutableHashMap.set(shards, address, new Set());
|
89
162
|
});
|
90
|
-
|
163
|
+
const assignments = this.shards.get(group);
|
164
|
+
for (const [id, address] of assignments) {
|
91
165
|
if (Option.isNone(address)) continue;
|
92
166
|
const shardIds = Option.getOrUndefined(MutableHashMap.get(shards, address.value));
|
93
|
-
shardIds.add(
|
167
|
+
shardIds.add(id);
|
94
168
|
}
|
95
169
|
return shards;
|
96
170
|
}
|
97
|
-
|
98
|
-
const runnerCount = MutableHashMap.size(this.runners);
|
99
|
-
|
171
|
+
averageShardsPerRunner(group) {
|
172
|
+
const runnerCount = MutableHashMap.size(this.runners.get(group) ?? MutableHashMap.empty());
|
173
|
+
const shardGroup = this.shards.get(group) ?? new Map();
|
174
|
+
return runnerCount > 0 ? shardGroup.size / runnerCount : 0;
|
100
175
|
}
|
101
|
-
get
|
176
|
+
get allUnassignedShards() {
|
177
|
+
const unassigned = [];
|
178
|
+
for (const [shardId, address] of this.assignments) {
|
179
|
+
if (Option.isNone(address)) {
|
180
|
+
unassigned.push(shardId);
|
181
|
+
}
|
182
|
+
}
|
183
|
+
return unassigned;
|
184
|
+
}
|
185
|
+
unassignedShards(group) {
|
102
186
|
const shardIds = [];
|
103
|
-
|
187
|
+
const assignments = this.shards.get(group);
|
188
|
+
for (const [shard, address] of assignments) {
|
104
189
|
if (Option.isNone(address)) {
|
105
190
|
shardIds.push(shard);
|
106
191
|
}
|
@@ -109,7 +194,7 @@ export class State {
|
|
109
194
|
}
|
110
195
|
get runnerVersions() {
|
111
196
|
const runnerVersions = [];
|
112
|
-
for (const [, meta] of this.
|
197
|
+
for (const [, meta] of this.allRunners) {
|
113
198
|
runnerVersions.push(meta.runner.version);
|
114
199
|
}
|
115
200
|
return runnerVersions;
|
@@ -118,22 +203,24 @@ export class State {
|
|
118
203
|
/** @internal */
|
119
204
|
export const RunnerWithMetadata = runner => runner;
|
120
205
|
/** @internal */
|
121
|
-
export function decideAssignmentsForUnassignedShards(state) {
|
122
|
-
return pickNewRunners(state.unassignedShards, state, true, 1);
|
206
|
+
export function decideAssignmentsForUnassignedShards(state, group) {
|
207
|
+
return pickNewRunners(state.unassignedShards(group), state, group, true, 1);
|
123
208
|
}
|
124
209
|
const allocationOrder = /*#__PURE__*/Order.combine(/*#__PURE__*/Order.mapInput(Order.number, ([, shards]) => shards), /*#__PURE__*/Order.mapInput(Order.number, ([,, registeredAt]) => registeredAt));
|
125
210
|
/** @internal */
|
126
|
-
export function decideAssignmentsForUnbalancedShards(state, rate) {
|
127
|
-
const shardsPerRunner = state.shardsPerRunner;
|
211
|
+
export function decideAssignmentsForUnbalancedShards(state, group, rate) {
|
212
|
+
const shardsPerRunner = state.shardsPerRunner(group);
|
128
213
|
const maxVersion = state.maxVersion;
|
129
214
|
const extraShardsToAllocate = Arr.empty();
|
215
|
+
const runnerGroup = state.runners.get(group);
|
216
|
+
const shardsGroup = state.shards.get(group);
|
130
217
|
if (state.allRunnersHaveVersion(maxVersion)) {
|
131
|
-
const averageShardsPerRunner = state.averageShardsPerRunner;
|
218
|
+
const averageShardsPerRunner = state.averageShardsPerRunner(group);
|
132
219
|
MutableHashMap.forEach(shardsPerRunner, shards => {
|
133
220
|
// Count how many extra shards there are compared to the average
|
134
221
|
const extraShards = Math.max(0, shards.size - averageShardsPerRunner);
|
135
222
|
for (const shard of takeRandom(shards, extraShards)) {
|
136
|
-
const maybeAddress =
|
223
|
+
const maybeAddress = shardsGroup.get(shard) ?? Option.none();
|
137
224
|
if (Option.isNone(maybeAddress)) {
|
138
225
|
extraShardsToAllocate.push([shard, Number.MIN_SAFE_INTEGER, Number.MIN_SAFE_INTEGER]);
|
139
226
|
continue;
|
@@ -142,7 +229,7 @@ export function decideAssignmentsForUnbalancedShards(state, rate) {
|
|
142
229
|
extraShardsToAllocate.push([shard, Option.match(MutableHashMap.get(shardsPerRunner, address), {
|
143
230
|
onNone: () => Number.MIN_SAFE_INTEGER,
|
144
231
|
onSome: shards => -shards.size
|
145
|
-
}), Option.match(MutableHashMap.get(
|
232
|
+
}), Option.match(MutableHashMap.get(runnerGroup, address), {
|
146
233
|
onNone: () => Number.MIN_SAFE_INTEGER,
|
147
234
|
onSome: meta => meta.registeredAt
|
148
235
|
})]);
|
@@ -150,9 +237,9 @@ export function decideAssignmentsForUnbalancedShards(state, rate) {
|
|
150
237
|
});
|
151
238
|
}
|
152
239
|
const sortedShardsToRebalance = extraShardsToAllocate.sort(allocationOrder).map(([shard]) => shard);
|
153
|
-
return pickNewRunners(sortedShardsToRebalance, state, false, rate, shardsPerRunner, maxVersion);
|
240
|
+
return pickNewRunners(sortedShardsToRebalance, state, group, false, rate, shardsPerRunner, maxVersion);
|
154
241
|
}
|
155
|
-
function pickNewRunners(shardsToRebalance, state, immediate, rate, shardsPerRunner = state.shardsPerRunner, maybeMaxVersion = state.maxVersion) {
|
242
|
+
function pickNewRunners(shardsToRebalance, state, group, immediate, rate, shardsPerRunner = state.shardsPerRunner(group), maybeMaxVersion = state.maxVersion) {
|
156
243
|
const addressAssignments = MutableHashMap.empty();
|
157
244
|
const unassignments = MutableHashMap.empty();
|
158
245
|
const changes = MutableHashSet.empty();
|
@@ -160,13 +247,15 @@ function pickNewRunners(shardsToRebalance, state, immediate, rate, shardsPerRunn
|
|
160
247
|
return [addressAssignments, unassignments, changes];
|
161
248
|
}
|
162
249
|
const maxVersion = maybeMaxVersion.value;
|
250
|
+
const runnerGroup = state.runners.get(group);
|
251
|
+
const shardsGroup = state.shards.get(group);
|
163
252
|
for (const shardId of shardsToRebalance) {
|
164
253
|
// Find the runner with the fewest assigned shards
|
165
254
|
let candidate;
|
166
255
|
let candidateShards;
|
167
256
|
for (const [address, shards] of shardsPerRunner) {
|
168
257
|
// Keep only runners with the maximum version
|
169
|
-
const maybeRunnerMeta = MutableHashMap.get(
|
258
|
+
const maybeRunnerMeta = MutableHashMap.get(runnerGroup, address);
|
170
259
|
if (Option.isNone(maybeRunnerMeta)) continue;
|
171
260
|
const runnerMeta = maybeRunnerMeta.value;
|
172
261
|
if (runnerMeta.runner.version !== maxVersion) continue;
|
@@ -176,7 +265,7 @@ function pickNewRunners(shardsToRebalance, state, immediate, rate, shardsPerRunn
|
|
176
265
|
// occur immediately
|
177
266
|
if (!immediate) {
|
178
267
|
const assignmentCount = Option.getOrUndefined(MutableHashMap.get(addressAssignments, address))?.size ?? 0;
|
179
|
-
if (assignmentCount >=
|
268
|
+
if (assignmentCount >= shardsGroup.size * rate) continue;
|
180
269
|
}
|
181
270
|
if (candidate === undefined || shards.size < candidateShards.size) {
|
182
271
|
candidate = address;
|
@@ -185,7 +274,7 @@ function pickNewRunners(shardsToRebalance, state, immediate, rate, shardsPerRunn
|
|
185
274
|
}
|
186
275
|
if (!candidate || !candidateShards) break;
|
187
276
|
// If the old runner is the same as the new runner, do nothing
|
188
|
-
const oldRunner = Option.getOrUndefined(
|
277
|
+
const oldRunner = Option.getOrUndefined(shardsGroup.get(shardId) ?? Option.none());
|
189
278
|
if (oldRunner && oldRunner.toString() === candidate.toString()) {
|
190
279
|
continue;
|
191
280
|
}
|
@@ -237,4 +326,15 @@ function swap(array, i, j) {
|
|
237
326
|
array[j] = tmp;
|
238
327
|
return array;
|
239
328
|
}
|
329
|
+
/** @internal */
|
330
|
+
export const addAllNested = (self, key, values) => {
|
331
|
+
const oset = MutableHashMap.get(self, key);
|
332
|
+
if (Option.isSome(oset)) {
|
333
|
+
for (const value of values) {
|
334
|
+
MutableHashSet.add(oset.value, value);
|
335
|
+
}
|
336
|
+
} else {
|
337
|
+
MutableHashMap.set(self, key, MutableHashSet.fromIterable(values));
|
338
|
+
}
|
339
|
+
};
|
240
340
|
//# sourceMappingURL=shardManager.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"shardManager.js","names":["Arr","Clock","Effect","constFalse","MutableHashMap","MutableHashSet","Option","Order","RunnerHealth","ShardId","ShardStorage","State","runners","shards","fromStorage","fnUntraced","numberOfShards","storage","runnerHealth","storedRunners","getRunners","storedAssignments","getAssignments","deadRunners","empty","aliveRunners","forEach","address","runner","map","isAlive","set","push","concurrency","discard","length","logWarning","assignedShards","Map","invalidAssignments","shard","isSome","has","value","now","currentTimeMillis","runnerState","RunnerWithMetadata","registeredAt","shardState","n","shardId","make","fromNullable","get","constructor","maxVersion","size","none","version","undefined","meta","some","allRunnersHaveVersion","pipe","max","every","runnerVersions","getOrElse","shardsPerRunner","isEmpty","_","Set","isNone","shardIds","getOrUndefined","add","averageShardsPerRunner","runnerCount","unassignedShards","decideAssignmentsForUnassignedShards","state","pickNewRunners","allocationOrder","combine","mapInput","number","decideAssignmentsForUnbalancedShards","rate","extraShardsToAllocate","extraShards","Math","takeRandom","maybeAddress","Number","MIN_SAFE_INTEGER","match","onNone","onSome","sortedShardsToRebalance","sort","shardsToRebalance","immediate","maybeMaxVersion","addressAssignments","unassignments","changes","candidate","candidateShards","maybeRunnerMeta","runnerMeta","assignmentCount","oldRunner","toString","oldShards","modifyAt","delete","self","array","Array","from","currentIndex","randomIndex","floor","random","swap","slice","i","j","tmp"],"sources":["../../../src/internal/shardManager.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"file":"shardManager.js","names":["Arr","Clock","Effect","constFalse","MutableHashMap","MutableHashSet","Option","Order","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","addGroup","shardMap","none","addAssignments","addRunner","removeRunner","remove","values","maxVersion","size","version","undefined","meta","some","allRunnersHaveVersion","pipe","max","every","runnerVersions","getOrElse","shardsPerRunner","groupRunners","isEmpty","_","Set","isNone","shardIds","getOrUndefined","add","averageShardsPerRunner","runnerCount","shardGroup","allUnassignedShards","unassigned","unassignedShards","decideAssignmentsForUnassignedShards","state","pickNewRunners","allocationOrder","combine","mapInput","number","decideAssignmentsForUnbalancedShards","rate","extraShardsToAllocate","runnerGroup","shardsGroup","extraShards","Math","takeRandom","maybeAddress","Number","MIN_SAFE_INTEGER","match","onNone","onSome","sortedShardsToRebalance","sort","shardsToRebalance","immediate","maybeMaxVersion","addressAssignments","unassignments","changes","candidate","candidateShards","maybeRunnerMeta","runnerMeta","assignmentCount","oldRunner","toString","oldShards","modifyAt","delete","self","array","Array","from","currentIndex","randomIndex","floor","random","swap","slice","i","j","tmp","addAllNested","key","oset","fromIterable"],"sources":["../../../src/internal/shardManager.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@effect/cluster",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.38.0",
|
4
4
|
"description": "Unified interfaces for common cluster-specific services",
|
5
5
|
"license": "MIT",
|
6
6
|
"repository": {
|
@@ -11,10 +11,10 @@
|
|
11
11
|
"sideEffects": [],
|
12
12
|
"homepage": "https://effect.website",
|
13
13
|
"peerDependencies": {
|
14
|
-
"@effect/platform": "^0.84.
|
15
|
-
"@effect/rpc": "^0.61.
|
16
|
-
"@effect/sql": "^0.37.
|
17
|
-
"@effect/workflow": "^0.1.
|
14
|
+
"@effect/platform": "^0.84.5",
|
15
|
+
"@effect/rpc": "^0.61.5",
|
16
|
+
"@effect/sql": "^0.37.5",
|
17
|
+
"@effect/workflow": "^0.1.2",
|
18
18
|
"effect": "^3.16.3"
|
19
19
|
},
|
20
20
|
"publishConfig": {
|
@@ -30,6 +30,11 @@
|
|
30
30
|
"import": "./dist/esm/index.js",
|
31
31
|
"default": "./dist/cjs/index.js"
|
32
32
|
},
|
33
|
+
"./ClusterCron": {
|
34
|
+
"types": "./dist/dts/ClusterCron.d.ts",
|
35
|
+
"import": "./dist/esm/ClusterCron.js",
|
36
|
+
"default": "./dist/cjs/ClusterCron.js"
|
37
|
+
},
|
33
38
|
"./ClusterError": {
|
34
39
|
"types": "./dist/dts/ClusterError.d.ts",
|
35
40
|
"import": "./dist/esm/ClusterError.js",
|
@@ -218,6 +223,9 @@
|
|
218
223
|
},
|
219
224
|
"typesVersions": {
|
220
225
|
"*": {
|
226
|
+
"ClusterCron": [
|
227
|
+
"./dist/dts/ClusterCron.d.ts"
|
228
|
+
],
|
221
229
|
"ClusterError": [
|
222
230
|
"./dist/dts/ClusterError.d.ts"
|
223
231
|
],
|
@@ -0,0 +1,129 @@
|
|
1
|
+
/**
|
2
|
+
* @since 1.0.0
|
3
|
+
*/
|
4
|
+
import * as Rpc from "@effect/rpc/Rpc"
|
5
|
+
import * as Cron from "effect/Cron"
|
6
|
+
import * as DateTime from "effect/DateTime"
|
7
|
+
import * as Duration from "effect/Duration"
|
8
|
+
import * as Effect from "effect/Effect"
|
9
|
+
import * as Layer from "effect/Layer"
|
10
|
+
import * as Option from "effect/Option"
|
11
|
+
import * as PrimaryKey from "effect/PrimaryKey"
|
12
|
+
import * as Schedule from "effect/Schedule"
|
13
|
+
import * as Schema from "effect/Schema"
|
14
|
+
import type { Scope } from "effect/Scope"
|
15
|
+
import * as ClusterSchema from "./ClusterSchema.js"
|
16
|
+
import { Persisted, Uninterruptible } from "./ClusterSchema.js"
|
17
|
+
import * as DeliverAt from "./DeliverAt.js"
|
18
|
+
import * as Entity from "./Entity.js"
|
19
|
+
import type { Sharding } from "./Sharding.js"
|
20
|
+
import * as Singleton from "./Singleton.js"
|
21
|
+
|
22
|
+
/**
|
23
|
+
* @since 1.0.0
|
24
|
+
* @category Constructors
|
25
|
+
*/
|
26
|
+
export const make = <E, R>(options: {
|
27
|
+
readonly name: string
|
28
|
+
readonly cron: Cron.Cron
|
29
|
+
readonly execute: Effect.Effect<void, E, R>
|
30
|
+
|
31
|
+
/**
|
32
|
+
* Choose a shard group to run this cron job on.
|
33
|
+
*/
|
34
|
+
readonly shardGroup?: string | undefined
|
35
|
+
|
36
|
+
/**
|
37
|
+
* Whether to run the next cron job based from the time of the previous run.
|
38
|
+
*
|
39
|
+
* Defaults to `false`, meaning the next run will be calculated from the
|
40
|
+
* current time.
|
41
|
+
*/
|
42
|
+
readonly calculateNextRunFromPrevious?: boolean | undefined
|
43
|
+
|
44
|
+
/**
|
45
|
+
* If set, the cron job will skip execution if the scheduled time is older
|
46
|
+
* than this duration.
|
47
|
+
*
|
48
|
+
* This is useful to prevent running jobs that were scheduled too far in the
|
49
|
+
* past.
|
50
|
+
*
|
51
|
+
* Defaults to "1 day".
|
52
|
+
*/
|
53
|
+
readonly skipIfOlderThan?: Duration.DurationInput | undefined
|
54
|
+
}): Layer.Layer<never, never, Sharding | Exclude<R, Scope>> => {
|
55
|
+
const CronEntity = Entity.make(`ClusterCron/${options.name}`, [
|
56
|
+
Rpc.make("run", {
|
57
|
+
payload: CronPayload
|
58
|
+
})
|
59
|
+
.annotate(Persisted, true)
|
60
|
+
.annotate(Uninterruptible, true)
|
61
|
+
]).annotate(ClusterSchema.ShardGroup, () => options.shardGroup ?? "default")
|
62
|
+
|
63
|
+
const InitialRun = Singleton.make(
|
64
|
+
`ClusterCron/${options.name}`,
|
65
|
+
Effect.gen(function*() {
|
66
|
+
const client = (yield* CronEntity.client)("initial")
|
67
|
+
const now = yield* DateTime.now
|
68
|
+
const next = Cron.next(options.cron, now)
|
69
|
+
yield* client.run({
|
70
|
+
dateTime: DateTime.unsafeFromDate(next)
|
71
|
+
}, { discard: true })
|
72
|
+
}),
|
73
|
+
{ shardGroup: options.shardGroup }
|
74
|
+
)
|
75
|
+
|
76
|
+
const skipIfOlderThan = Option.fromNullable(options.skipIfOlderThan).pipe(
|
77
|
+
Option.map(Duration.decode),
|
78
|
+
Option.getOrElse(() => Duration.days(1))
|
79
|
+
)
|
80
|
+
|
81
|
+
const effect = Effect.fnUntraced(function*(dateTime: DateTime.Utc) {
|
82
|
+
const now = yield* DateTime.now
|
83
|
+
if (DateTime.lessThan(dateTime, DateTime.subtractDuration(now, skipIfOlderThan))) {
|
84
|
+
return
|
85
|
+
}
|
86
|
+
return yield* options.execute
|
87
|
+
}, Effect.orDie)
|
88
|
+
|
89
|
+
const EntityLayer = CronEntity.toLayer(Effect.gen(function*() {
|
90
|
+
const makeClient = yield* CronEntity.client
|
91
|
+
return {
|
92
|
+
run(request) {
|
93
|
+
return Effect.ensuring(
|
94
|
+
effect(request.payload.dateTime),
|
95
|
+
Effect.gen(function*() {
|
96
|
+
const now = yield* DateTime.now
|
97
|
+
const next = DateTime.unsafeFromDate(Cron.next(
|
98
|
+
options.cron,
|
99
|
+
options.calculateNextRunFromPrevious ? request.payload.dateTime : now
|
100
|
+
))
|
101
|
+
const client = makeClient(DateTime.formatIso(next))
|
102
|
+
return yield* client.run({ dateTime: next }, { discard: true })
|
103
|
+
}).pipe(
|
104
|
+
Effect.sandbox,
|
105
|
+
Effect.retry(retryPolicy),
|
106
|
+
Effect.orDie
|
107
|
+
)
|
108
|
+
)
|
109
|
+
}
|
110
|
+
}
|
111
|
+
}))
|
112
|
+
|
113
|
+
return Layer.merge(InitialRun, EntityLayer)
|
114
|
+
}
|
115
|
+
|
116
|
+
const retryPolicy = Schedule.exponential(200, 1.5).pipe(
|
117
|
+
Schedule.union(Schedule.spaced("1 minute"))
|
118
|
+
)
|
119
|
+
|
120
|
+
class CronPayload extends Schema.Class<CronPayload>("@effect/cluster/ClusterCron/CronPayload")({
|
121
|
+
dateTime: Schema.DateTimeUtc
|
122
|
+
}) {
|
123
|
+
[PrimaryKey.symbol]() {
|
124
|
+
return ""
|
125
|
+
}
|
126
|
+
[DeliverAt.symbol]() {
|
127
|
+
return this.dateTime
|
128
|
+
}
|
129
|
+
}
|
package/src/ClusterSchema.ts
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
*/
|
4
4
|
import * as Context from "effect/Context"
|
5
5
|
import { constFalse } from "effect/Function"
|
6
|
+
import type { EntityId } from "./EntityId.js"
|
6
7
|
|
7
8
|
/**
|
8
9
|
* @since 1.0.0
|
@@ -21,3 +22,11 @@ export class Uninterruptible
|
|
21
22
|
defaultValue: constFalse
|
22
23
|
})
|
23
24
|
{}
|
25
|
+
|
26
|
+
/**
|
27
|
+
* @since 1.0.0
|
28
|
+
* @category Annotations
|
29
|
+
*/
|
30
|
+
export class ShardGroup extends Context.Reference<ShardGroup>()("@effect/cluster/ClusterSchema/ShardGroup", {
|
31
|
+
defaultValue: (): (entityId: EntityId) => string => (_) => "default"
|
32
|
+
}) {}
|