@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.
Files changed (159) hide show
  1. package/dist/cjs/ClusterError.js +24 -3
  2. package/dist/cjs/ClusterError.js.map +1 -1
  3. package/dist/cjs/ClusterMetrics.js +1 -2
  4. package/dist/cjs/ClusterMetrics.js.map +1 -1
  5. package/dist/cjs/ClusterSchema.js +1 -2
  6. package/dist/cjs/ClusterSchema.js.map +1 -1
  7. package/dist/cjs/Entity.js +1 -2
  8. package/dist/cjs/Entity.js.map +1 -1
  9. package/dist/cjs/EntityAddress.js +1 -2
  10. package/dist/cjs/EntityAddress.js.map +1 -1
  11. package/dist/cjs/EntityId.js +2 -3
  12. package/dist/cjs/EntityId.js.map +1 -1
  13. package/dist/cjs/EntityType.js +2 -3
  14. package/dist/cjs/EntityType.js.map +1 -1
  15. package/dist/cjs/Envelope.js +2 -3
  16. package/dist/cjs/Envelope.js.map +1 -1
  17. package/dist/cjs/HttpCommon.js +1 -2
  18. package/dist/cjs/HttpCommon.js.map +1 -1
  19. package/dist/cjs/HttpRunner.js +8 -9
  20. package/dist/cjs/HttpRunner.js.map +1 -1
  21. package/dist/cjs/HttpShardManager.js +1 -2
  22. package/dist/cjs/HttpShardManager.js.map +1 -1
  23. package/dist/cjs/MachineId.js +2 -3
  24. package/dist/cjs/MachineId.js.map +1 -1
  25. package/dist/cjs/Message.js +1 -2
  26. package/dist/cjs/Message.js.map +1 -1
  27. package/dist/cjs/MessageStorage.js +2 -3
  28. package/dist/cjs/MessageStorage.js.map +1 -1
  29. package/dist/cjs/Reply.js +2 -3
  30. package/dist/cjs/Reply.js.map +1 -1
  31. package/dist/cjs/Runner.js +3 -4
  32. package/dist/cjs/Runner.js.map +1 -1
  33. package/dist/cjs/RunnerAddress.js +1 -2
  34. package/dist/cjs/RunnerAddress.js.map +1 -1
  35. package/dist/cjs/RunnerHealth.js +2 -3
  36. package/dist/cjs/RunnerHealth.js.map +1 -1
  37. package/dist/cjs/RunnerServer.js +5 -6
  38. package/dist/cjs/RunnerServer.js.map +1 -1
  39. package/dist/cjs/Runners.js +27 -18
  40. package/dist/cjs/Runners.js.map +1 -1
  41. package/dist/cjs/ShardId.js +2 -3
  42. package/dist/cjs/ShardId.js.map +1 -1
  43. package/dist/cjs/ShardManager.js +15 -16
  44. package/dist/cjs/ShardManager.js.map +1 -1
  45. package/dist/cjs/ShardStorage.js +1 -2
  46. package/dist/cjs/ShardStorage.js.map +1 -1
  47. package/dist/cjs/Sharding.js +23 -8
  48. package/dist/cjs/Sharding.js.map +1 -1
  49. package/dist/cjs/ShardingConfig.js +15 -16
  50. package/dist/cjs/ShardingConfig.js.map +1 -1
  51. package/dist/cjs/ShardingRegistrationEvent.js +1 -2
  52. package/dist/cjs/ShardingRegistrationEvent.js.map +1 -1
  53. package/dist/cjs/Singleton.js +1 -2
  54. package/dist/cjs/Singleton.js.map +1 -1
  55. package/dist/cjs/SingletonAddress.js +1 -2
  56. package/dist/cjs/SingletonAddress.js.map +1 -1
  57. package/dist/cjs/Snowflake.js +3 -4
  58. package/dist/cjs/Snowflake.js.map +1 -1
  59. package/dist/cjs/SocketRunner.js +1 -2
  60. package/dist/cjs/SocketRunner.js.map +1 -1
  61. package/dist/cjs/SocketShardManager.js +1 -2
  62. package/dist/cjs/SocketShardManager.js.map +1 -1
  63. package/dist/cjs/SqlMessageStorage.js +2 -3
  64. package/dist/cjs/SqlMessageStorage.js.map +1 -1
  65. package/dist/cjs/SqlShardStorage.js +1 -2
  66. package/dist/cjs/SqlShardStorage.js.map +1 -1
  67. package/dist/cjs/SynchronizedClock.js +2 -3
  68. package/dist/cjs/SynchronizedClock.js.map +1 -1
  69. package/dist/cjs/index.js +1 -2
  70. package/dist/cjs/internal/entityManager.js +3 -4
  71. package/dist/cjs/internal/entityManager.js.map +1 -1
  72. package/dist/cjs/internal/entityReaper.js +1 -2
  73. package/dist/cjs/internal/entityReaper.js.map +1 -1
  74. package/dist/cjs/internal/resourceMap.js +1 -2
  75. package/dist/cjs/internal/resourceMap.js.map +1 -1
  76. package/dist/cjs/internal/resourceRef.js +1 -2
  77. package/dist/cjs/internal/resourceRef.js.map +1 -1
  78. package/dist/cjs/internal/shardManager.js +2 -3
  79. package/dist/cjs/internal/shardManager.js.map +1 -1
  80. package/dist/dts/ClusterError.d.ts +22 -0
  81. package/dist/dts/ClusterError.d.ts.map +1 -1
  82. package/dist/dts/DeliverAt.d.ts.map +1 -1
  83. package/dist/dts/Entity.d.ts +22 -4
  84. package/dist/dts/Entity.d.ts.map +1 -1
  85. package/dist/dts/Envelope.d.ts.map +1 -1
  86. package/dist/dts/HttpCommon.d.ts.map +1 -1
  87. package/dist/dts/HttpRunner.d.ts.map +1 -1
  88. package/dist/dts/HttpShardManager.d.ts.map +1 -1
  89. package/dist/dts/MachineId.d.ts.map +1 -1
  90. package/dist/dts/Message.d.ts +1 -1
  91. package/dist/dts/Message.d.ts.map +1 -1
  92. package/dist/dts/MessageStorage.d.ts.map +1 -1
  93. package/dist/dts/Reply.d.ts.map +1 -1
  94. package/dist/dts/Runner.d.ts.map +1 -1
  95. package/dist/dts/RunnerAddress.d.ts.map +1 -1
  96. package/dist/dts/Runners.d.ts +12 -11
  97. package/dist/dts/Runners.d.ts.map +1 -1
  98. package/dist/dts/ShardId.d.ts.map +1 -1
  99. package/dist/dts/ShardManager.d.ts.map +1 -1
  100. package/dist/dts/Sharding.d.ts +4 -4
  101. package/dist/dts/Sharding.d.ts.map +1 -1
  102. package/dist/dts/ShardingConfig.d.ts +2 -2
  103. package/dist/dts/ShardingConfig.d.ts.map +1 -1
  104. package/dist/dts/Singleton.d.ts.map +1 -1
  105. package/dist/dts/Snowflake.d.ts.map +1 -1
  106. package/dist/dts/SqlMessageStorage.d.ts.map +1 -1
  107. package/dist/dts/SqlShardStorage.d.ts.map +1 -1
  108. package/dist/esm/ClusterError.js +21 -0
  109. package/dist/esm/ClusterError.js.map +1 -1
  110. package/dist/esm/Entity.js.map +1 -1
  111. package/dist/esm/EntityId.js +1 -1
  112. package/dist/esm/EntityId.js.map +1 -1
  113. package/dist/esm/EntityType.js +1 -1
  114. package/dist/esm/EntityType.js.map +1 -1
  115. package/dist/esm/Envelope.js +1 -1
  116. package/dist/esm/Envelope.js.map +1 -1
  117. package/dist/esm/HttpRunner.js +7 -7
  118. package/dist/esm/HttpRunner.js.map +1 -1
  119. package/dist/esm/MachineId.js +1 -1
  120. package/dist/esm/MachineId.js.map +1 -1
  121. package/dist/esm/MessageStorage.js +1 -1
  122. package/dist/esm/MessageStorage.js.map +1 -1
  123. package/dist/esm/Reply.js +1 -1
  124. package/dist/esm/Reply.js.map +1 -1
  125. package/dist/esm/Runner.js +2 -2
  126. package/dist/esm/Runner.js.map +1 -1
  127. package/dist/esm/RunnerHealth.js +1 -1
  128. package/dist/esm/RunnerHealth.js.map +1 -1
  129. package/dist/esm/RunnerServer.js +4 -4
  130. package/dist/esm/RunnerServer.js.map +1 -1
  131. package/dist/esm/Runners.js +27 -17
  132. package/dist/esm/Runners.js.map +1 -1
  133. package/dist/esm/ShardId.js +1 -1
  134. package/dist/esm/ShardId.js.map +1 -1
  135. package/dist/esm/ShardManager.js +14 -14
  136. package/dist/esm/ShardManager.js.map +1 -1
  137. package/dist/esm/Sharding.js +23 -7
  138. package/dist/esm/Sharding.js.map +1 -1
  139. package/dist/esm/ShardingConfig.js +14 -14
  140. package/dist/esm/ShardingConfig.js.map +1 -1
  141. package/dist/esm/Snowflake.js +2 -2
  142. package/dist/esm/Snowflake.js.map +1 -1
  143. package/dist/esm/SqlMessageStorage.js +1 -1
  144. package/dist/esm/SqlMessageStorage.js.map +1 -1
  145. package/dist/esm/SynchronizedClock.js +1 -1
  146. package/dist/esm/SynchronizedClock.js.map +1 -1
  147. package/dist/esm/internal/entityManager.js +3 -3
  148. package/dist/esm/internal/entityManager.js.map +1 -1
  149. package/dist/esm/internal/shardManager.js +1 -1
  150. package/dist/esm/internal/shardManager.js.map +1 -1
  151. package/package.json +5 -5
  152. package/src/ClusterError.ts +24 -0
  153. package/src/Entity.ts +12 -2
  154. package/src/Message.ts +1 -1
  155. package/src/Runners.ts +59 -26
  156. package/src/Sharding.ts +75 -35
  157. package/src/ShardingConfig.ts +1 -1
  158. package/src/internal/entityManager.ts +8 -8
  159. 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.33.2",
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.1",
15
- "@effect/rpc": "^0.59.2",
16
- "@effect/sql": "^0.35.1",
17
- "effect": "^3.15.1"
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
@@ -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 { AlreadyProcessingMessage, MailboxFull, PersistenceError } from "./ClusterError.js"
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
- (entityId: string) => RpcClient.RpcClient<Rpcs, MailboxFull | AlreadyProcessingMessage | PersistenceError>,
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, PersistenceError>
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<void, EntityNotManagedByRunner | MailboxFull | AlreadyProcessingMessage>
56
+ ) => Effect.Effect<
57
+ void,
58
+ EntityNotManagedByRunner | EntityNotAssignedToRunner | MailboxFull | AlreadyProcessingMessage
59
+ >
56
60
  readonly simulateRemoteSerialization: boolean
57
61
  }
58
- ) => Effect.Effect<void, EntityNotManagedByRunner | MailboxFull | AlreadyProcessingMessage>
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
- EntityNotManagedByRunner | RunnerUnavailable | MailboxFull | AlreadyProcessingMessage | PersistenceError
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: (options: Message.IncomingLocal<any>) => Effect.Effect<void, EntityNotManagedByRunner>
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.orDie,
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.orDie(storage.saveRequest(message)),
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 Effect.orDie(message.respond(
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.catchAllCause(
318
+ return Effect.catchAll(
305
319
  options.send({
306
320
  address: options_.address.value,
307
321
  message
308
322
  }),
309
- () => Effect.orDie(replyFromStorage(message))
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.fork,
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.orDie(options.notify(Message.incomingLocalFromOutgoing(message)))
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(Effect.orDie(options.notify(Message.incomingLocalFromOutgoing(message))))
346
+ Effect.andThen(options.notify(Message.incomingLocalFromOutgoing(message))),
347
+ Effect.catchTag("EntityNotAssignedToRunner", () => Effect.void)
325
348
  )
326
349
  }
327
- return Effect.orDie(options.notify(Message.incomingLocalFromOutgoing(message))).pipe(
328
- Effect.fork,
329
- Effect.andThen(Effect.orDie(replyFromStorage(message)))
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
- typeof PersistenceError
365
- ]> = Schema.Union(EntityNotManagedByRunner, MailboxFull, AlreadyProcessingMessage, PersistenceError)
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.ignore
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 { AlreadyProcessingMessage, EntityNotManagedByRunner, RunnerUnavailable } from "./ClusterError.js"
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
- (entityId: string) => RpcClient.RpcClient<Rpcs, MailboxFull | AlreadyProcessingMessage | PersistenceError>
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 || !acquiredShards.has(address.shardId)) {
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 EntityNotManagedByRunner({ address }))
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: Message.Outgoing<any> | Message.Incoming<any>
652
+ const sendLocal = <M extends Message.Outgoing<any> | Message.Incoming<any>>(
653
+ message: M
637
654
  ): Effect.Effect<
638
655
  void,
639
- EntityNotManagedByRunner | MailboxFull | AlreadyProcessingMessage
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 EntityNotManagedByRunner({ address }))
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: Message.Outgoing<any> | Message.Incoming<any>,
681
+ const notifyLocal = <M extends Message.Outgoing<any> | Message.Incoming<any>>(
682
+ message: M,
662
683
  discard: boolean
663
684
  ) =>
664
- Effect.suspend((): Effect.Effect<void, EntityNotManagedByRunner | AlreadyProcessingMessage> => {
665
- const address = message.envelope.address
666
- if (!isEntityOnLocalShards(address)) {
667
- return Effect.fail(new EntityNotManagedByRunner({ address }))
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
- const notify = storageEnabled
671
- ? openStorageReadLatch
672
- : () => Effect.dieMessage("Sharding.notifyLocal: storage is disabled")
700
+ const notify = storageEnabled
701
+ ? openStorageReadLatch
702
+ : () => Effect.dieMessage("Sharding.notifyLocal: storage is disabled")
673
703
 
674
- if (message._tag === "IncomingRequest" || message._tag === "IncomingEnvelope") {
675
- if (message._tag === "IncomingRequest" && storageAlreadyProcessed(message)) {
676
- return Effect.fail(new AlreadyProcessingMessage({ address, envelopeId: message.envelope.requestId }))
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
- return runners.notifyLocal({ message, notify, discard })
682
- })
711
+ return runners.notifyLocal({ message, notify, discard }) as any
712
+ }
713
+ )
683
714
 
684
- const isTransientError = Predicate.or(RunnerUnavailable.is, EntityNotManagedByRunner.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<void, MailboxFull | AlreadyProcessingMessage | PersistenceError> {
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 EntityNotManagedByRunner({ address }))
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<any, MailboxFull | AlreadyProcessingMessage>,
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<void, MailboxFull | AlreadyProcessingMessage | PersistenceError> {
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
@@ -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 EntityNotManagedByRunner is returned.
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, EntityNotManagedByRunner, MailboxFull, MalformedMessage } from "../ClusterError.js"
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, EntityNotManagedByRunner | MailboxFull | AlreadyProcessingMessage>
44
+ ) => Effect.Effect<void, EntityNotAssignedToRunner | MailboxFull | AlreadyProcessingMessage>
45
45
 
46
46
  readonly send: (
47
47
  message: Message.Incoming<any>
48
- ) => Effect.Effect<void, EntityNotManagedByRunner | MailboxFull | AlreadyProcessingMessage>
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
- EntityNotManagedByRunner
105
+ EntityNotAssignedToRunner
106
106
  > = yield* ResourceMap.make(Effect.fnUntraced(function*(address) {
107
107
  if (yield* options.sharding.isShutdown) {
108
- return yield* new EntityNotManagedByRunner({ address })
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, EntityNotManagedByRunner | MailboxFull | AlreadyProcessingMessage> {
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, EntityNotManagedByRunner | MailboxFull | AlreadyProcessingMessage> => {
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 EntityNotManagedByRunner({ address: message.envelope.address }))
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) &&