@effect/cluster 0.0.0-snapshot-d33d8b050b8e3c87dcde9587083e6c1cf733f72b
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/AtLeastOnce/package.json +6 -0
- package/AtLeastOnceStorage/package.json +6 -0
- package/Broadcaster/package.json +6 -0
- package/LICENSE +21 -0
- package/ManagerConfig/package.json +6 -0
- package/Message/package.json +6 -0
- package/MessageState/package.json +6 -0
- package/Messenger/package.json +6 -0
- package/Pod/package.json +6 -0
- package/PodAddress/package.json +6 -0
- package/Pods/package.json +6 -0
- package/PodsHealth/package.json +6 -0
- package/PoisonPill/package.json +6 -0
- package/README.md +3 -0
- package/RecipientAddress/package.json +6 -0
- package/RecipientBehaviour/package.json +6 -0
- package/RecipientBehaviourContext/package.json +6 -0
- package/RecipientType/package.json +6 -0
- package/Serialization/package.json +6 -0
- package/SerializedEnvelope/package.json +6 -0
- package/SerializedMessage/package.json +6 -0
- package/ShardId/package.json +6 -0
- package/ShardManager/package.json +6 -0
- package/ShardManagerClient/package.json +6 -0
- package/Sharding/package.json +6 -0
- package/ShardingConfig/package.json +6 -0
- package/ShardingEvent/package.json +6 -0
- package/ShardingException/package.json +6 -0
- package/ShardingRegistrationEvent/package.json +6 -0
- package/Storage/package.json +6 -0
- package/dist/cjs/AtLeastOnce.js +43 -0
- package/dist/cjs/AtLeastOnce.js.map +1 -0
- package/dist/cjs/AtLeastOnceStorage.js +48 -0
- package/dist/cjs/AtLeastOnceStorage.js.map +1 -0
- package/dist/cjs/Broadcaster.js +6 -0
- package/dist/cjs/Broadcaster.js.map +1 -0
- package/dist/cjs/ManagerConfig.js +57 -0
- package/dist/cjs/ManagerConfig.js.map +1 -0
- package/dist/cjs/Message.js +64 -0
- package/dist/cjs/Message.js.map +1 -0
- package/dist/cjs/MessageState.js +78 -0
- package/dist/cjs/MessageState.js.map +1 -0
- package/dist/cjs/Messenger.js +6 -0
- package/dist/cjs/Messenger.js.map +1 -0
- package/dist/cjs/Pod.js +101 -0
- package/dist/cjs/Pod.js.map +1 -0
- package/dist/cjs/PodAddress.js +100 -0
- package/dist/cjs/PodAddress.js.map +1 -0
- package/dist/cjs/Pods.js +58 -0
- package/dist/cjs/Pods.js.map +1 -0
- package/dist/cjs/PodsHealth.js +64 -0
- package/dist/cjs/PodsHealth.js.map +1 -0
- package/dist/cjs/PoisonPill.js +101 -0
- package/dist/cjs/PoisonPill.js.map +1 -0
- package/dist/cjs/RecipientAddress.js +102 -0
- package/dist/cjs/RecipientAddress.js.map +1 -0
- package/dist/cjs/RecipientBehaviour.js +61 -0
- package/dist/cjs/RecipientBehaviour.js.map +1 -0
- package/dist/cjs/RecipientBehaviourContext.js +87 -0
- package/dist/cjs/RecipientBehaviourContext.js.map +1 -0
- package/dist/cjs/RecipientType.js +142 -0
- package/dist/cjs/RecipientType.js.map +1 -0
- package/dist/cjs/Serialization.js +55 -0
- package/dist/cjs/Serialization.js.map +1 -0
- package/dist/cjs/SerializedEnvelope.js +111 -0
- package/dist/cjs/SerializedEnvelope.js.map +1 -0
- package/dist/cjs/SerializedMessage.js +87 -0
- package/dist/cjs/SerializedMessage.js.map +1 -0
- package/dist/cjs/ShardId.js +89 -0
- package/dist/cjs/ShardId.js.map +1 -0
- package/dist/cjs/ShardManager.js +48 -0
- package/dist/cjs/ShardManager.js.map +1 -0
- package/dist/cjs/ShardManagerClient.js +53 -0
- package/dist/cjs/ShardManagerClient.js.map +1 -0
- package/dist/cjs/Sharding.js +129 -0
- package/dist/cjs/Sharding.js.map +1 -0
- package/dist/cjs/ShardingConfig.js +64 -0
- package/dist/cjs/ShardingConfig.js.map +1 -0
- package/dist/cjs/ShardingEvent.js +72 -0
- package/dist/cjs/ShardingEvent.js.map +1 -0
- package/dist/cjs/ShardingException.js +130 -0
- package/dist/cjs/ShardingException.js.map +1 -0
- package/dist/cjs/ShardingRegistrationEvent.js +44 -0
- package/dist/cjs/ShardingRegistrationEvent.js.map +1 -0
- package/dist/cjs/Storage.js +63 -0
- package/dist/cjs/Storage.js.map +1 -0
- package/dist/cjs/index.js +88 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/internal/atLeastOnce.js +58 -0
- package/dist/cjs/internal/atLeastOnce.js.map +1 -0
- package/dist/cjs/internal/atLeastOnceStorage.js +186 -0
- package/dist/cjs/internal/atLeastOnceStorage.js.map +1 -0
- package/dist/cjs/internal/entityManager.js +191 -0
- package/dist/cjs/internal/entityManager.js.map +1 -0
- package/dist/cjs/internal/entityState.js +70 -0
- package/dist/cjs/internal/entityState.js.map +1 -0
- package/dist/cjs/internal/managerConfig.js +69 -0
- package/dist/cjs/internal/managerConfig.js.map +1 -0
- package/dist/cjs/internal/message.js +68 -0
- package/dist/cjs/internal/message.js.map +1 -0
- package/dist/cjs/internal/messageState.js +102 -0
- package/dist/cjs/internal/messageState.js.map +1 -0
- package/dist/cjs/internal/podWithMetadata.js +77 -0
- package/dist/cjs/internal/podWithMetadata.js.map +1 -0
- package/dist/cjs/internal/pods.js +58 -0
- package/dist/cjs/internal/pods.js.map +1 -0
- package/dist/cjs/internal/podsHealth.js +63 -0
- package/dist/cjs/internal/podsHealth.js.map +1 -0
- package/dist/cjs/internal/recipientBehaviour.js +75 -0
- package/dist/cjs/internal/recipientBehaviour.js.map +1 -0
- package/dist/cjs/internal/recipientBehaviourContext.js +59 -0
- package/dist/cjs/internal/recipientBehaviourContext.js.map +1 -0
- package/dist/cjs/internal/serialization.js +72 -0
- package/dist/cjs/internal/serialization.js.map +1 -0
- package/dist/cjs/internal/shardManager.js +291 -0
- package/dist/cjs/internal/shardManager.js.map +1 -0
- package/dist/cjs/internal/shardManagerClient.js +71 -0
- package/dist/cjs/internal/shardManagerClient.js.map +1 -0
- package/dist/cjs/internal/shardManagerState.js +67 -0
- package/dist/cjs/internal/shardManagerState.js.map +1 -0
- package/dist/cjs/internal/sharding.js +329 -0
- package/dist/cjs/internal/sharding.js.map +1 -0
- package/dist/cjs/internal/shardingConfig.js +79 -0
- package/dist/cjs/internal/shardingConfig.js.map +1 -0
- package/dist/cjs/internal/storage.js +75 -0
- package/dist/cjs/internal/storage.js.map +1 -0
- package/dist/cjs/internal/utils.js +92 -0
- package/dist/cjs/internal/utils.js.map +1 -0
- package/dist/dts/AtLeastOnce.d.ts +20 -0
- package/dist/dts/AtLeastOnce.d.ts.map +1 -0
- package/dist/dts/AtLeastOnceStorage.d.ts +75 -0
- package/dist/dts/AtLeastOnceStorage.d.ts.map +1 -0
- package/dist/dts/Broadcaster.d.ts +32 -0
- package/dist/dts/Broadcaster.d.ts.map +1 -0
- package/dist/dts/ManagerConfig.d.ts +61 -0
- package/dist/dts/ManagerConfig.d.ts.map +1 -0
- package/dist/dts/Message.d.ts +106 -0
- package/dist/dts/Message.d.ts.map +1 -0
- package/dist/dts/MessageState.d.ts +107 -0
- package/dist/dts/MessageState.d.ts.map +1 -0
- package/dist/dts/Messenger.d.ts +32 -0
- package/dist/dts/Messenger.d.ts.map +1 -0
- package/dist/dts/Pod.d.ts +81 -0
- package/dist/dts/Pod.d.ts.map +1 -0
- package/dist/dts/PodAddress.d.ts +80 -0
- package/dist/dts/PodAddress.d.ts.map +1 -0
- package/dist/dts/Pods.d.ts +78 -0
- package/dist/dts/Pods.d.ts.map +1 -0
- package/dist/dts/PodsHealth.d.ts +66 -0
- package/dist/dts/PodsHealth.d.ts.map +1 -0
- package/dist/dts/PoisonPill.d.ts +78 -0
- package/dist/dts/PoisonPill.d.ts.map +1 -0
- package/dist/dts/RecipientAddress.d.ts +57 -0
- package/dist/dts/RecipientAddress.d.ts.map +1 -0
- package/dist/dts/RecipientBehaviour.d.ts +72 -0
- package/dist/dts/RecipientBehaviour.d.ts.map +1 -0
- package/dist/dts/RecipientBehaviourContext.d.ts +83 -0
- package/dist/dts/RecipientBehaviourContext.d.ts.map +1 -0
- package/dist/dts/RecipientType.d.ts +96 -0
- package/dist/dts/RecipientType.d.ts.map +1 -0
- package/dist/dts/Serialization.d.ts +58 -0
- package/dist/dts/Serialization.d.ts.map +1 -0
- package/dist/dts/SerializedEnvelope.d.ts +87 -0
- package/dist/dts/SerializedEnvelope.d.ts.map +1 -0
- package/dist/dts/SerializedMessage.d.ts +66 -0
- package/dist/dts/SerializedMessage.d.ts.map +1 -0
- package/dist/dts/ShardId.d.ts +70 -0
- package/dist/dts/ShardId.d.ts.map +1 -0
- package/dist/dts/ShardManager.d.ts +44 -0
- package/dist/dts/ShardManager.d.ts.map +1 -0
- package/dist/dts/ShardManagerClient.d.ts +50 -0
- package/dist/dts/ShardManagerClient.d.ts.map +1 -0
- package/dist/dts/Sharding.d.ts +146 -0
- package/dist/dts/Sharding.d.ts.map +1 -0
- package/dist/dts/ShardingConfig.d.ts +69 -0
- package/dist/dts/ShardingConfig.d.ts.map +1 -0
- package/dist/dts/ShardingEvent.d.ts +90 -0
- package/dist/dts/ShardingEvent.d.ts.map +1 -0
- package/dist/dts/ShardingException.d.ts +125 -0
- package/dist/dts/ShardingException.d.ts.map +1 -0
- package/dist/dts/ShardingRegistrationEvent.d.ts +44 -0
- package/dist/dts/ShardingRegistrationEvent.d.ts.map +1 -0
- package/dist/dts/Storage.d.ts +78 -0
- package/dist/dts/Storage.d.ts.map +1 -0
- package/dist/dts/index.d.ts +113 -0
- package/dist/dts/index.d.ts.map +1 -0
- package/dist/dts/internal/atLeastOnce.d.ts +2 -0
- package/dist/dts/internal/atLeastOnce.d.ts.map +1 -0
- package/dist/dts/internal/atLeastOnceStorage.d.ts +2 -0
- package/dist/dts/internal/atLeastOnceStorage.d.ts.map +1 -0
- package/dist/dts/internal/entityManager.d.ts +2 -0
- package/dist/dts/internal/entityManager.d.ts.map +1 -0
- package/dist/dts/internal/entityState.d.ts +21 -0
- package/dist/dts/internal/entityState.d.ts.map +1 -0
- package/dist/dts/internal/managerConfig.d.ts +2 -0
- package/dist/dts/internal/managerConfig.d.ts.map +1 -0
- package/dist/dts/internal/message.d.ts +9 -0
- package/dist/dts/internal/message.d.ts.map +1 -0
- package/dist/dts/internal/messageState.d.ts +2 -0
- package/dist/dts/internal/messageState.d.ts.map +1 -0
- package/dist/dts/internal/podWithMetadata.d.ts +2 -0
- package/dist/dts/internal/podWithMetadata.d.ts.map +1 -0
- package/dist/dts/internal/pods.d.ts +2 -0
- package/dist/dts/internal/pods.d.ts.map +1 -0
- package/dist/dts/internal/podsHealth.d.ts +2 -0
- package/dist/dts/internal/podsHealth.d.ts.map +1 -0
- package/dist/dts/internal/recipientBehaviour.d.ts +2 -0
- package/dist/dts/internal/recipientBehaviour.d.ts.map +1 -0
- package/dist/dts/internal/recipientBehaviourContext.d.ts +2 -0
- package/dist/dts/internal/recipientBehaviourContext.d.ts.map +1 -0
- package/dist/dts/internal/serialization.d.ts +2 -0
- package/dist/dts/internal/serialization.d.ts.map +1 -0
- package/dist/dts/internal/shardManager.d.ts +12 -0
- package/dist/dts/internal/shardManager.d.ts.map +1 -0
- package/dist/dts/internal/shardManagerClient.d.ts +2 -0
- package/dist/dts/internal/shardManagerClient.d.ts.map +1 -0
- package/dist/dts/internal/shardManagerState.d.ts +26 -0
- package/dist/dts/internal/shardManagerState.d.ts.map +1 -0
- package/dist/dts/internal/sharding.d.ts +2 -0
- package/dist/dts/internal/sharding.d.ts.map +1 -0
- package/dist/dts/internal/shardingConfig.d.ts +2 -0
- package/dist/dts/internal/shardingConfig.d.ts.map +1 -0
- package/dist/dts/internal/storage.d.ts +2 -0
- package/dist/dts/internal/storage.d.ts.map +1 -0
- package/dist/dts/internal/utils.d.ts +2 -0
- package/dist/dts/internal/utils.d.ts.map +1 -0
- package/dist/esm/AtLeastOnce.js +12 -0
- package/dist/esm/AtLeastOnce.js.map +1 -0
- package/dist/esm/AtLeastOnceStorage.js +17 -0
- package/dist/esm/AtLeastOnceStorage.js.map +1 -0
- package/dist/esm/Broadcaster.js +2 -0
- package/dist/esm/Broadcaster.js.map +1 -0
- package/dist/esm/ManagerConfig.js +26 -0
- package/dist/esm/ManagerConfig.js.map +1 -0
- package/dist/esm/Message.js +33 -0
- package/dist/esm/Message.js.map +1 -0
- package/dist/esm/MessageState.js +47 -0
- package/dist/esm/MessageState.js.map +1 -0
- package/dist/esm/Messenger.js +2 -0
- package/dist/esm/Messenger.js.map +1 -0
- package/dist/esm/Pod.js +65 -0
- package/dist/esm/Pod.js.map +1 -0
- package/dist/esm/PodAddress.js +64 -0
- package/dist/esm/PodAddress.js.map +1 -0
- package/dist/esm/Pods.js +27 -0
- package/dist/esm/Pods.js.map +1 -0
- package/dist/esm/PodsHealth.js +33 -0
- package/dist/esm/PodsHealth.js.map +1 -0
- package/dist/esm/PoisonPill.js +65 -0
- package/dist/esm/PoisonPill.js.map +1 -0
- package/dist/esm/RecipientAddress.js +67 -0
- package/dist/esm/RecipientAddress.js.map +1 -0
- package/dist/esm/RecipientBehaviour.js +30 -0
- package/dist/esm/RecipientBehaviour.js.map +1 -0
- package/dist/esm/RecipientBehaviourContext.js +56 -0
- package/dist/esm/RecipientBehaviourContext.js.map +1 -0
- package/dist/esm/RecipientType.js +105 -0
- package/dist/esm/RecipientType.js.map +1 -0
- package/dist/esm/Serialization.js +24 -0
- package/dist/esm/Serialization.js.map +1 -0
- package/dist/esm/SerializedEnvelope.js +75 -0
- package/dist/esm/SerializedEnvelope.js.map +1 -0
- package/dist/esm/SerializedMessage.js +51 -0
- package/dist/esm/SerializedMessage.js.map +1 -0
- package/dist/esm/ShardId.js +54 -0
- package/dist/esm/ShardId.js.map +1 -0
- package/dist/esm/ShardManager.js +17 -0
- package/dist/esm/ShardManager.js.map +1 -0
- package/dist/esm/ShardManagerClient.js +22 -0
- package/dist/esm/ShardManagerClient.js.map +1 -0
- package/dist/esm/Sharding.js +98 -0
- package/dist/esm/Sharding.js.map +1 -0
- package/dist/esm/ShardingConfig.js +33 -0
- package/dist/esm/ShardingConfig.js.map +1 -0
- package/dist/esm/ShardingEvent.js +62 -0
- package/dist/esm/ShardingEvent.js.map +1 -0
- package/dist/esm/ShardingException.js +91 -0
- package/dist/esm/ShardingException.js.map +1 -0
- package/dist/esm/ShardingRegistrationEvent.js +36 -0
- package/dist/esm/ShardingRegistrationEvent.js.map +1 -0
- package/dist/esm/Storage.js +32 -0
- package/dist/esm/Storage.js.map +1 -0
- package/dist/esm/index.js +113 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/atLeastOnce.js +26 -0
- package/dist/esm/internal/atLeastOnce.js.map +1 -0
- package/dist/esm/internal/atLeastOnceStorage.js +154 -0
- package/dist/esm/internal/atLeastOnceStorage.js.map +1 -0
- package/dist/esm/internal/entityManager.js +159 -0
- package/dist/esm/internal/entityManager.js.map +1 -0
- package/dist/esm/internal/entityState.js +35 -0
- package/dist/esm/internal/entityState.js.map +1 -0
- package/dist/esm/internal/managerConfig.js +38 -0
- package/dist/esm/internal/managerConfig.js.map +1 -0
- package/dist/esm/internal/message.js +32 -0
- package/dist/esm/internal/message.js.map +1 -0
- package/dist/esm/internal/messageState.js +66 -0
- package/dist/esm/internal/messageState.js.map +1 -0
- package/dist/esm/internal/podWithMetadata.js +41 -0
- package/dist/esm/internal/podWithMetadata.js.map +1 -0
- package/dist/esm/internal/pods.js +25 -0
- package/dist/esm/internal/pods.js.map +1 -0
- package/dist/esm/internal/podsHealth.js +30 -0
- package/dist/esm/internal/podsHealth.js.map +1 -0
- package/dist/esm/internal/recipientBehaviour.js +42 -0
- package/dist/esm/internal/recipientBehaviour.js.map +1 -0
- package/dist/esm/internal/recipientBehaviourContext.js +26 -0
- package/dist/esm/internal/recipientBehaviourContext.js.map +1 -0
- package/dist/esm/internal/serialization.js +39 -0
- package/dist/esm/internal/serialization.js.map +1 -0
- package/dist/esm/internal/shardManager.js +256 -0
- package/dist/esm/internal/shardManager.js.map +1 -0
- package/dist/esm/internal/shardManagerClient.js +38 -0
- package/dist/esm/internal/shardManagerClient.js.map +1 -0
- package/dist/esm/internal/shardManagerState.js +36 -0
- package/dist/esm/internal/shardManagerState.js.map +1 -0
- package/dist/esm/internal/sharding.js +288 -0
- package/dist/esm/internal/sharding.js.map +1 -0
- package/dist/esm/internal/shardingConfig.js +47 -0
- package/dist/esm/internal/shardingConfig.js.map +1 -0
- package/dist/esm/internal/storage.js +42 -0
- package/dist/esm/internal/storage.js.map +1 -0
- package/dist/esm/internal/utils.js +56 -0
- package/dist/esm/internal/utils.js.map +1 -0
- package/dist/esm/package.json +4 -0
- package/package.json +259 -0
- package/src/AtLeastOnce.ts +28 -0
- package/src/AtLeastOnceStorage.ts +96 -0
- package/src/Broadcaster.ts +48 -0
- package/src/ManagerConfig.ts +67 -0
- package/src/Message.ts +132 -0
- package/src/MessageState.ts +126 -0
- package/src/Messenger.ts +40 -0
- package/src/Pod.ts +95 -0
- package/src/PodAddress.ts +94 -0
- package/src/Pods.ts +100 -0
- package/src/PodsHealth.ts +74 -0
- package/src/PoisonPill.ts +105 -0
- package/src/RecipientAddress.ts +72 -0
- package/src/RecipientBehaviour.ts +108 -0
- package/src/RecipientBehaviourContext.ts +101 -0
- package/src/RecipientType.ts +134 -0
- package/src/Serialization.ts +72 -0
- package/src/SerializedEnvelope.ts +109 -0
- package/src/SerializedMessage.ts +82 -0
- package/src/ShardId.ts +79 -0
- package/src/ShardManager.ts +53 -0
- package/src/ShardManagerClient.ts +57 -0
- package/src/Sharding.ts +214 -0
- package/src/ShardingConfig.ts +76 -0
- package/src/ShardingEvent.ts +121 -0
- package/src/ShardingException.ts +151 -0
- package/src/ShardingRegistrationEvent.ts +62 -0
- package/src/Storage.ts +92 -0
- package/src/index.ts +139 -0
- package/src/internal/atLeastOnce.ts +59 -0
- package/src/internal/atLeastOnceStorage.ts +218 -0
- package/src/internal/entityManager.ts +404 -0
- package/src/internal/entityState.ts +64 -0
- package/src/internal/managerConfig.ts +84 -0
- package/src/internal/message.ts +64 -0
- package/src/internal/messageState.ts +98 -0
- package/src/internal/podWithMetadata.ts +72 -0
- package/src/internal/pods.ts +29 -0
- package/src/internal/podsHealth.ts +39 -0
- package/src/internal/recipientBehaviour.ts +133 -0
- package/src/internal/recipientBehaviourContext.ts +70 -0
- package/src/internal/serialization.ts +59 -0
- package/src/internal/shardManager.ts +593 -0
- package/src/internal/shardManagerClient.ts +49 -0
- package/src/internal/shardManagerState.ts +80 -0
- package/src/internal/sharding.ts +793 -0
- package/src/internal/shardingConfig.ts +97 -0
- package/src/internal/storage.ts +60 -0
- package/src/internal/utils.ts +54 -0
@@ -0,0 +1,159 @@
|
|
1
|
+
import * as Clock from "effect/Clock";
|
2
|
+
import * as Duration from "effect/Duration";
|
3
|
+
import * as Effect from "effect/Effect";
|
4
|
+
import * as Exit from "effect/Exit";
|
5
|
+
import * as Fiber from "effect/Fiber";
|
6
|
+
import { pipe } from "effect/Function";
|
7
|
+
import * as HashMap from "effect/HashMap";
|
8
|
+
import * as HashSet from "effect/HashSet";
|
9
|
+
import * as Option from "effect/Option";
|
10
|
+
import * as Scope from "effect/Scope";
|
11
|
+
import * as RefSynchronized from "effect/SynchronizedRef";
|
12
|
+
import * as Message from "../Message.js";
|
13
|
+
import * as MessageState from "../MessageState.js";
|
14
|
+
import * as RecipientBehaviourContext from "../RecipientBehaviourContext.js";
|
15
|
+
import * as ShardingException from "../ShardingException.js";
|
16
|
+
import * as EntityState from "./entityState.js";
|
17
|
+
/** @internal */
|
18
|
+
const EntityManagerSymbolKey = "@effect/cluster/EntityManager";
|
19
|
+
/** @internal */
|
20
|
+
export const EntityManagerTypeId = /*#__PURE__*/Symbol.for(EntityManagerSymbolKey);
|
21
|
+
/** @internal */
|
22
|
+
export function make(recipientType, recipientBehaviour, sharding, config, serialization, options = {}) {
|
23
|
+
return Effect.gen(function* (_) {
|
24
|
+
const entityMaxIdle = options.entityMaxIdleTime || Option.none();
|
25
|
+
const env = yield* _(Effect.context());
|
26
|
+
const entityStates = yield* _(RefSynchronized.make(HashMap.empty()));
|
27
|
+
function startExpirationFiber(recipientAddress) {
|
28
|
+
const maxIdleMillis = pipe(entityMaxIdle, Option.getOrElse(() => config.entityMaxIdleTime), Duration.toMillis);
|
29
|
+
function sleep(duration) {
|
30
|
+
return pipe(Effect.Do, Effect.zipLeft(Clock.sleep(Duration.millis(duration))), Effect.bind("cdt", () => Clock.currentTimeMillis), Effect.bind("map", () => RefSynchronized.get(entityStates)), Effect.let("lastReceivedAt", ({
|
31
|
+
map
|
32
|
+
}) => pipe(HashMap.get(map, recipientAddress), Option.map(_ => _.lastReceivedAt), Option.getOrElse(() => 0))), Effect.let("remaining", ({
|
33
|
+
cdt,
|
34
|
+
lastReceivedAt
|
35
|
+
}) => maxIdleMillis - cdt + lastReceivedAt), Effect.tap(_ => _.remaining > 0 ? sleep(_.remaining) : Effect.void));
|
36
|
+
}
|
37
|
+
return pipe(sleep(maxIdleMillis), Effect.zipRight(forkEntityTermination(recipientAddress)), Effect.asVoid, Effect.interruptible, Effect.annotateLogs("entityId", recipientAddress), Effect.annotateLogs("recipientType", recipientType.name), Effect.forkDaemon);
|
38
|
+
}
|
39
|
+
/**
|
40
|
+
* Performs proper termination of the entity, interrupting the expiration timer, closing the scope and failing pending replies
|
41
|
+
*/
|
42
|
+
function terminateEntity(recipientAddress) {
|
43
|
+
return pipe(
|
44
|
+
// get the things to cleanup
|
45
|
+
RefSynchronized.get(entityStates), Effect.map(HashMap.get(recipientAddress)), Effect.flatMap(Option.match({
|
46
|
+
// there is no entity state to cleanup
|
47
|
+
onNone: () => Effect.void,
|
48
|
+
// found it!
|
49
|
+
onSome: entityState => pipe(
|
50
|
+
// interrupt the expiration timer
|
51
|
+
Fiber.interrupt(entityState.expirationFiber),
|
52
|
+
// close the scope of the entity,
|
53
|
+
Effect.ensuring(Scope.close(entityState.executionScope, Exit.void)),
|
54
|
+
// remove the entry from the map
|
55
|
+
Effect.ensuring(RefSynchronized.update(entityStates, HashMap.remove(recipientAddress))),
|
56
|
+
// log error if happens
|
57
|
+
Effect.catchAllCause(Effect.logError), Effect.asVoid, Effect.annotateLogs("entityId", recipientAddress.entityId), Effect.annotateLogs("recipientType", recipientAddress.recipientTypeName))
|
58
|
+
})));
|
59
|
+
}
|
60
|
+
/**
|
61
|
+
* Begins entity termination (if needed) and return the fiber to wait for completed termination (if any)
|
62
|
+
*/
|
63
|
+
function forkEntityTermination(recipientAddress) {
|
64
|
+
return RefSynchronized.modifyEffect(entityStates, entityStatesMap => pipe(HashMap.get(entityStatesMap, recipientAddress), Option.match({
|
65
|
+
// if no entry is found, the entity has succefully shut down
|
66
|
+
onNone: () => Effect.succeed([Option.none(), entityStatesMap]),
|
67
|
+
// there is an entry, so we should begin termination
|
68
|
+
onSome: entityState => pipe(entityState.terminationFiber, Option.match({
|
69
|
+
// termination has already begun, keep everything as-is
|
70
|
+
onSome: () => Effect.succeed([entityState.terminationFiber, entityStatesMap]),
|
71
|
+
// begin to terminate the queue
|
72
|
+
onNone: () => pipe(terminateEntity(recipientAddress), Effect.forkDaemon, Effect.map(terminationFiber => [Option.some(terminationFiber), HashMap.modify(entityStatesMap, recipientAddress, EntityState.withTerminationFiber(terminationFiber))]))
|
73
|
+
}))
|
74
|
+
})));
|
75
|
+
}
|
76
|
+
function getOrCreateEntityState(recipientAddress) {
|
77
|
+
return RefSynchronized.modifyEffect(entityStates, map => pipe(HashMap.get(map, recipientAddress), Option.match({
|
78
|
+
onSome: entityState => pipe(entityState.terminationFiber, Option.match({
|
79
|
+
// offer exists, delay the interruption fiber and return the offer
|
80
|
+
onNone: () => pipe(Clock.currentTimeMillis, Effect.map(cdt => [Option.some(entityState), HashMap.modify(map, recipientAddress, EntityState.withLastReceivedAd(cdt))])),
|
81
|
+
// the queue is shutting down, stash and retry
|
82
|
+
onSome: () => Effect.succeed([Option.none(), map])
|
83
|
+
})),
|
84
|
+
onNone: () => Effect.flatMap(sharding.isShuttingDown, isGoingDown => {
|
85
|
+
if (isGoingDown) {
|
86
|
+
// don't start any fiber while sharding is shutting down
|
87
|
+
return Effect.fail(new ShardingException.EntityNotManagedByThisPodException({
|
88
|
+
recipientAddress
|
89
|
+
}));
|
90
|
+
} else {
|
91
|
+
// offer doesn't exist, create a new one
|
92
|
+
return Effect.gen(function* (_) {
|
93
|
+
const executionScope = yield* _(Scope.make());
|
94
|
+
const expirationFiber = yield* _(startExpirationFiber(recipientAddress));
|
95
|
+
const cdt = yield* _(Clock.currentTimeMillis);
|
96
|
+
const forkShutdown = pipe(forkEntityTermination(recipientAddress), Effect.asVoid);
|
97
|
+
const shardId = sharding.getShardId(recipientAddress);
|
98
|
+
const sendAndGetState = yield* _(pipe(recipientBehaviour, Effect.map(offer => envelope => pipe(serialization.decode(recipientType.schema, envelope.body), Effect.flatMap(message => pipe(offer(message), Effect.flatMap(_ => MessageState.mapEffect(_, value => serialization.encode(Message.exitSchema(message), value))))))), Scope.extend(executionScope), Effect.provideService(RecipientBehaviourContext.RecipientBehaviourContext, RecipientBehaviourContext.make({
|
99
|
+
recipientAddress,
|
100
|
+
shardId,
|
101
|
+
recipientType: recipientType,
|
102
|
+
forkShutdown
|
103
|
+
})), Effect.provide(env)));
|
104
|
+
const entityState = EntityState.make({
|
105
|
+
sendAndGetState,
|
106
|
+
expirationFiber,
|
107
|
+
executionScope,
|
108
|
+
terminationFiber: Option.none(),
|
109
|
+
lastReceivedAt: cdt
|
110
|
+
});
|
111
|
+
return [Option.some(entityState), HashMap.set(map, recipientAddress, entityState)];
|
112
|
+
});
|
113
|
+
}
|
114
|
+
})
|
115
|
+
})));
|
116
|
+
}
|
117
|
+
function sendAndGetState(envelope) {
|
118
|
+
return pipe(Effect.Do, Effect.tap(() => {
|
119
|
+
// first, verify that this entity should be handled by this pod
|
120
|
+
if (recipientType._tag === "EntityType") {
|
121
|
+
return Effect.asVoid(Effect.unlessEffect(Effect.fail(new ShardingException.EntityNotManagedByThisPodException({
|
122
|
+
recipientAddress: envelope.recipientAddress
|
123
|
+
})), sharding.isEntityOnLocalShards(envelope.recipientAddress)));
|
124
|
+
} else if (recipientType._tag === "TopicType") {
|
125
|
+
return Effect.void;
|
126
|
+
}
|
127
|
+
return Effect.die("Unhandled recipientType");
|
128
|
+
}), Effect.bind("maybeEntityState", () => getOrCreateEntityState(envelope.recipientAddress)), Effect.flatMap(_ => pipe(_.maybeEntityState, Option.match({
|
129
|
+
onNone: () => pipe(Effect.sleep(Duration.millis(100)), Effect.flatMap(() => sendAndGetState(envelope))),
|
130
|
+
onSome: entityState => {
|
131
|
+
return entityState.sendAndGetState(envelope);
|
132
|
+
}
|
133
|
+
}))));
|
134
|
+
}
|
135
|
+
const terminateAllEntities = pipe(RefSynchronized.get(entityStates), Effect.map(HashMap.keySet), Effect.flatMap(terminateEntities));
|
136
|
+
function terminateEntities(entitiesToTerminate) {
|
137
|
+
return pipe(entitiesToTerminate, Effect.forEach(recipientAddress => pipe(forkEntityTermination(recipientAddress), Effect.flatMap(_ => Option.match(_, {
|
138
|
+
onNone: () => Effect.void,
|
139
|
+
onSome: terminationFiber => pipe(Fiber.await(terminationFiber), Effect.timeout(config.entityTerminationTimeout), Effect.match({
|
140
|
+
onFailure: () => Effect.logError(`Entity ${recipientAddress} termination is taking more than expected entityTerminationTimeout (${Duration.toMillis(config.entityTerminationTimeout)}ms).`),
|
141
|
+
onSuccess: () => Effect.logDebug(`Entity ${recipientAddress} cleaned up.`)
|
142
|
+
}), Effect.asVoid)
|
143
|
+
}))), {
|
144
|
+
concurrency: "inherit"
|
145
|
+
}), Effect.asVoid);
|
146
|
+
}
|
147
|
+
function terminateEntitiesOnShards(shards) {
|
148
|
+
return pipe(RefSynchronized.modify(entityStates, entities => [HashMap.filter(entities, (_, recipientAddress) => HashSet.has(shards, sharding.getShardId(recipientAddress))), entities]), Effect.map(HashMap.keySet), Effect.flatMap(terminateEntities));
|
149
|
+
}
|
150
|
+
const self = {
|
151
|
+
[EntityManagerTypeId]: EntityManagerTypeId,
|
152
|
+
sendAndGetState,
|
153
|
+
terminateAllEntities,
|
154
|
+
terminateEntitiesOnShards
|
155
|
+
};
|
156
|
+
return self;
|
157
|
+
});
|
158
|
+
}
|
159
|
+
//# sourceMappingURL=entityManager.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"entityManager.js","names":["Clock","Duration","Effect","Exit","Fiber","pipe","HashMap","HashSet","Option","Scope","RefSynchronized","Message","MessageState","RecipientBehaviourContext","ShardingException","EntityState","EntityManagerSymbolKey","EntityManagerTypeId","Symbol","for","make","recipientType","recipientBehaviour","sharding","config","serialization","options","gen","_","entityMaxIdle","entityMaxIdleTime","none","env","context","entityStates","empty","startExpirationFiber","recipientAddress","maxIdleMillis","getOrElse","toMillis","sleep","duration","Do","zipLeft","millis","bind","currentTimeMillis","get","let","map","lastReceivedAt","cdt","tap","remaining","void","zipRight","forkEntityTermination","asVoid","interruptible","annotateLogs","name","forkDaemon","terminateEntity","flatMap","match","onNone","onSome","entityState","interrupt","expirationFiber","ensuring","close","executionScope","update","remove","catchAllCause","logError","entityId","recipientTypeName","modifyEffect","entityStatesMap","succeed","terminationFiber","some","modify","withTerminationFiber","getOrCreateEntityState","withLastReceivedAd","isShuttingDown","isGoingDown","fail","EntityNotManagedByThisPodException","forkShutdown","shardId","getShardId","sendAndGetState","offer","envelope","decode","schema","body","message","mapEffect","value","encode","exitSchema","extend","provideService","provide","set","_tag","unlessEffect","isEntityOnLocalShards","die","maybeEntityState","terminateAllEntities","keySet","terminateEntities","entitiesToTerminate","forEach","await","timeout","entityTerminationTimeout","onFailure","onSuccess","logDebug","concurrency","terminateEntitiesOnShards","shards","entities","filter","has","self"],"sources":["../../../src/internal/entityManager.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
import * as Data from "effect/Data";
|
2
|
+
import * as Option from "effect/Option";
|
3
|
+
/** @internal */
|
4
|
+
const EntityStateSymbolKey = "@effect/cluster/EntityState";
|
5
|
+
/** @internal */
|
6
|
+
export const EntityStateTypeId = /*#__PURE__*/Symbol.for(EntityStateSymbolKey);
|
7
|
+
/** @internal */
|
8
|
+
export function make(data) {
|
9
|
+
return Data.struct({
|
10
|
+
[EntityStateTypeId]: EntityStateTypeId,
|
11
|
+
...data
|
12
|
+
});
|
13
|
+
}
|
14
|
+
/** @internal */
|
15
|
+
export function withTerminationFiber(terminationFiber) {
|
16
|
+
return entityState => ({
|
17
|
+
...entityState,
|
18
|
+
terminationFiber: Option.some(terminationFiber)
|
19
|
+
});
|
20
|
+
}
|
21
|
+
/** @internal */
|
22
|
+
export function withExpirationFiber(expirationFiber) {
|
23
|
+
return entityState => ({
|
24
|
+
...entityState,
|
25
|
+
expirationFiber
|
26
|
+
});
|
27
|
+
}
|
28
|
+
/** @internal */
|
29
|
+
export function withLastReceivedAd(lastReceivedAt) {
|
30
|
+
return entityState => ({
|
31
|
+
...entityState,
|
32
|
+
lastReceivedAt
|
33
|
+
});
|
34
|
+
}
|
35
|
+
//# sourceMappingURL=entityState.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"entityState.js","names":["Data","Option","EntityStateSymbolKey","EntityStateTypeId","Symbol","for","make","data","struct","withTerminationFiber","terminationFiber","entityState","some","withExpirationFiber","expirationFiber","withLastReceivedAd","lastReceivedAt"],"sources":["../../../src/internal/entityState.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,IAAI,MAAM,aAAa;AAGnC,OAAO,KAAKC,MAAM,MAAM,eAAe;AAOvC;AACA,MAAMC,oBAAoB,GAAG,6BAA6B;AAE1D;AACA,OAAO,MAAMC,iBAAiB,gBAAGC,MAAM,CAACC,GAAG,CAACH,oBAAoB,CAAC;AAuBjE;AACA,OAAM,SAAUI,IAAIA,CAClBC,IAA0C;EAE1C,OAAOP,IAAI,CAACQ,MAAM,CAAC;IAAE,CAACL,iBAAiB,GAAGA,iBAAiB;IAAE,GAAGI;EAAI,CAAE,CAAC;AACzE;AAEA;AACA,OAAM,SAAUE,oBAAoBA,CAClCC,gBAAiD;EAEjD,OAAQC,WAAW,KAAM;IAAE,GAAGA,WAAW;IAAED,gBAAgB,EAAET,MAAM,CAACW,IAAI,CAACF,gBAAgB;EAAC,CAAE,CAAC;AAC/F;AAEA;AACA,OAAM,SAAUG,mBAAmBA,CACjCC,eAAgD;EAEhD,OAAQH,WAAW,KAAM;IAAE,GAAGA,WAAW;IAAEG;EAAe,CAAE,CAAC;AAC/D;AAEA;AACA,OAAM,SAAUC,kBAAkBA,CAChCC,cAAsB;EAEtB,OAAQL,WAAW,KAAM;IAAE,GAAGA,WAAW;IAAEK;EAAc,CAAE,CAAC;AAC9D","ignoreList":[]}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import * as Config from "effect/Config";
|
2
|
+
import * as Context from "effect/Context";
|
3
|
+
import * as Duration from "effect/Duration";
|
4
|
+
import { pipe } from "effect/Function";
|
5
|
+
import * as Layer from "effect/Layer";
|
6
|
+
/** @internal */
|
7
|
+
const ManagerConfigSymbolKey = "@effect/cluster/ManagerConfig";
|
8
|
+
/** @internal */
|
9
|
+
export const ManagerConfigTypeId = /*#__PURE__*/Symbol.for(ManagerConfigSymbolKey);
|
10
|
+
/** @internal */
|
11
|
+
export const managerConfigTag = /*#__PURE__*/Context.GenericTag(ManagerConfigSymbolKey);
|
12
|
+
/** @internal */
|
13
|
+
const defaultValues = {
|
14
|
+
numberOfShards: 300,
|
15
|
+
apiPort: 8080,
|
16
|
+
rebalanceInterval: /*#__PURE__*/Duration.seconds(20),
|
17
|
+
rebalanceRetryInterval: /*#__PURE__*/Duration.seconds(10),
|
18
|
+
pingTimeout: /*#__PURE__*/Duration.seconds(3),
|
19
|
+
persistRetryInterval: /*#__PURE__*/Duration.seconds(3),
|
20
|
+
persistRetryCount: 100,
|
21
|
+
rebalanceRate: 2 / 100
|
22
|
+
};
|
23
|
+
/** @internal */
|
24
|
+
export const defaults = /*#__PURE__*/Layer.succeed(managerConfigTag, defaultValues);
|
25
|
+
/** @internal */
|
26
|
+
const config = /*#__PURE__*/Config.all({
|
27
|
+
numberOfShards: /*#__PURE__*/pipe( /*#__PURE__*/Config.number("NUMBER_OF_SHARDS"), /*#__PURE__*/Config.withDefault(defaultValues.numberOfShards), /*#__PURE__*/Config.withDescription("Number of shards")),
|
28
|
+
apiPort: /*#__PURE__*/pipe( /*#__PURE__*/Config.integer("API_PORT"), /*#__PURE__*/Config.withDefault(defaultValues.apiPort), /*#__PURE__*/Config.withDescription("API port")),
|
29
|
+
rebalanceInterval: /*#__PURE__*/pipe( /*#__PURE__*/Config.map( /*#__PURE__*/Config.number("REBALANCE_INTERVAL"), Duration.millis), /*#__PURE__*/Config.withDefault(defaultValues.rebalanceInterval), /*#__PURE__*/Config.withDescription("Interval of rebalance")),
|
30
|
+
rebalanceRetryInterval: /*#__PURE__*/pipe( /*#__PURE__*/Config.map( /*#__PURE__*/Config.number("REBALANCE_RETRY_INTERVAL"), Duration.millis), /*#__PURE__*/Config.withDefault(defaultValues.rebalanceRetryInterval), /*#__PURE__*/Config.withDescription("Retry interval of rebalance")),
|
31
|
+
pingTimeout: /*#__PURE__*/pipe( /*#__PURE__*/Config.map( /*#__PURE__*/Config.number("PING_TIMEOUT"), Duration.millis), /*#__PURE__*/Config.withDefault(defaultValues.pingTimeout), /*#__PURE__*/Config.withDescription("Ping timeout")),
|
32
|
+
persistRetryInterval: /*#__PURE__*/pipe( /*#__PURE__*/Config.map( /*#__PURE__*/Config.number("PERSIST_RETRY_INTERVAL"), Duration.millis), /*#__PURE__*/Config.withDefault(defaultValues.persistRetryInterval), /*#__PURE__*/Config.withDescription("Persist retry interval")),
|
33
|
+
persistRetryCount: /*#__PURE__*/pipe( /*#__PURE__*/Config.number("PERSIST_RETRY_COUNT"), /*#__PURE__*/Config.withDefault(defaultValues.persistRetryCount), /*#__PURE__*/Config.withDescription("Persist retry count")),
|
34
|
+
rebalanceRate: /*#__PURE__*/pipe( /*#__PURE__*/Config.number("REBALANCE_RATE"), /*#__PURE__*/Config.withDefault(defaultValues.rebalanceRate), /*#__PURE__*/Config.withDescription("Rebalance rate"))
|
35
|
+
});
|
36
|
+
/** @internal */
|
37
|
+
export const fromConfig = /*#__PURE__*/Layer.effect(managerConfigTag, config);
|
38
|
+
//# sourceMappingURL=managerConfig.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"managerConfig.js","names":["Config","Context","Duration","pipe","Layer","ManagerConfigSymbolKey","ManagerConfigTypeId","Symbol","for","managerConfigTag","GenericTag","defaultValues","numberOfShards","apiPort","rebalanceInterval","seconds","rebalanceRetryInterval","pingTimeout","persistRetryInterval","persistRetryCount","rebalanceRate","defaults","succeed","config","all","number","withDefault","withDescription","integer","map","millis","fromConfig","effect"],"sources":["../../../src/internal/managerConfig.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import * as Schema from "@effect/schema/Schema";
|
2
|
+
import * as Serializable from "@effect/schema/Serializable";
|
3
|
+
import * as PrimaryKey from "effect/PrimaryKey";
|
4
|
+
/** @internal */
|
5
|
+
export function isMessageWithResult(value) {
|
6
|
+
return typeof value === "object" && value !== null && Serializable.symbolResult in value;
|
7
|
+
}
|
8
|
+
/** @internal */
|
9
|
+
export function exitSchema(message) {
|
10
|
+
return Serializable.exitSchema(message);
|
11
|
+
}
|
12
|
+
/** @internal */
|
13
|
+
export function successSchema(message) {
|
14
|
+
return Serializable.successSchema(message);
|
15
|
+
}
|
16
|
+
/** @internal */
|
17
|
+
export function failureSchema(message) {
|
18
|
+
return Serializable.failureSchema(message);
|
19
|
+
}
|
20
|
+
/**
|
21
|
+
* @since 1.0.0
|
22
|
+
* @category schemas
|
23
|
+
*/
|
24
|
+
export const TaggedMessage_ = () => (tag, failure, success, fields, messageToId) => {
|
25
|
+
return class extends Schema.TaggedRequest()(tag, failure, success, fields) {
|
26
|
+
constructor(props, disableValidation) {
|
27
|
+
super(props, disableValidation);
|
28
|
+
this[PrimaryKey.symbol] = () => messageToId(this);
|
29
|
+
}
|
30
|
+
};
|
31
|
+
};
|
32
|
+
//# sourceMappingURL=message.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"message.js","names":["Schema","Serializable","PrimaryKey","isMessageWithResult","value","symbolResult","exitSchema","message","successSchema","failureSchema","TaggedMessage_","tag","failure","success","fields","messageToId","TaggedRequest","constructor","props","disableValidation","symbol"],"sources":["../../../src/internal/message.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,MAAM,MAAM,uBAAuB;AAC/C,OAAO,KAAKC,YAAY,MAAM,6BAA6B;AAC3D,OAAO,KAAKC,UAAU,MAAM,mBAAmB;AAI/C;AACA,OAAM,SAAUC,mBAAmBA,CAACC,KAAc;EAChD,OACE,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,IAC3CH,YAAY,CAACI,YAAY,IAAID,KAAK;AAEtC;AAEA;AACA,OAAM,SAAUE,UAAUA,CACxBC,OAAU;EAEV,OAAON,YAAY,CAACK,UAAU,CAACC,OAAc,CAAQ;AACvD;AAEA;AACA,OAAM,SAAUC,aAAaA,CAC3BD,OAAU;EAEV,OAAON,YAAY,CAACO,aAAa,CAACD,OAAc,CAAQ;AAC1D;AAEA;AACA,OAAM,SAAUE,aAAaA,CAC3BF,OAAU;EAEV,OAAON,YAAY,CAACQ,aAAa,CAACF,OAAc,CAAQ;AAC1D;AAEA;;;;AAIA,OAAO,MAAMG,cAAc,GAAGA,CAAA,KAC9B,CACEC,GAAQ,EACRC,OAAoC,EACpCC,OAAoC,EACpCC,MAAc,EACdC,WAA+D,KAW7D;EACF,OAAO,cAAef,MAAM,CAACgB,aAAa,EAAM,CAACL,GAAG,EAAEC,OAAO,EAAEC,OAAO,EAAEC,MAAM,CAAS;IACrFG,YAAYC,KAAU,EAAEC,iBAA2B;MACjD,KAAK,CAACD,KAAK,EAAEC,iBAAiB,CAAC;MAC7B,IAAY,CAACjB,UAAU,CAACkB,MAAM,CAAC,GAAG,MAAML,WAAW,CAAC,IAAW,CAAC;IACpE;GACM;AACV,CAAC","ignoreList":[]}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
import * as Schema from "@effect/schema/Schema";
|
2
|
+
import * as Effect from "effect/Effect";
|
3
|
+
import { pipe } from "effect/Function";
|
4
|
+
/** @internal */
|
5
|
+
const MessageStateSymbolKey = "@effect/cluster/MessageState";
|
6
|
+
/** @internal */
|
7
|
+
export const MessageStateTypeId = /*#__PURE__*/Symbol.for(MessageStateSymbolKey);
|
8
|
+
/** @internal */
|
9
|
+
export function isMessageState(value) {
|
10
|
+
return typeof value === "object" && value !== null && MessageStateTypeId in value;
|
11
|
+
}
|
12
|
+
/** @internal */
|
13
|
+
export const Acknowledged = {
|
14
|
+
[MessageStateTypeId]: MessageStateTypeId,
|
15
|
+
_tag: "@effect/cluster/MessageState/Acknowledged"
|
16
|
+
};
|
17
|
+
/** @internal */
|
18
|
+
export function Processed(result) {
|
19
|
+
return {
|
20
|
+
[MessageStateTypeId]: MessageStateTypeId,
|
21
|
+
_tag: "@effect/cluster/MessageState/Processed",
|
22
|
+
result
|
23
|
+
};
|
24
|
+
}
|
25
|
+
/** @internal */
|
26
|
+
export function match(cases) {
|
27
|
+
return value => {
|
28
|
+
switch (value._tag) {
|
29
|
+
case "@effect/cluster/MessageState/Acknowledged":
|
30
|
+
return cases.onAcknowledged(value);
|
31
|
+
case "@effect/cluster/MessageState/Processed":
|
32
|
+
return cases.onProcessed(value);
|
33
|
+
}
|
34
|
+
};
|
35
|
+
}
|
36
|
+
/** @internal */
|
37
|
+
export function mapEffect(value, fn) {
|
38
|
+
return pipe(value, match({
|
39
|
+
onAcknowledged: Effect.succeed,
|
40
|
+
onProcessed: _ => Effect.map(fn(_.result), _ => Processed(_))
|
41
|
+
}));
|
42
|
+
}
|
43
|
+
/** @internal */
|
44
|
+
export function schema(result) {
|
45
|
+
return Schema.Union(Schema.rename(Schema.Struct({
|
46
|
+
[MessageStateSymbolKey]: Schema.compose(Schema.compose(Schema.Literal(MessageStateSymbolKey), Schema.Symbol, {
|
47
|
+
strict: false
|
48
|
+
}), Schema.UniqueSymbolFromSelf(MessageStateTypeId), {
|
49
|
+
strict: false
|
50
|
+
}),
|
51
|
+
_tag: Schema.Literal("@effect/cluster/MessageState/Acknowledged")
|
52
|
+
}), {
|
53
|
+
[MessageStateSymbolKey]: MessageStateTypeId
|
54
|
+
}), Schema.rename(Schema.Struct({
|
55
|
+
[MessageStateSymbolKey]: Schema.compose(Schema.compose(Schema.Literal(MessageStateSymbolKey), Schema.Symbol, {
|
56
|
+
strict: false
|
57
|
+
}), Schema.UniqueSymbolFromSelf(MessageStateTypeId), {
|
58
|
+
strict: false
|
59
|
+
}),
|
60
|
+
_tag: Schema.Literal("@effect/cluster/MessageState/Processed"),
|
61
|
+
result
|
62
|
+
}), {
|
63
|
+
[MessageStateSymbolKey]: MessageStateTypeId
|
64
|
+
}));
|
65
|
+
}
|
66
|
+
//# sourceMappingURL=messageState.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"messageState.js","names":["Schema","Effect","pipe","MessageStateSymbolKey","MessageStateTypeId","Symbol","for","isMessageState","value","Acknowledged","_tag","Processed","result","match","cases","onAcknowledged","onProcessed","mapEffect","fn","succeed","_","map","schema","Union","rename","Struct","compose","Literal","strict","UniqueSymbolFromSelf"],"sources":["../../../src/internal/messageState.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,MAAM,MAAM,uBAAuB;AAC/C,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,IAAI,QAAQ,iBAAiB;AAGtC;AACA,MAAMC,qBAAqB,GAAG,8BAA8B;AAE5D;AACA,OAAO,MAAMC,kBAAkB,gBAAoCC,MAAM,CAACC,GAAG,CAC3EH,qBAAqB,CACa;AAEpC;AACA,OAAM,SAAUI,cAAcA,CAACC,KAAc;EAC3C,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,IAAIJ,kBAAkB,IAAII,KAAK;AACnF;AAEA;AACA,OAAO,MAAMC,YAAY,GAA0C;EACjE,CAACL,kBAAkB,GAAGA,kBAAkB;EACxCM,IAAI,EAAE;CACP;AAED;AACA,OAAM,SAAUC,SAASA,CAAIC,MAAS;EACpC,OAAQ;IACN,CAACR,kBAAkB,GAAGA,kBAAkB;IACxCM,IAAI,EAAE,wCAAwC;IAC9CE;GACD;AACH;AAEA;AACA,OAAM,SAAUC,KAAKA,CACnBC,KAGC;EAED,OAAQN,KAAmC,IAAI;IAC7C,QAAQA,KAAK,CAACE,IAAI;MAChB,KAAK,2CAA2C;QAC9C,OAAOI,KAAK,CAACC,cAAc,CAACP,KAAK,CAAC;MACpC,KAAK,wCAAwC;QAC3C,OAAOM,KAAK,CAACE,WAAW,CAACR,KAAK,CAAC;IACnC;EACF,CAAC;AACH;AAEA;AACA,OAAM,SAAUS,SAASA,CACvBT,KAAmC,EACnCU,EAAwC;EAExC,OAAOhB,IAAI,CACTM,KAAK,EACLK,KAAK,CAAC;IACJE,cAAc,EAAEd,MAAM,CAACkB,OAAO;IAC9BH,WAAW,EAAGI,CAAC,IACbnB,MAAM,CAACoB,GAAG,CAACH,EAAE,CAACE,CAAC,CAACR,MAAM,CAAC,EAAGQ,CAAC,IAAKT,SAAS,CAACS,CAAC,CAAC;GAC/C,CAAC,CACH;AACH;AAEA;AACA,OAAM,SAAUE,MAAMA,CACpBV,MAA2B;EAK3B,OAAOZ,MAAM,CAACuB,KAAK,CACjBvB,MAAM,CAACwB,MAAM,CACXxB,MAAM,CAACyB,MAAM,CAAC;IACZ,CAACtB,qBAAqB,GAAGH,MAAM,CAAC0B,OAAO,CACrC1B,MAAM,CAAC0B,OAAO,CAAC1B,MAAM,CAAC2B,OAAO,CAACxB,qBAAqB,CAAC,EAAEH,MAAM,CAACK,MAAM,EAAE;MAAEuB,MAAM,EAAE;IAAK,CAAE,CAAC,EACvF5B,MAAM,CAAC6B,oBAAoB,CAACzB,kBAAkB,CAAC,EAC/C;MAAEwB,MAAM,EAAE;IAAK,CAAE,CAClB;IACDlB,IAAI,EAAEV,MAAM,CAAC2B,OAAO,CAAC,2CAA2C;GACjE,CAAC,EACF;IAAE,CAACxB,qBAAqB,GAAGC;EAAkB,CAAE,CAChD,EACDJ,MAAM,CAACwB,MAAM,CACXxB,MAAM,CAACyB,MAAM,CAAC;IACZ,CAACtB,qBAAqB,GAAGH,MAAM,CAAC0B,OAAO,CACrC1B,MAAM,CAAC0B,OAAO,CAAC1B,MAAM,CAAC2B,OAAO,CAACxB,qBAAqB,CAAC,EAAEH,MAAM,CAACK,MAAM,EAAE;MAAEuB,MAAM,EAAE;IAAK,CAAE,CAAC,EACvF5B,MAAM,CAAC6B,oBAAoB,CAACzB,kBAAkB,CAAC,EAC/C;MAAEwB,MAAM,EAAE;IAAK,CAAE,CAClB;IACDlB,IAAI,EAAEV,MAAM,CAAC2B,OAAO,CAAC,wCAAwC,CAAC;IAC9Df;GACD,CAAC,EACF;IAAE,CAACT,qBAAqB,GAAGC;EAAkB,CAAE,CAChD,CACF;AACH","ignoreList":[]}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
import * as Data from "effect/Data";
|
2
|
+
import { pipe } from "effect/Function";
|
3
|
+
import * as List from "effect/List";
|
4
|
+
import * as Option from "effect/Option";
|
5
|
+
/** @internal */
|
6
|
+
const PodWithMetadataSymbolKey = "@effect/cluster/PodWithMetadata";
|
7
|
+
/** @internal */
|
8
|
+
export const PodWithMetadataTypeId = /*#__PURE__*/Symbol.for(PodWithMetadataSymbolKey);
|
9
|
+
/** @internal */
|
10
|
+
export class PodWithMetadata extends Data.Class {}
|
11
|
+
/** @internal */
|
12
|
+
export function make(pod, registered) {
|
13
|
+
return new PodWithMetadata({
|
14
|
+
[PodWithMetadataTypeId]: PodWithMetadataTypeId,
|
15
|
+
pod,
|
16
|
+
registered
|
17
|
+
});
|
18
|
+
}
|
19
|
+
/** @internal */
|
20
|
+
export function isPodWithMetadata(value) {
|
21
|
+
return typeof value === "object" && value !== null && PodWithMetadataTypeId in value && value[PodWithMetadataTypeId] === PodWithMetadataTypeId;
|
22
|
+
}
|
23
|
+
/** @internal */
|
24
|
+
export function extractVersion(pod) {
|
25
|
+
return pipe(List.fromIterable(pod.pod.version.split(".")), List.map(_ => parseInt(_, 10)));
|
26
|
+
}
|
27
|
+
/** @internal */
|
28
|
+
export function compareVersion(a, b) {
|
29
|
+
let restA = a;
|
30
|
+
let restB = b;
|
31
|
+
while (List.size(restA) > 0 || List.size(restB) > 0) {
|
32
|
+
const numA = pipe(List.head(restA), Option.getOrElse(() => 0));
|
33
|
+
const numB = pipe(List.head(restB), Option.getOrElse(() => 0));
|
34
|
+
if (numA < numB) return -1;
|
35
|
+
if (numB > numA) return 1;
|
36
|
+
restA = pipe(List.tail(restA), Option.getOrElse(() => List.empty()));
|
37
|
+
restB = pipe(List.tail(restB), Option.getOrElse(() => List.empty()));
|
38
|
+
}
|
39
|
+
return 0;
|
40
|
+
}
|
41
|
+
//# sourceMappingURL=podWithMetadata.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"podWithMetadata.js","names":["Data","pipe","List","Option","PodWithMetadataSymbolKey","PodWithMetadataTypeId","Symbol","for","PodWithMetadata","Class","make","pod","registered","isPodWithMetadata","value","extractVersion","fromIterable","version","split","map","_","parseInt","compareVersion","a","b","restA","restB","size","numA","head","getOrElse","numB","tail","empty"],"sources":["../../../src/internal/podWithMetadata.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,IAAI,MAAM,aAAa;AACnC,SAASC,IAAI,QAAQ,iBAAiB;AACtC,OAAO,KAAKC,IAAI,MAAM,aAAa;AACnC,OAAO,KAAKC,MAAM,MAAM,eAAe;AAGvC;AACA,MAAMC,wBAAwB,GAAG,iCAAiC;AAElE;AACA,OAAO,MAAMC,qBAAqB,gBAAGC,MAAM,CAACC,GAAG,CAACH,wBAAwB,CAAC;AAKzE;AACA,OAAM,MAAOI,eAAgB,SAAQR,IAAI,CAACS,KAIxC;AAEF;AACA,OAAM,SAAUC,IAAIA,CAACC,GAAY,EAAEC,UAAkB;EACnD,OAAO,IAAIJ,eAAe,CAAC;IAAE,CAACH,qBAAqB,GAAGA,qBAAqB;IAAEM,GAAG;IAAEC;EAAU,CAAE,CAAC;AACjG;AAEA;AACA,OAAM,SAAUC,iBAAiBA,CAACC,KAAc;EAC9C,OACE,OAAOA,KAAK,KAAK,QAAQ,IACzBA,KAAK,KAAK,IAAI,IACdT,qBAAqB,IAAIS,KAAK,IAC9BA,KAAK,CAACT,qBAAqB,CAAC,KAAKA,qBAAqB;AAE1D;AAEA;AACA,OAAM,SAAUU,cAAcA,CAACJ,GAAoB;EACjD,OAAOV,IAAI,CACTC,IAAI,CAACc,YAAY,CAACL,GAAG,CAACA,GAAG,CAACM,OAAO,CAACC,KAAK,CAAC,GAAG,CAAC,CAAC,EAC7ChB,IAAI,CAACiB,GAAG,CAAEC,CAAC,IAAKC,QAAQ,CAACD,CAAC,EAAE,EAAE,CAAC,CAAC,CACjC;AACH;AAEA;AACA,OAAM,SAAUE,cAAcA,CAACC,CAAoB,EAAEC,CAAoB;EACvE,IAAIC,KAAK,GAAGF,CAAC;EACb,IAAIG,KAAK,GAAGF,CAAC;EACb,OAAOtB,IAAI,CAACyB,IAAI,CAACF,KAAK,CAAC,GAAG,CAAC,IAAIvB,IAAI,CAACyB,IAAI,CAACD,KAAK,CAAC,GAAG,CAAC,EAAE;IACnD,MAAME,IAAI,GAAG3B,IAAI,CACfC,IAAI,CAAC2B,IAAI,CAACJ,KAAK,CAAC,EAChBtB,MAAM,CAAC2B,SAAS,CAAC,MAAM,CAAC,CAAC,CAC1B;IACD,MAAMC,IAAI,GAAG9B,IAAI,CACfC,IAAI,CAAC2B,IAAI,CAACH,KAAK,CAAC,EAChBvB,MAAM,CAAC2B,SAAS,CAAC,MAAM,CAAC,CAAC,CAC1B;IAED,IAAIF,IAAI,GAAGG,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1B,IAAIA,IAAI,GAAGH,IAAI,EAAE,OAAO,CAAC;IACzBH,KAAK,GAAGxB,IAAI,CACVC,IAAI,CAAC8B,IAAI,CAACP,KAAK,CAAC,EAChBtB,MAAM,CAAC2B,SAAS,CAAC,MAAM5B,IAAI,CAAC+B,KAAK,EAAE,CAAC,CACrC;IACDP,KAAK,GAAGzB,IAAI,CACVC,IAAI,CAAC8B,IAAI,CAACN,KAAK,CAAC,EAChBvB,MAAM,CAAC2B,SAAS,CAAC,MAAM5B,IAAI,CAAC+B,KAAK,EAAE,CAAC,CACrC;EACH;EACA,OAAO,CAAC;AACV","ignoreList":[]}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import * as Context from "effect/Context";
|
2
|
+
import * as Effect from "effect/Effect";
|
3
|
+
import * as Layer from "effect/Layer";
|
4
|
+
/** @internal */
|
5
|
+
const PodsSymbolKey = "@effect/cluster/Pods";
|
6
|
+
/** @internal */
|
7
|
+
export const PodsTypeId = /*#__PURE__*/Symbol.for(PodsSymbolKey);
|
8
|
+
/** @internal */
|
9
|
+
export const podsTag = /*#__PURE__*/Context.GenericTag(PodsSymbolKey);
|
10
|
+
/** @internal */
|
11
|
+
export function make(args) {
|
12
|
+
return {
|
13
|
+
[PodsTypeId]: PodsTypeId,
|
14
|
+
...args
|
15
|
+
};
|
16
|
+
}
|
17
|
+
/** @internal */
|
18
|
+
export const noop = /*#__PURE__*/Layer.succeed(podsTag, {
|
19
|
+
[PodsTypeId]: PodsTypeId,
|
20
|
+
assignShards: () => Effect.void,
|
21
|
+
unassignShards: () => Effect.void,
|
22
|
+
ping: () => Effect.void,
|
23
|
+
sendAndGetState: () => Effect.never
|
24
|
+
});
|
25
|
+
//# sourceMappingURL=pods.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"pods.js","names":["Context","Effect","Layer","PodsSymbolKey","PodsTypeId","Symbol","for","podsTag","GenericTag","make","args","noop","succeed","assignShards","void","unassignShards","ping","sendAndGetState","never"],"sources":["../../../src/internal/pods.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AAGrC;AACA,MAAMC,aAAa,GAAG,sBAAsB;AAE5C;AACA,OAAO,MAAMC,UAAU,gBAAoBC,MAAM,CAACC,GAAG,CAACH,aAAa,CAAoB;AAEvF;AACA,OAAO,MAAMI,OAAO,gBAAGP,OAAO,CAACQ,UAAU,CAAYL,aAAa,CAAC;AAEnE;AACA,OAAM,SAAUM,IAAIA,CAClBC,IAAsC;EAEtC,OAAO;IAAE,CAACN,UAAU,GAAGA,UAAU;IAAE,GAAGM;EAAI,CAAE;AAC9C;AAEA;AACA,OAAO,MAAMC,IAAI,gBAAGT,KAAK,CAACU,OAAO,CAACL,OAAO,EAAE;EACzC,CAACH,UAAU,GAAGA,UAAU;EACxBS,YAAY,EAAEA,CAAA,KAAMZ,MAAM,CAACa,IAAI;EAC/BC,cAAc,EAAEA,CAAA,KAAMd,MAAM,CAACa,IAAI;EACjCE,IAAI,EAAEA,CAAA,KAAMf,MAAM,CAACa,IAAI;EACvBG,eAAe,EAAEA,CAAA,KAAMhB,MAAM,CAACiB;CAC/B,CAAC","ignoreList":[]}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import * as Context from "effect/Context";
|
2
|
+
import * as Data from "effect/Data";
|
3
|
+
import * as Effect from "effect/Effect";
|
4
|
+
import { pipe } from "effect/Function";
|
5
|
+
import * as Layer from "effect/Layer";
|
6
|
+
import * as Option from "effect/Option";
|
7
|
+
import * as Pods from "../Pods.js";
|
8
|
+
/** @internal */
|
9
|
+
const PodsHealthSymbolKey = "@effect/cluster/PodsHealth";
|
10
|
+
/** @internal */
|
11
|
+
export const PodsHealthTypeId = /*#__PURE__*/Symbol.for(PodsHealthSymbolKey);
|
12
|
+
/** @internal */
|
13
|
+
export const podsHealthTag = /*#__PURE__*/Context.GenericTag(PodsHealthSymbolKey);
|
14
|
+
/** @internal */
|
15
|
+
export function make(args) {
|
16
|
+
return Data.struct({
|
17
|
+
[PodsHealthTypeId]: PodsHealthTypeId,
|
18
|
+
...args
|
19
|
+
});
|
20
|
+
}
|
21
|
+
/** @internal */
|
22
|
+
export const noop = /*#__PURE__*/Layer.succeed(podsHealthTag, {
|
23
|
+
[PodsHealthTypeId]: PodsHealthTypeId,
|
24
|
+
isAlive: () => Effect.succeed(true)
|
25
|
+
});
|
26
|
+
/** @internal */
|
27
|
+
export const local = /*#__PURE__*/Layer.effect(podsHealthTag, /*#__PURE__*/Effect.map(Pods.Pods, podApi => make({
|
28
|
+
isAlive: address => pipe(podApi.ping(address), Effect.option, Effect.map(Option.isSome))
|
29
|
+
})));
|
30
|
+
//# sourceMappingURL=podsHealth.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"podsHealth.js","names":["Context","Data","Effect","pipe","Layer","Option","Pods","PodsHealthSymbolKey","PodsHealthTypeId","Symbol","for","podsHealthTag","GenericTag","make","args","struct","noop","succeed","isAlive","local","effect","map","podApi","address","ping","option","isSome"],"sources":["../../../src/internal/podsHealth.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,IAAI,MAAM,aAAa;AACnC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,IAAI,QAAQ,iBAAiB;AACtC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,IAAI,MAAM,YAAY;AAGlC;AACA,MAAMC,mBAAmB,GAAG,4BAA4B;AAExD;AACA,OAAO,MAAMC,gBAAgB,gBAAgCC,MAAM,CAACC,GAAG,CACrEH,mBAAmB,CACW;AAEhC;AACA,OAAO,MAAMI,aAAa,gBAAGX,OAAO,CAACY,UAAU,CAAwBL,mBAAmB,CAAC;AAE3F;AACA,OAAM,SAAUM,IAAIA,CAACC,IAA8D;EACjF,OAAOb,IAAI,CAACc,MAAM,CAAC;IAAE,CAACP,gBAAgB,GAAGA,gBAAgB;IAAE,GAAGM;EAAI,CAAE,CAAC;AACvE;AAEA;AACA,OAAO,MAAME,IAAI,gBAAGZ,KAAK,CAACa,OAAO,CAACN,aAAa,EAAE;EAC/C,CAACH,gBAAgB,GAAGA,gBAAgB;EACpCU,OAAO,EAAEA,CAAA,KAAMhB,MAAM,CAACe,OAAO,CAAC,IAAI;CACnC,CAAC;AAEF;AACA,OAAO,MAAME,KAAK,gBAAGf,KAAK,CAACgB,MAAM,CAC/BT,aAAa,eACbT,MAAM,CAACmB,GAAG,CAACf,IAAI,CAACA,IAAI,EAAGgB,MAAM,IAC3BT,IAAI,CAAC;EACHK,OAAO,EAAGK,OAAO,IAAKpB,IAAI,CAACmB,MAAM,CAACE,IAAI,CAACD,OAAO,CAAC,EAAErB,MAAM,CAACuB,MAAM,EAAEvB,MAAM,CAACmB,GAAG,CAAChB,MAAM,CAACqB,MAAM,CAAC;CAC1F,CAAC,CAAC,CACN","ignoreList":[]}
|
@@ -0,0 +1,42 @@
|
|
1
|
+
import * as Deferred from "effect/Deferred";
|
2
|
+
import * as Effect from "effect/Effect";
|
3
|
+
import { pipe } from "effect/Function";
|
4
|
+
import * as HashMap from "effect/HashMap";
|
5
|
+
import * as Option from "effect/Option";
|
6
|
+
import * as PrimaryKey from "effect/PrimaryKey";
|
7
|
+
import * as Queue from "effect/Queue";
|
8
|
+
import * as Ref from "effect/Ref";
|
9
|
+
import * as MessageState from "../MessageState.js";
|
10
|
+
import * as PoisonPill from "../PoisonPill.js";
|
11
|
+
import * as RecipientBehaviourContext from "../RecipientBehaviourContext.js";
|
12
|
+
/** @internal */
|
13
|
+
export function fromFunctionEffect(handler) {
|
14
|
+
return Effect.flatMap(RecipientBehaviourContext.entityId, entityId => pipe(Effect.context(), Effect.map(context => message => pipe(handler(entityId, message), Effect.provide(context)))));
|
15
|
+
}
|
16
|
+
/** @internal */
|
17
|
+
export function fromFunctionEffectStateful(initialState, handler) {
|
18
|
+
return Effect.flatMap(RecipientBehaviourContext.entityId, entityId => pipe(initialState(entityId), Effect.flatMap(Ref.make), Effect.flatMap(stateRef => pipe(Effect.context(), Effect.map(context => message => pipe(handler(entityId, message, stateRef), Effect.provide(context)))))));
|
19
|
+
}
|
20
|
+
/** @internal */
|
21
|
+
export function fromInMemoryQueue(handler) {
|
22
|
+
return Effect.gen(function* (_) {
|
23
|
+
const entityId = yield* _(RecipientBehaviourContext.entityId);
|
24
|
+
const messageStates = yield* _(Ref.make(HashMap.empty()));
|
25
|
+
function updateMessageState(message, state) {
|
26
|
+
return pipe(Ref.update(messageStates, HashMap.set(PrimaryKey.value(message), state)), Effect.as(state));
|
27
|
+
}
|
28
|
+
function getMessageState(message) {
|
29
|
+
return pipe(Ref.get(messageStates), Effect.map(HashMap.get(PrimaryKey.value(message))));
|
30
|
+
}
|
31
|
+
function reply(message, reply) {
|
32
|
+
return updateMessageState(message, MessageState.Processed(reply));
|
33
|
+
}
|
34
|
+
return yield* _(pipe(Deferred.make(), Effect.flatMap(shutdownCompleted => pipe(Effect.acquireRelease(Queue.unbounded(), queue => pipe(PoisonPill.make, Effect.flatMap(msg => Queue.offer(queue, msg)), Effect.zipLeft(Deferred.await(shutdownCompleted)), Effect.uninterruptible)), Effect.tap(queue => pipe(Effect.logDebug("Behaviour started."), Effect.zipRight(handler(entityId, queue, reply)), Effect.ensuring(Deferred.succeed(shutdownCompleted, true)), Effect.zipRight(Effect.logDebug("Behaviour exited.")), Effect.annotateLogs("entityId", entityId), Effect.forkDaemon)), Effect.map(queue => message => {
|
35
|
+
return pipe(getMessageState(message), Effect.flatMap(Option.match({
|
36
|
+
onNone: () => pipe(Queue.offer(queue, message), Effect.zipRight(updateMessageState(message, MessageState.Acknowledged))),
|
37
|
+
onSome: state => Effect.succeed(state)
|
38
|
+
})));
|
39
|
+
}), Effect.annotateLogs("entityId", entityId)))));
|
40
|
+
});
|
41
|
+
}
|
42
|
+
//# sourceMappingURL=recipientBehaviour.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"recipientBehaviour.js","names":["Deferred","Effect","pipe","HashMap","Option","PrimaryKey","Queue","Ref","MessageState","PoisonPill","RecipientBehaviourContext","fromFunctionEffect","handler","flatMap","entityId","context","map","message","provide","fromFunctionEffectStateful","initialState","make","stateRef","fromInMemoryQueue","gen","_","messageStates","empty","updateMessageState","state","update","set","value","as","getMessageState","get","reply","Processed","shutdownCompleted","acquireRelease","unbounded","queue","msg","offer","zipLeft","await","uninterruptible","tap","logDebug","zipRight","ensuring","succeed","annotateLogs","forkDaemon","match","onNone","Acknowledged","onSome"],"sources":["../../../src/internal/recipientBehaviour.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,QAAQ,MAAM,iBAAiB;AAC3C,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,IAAI,QAAQ,iBAAiB;AACtC,OAAO,KAAKC,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,UAAU,MAAM,mBAAmB;AAC/C,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,GAAG,MAAM,YAAY;AAEjC,OAAO,KAAKC,YAAY,MAAM,oBAAoB;AAClD,OAAO,KAAKC,UAAU,MAAM,kBAAkB;AAE9C,OAAO,KAAKC,yBAAyB,MAAM,iCAAiC;AAE5E;AACA,OAAM,SAAUC,kBAAkBA,CAChCC,OAGkF;EAElF,OAAOX,MAAM,CAACY,OAAO,CAACH,yBAAyB,CAACI,QAAQ,EAAGA,QAAQ,IACjEZ,IAAI,CACFD,MAAM,CAACc,OAAO,EAAK,EACnBd,MAAM,CAACe,GAAG,CAAED,OAAO,IAAME,OAAY,IACnCf,IAAI,CACFU,OAAO,CAACE,QAAQ,EAAEG,OAAO,CAAC,EAC1BhB,MAAM,CAACiB,OAAO,CAACH,OAAO,CAAC,CACxB,CACF,CACF,CAAC;AACN;AAEA;AACA,OAAM,SAAUI,0BAA0BA,CACxCC,YAA8D,EAC9DR,OAImF;EAEnF,OAAOX,MAAM,CAACY,OAAO,CAACH,yBAAyB,CAACI,QAAQ,EAAGA,QAAQ,IACjEZ,IAAI,CACFkB,YAAY,CAACN,QAAQ,CAAC,EACtBb,MAAM,CAACY,OAAO,CAACN,GAAG,CAACc,IAAI,CAAC,EACxBpB,MAAM,CAACY,OAAO,CAAES,QAAQ,IACtBpB,IAAI,CACFD,MAAM,CAACc,OAAO,EAAM,EACpBd,MAAM,CAACe,GAAG,CAAED,OAAO,IAAME,OAAY,IACnCf,IAAI,CACFU,OAAO,CAACE,QAAQ,EAAEG,OAAO,EAAEK,QAAQ,CAAC,EACpCrB,MAAM,CAACiB,OAAO,CAACH,OAAO,CAAC,CACxB,CACF,CACF,CACF,CACF,CAAC;AACN;AAEA;AACA,OAAM,SAAUQ,iBAAiBA,CAC/BX,OAOkC;EAElC,OAAOX,MAAM,CAACuB,GAAG,CAAC,WAAUC,CAAC;IAC3B,MAAMX,QAAQ,GAAG,OAAOW,CAAC,CAACf,yBAAyB,CAACI,QAAQ,CAAC;IAC7D,MAAMY,aAAa,GAAG,OAAOD,CAAC,CAAClB,GAAG,CAACc,IAAI,CAAClB,OAAO,CAACwB,KAAK,EAA0C,CAAC,CAAC;IAEjG,SAASC,kBAAkBA,CAACX,OAAY,EAAEY,KAAqC;MAC7E,OAAO3B,IAAI,CAACK,GAAG,CAACuB,MAAM,CAACJ,aAAa,EAAEvB,OAAO,CAAC4B,GAAG,CAAC1B,UAAU,CAAC2B,KAAK,CAACf,OAAO,CAAC,EAAEY,KAAK,CAAC,CAAC,EAAE5B,MAAM,CAACgC,EAAE,CAACJ,KAAK,CAAC,CAAC;IACzG;IAEA,SAASK,eAAeA,CAACjB,OAAY;MACnC,OAAOf,IAAI,CACTK,GAAG,CAAC4B,GAAG,CAACT,aAAa,CAAC,EACtBzB,MAAM,CAACe,GAAG,CAACb,OAAO,CAACgC,GAAG,CAAC9B,UAAU,CAAC2B,KAAK,CAACf,OAAO,CAAC,CAAC,CAAC,CACnD;IACH;IAEA,SAASmB,KAAKA,CAAgBnB,OAAU,EAAEmB,KAA6C;MACrF,OAAOR,kBAAkB,CAACX,OAAO,EAAET,YAAY,CAAC6B,SAAS,CAACD,KAAK,CAAC,CAAC;IACnE;IAEA,OAAO,OAAOX,CAAC,CAACvB,IAAI,CAClBF,QAAQ,CAACqB,IAAI,EAAW,EACxBpB,MAAM,CAACY,OAAO,CAAEyB,iBAAiB,IAC/BpC,IAAI,CACFD,MAAM,CAACsC,cAAc,CACnBjC,KAAK,CAACkC,SAAS,EAA+B,EAC7CC,KAAK,IACJvC,IAAI,CACFO,UAAU,CAACY,IAAI,EACfpB,MAAM,CAACY,OAAO,CAAE6B,GAAG,IAAKpC,KAAK,CAACqC,KAAK,CAACF,KAAK,EAAEC,GAAG,CAAC,CAAC,EAChDzC,MAAM,CAAC2C,OAAO,CAAC5C,QAAQ,CAAC6C,KAAK,CAACP,iBAAiB,CAAC,CAAC,EACjDrC,MAAM,CAAC6C,eAAe,CACvB,CACJ,EACD7C,MAAM,CAAC8C,GAAG,CAAEN,KAAK,IACfvC,IAAI,CACFD,MAAM,CAAC+C,QAAQ,CAAC,oBAAoB,CAAC,EACrC/C,MAAM,CAACgD,QAAQ,CAACrC,OAAO,CAACE,QAAQ,EAAE2B,KAAK,EAAEL,KAAK,CAAC,CAAC,EAChDnC,MAAM,CAACiD,QAAQ,CAAClD,QAAQ,CAACmD,OAAO,CAACb,iBAAiB,EAAE,IAAI,CAAC,CAAC,EAC1DrC,MAAM,CAACgD,QAAQ,CAAChD,MAAM,CAAC+C,QAAQ,CAAC,mBAAmB,CAAC,CAAC,EACrD/C,MAAM,CAACmD,YAAY,CAAC,UAAU,EAAEtC,QAAQ,CAAC,EACzCb,MAAM,CAACoD,UAAU,CAClB,CACF,EACDpD,MAAM,CAACe,GAAG,CAAEyB,KAAK,IAAMxB,OAAY,IAAI;MACrC,OAAOf,IAAI,CACTgC,eAAe,CAACjB,OAAO,CAAC,EACxBhB,MAAM,CAACY,OAAO,CAACT,MAAM,CAACkD,KAAK,CAAC;QAC1BC,MAAM,EAAEA,CAAA,KACNrD,IAAI,CACFI,KAAK,CAACqC,KAAK,CAACF,KAAK,EAAExB,OAAO,CAAC,EAC3BhB,MAAM,CAACgD,QAAQ,CAACrB,kBAAkB,CAACX,OAAO,EAAET,YAAY,CAACgD,YAAY,CAAC,CAAC,CACxE;QACHC,MAAM,EAAG5B,KAAK,IAAK5B,MAAM,CAACkD,OAAO,CAACtB,KAAK;OACxC,CAAC,CAAC,CACJ;IACH,CAAC,CAAC,EACF5B,MAAM,CAACmD,YAAY,CAAC,UAAU,EAAEtC,QAAQ,CAAC,CAC1C,CACF,CACF,CAAC;EACJ,CAAC,CAAC;AACJ","ignoreList":[]}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import * as Context from "effect/Context";
|
2
|
+
import * as Effect from "effect/Effect";
|
3
|
+
/** @internal */
|
4
|
+
const RecipientBehaviourContextSymbolKey = "@effect/cluster/RecipientBehaviourContext";
|
5
|
+
/** @internal */
|
6
|
+
export const RecipientBehaviourContextTypeId = /*#__PURE__*/Symbol.for(RecipientBehaviourContextSymbolKey);
|
7
|
+
/** @internal */
|
8
|
+
export const recipientBehaviourContextTag = /*#__PURE__*/Context.GenericTag(RecipientBehaviourContextSymbolKey);
|
9
|
+
/** @internal */
|
10
|
+
export function make(args) {
|
11
|
+
return {
|
12
|
+
[RecipientBehaviourContextTypeId]: RecipientBehaviourContextTypeId,
|
13
|
+
...args
|
14
|
+
};
|
15
|
+
}
|
16
|
+
/** @internal */
|
17
|
+
export const recipientAddress = /*#__PURE__*/Effect.map(recipientBehaviourContextTag, _ => _.recipientAddress);
|
18
|
+
/** @internal */
|
19
|
+
export const entityId = /*#__PURE__*/Effect.map(recipientAddress, _ => _.entityId);
|
20
|
+
/** @internal */
|
21
|
+
export const shardId = /*#__PURE__*/Effect.map(recipientBehaviourContextTag, _ => _.shardId);
|
22
|
+
/** @internal */
|
23
|
+
export const recipientType = /*#__PURE__*/Effect.map(recipientBehaviourContextTag, _ => _.recipientType);
|
24
|
+
/** @internal */
|
25
|
+
export const forkShutdown = /*#__PURE__*/Effect.flatMap(recipientBehaviourContextTag, _ => _.forkShutdown);
|
26
|
+
//# sourceMappingURL=recipientBehaviourContext.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"recipientBehaviourContext.js","names":["Context","Effect","RecipientBehaviourContextSymbolKey","RecipientBehaviourContextTypeId","Symbol","for","recipientBehaviourContextTag","GenericTag","make","args","recipientAddress","map","_","entityId","shardId","recipientType","forkShutdown","flatMap"],"sources":["../../../src/internal/recipientBehaviourContext.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,MAAM,MAAM,eAAe;AAOvC;AACA,MAAMC,kCAAkC,GAAG,2CAA2C;AAEtF;AACA,OAAO,MAAMC,+BAA+B,gBAA8DC,MAAM,CAACC,GAAG,CAClHH,kCAAkC,CAC0B;AAE9D;AACA,OAAO,MAAMI,4BAA4B,gBAAGN,OAAO,CAACO,UAAU,CAC5DL,kCAAkC,CACnC;AAED;AACA,OAAM,SAAUM,IAAIA,CAClBC,IAGC;EAED,OAAQ;IAAE,CAACN,+BAA+B,GAAGA,+BAA+B;IAAE,GAAGM;EAAI,CAAE;AACzF;AAEA;AACA,OAAO,MAAMC,gBAAgB,gBAIzBT,MAAM,CAACU,GAAG,CACZL,4BAA4B,EAC3BM,CAAC,IAAKA,CAAC,CAACF,gBAAgB,CAC1B;AAED;AACA,OAAO,MAAMG,QAAQ,gBAAsFZ,MAAM,CAACU,GAAG,CACnHD,gBAAgB,EACfE,CAAC,IAAKA,CAAC,CAACC,QAAQ,CAClB;AAED;AACA,OAAO,MAAMC,OAAO,gBAClBb,MAAM,CAACU,GAAG,CACRL,4BAA4B,EAC3BM,CAAC,IAAKA,CAAC,CAACE,OAAO,CACjB;AAEH;AACA,OAAO,MAAMC,aAAa,gBAItBd,MAAM,CAACU,GAAG,CACZL,4BAA4B,EAC3BM,CAAC,IAAKA,CAAC,CAACG,aAAa,CACvB;AAED;AACA,OAAO,MAAMC,YAAY,gBAAoFf,MAAM,CAChHgB,OAAO,CACNX,4BAA4B,EAC3BM,CAAC,IAAKA,CAAC,CAACI,YAAY,CACtB","ignoreList":[]}
|