@effect/cluster 0.33.2 → 0.34.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/dist/cjs/ClusterError.js +24 -3
- package/dist/cjs/ClusterError.js.map +1 -1
- package/dist/cjs/ClusterMetrics.js +1 -2
- package/dist/cjs/ClusterMetrics.js.map +1 -1
- package/dist/cjs/ClusterSchema.js +1 -2
- package/dist/cjs/ClusterSchema.js.map +1 -1
- package/dist/cjs/Entity.js +1 -2
- package/dist/cjs/Entity.js.map +1 -1
- package/dist/cjs/EntityAddress.js +1 -2
- package/dist/cjs/EntityAddress.js.map +1 -1
- package/dist/cjs/EntityId.js +2 -3
- package/dist/cjs/EntityId.js.map +1 -1
- package/dist/cjs/EntityType.js +2 -3
- package/dist/cjs/EntityType.js.map +1 -1
- package/dist/cjs/Envelope.js +2 -3
- package/dist/cjs/Envelope.js.map +1 -1
- package/dist/cjs/HttpCommon.js +1 -2
- package/dist/cjs/HttpCommon.js.map +1 -1
- package/dist/cjs/HttpRunner.js +8 -9
- package/dist/cjs/HttpRunner.js.map +1 -1
- package/dist/cjs/HttpShardManager.js +1 -2
- package/dist/cjs/HttpShardManager.js.map +1 -1
- package/dist/cjs/MachineId.js +2 -3
- package/dist/cjs/MachineId.js.map +1 -1
- package/dist/cjs/Message.js +1 -2
- package/dist/cjs/Message.js.map +1 -1
- package/dist/cjs/MessageStorage.js +2 -3
- package/dist/cjs/MessageStorage.js.map +1 -1
- package/dist/cjs/Reply.js +2 -3
- package/dist/cjs/Reply.js.map +1 -1
- package/dist/cjs/Runner.js +3 -4
- package/dist/cjs/Runner.js.map +1 -1
- package/dist/cjs/RunnerAddress.js +1 -2
- package/dist/cjs/RunnerAddress.js.map +1 -1
- package/dist/cjs/RunnerHealth.js +2 -3
- package/dist/cjs/RunnerHealth.js.map +1 -1
- package/dist/cjs/RunnerServer.js +5 -6
- package/dist/cjs/RunnerServer.js.map +1 -1
- package/dist/cjs/Runners.js +27 -18
- package/dist/cjs/Runners.js.map +1 -1
- package/dist/cjs/ShardId.js +2 -3
- package/dist/cjs/ShardId.js.map +1 -1
- package/dist/cjs/ShardManager.js +15 -16
- package/dist/cjs/ShardManager.js.map +1 -1
- package/dist/cjs/ShardStorage.js +1 -2
- package/dist/cjs/ShardStorage.js.map +1 -1
- package/dist/cjs/Sharding.js +23 -8
- package/dist/cjs/Sharding.js.map +1 -1
- package/dist/cjs/ShardingConfig.js +15 -16
- package/dist/cjs/ShardingConfig.js.map +1 -1
- package/dist/cjs/ShardingRegistrationEvent.js +1 -2
- package/dist/cjs/ShardingRegistrationEvent.js.map +1 -1
- package/dist/cjs/Singleton.js +1 -2
- package/dist/cjs/Singleton.js.map +1 -1
- package/dist/cjs/SingletonAddress.js +1 -2
- package/dist/cjs/SingletonAddress.js.map +1 -1
- package/dist/cjs/Snowflake.js +3 -4
- package/dist/cjs/Snowflake.js.map +1 -1
- package/dist/cjs/SocketRunner.js +1 -2
- package/dist/cjs/SocketRunner.js.map +1 -1
- package/dist/cjs/SocketShardManager.js +1 -2
- package/dist/cjs/SocketShardManager.js.map +1 -1
- package/dist/cjs/SqlMessageStorage.js +2 -3
- package/dist/cjs/SqlMessageStorage.js.map +1 -1
- package/dist/cjs/SqlShardStorage.js +1 -2
- package/dist/cjs/SqlShardStorage.js.map +1 -1
- package/dist/cjs/SynchronizedClock.js +2 -3
- package/dist/cjs/SynchronizedClock.js.map +1 -1
- package/dist/cjs/index.js +1 -2
- package/dist/cjs/internal/entityManager.js +3 -4
- package/dist/cjs/internal/entityManager.js.map +1 -1
- package/dist/cjs/internal/entityReaper.js +1 -2
- package/dist/cjs/internal/entityReaper.js.map +1 -1
- package/dist/cjs/internal/resourceMap.js +1 -2
- package/dist/cjs/internal/resourceMap.js.map +1 -1
- package/dist/cjs/internal/resourceRef.js +1 -2
- package/dist/cjs/internal/resourceRef.js.map +1 -1
- package/dist/cjs/internal/shardManager.js +2 -3
- package/dist/cjs/internal/shardManager.js.map +1 -1
- package/dist/dts/ClusterError.d.ts +22 -0
- package/dist/dts/ClusterError.d.ts.map +1 -1
- package/dist/dts/DeliverAt.d.ts.map +1 -1
- package/dist/dts/Entity.d.ts +22 -4
- package/dist/dts/Entity.d.ts.map +1 -1
- package/dist/dts/Envelope.d.ts.map +1 -1
- package/dist/dts/HttpCommon.d.ts.map +1 -1
- package/dist/dts/HttpRunner.d.ts.map +1 -1
- package/dist/dts/HttpShardManager.d.ts.map +1 -1
- package/dist/dts/MachineId.d.ts.map +1 -1
- package/dist/dts/Message.d.ts +1 -1
- package/dist/dts/Message.d.ts.map +1 -1
- package/dist/dts/MessageStorage.d.ts.map +1 -1
- package/dist/dts/Reply.d.ts.map +1 -1
- package/dist/dts/Runner.d.ts.map +1 -1
- package/dist/dts/RunnerAddress.d.ts.map +1 -1
- package/dist/dts/Runners.d.ts +12 -11
- package/dist/dts/Runners.d.ts.map +1 -1
- package/dist/dts/ShardId.d.ts.map +1 -1
- package/dist/dts/ShardManager.d.ts.map +1 -1
- package/dist/dts/Sharding.d.ts +4 -4
- package/dist/dts/Sharding.d.ts.map +1 -1
- package/dist/dts/ShardingConfig.d.ts +2 -2
- package/dist/dts/ShardingConfig.d.ts.map +1 -1
- package/dist/dts/Singleton.d.ts.map +1 -1
- package/dist/dts/Snowflake.d.ts.map +1 -1
- package/dist/dts/SqlMessageStorage.d.ts.map +1 -1
- package/dist/dts/SqlShardStorage.d.ts.map +1 -1
- package/dist/esm/ClusterError.js +21 -0
- package/dist/esm/ClusterError.js.map +1 -1
- package/dist/esm/Entity.js.map +1 -1
- package/dist/esm/EntityId.js +1 -1
- package/dist/esm/EntityId.js.map +1 -1
- package/dist/esm/EntityType.js +1 -1
- package/dist/esm/EntityType.js.map +1 -1
- package/dist/esm/Envelope.js +1 -1
- package/dist/esm/Envelope.js.map +1 -1
- package/dist/esm/HttpRunner.js +7 -7
- package/dist/esm/HttpRunner.js.map +1 -1
- package/dist/esm/MachineId.js +1 -1
- package/dist/esm/MachineId.js.map +1 -1
- package/dist/esm/MessageStorage.js +1 -1
- package/dist/esm/MessageStorage.js.map +1 -1
- package/dist/esm/Reply.js +1 -1
- package/dist/esm/Reply.js.map +1 -1
- package/dist/esm/Runner.js +2 -2
- package/dist/esm/Runner.js.map +1 -1
- package/dist/esm/RunnerHealth.js +1 -1
- package/dist/esm/RunnerHealth.js.map +1 -1
- package/dist/esm/RunnerServer.js +4 -4
- package/dist/esm/RunnerServer.js.map +1 -1
- package/dist/esm/Runners.js +27 -17
- package/dist/esm/Runners.js.map +1 -1
- package/dist/esm/ShardId.js +1 -1
- package/dist/esm/ShardId.js.map +1 -1
- package/dist/esm/ShardManager.js +14 -14
- package/dist/esm/ShardManager.js.map +1 -1
- package/dist/esm/Sharding.js +23 -7
- package/dist/esm/Sharding.js.map +1 -1
- package/dist/esm/ShardingConfig.js +14 -14
- package/dist/esm/ShardingConfig.js.map +1 -1
- package/dist/esm/Snowflake.js +2 -2
- package/dist/esm/Snowflake.js.map +1 -1
- package/dist/esm/SqlMessageStorage.js +1 -1
- package/dist/esm/SqlMessageStorage.js.map +1 -1
- package/dist/esm/SynchronizedClock.js +1 -1
- package/dist/esm/SynchronizedClock.js.map +1 -1
- package/dist/esm/internal/entityManager.js +3 -3
- package/dist/esm/internal/entityManager.js.map +1 -1
- package/dist/esm/internal/shardManager.js +1 -1
- package/dist/esm/internal/shardManager.js.map +1 -1
- package/package.json +5 -5
- package/src/ClusterError.ts +24 -0
- package/src/Entity.ts +12 -2
- package/src/Message.ts +1 -1
- package/src/Runners.ts +59 -26
- package/src/Sharding.ts +75 -35
- package/src/ShardingConfig.ts +1 -1
- package/src/internal/entityManager.ts +8 -8
- package/src/internal/entityReaper.ts +3 -3
@@ -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","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":[]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@effect/cluster",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.34.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.82.
|
15
|
-
"@effect/rpc": "^0.59.
|
16
|
-
"@effect/sql": "^0.35.
|
17
|
-
"effect": "^3.15.
|
14
|
+
"@effect/platform": "^0.82.3",
|
15
|
+
"@effect/rpc": "^0.59.4",
|
16
|
+
"@effect/sql": "^0.35.3",
|
17
|
+
"effect": "^3.15.2"
|
18
18
|
},
|
19
19
|
"publishConfig": {
|
20
20
|
"provenance": true
|
package/src/ClusterError.ts
CHANGED
@@ -21,6 +21,30 @@ export const TypeId: unique symbol = Symbol.for("@effect/cluster/ClusterError")
|
|
21
21
|
*/
|
22
22
|
export type TypeId = typeof TypeId
|
23
23
|
|
24
|
+
/**
|
25
|
+
* Represents an error that occurs when a Runner receives a message for an entity
|
26
|
+
* that it is not assigned to it.
|
27
|
+
*
|
28
|
+
* @since 1.0.0
|
29
|
+
* @category errors
|
30
|
+
*/
|
31
|
+
export class EntityNotAssignedToRunner extends Schema.TaggedError<EntityNotAssignedToRunner>()(
|
32
|
+
"EntityNotAssignedToRunner",
|
33
|
+
{ address: EntityAddress }
|
34
|
+
) {
|
35
|
+
/**
|
36
|
+
* @since 1.0.0
|
37
|
+
*/
|
38
|
+
readonly [TypeId] = TypeId
|
39
|
+
|
40
|
+
/**
|
41
|
+
* @since 1.0.0
|
42
|
+
*/
|
43
|
+
static is(u: unknown): u is EntityNotAssignedToRunner {
|
44
|
+
return hasProperty(u, TypeId) && isTagged(u, "EntityNotAssignedToRunner")
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
24
48
|
/**
|
25
49
|
* Represents an error that occurs when a Runner receives a message for an entity
|
26
50
|
* that it is not responsible for managing.
|
package/src/Entity.ts
CHANGED
@@ -19,7 +19,12 @@ import * as Option from "effect/Option"
|
|
19
19
|
import * as Predicate from "effect/Predicate"
|
20
20
|
import type { Scope } from "effect/Scope"
|
21
21
|
import type * as Stream from "effect/Stream"
|
22
|
-
import type {
|
22
|
+
import type {
|
23
|
+
AlreadyProcessingMessage,
|
24
|
+
EntityNotManagedByRunner,
|
25
|
+
MailboxFull,
|
26
|
+
PersistenceError
|
27
|
+
} from "./ClusterError.js"
|
23
28
|
import type { EntityAddress } from "./EntityAddress.js"
|
24
29
|
import { EntityType } from "./EntityType.js"
|
25
30
|
import type * as Envelope from "./Envelope.js"
|
@@ -80,7 +85,12 @@ export interface Entity<in out Rpcs extends Rpc.Any> extends Equal.Equal {
|
|
80
85
|
* Create a client for this entity.
|
81
86
|
*/
|
82
87
|
readonly client: Effect.Effect<
|
83
|
-
(
|
88
|
+
(
|
89
|
+
entityId: string
|
90
|
+
) => RpcClient.RpcClient<
|
91
|
+
Rpcs,
|
92
|
+
MailboxFull | AlreadyProcessingMessage | PersistenceError | EntityNotManagedByRunner
|
93
|
+
>,
|
84
94
|
never,
|
85
95
|
Sharding
|
86
96
|
>
|
package/src/Message.ts
CHANGED
@@ -84,7 +84,7 @@ export class OutgoingRequest<R extends Rpc.Any> extends Data.TaggedClass("Outgoi
|
|
84
84
|
readonly context: Context<Rpc.Context<R>>
|
85
85
|
readonly lastReceivedReply: Option.Option<Reply.Reply<R>>
|
86
86
|
readonly rpc: R
|
87
|
-
readonly respond: (reply: Reply.Reply<R>) => Effect.Effect<void
|
87
|
+
readonly respond: (reply: Reply.Reply<R>) => Effect.Effect<void>
|
88
88
|
}> {
|
89
89
|
/**
|
90
90
|
* @since 1.0.0
|
package/src/Runners.ts
CHANGED
@@ -15,11 +15,12 @@ import * as Option from "effect/Option"
|
|
15
15
|
import * as RcMap from "effect/RcMap"
|
16
16
|
import * as Schema from "effect/Schema"
|
17
17
|
import type { Scope } from "effect/Scope"
|
18
|
+
import type { PersistenceError } from "./ClusterError.js"
|
18
19
|
import {
|
19
20
|
AlreadyProcessingMessage,
|
21
|
+
EntityNotAssignedToRunner,
|
20
22
|
EntityNotManagedByRunner,
|
21
23
|
MailboxFull,
|
22
|
-
PersistenceError,
|
23
24
|
RunnerUnavailable
|
24
25
|
} from "./ClusterError.js"
|
25
26
|
import { Persisted } from "./ClusterSchema.js"
|
@@ -52,10 +53,16 @@ export class Runners extends Context.Tag("@effect/cluster/Runners")<Runners, {
|
|
52
53
|
readonly message: Message.Outgoing<R>
|
53
54
|
readonly send: <Rpc extends Rpc.Any>(
|
54
55
|
message: Message.IncomingLocal<Rpc>
|
55
|
-
) => Effect.Effect<
|
56
|
+
) => Effect.Effect<
|
57
|
+
void,
|
58
|
+
EntityNotManagedByRunner | EntityNotAssignedToRunner | MailboxFull | AlreadyProcessingMessage
|
59
|
+
>
|
56
60
|
readonly simulateRemoteSerialization: boolean
|
57
61
|
}
|
58
|
-
) => Effect.Effect<
|
62
|
+
) => Effect.Effect<
|
63
|
+
void,
|
64
|
+
EntityNotManagedByRunner | EntityNotAssignedToRunner | MailboxFull | AlreadyProcessingMessage | PersistenceError
|
65
|
+
>
|
59
66
|
|
60
67
|
/**
|
61
68
|
* Send a message to a Runner.
|
@@ -67,7 +74,12 @@ export class Runners extends Context.Tag("@effect/cluster/Runners")<Runners, {
|
|
67
74
|
}
|
68
75
|
) => Effect.Effect<
|
69
76
|
void,
|
70
|
-
|
77
|
+
| EntityNotManagedByRunner
|
78
|
+
| EntityNotAssignedToRunner
|
79
|
+
| RunnerUnavailable
|
80
|
+
| MailboxFull
|
81
|
+
| AlreadyProcessingMessage
|
82
|
+
| PersistenceError
|
71
83
|
>
|
72
84
|
|
73
85
|
/**
|
@@ -79,7 +91,7 @@ export class Runners extends Context.Tag("@effect/cluster/Runners")<Runners, {
|
|
79
91
|
readonly message: Message.Outgoing<R>
|
80
92
|
readonly discard: boolean
|
81
93
|
}
|
82
|
-
) => Effect.Effect<void>
|
94
|
+
) => Effect.Effect<void, EntityNotManagedByRunner | PersistenceError>
|
83
95
|
|
84
96
|
/**
|
85
97
|
* Notify the current Runner that a message is available, then read replies from
|
@@ -91,10 +103,12 @@ export class Runners extends Context.Tag("@effect/cluster/Runners")<Runners, {
|
|
91
103
|
readonly notifyLocal: <R extends Rpc.Any>(
|
92
104
|
options: {
|
93
105
|
readonly message: Message.Outgoing<R>
|
94
|
-
readonly notify: (
|
106
|
+
readonly notify: (
|
107
|
+
options: Message.IncomingLocal<any>
|
108
|
+
) => Effect.Effect<void, EntityNotManagedByRunner | EntityNotAssignedToRunner>
|
95
109
|
readonly discard: boolean
|
96
110
|
}
|
97
|
-
) => Effect.Effect<void>
|
111
|
+
) => Effect.Effect<void, EntityNotManagedByRunner | PersistenceError>
|
98
112
|
}>() {}
|
99
113
|
|
100
114
|
/**
|
@@ -115,7 +129,7 @@ export const make: (options: Omit<Runners["Type"], "sendLocal" | "notifyLocal">)
|
|
115
129
|
function notifyWith<E>(
|
116
130
|
message: Message.Outgoing<any>,
|
117
131
|
afterPersist: (message: Message.Outgoing<any>, isDuplicate: boolean) => Effect.Effect<void, E>
|
118
|
-
): Effect.Effect<void, E> {
|
132
|
+
): Effect.Effect<void, E | PersistenceError> {
|
119
133
|
const rpc = message.rpc as any as Rpc.AnyWithProps
|
120
134
|
const persisted = Context.get(rpc.annotations, Persisted)
|
121
135
|
if (!persisted) {
|
@@ -133,7 +147,7 @@ export const make: (options: Omit<Runners["Type"], "sendLocal" | "notifyLocal">)
|
|
133
147
|
})
|
134
148
|
}
|
135
149
|
return storage.saveEnvelope(message).pipe(
|
136
|
-
Effect.
|
150
|
+
Effect.catchTag("MalformedMessage", Effect.die),
|
137
151
|
Effect.zipRight(
|
138
152
|
entry ? Effect.zipRight(entry.latch.open, afterPersist(message, false)) : afterPersist(message, false)
|
139
153
|
)
|
@@ -146,7 +160,7 @@ export const make: (options: Omit<Runners["Type"], "sendLocal" | "notifyLocal">)
|
|
146
160
|
//
|
147
161
|
// Otherwise, we notify the remote entity and then reply from storage.
|
148
162
|
return Effect.flatMap(
|
149
|
-
Effect.
|
163
|
+
Effect.catchTag(storage.saveRequest(message), "MalformedMessage", Effect.die),
|
150
164
|
MessageStorage.SaveResult.$match({
|
151
165
|
Success: () => afterPersist(message, false),
|
152
166
|
Duplicate: ({ lastReceivedReply, originalId }) => {
|
@@ -285,13 +299,13 @@ export const make: (options: Omit<Runners["Type"], "sendLocal" | "notifyLocal">)
|
|
285
299
|
if (message._tag === "OutgoingEnvelope") {
|
286
300
|
return Effect.die(error)
|
287
301
|
}
|
288
|
-
return
|
302
|
+
return message.respond(
|
289
303
|
new Reply.WithExit({
|
290
304
|
id: snowflakeGen.unsafeNext(),
|
291
305
|
requestId: message.envelope.requestId,
|
292
306
|
exit: Exit.die(error)
|
293
307
|
})
|
294
|
-
)
|
308
|
+
)
|
295
309
|
})
|
296
310
|
)
|
297
311
|
},
|
@@ -301,32 +315,41 @@ export const make: (options: Omit<Runners["Type"], "sendLocal" | "notifyLocal">)
|
|
301
315
|
if (message._tag === "OutgoingEnvelope") {
|
302
316
|
return options.notify(options_)
|
303
317
|
} else if (!duplicate && options_.address._tag === "Some") {
|
304
|
-
return Effect.
|
318
|
+
return Effect.catchAll(
|
305
319
|
options.send({
|
306
320
|
address: options_.address.value,
|
307
321
|
message
|
308
322
|
}),
|
309
|
-
() =>
|
323
|
+
(error) => {
|
324
|
+
if (error._tag === "EntityNotManagedByRunner") {
|
325
|
+
return Effect.fail(error)
|
326
|
+
}
|
327
|
+
return replyFromStorage(message)
|
328
|
+
}
|
310
329
|
)
|
311
330
|
}
|
312
331
|
return discard ? options.notify(options_) : options.notify(options_).pipe(
|
313
|
-
Effect.
|
314
|
-
Effect.andThen(Effect.orDie(replyFromStorage(message)))
|
332
|
+
Effect.andThen(replyFromStorage(message))
|
315
333
|
)
|
316
334
|
})
|
317
335
|
},
|
318
336
|
notifyLocal(options) {
|
319
337
|
return notifyWith(options.message, (message, duplicate) => {
|
320
338
|
if (options.discard || message._tag === "OutgoingEnvelope") {
|
321
|
-
return Effect.
|
339
|
+
return Effect.catchTag(
|
340
|
+
options.notify(Message.incomingLocalFromOutgoing(message)),
|
341
|
+
"EntityNotAssignedToRunner",
|
342
|
+
() => Effect.void
|
343
|
+
)
|
322
344
|
} else if (!duplicate) {
|
323
345
|
return storage.registerReplyHandler(message).pipe(
|
324
|
-
Effect.andThen(
|
346
|
+
Effect.andThen(options.notify(Message.incomingLocalFromOutgoing(message))),
|
347
|
+
Effect.catchTag("EntityNotAssignedToRunner", () => Effect.void)
|
325
348
|
)
|
326
349
|
}
|
327
|
-
return
|
328
|
-
Effect.
|
329
|
-
Effect.andThen(
|
350
|
+
return options.notify(Message.incomingLocalFromOutgoing(message)).pipe(
|
351
|
+
Effect.catchTag("EntityNotAssignedToRunner", () => Effect.void),
|
352
|
+
Effect.andThen(replyFromStorage(message))
|
330
353
|
)
|
331
354
|
})
|
332
355
|
}
|
@@ -359,10 +382,15 @@ export const layerNoop: Layer.Layer<
|
|
359
382
|
|
360
383
|
const rpcErrors: Schema.Union<[
|
361
384
|
typeof EntityNotManagedByRunner,
|
385
|
+
typeof EntityNotAssignedToRunner,
|
362
386
|
typeof MailboxFull,
|
363
|
-
typeof AlreadyProcessingMessage
|
364
|
-
|
365
|
-
|
387
|
+
typeof AlreadyProcessingMessage
|
388
|
+
]> = Schema.Union(
|
389
|
+
EntityNotManagedByRunner,
|
390
|
+
EntityNotAssignedToRunner,
|
391
|
+
MailboxFull,
|
392
|
+
AlreadyProcessingMessage
|
393
|
+
)
|
366
394
|
|
367
395
|
/**
|
368
396
|
* @since 1.0.0
|
@@ -375,7 +403,7 @@ export class Rpcs extends RpcGroup.make(
|
|
375
403
|
envelope: Envelope.PartialEncoded
|
376
404
|
},
|
377
405
|
success: Schema.Void,
|
378
|
-
error: Schema.Union(EntityNotManagedByRunner, AlreadyProcessingMessage)
|
406
|
+
error: Schema.Union(EntityNotManagedByRunner, EntityNotAssignedToRunner, AlreadyProcessingMessage)
|
379
407
|
}),
|
380
408
|
Rpc.make("Effect", {
|
381
409
|
payload: {
|
@@ -534,7 +562,12 @@ export const makeRpc: Effect.Effect<
|
|
534
562
|
return RcMap.get(clients, address.value).pipe(
|
535
563
|
Effect.flatMap((client) => client.Notify({ envelope })),
|
536
564
|
Effect.scoped,
|
537
|
-
Effect.
|
565
|
+
Effect.catchAll((error) => {
|
566
|
+
if (error._tag === "EntityNotManagedByRunner") {
|
567
|
+
return Effect.fail(error)
|
568
|
+
}
|
569
|
+
return Effect.void
|
570
|
+
})
|
538
571
|
)
|
539
572
|
}
|
540
573
|
})
|
package/src/Sharding.ts
CHANGED
@@ -29,7 +29,12 @@ import * as Schedule from "effect/Schedule"
|
|
29
29
|
import * as Scope from "effect/Scope"
|
30
30
|
import * as Stream from "effect/Stream"
|
31
31
|
import type { MailboxFull, PersistenceError } from "./ClusterError.js"
|
32
|
-
import {
|
32
|
+
import {
|
33
|
+
AlreadyProcessingMessage,
|
34
|
+
EntityNotAssignedToRunner,
|
35
|
+
EntityNotManagedByRunner,
|
36
|
+
RunnerUnavailable
|
37
|
+
} from "./ClusterError.js"
|
33
38
|
import { Persisted } from "./ClusterSchema.js"
|
34
39
|
import type { CurrentAddress, Entity, HandlersFrom } from "./Entity.js"
|
35
40
|
import { EntityAddress } from "./EntityAddress.js"
|
@@ -83,7 +88,9 @@ export class Sharding extends Context.Tag("@effect/cluster/Sharding")<Sharding,
|
|
83
88
|
readonly makeClient: <Rpcs extends Rpc.Any>(
|
84
89
|
entity: Entity<Rpcs>
|
85
90
|
) => Effect.Effect<
|
86
|
-
(
|
91
|
+
(
|
92
|
+
entityId: string
|
93
|
+
) => RpcClient.RpcClient<Rpcs, MailboxFull | AlreadyProcessingMessage | PersistenceError | EntityNotManagedByRunner>
|
87
94
|
>
|
88
95
|
|
89
96
|
/**
|
@@ -112,7 +119,7 @@ export class Sharding extends Context.Tag("@effect/cluster/Sharding")<Sharding,
|
|
112
119
|
*/
|
113
120
|
readonly send: (message: Message.Incoming<any>) => Effect.Effect<
|
114
121
|
void,
|
115
|
-
EntityNotManagedByRunner | MailboxFull | AlreadyProcessingMessage
|
122
|
+
EntityNotManagedByRunner | EntityNotAssignedToRunner | MailboxFull | AlreadyProcessingMessage
|
116
123
|
>
|
117
124
|
|
118
125
|
/**
|
@@ -120,7 +127,7 @@ export class Sharding extends Context.Tag("@effect/cluster/Sharding")<Sharding,
|
|
120
127
|
*/
|
121
128
|
readonly notify: (message: Message.Incoming<any>) => Effect.Effect<
|
122
129
|
void,
|
123
|
-
EntityNotManagedByRunner | AlreadyProcessingMessage
|
130
|
+
EntityNotManagedByRunner | EntityNotAssignedToRunner | AlreadyProcessingMessage
|
124
131
|
>
|
125
132
|
|
126
133
|
/**
|
@@ -422,8 +429,18 @@ const make = Effect.gen(function*() {
|
|
422
429
|
currentSentRequestIds.add(message.envelope.requestId)
|
423
430
|
}
|
424
431
|
const address = message.envelope.address
|
432
|
+
if (!acquiredShards.has(address.shardId)) {
|
433
|
+
return Effect.void
|
434
|
+
}
|
425
435
|
const state = entityManagers.get(address.entityType)
|
426
|
-
if (!state
|
436
|
+
if (!state) {
|
437
|
+
if (message._tag === "IncomingRequest") {
|
438
|
+
return Effect.orDie(message.respond(Reply.ReplyWithContext.fromDefect({
|
439
|
+
id: snowflakeGen.unsafeNext(),
|
440
|
+
requestId: message.envelope.requestId,
|
441
|
+
defect: new EntityNotManagedByRunner({ address })
|
442
|
+
})))
|
443
|
+
}
|
427
444
|
return Effect.void
|
428
445
|
}
|
429
446
|
|
@@ -563,11 +580,11 @@ const make = Effect.gen(function*() {
|
|
563
580
|
|
564
581
|
const sendWithRetry: Effect.Effect<
|
565
582
|
void,
|
566
|
-
EntityNotManagedByRunner
|
583
|
+
EntityNotManagedByRunner | EntityNotAssignedToRunner
|
567
584
|
> = Effect.catchTags(
|
568
585
|
Effect.suspend(() => {
|
569
586
|
if (!acquiredShards.has(address.shardId)) {
|
570
|
-
return Effect.fail(new
|
587
|
+
return Effect.fail(new EntityNotAssignedToRunner({ address }))
|
571
588
|
}
|
572
589
|
|
573
590
|
const message = messages[index]
|
@@ -632,16 +649,20 @@ const make = Effect.gen(function*() {
|
|
632
649
|
|
633
650
|
// --- Sending messages ---
|
634
651
|
|
635
|
-
const sendLocal = (
|
636
|
-
message:
|
652
|
+
const sendLocal = <M extends Message.Outgoing<any> | Message.Incoming<any>>(
|
653
|
+
message: M
|
637
654
|
): Effect.Effect<
|
638
655
|
void,
|
639
|
-
|
656
|
+
| EntityNotAssignedToRunner
|
657
|
+
| EntityNotManagedByRunner
|
658
|
+
| MailboxFull
|
659
|
+
| AlreadyProcessingMessage
|
660
|
+
| (M extends Message.Incoming<any> ? never : PersistenceError)
|
640
661
|
> =>
|
641
662
|
Effect.suspend(() => {
|
642
663
|
const address = message.envelope.address
|
643
664
|
if (!isEntityOnLocalShards(address)) {
|
644
|
-
return Effect.fail(new
|
665
|
+
return Effect.fail(new EntityNotAssignedToRunner({ address }))
|
645
666
|
}
|
646
667
|
const state = entityManagers.get(address.entityType)
|
647
668
|
if (!state) {
|
@@ -654,39 +675,52 @@ const make = Effect.gen(function*() {
|
|
654
675
|
message,
|
655
676
|
send: state.manager.sendLocal,
|
656
677
|
simulateRemoteSerialization: config.simulateRemoteSerialization
|
657
|
-
})
|
678
|
+
}) as any
|
658
679
|
})
|
659
680
|
|
660
|
-
const notifyLocal = (
|
661
|
-
message:
|
681
|
+
const notifyLocal = <M extends Message.Outgoing<any> | Message.Incoming<any>>(
|
682
|
+
message: M,
|
662
683
|
discard: boolean
|
663
684
|
) =>
|
664
|
-
Effect.suspend(
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
685
|
+
Effect.suspend(
|
686
|
+
(): Effect.Effect<
|
687
|
+
void,
|
688
|
+
| EntityNotManagedByRunner
|
689
|
+
| EntityNotAssignedToRunner
|
690
|
+
| AlreadyProcessingMessage
|
691
|
+
| (M extends Message.Incoming<any> ? never : PersistenceError)
|
692
|
+
> => {
|
693
|
+
const address = message.envelope.address
|
694
|
+
if (!isEntityOnLocalShards(address)) {
|
695
|
+
return Effect.fail(new EntityNotAssignedToRunner({ address }))
|
696
|
+
} else if (!entityManagers.has(address.entityType)) {
|
697
|
+
return Effect.fail(new EntityNotManagedByRunner({ address }))
|
698
|
+
}
|
669
699
|
|
670
|
-
|
671
|
-
|
672
|
-
|
700
|
+
const notify = storageEnabled
|
701
|
+
? openStorageReadLatch
|
702
|
+
: () => Effect.dieMessage("Sharding.notifyLocal: storage is disabled")
|
673
703
|
|
674
|
-
|
675
|
-
|
676
|
-
|
704
|
+
if (message._tag === "IncomingRequest" || message._tag === "IncomingEnvelope") {
|
705
|
+
if (message._tag === "IncomingRequest" && storageAlreadyProcessed(message)) {
|
706
|
+
return Effect.fail(new AlreadyProcessingMessage({ address, envelopeId: message.envelope.requestId }))
|
707
|
+
}
|
708
|
+
return notify()
|
677
709
|
}
|
678
|
-
return notify()
|
679
|
-
}
|
680
710
|
|
681
|
-
|
682
|
-
|
711
|
+
return runners.notifyLocal({ message, notify, discard }) as any
|
712
|
+
}
|
713
|
+
)
|
683
714
|
|
684
|
-
const isTransientError = Predicate.or(RunnerUnavailable.is,
|
715
|
+
const isTransientError = Predicate.or(RunnerUnavailable.is, EntityNotAssignedToRunner.is)
|
685
716
|
function sendOutgoing(
|
686
717
|
message: Message.Outgoing<any>,
|
687
718
|
discard: boolean,
|
688
719
|
retries?: number
|
689
|
-
): Effect.Effect<
|
720
|
+
): Effect.Effect<
|
721
|
+
void,
|
722
|
+
EntityNotManagedByRunner | MailboxFull | AlreadyProcessingMessage | PersistenceError
|
723
|
+
> {
|
690
724
|
return Effect.catchIf(
|
691
725
|
Effect.suspend(() => {
|
692
726
|
const address = message.envelope.address
|
@@ -701,7 +735,7 @@ const make = Effect.gen(function*() {
|
|
701
735
|
? notifyLocal(message, discard)
|
702
736
|
: runners.notify({ address: maybeRunner, message, discard })
|
703
737
|
} else if (Option.isNone(maybeRunner)) {
|
704
|
-
return Effect.fail(new
|
738
|
+
return Effect.fail(new EntityNotAssignedToRunner({ address }))
|
705
739
|
}
|
706
740
|
return runnerIsLocal
|
707
741
|
? sendLocal(message)
|
@@ -858,13 +892,19 @@ const make = Effect.gen(function*() {
|
|
858
892
|
|
859
893
|
const clients: ResourceMap<
|
860
894
|
Entity<any>,
|
861
|
-
(entityId: string) => RpcClient.RpcClient<
|
895
|
+
(entityId: string) => RpcClient.RpcClient<
|
896
|
+
any,
|
897
|
+
MailboxFull | AlreadyProcessingMessage | EntityNotManagedByRunner
|
898
|
+
>,
|
862
899
|
never
|
863
900
|
> = yield* ResourceMap.make(Effect.fnUntraced(function*(entity: Entity<any>) {
|
864
901
|
const client = yield* RpcClient.makeNoSerialization(entity.protocol, {
|
865
902
|
supportsAck: true,
|
866
903
|
generateRequestId: () => RequestId(snowflakeGen.unsafeNext()),
|
867
|
-
onFromClient(options): Effect.Effect<
|
904
|
+
onFromClient(options): Effect.Effect<
|
905
|
+
void,
|
906
|
+
MailboxFull | AlreadyProcessingMessage | EntityNotManagedByRunner | PersistenceError
|
907
|
+
> {
|
868
908
|
const address = Context.unsafeGet(options.context, ClientAddressTag)
|
869
909
|
switch (options.message._tag) {
|
870
910
|
case "Request": {
|
@@ -985,7 +1025,7 @@ const make = Effect.gen(function*() {
|
|
985
1025
|
}))
|
986
1026
|
|
987
1027
|
const makeClient = <Rpcs extends Rpc.Any>(entity: Entity<Rpcs>): Effect.Effect<
|
988
|
-
(entityId: string) => RpcClient.RpcClient<Rpcs, MailboxFull | AlreadyProcessingMessage>
|
1028
|
+
(entityId: string) => RpcClient.RpcClient<Rpcs, MailboxFull | AlreadyProcessingMessage | EntityNotManagedByRunner>
|
989
1029
|
> => clients.get(entity)
|
990
1030
|
|
991
1031
|
const clientRespondDiscard = (_reply: Reply.Reply<any>) => Effect.void
|
package/src/ShardingConfig.ts
CHANGED
@@ -70,7 +70,7 @@ export class ShardingConfig extends Context.Tag("@effect/cluster/ShardingConfig"
|
|
70
70
|
readonly entityReplyPollInterval: DurationInput
|
71
71
|
readonly refreshAssignmentsInterval: DurationInput
|
72
72
|
/**
|
73
|
-
* The interval to retry a send if
|
73
|
+
* The interval to retry a send if EntityNotAssignedToRunner is returned.
|
74
74
|
*/
|
75
75
|
readonly sendRetryInterval: DurationInput
|
76
76
|
// readonly unhealthyRunnerReportInterval: Duration.Duration
|
@@ -16,7 +16,7 @@ import * as Option from "effect/Option"
|
|
16
16
|
import * as Schedule from "effect/Schedule"
|
17
17
|
import * as Schema from "effect/Schema"
|
18
18
|
import * as Scope from "effect/Scope"
|
19
|
-
import { AlreadyProcessingMessage,
|
19
|
+
import { AlreadyProcessingMessage, EntityNotAssignedToRunner, MailboxFull, MalformedMessage } from "../ClusterError.js"
|
20
20
|
import * as ClusterMetrics from "../ClusterMetrics.js"
|
21
21
|
import { Persisted } from "../ClusterSchema.js"
|
22
22
|
import type { Entity, HandlersFrom } from "../Entity.js"
|
@@ -41,11 +41,11 @@ import { ResourceRef } from "./resourceRef.js"
|
|
41
41
|
export interface EntityManager {
|
42
42
|
readonly sendLocal: <R extends Rpc.Any>(
|
43
43
|
message: Message.IncomingLocal<R>
|
44
|
-
) => Effect.Effect<void,
|
44
|
+
) => Effect.Effect<void, EntityNotAssignedToRunner | MailboxFull | AlreadyProcessingMessage>
|
45
45
|
|
46
46
|
readonly send: (
|
47
47
|
message: Message.Incoming<any>
|
48
|
-
) => Effect.Effect<void,
|
48
|
+
) => Effect.Effect<void, EntityNotAssignedToRunner | MailboxFull | AlreadyProcessingMessage>
|
49
49
|
|
50
50
|
readonly isProcessingFor: (message: Message.Incoming<any>, options?: {
|
51
51
|
readonly excludeReplies?: boolean
|
@@ -102,10 +102,10 @@ export const make = Effect.fnUntraced(function*<
|
|
102
102
|
const entities: ResourceMap<
|
103
103
|
EntityAddress,
|
104
104
|
EntityState,
|
105
|
-
|
105
|
+
EntityNotAssignedToRunner
|
106
106
|
> = yield* ResourceMap.make(Effect.fnUntraced(function*(address) {
|
107
107
|
if (yield* options.sharding.isShutdown) {
|
108
|
-
return yield* new
|
108
|
+
return yield* new EntityNotAssignedToRunner({ address })
|
109
109
|
}
|
110
110
|
|
111
111
|
const scope = yield* Effect.scope
|
@@ -317,11 +317,11 @@ export const make = Effect.fnUntraced(function*<
|
|
317
317
|
|
318
318
|
function sendLocal<R extends Rpc.Any>(
|
319
319
|
message: Message.IncomingLocal<R>
|
320
|
-
): Effect.Effect<void,
|
320
|
+
): Effect.Effect<void, EntityNotAssignedToRunner | MailboxFull | AlreadyProcessingMessage> {
|
321
321
|
return Effect.locally(
|
322
322
|
Effect.flatMap(
|
323
323
|
entities.get(message.envelope.address),
|
324
|
-
(server): Effect.Effect<void,
|
324
|
+
(server): Effect.Effect<void, EntityNotAssignedToRunner | MailboxFull | AlreadyProcessingMessage> => {
|
325
325
|
switch (message._tag) {
|
326
326
|
case "IncomingRequestLocal": {
|
327
327
|
// If the request is already running, then we might have more than
|
@@ -371,7 +371,7 @@ export const make = Effect.fnUntraced(function*<
|
|
371
371
|
case "IncomingEnvelope": {
|
372
372
|
const entry = server.activeRequests.get(message.envelope.requestId)
|
373
373
|
if (!entry) {
|
374
|
-
return Effect.fail(new
|
374
|
+
return Effect.fail(new EntityNotAssignedToRunner({ address: message.envelope.address }))
|
375
375
|
} else if (
|
376
376
|
message.envelope._tag === "AckChunk" &&
|
377
377
|
Option.isSome(entry.lastSentChunk) &&
|