@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,39 @@
|
|
1
|
+
import * as Schema from "@effect/schema/Schema";
|
2
|
+
import * as TreeFormatter from "@effect/schema/TreeFormatter";
|
3
|
+
import * as Context from "effect/Context";
|
4
|
+
import * as Effect from "effect/Effect";
|
5
|
+
import { pipe } from "effect/Function";
|
6
|
+
import * as Layer from "effect/Layer";
|
7
|
+
import * as SerializedMessage from "../SerializedMessage.js";
|
8
|
+
import * as ShardingException from "../ShardingException.js";
|
9
|
+
/** @internal */
|
10
|
+
const SerializationSymbolKey = "@effect/cluster/Serialization";
|
11
|
+
/** @internal */
|
12
|
+
export const SerializationTypeId = /*#__PURE__*/Symbol.for(SerializationSymbolKey);
|
13
|
+
/** @internal */
|
14
|
+
export const serializationTag = /*#__PURE__*/Context.GenericTag(SerializationSymbolKey);
|
15
|
+
/** @internal */
|
16
|
+
function jsonStringify(value, schema) {
|
17
|
+
return pipe(value, Schema.encode(schema), Effect.mapError(e => new ShardingException.SerializationException({
|
18
|
+
error: TreeFormatter.formatError(e)
|
19
|
+
})), Effect.map(_ => JSON.stringify(_)));
|
20
|
+
}
|
21
|
+
/** @internal */
|
22
|
+
function jsonParse(value, schema) {
|
23
|
+
return pipe(Effect.sync(() => JSON.parse(value)), Effect.flatMap(Schema.decode(schema)), Effect.mapError(e => new ShardingException.SerializationException({
|
24
|
+
error: TreeFormatter.formatError(e)
|
25
|
+
})));
|
26
|
+
}
|
27
|
+
/** @internal */
|
28
|
+
export function make(args) {
|
29
|
+
return {
|
30
|
+
...args,
|
31
|
+
[SerializationTypeId]: SerializationTypeId
|
32
|
+
};
|
33
|
+
}
|
34
|
+
/** @internal */
|
35
|
+
export const json = /*#__PURE__*/Layer.succeed(serializationTag, /*#__PURE__*/make({
|
36
|
+
encode: (schema, message) => pipe(jsonStringify(message, schema), Effect.map(SerializedMessage.make)),
|
37
|
+
decode: (schema, body) => jsonParse(body.value, schema)
|
38
|
+
}));
|
39
|
+
//# sourceMappingURL=serialization.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"serialization.js","names":["Schema","TreeFormatter","Context","Effect","pipe","Layer","SerializedMessage","ShardingException","SerializationSymbolKey","SerializationTypeId","Symbol","for","serializationTag","GenericTag","jsonStringify","value","schema","encode","mapError","e","SerializationException","error","formatError","map","_","JSON","stringify","jsonParse","sync","parse","flatMap","decode","make","args","json","succeed","message","body"],"sources":["../../../src/internal/serialization.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,MAAM,MAAM,uBAAuB;AAC/C,OAAO,KAAKC,aAAa,MAAM,8BAA8B;AAC7D,OAAO,KAAKC,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,IAAI,QAAQ,iBAAiB;AACtC,OAAO,KAAKC,KAAK,MAAM,cAAc;AAErC,OAAO,KAAKC,iBAAiB,MAAM,yBAAyB;AAC5D,OAAO,KAAKC,iBAAiB,MAAM,yBAAyB;AAE5D;AACA,MAAMC,sBAAsB,GAAG,+BAA+B;AAE9D;AACA,OAAO,MAAMC,mBAAmB,gBAAsCC,MAAM,CAACC,GAAG,CAC9EH,sBAAsB,CACc;AAEtC;AACA,OAAO,MAAMI,gBAAgB,gBAAGV,OAAO,CAACW,UAAU,CAA8BL,sBAAsB,CAAC;AAEvG;AACA,SAASM,aAAaA,CAAOC,KAAQ,EAAEC,MAA2B;EAChE,OAAOZ,IAAI,CACTW,KAAK,EACLf,MAAM,CAACiB,MAAM,CAACD,MAAM,CAAC,EACrBb,MAAM,CAACe,QAAQ,CAAEC,CAAC,IAAK,IAAIZ,iBAAiB,CAACa,sBAAsB,CAAC;IAAEC,KAAK,EAAEpB,aAAa,CAACqB,WAAW,CAACH,CAAC;EAAC,CAAE,CAAC,CAAC,EAC7GhB,MAAM,CAACoB,GAAG,CAAEC,CAAC,IAAKC,IAAI,CAACC,SAAS,CAACF,CAAC,CAAC,CAAC,CACrC;AACH;AAEA;AACA,SAASG,SAASA,CAAOZ,KAAa,EAAEC,MAA2B;EACjE,OAAOZ,IAAI,CACTD,MAAM,CAACyB,IAAI,CAAC,MAAMH,IAAI,CAACI,KAAK,CAACd,KAAK,CAAC,CAAC,EACpCZ,MAAM,CAAC2B,OAAO,CAAC9B,MAAM,CAAC+B,MAAM,CAACf,MAAM,CAAC,CAAC,EACrCb,MAAM,CAACe,QAAQ,CAAEC,CAAC,IAAK,IAAIZ,iBAAiB,CAACa,sBAAsB,CAAC;IAAEC,KAAK,EAAEpB,aAAa,CAACqB,WAAW,CAACH,CAAC;EAAC,CAAE,CAAC,CAAC,CAC9G;AACH;AAEA;AACA,OAAM,SAAUa,IAAIA,CAClBC,IAA0E;EAE1E,OAAQ;IAAE,GAAGA,IAAI;IAAE,CAACxB,mBAAmB,GAAGA;EAAmB,CAAE;AACjE;AAEA;AACA,OAAO,MAAMyB,IAAI,gBAA6C7B,KAAK,CAAC8B,OAAO,CACzEvB,gBAAgB,eAChBoB,IAAI,CAAC;EACHf,MAAM,EAAEA,CAACD,MAAM,EAAEoB,OAAO,KACtBhC,IAAI,CACFU,aAAa,CAACsB,OAAO,EAAEpB,MAAM,CAAC,EAC9Bb,MAAM,CAACoB,GAAG,CAACjB,iBAAiB,CAAC0B,IAAI,CAAC,CACnC;EACHD,MAAM,EAAEA,CAACf,MAAM,EAAEqB,IAAI,KAAKV,SAAS,CAACU,IAAI,CAACtB,KAAK,EAAEC,MAAM;CACvD,CAAC,CACH","ignoreList":[]}
|
@@ -0,0 +1,256 @@
|
|
1
|
+
/**
|
2
|
+
* @since 1.0.0
|
3
|
+
*/
|
4
|
+
import * as Chunk from "effect/Chunk";
|
5
|
+
import * as Clock from "effect/Clock";
|
6
|
+
import { GenericTag } from "effect/Context";
|
7
|
+
import * as Effect from "effect/Effect";
|
8
|
+
import { equals } from "effect/Equal";
|
9
|
+
import { pipe } from "effect/Function";
|
10
|
+
import * as HashMap from "effect/HashMap";
|
11
|
+
import * as HashSet from "effect/HashSet";
|
12
|
+
import * as Layer from "effect/Layer";
|
13
|
+
import * as List from "effect/List";
|
14
|
+
import * as Option from "effect/Option";
|
15
|
+
import * as PubSub from "effect/PubSub";
|
16
|
+
import * as Schedule from "effect/Schedule";
|
17
|
+
import * as Stream from "effect/Stream";
|
18
|
+
import * as RefSynchronized from "effect/SynchronizedRef";
|
19
|
+
import * as ManagerConfig from "../ManagerConfig.js";
|
20
|
+
import * as Pods from "../Pods.js";
|
21
|
+
import * as PodsHealth from "../PodsHealth.js";
|
22
|
+
import * as ShardId from "../ShardId.js";
|
23
|
+
import * as ShardingEvent from "../ShardingEvent.js";
|
24
|
+
import * as ShardingException from "../ShardingException.js";
|
25
|
+
import * as Storage from "../Storage.js";
|
26
|
+
import * as PodWithMetadata from "./podWithMetadata.js";
|
27
|
+
import * as ShardManagerState from "./shardManagerState.js";
|
28
|
+
import { groupBy, minByOption } from "./utils.js";
|
29
|
+
/** @internal */
|
30
|
+
const ShardManagerSymbolKey = "@effect/cluster/ShardManager";
|
31
|
+
/** @internal */
|
32
|
+
export const ShardManagerTypeId = /*#__PURE__*/Symbol.for(ShardManagerSymbolKey);
|
33
|
+
/** @internal */
|
34
|
+
export const shardManagerTag = /*#__PURE__*/GenericTag(ShardManagerSymbolKey);
|
35
|
+
/** @internal */
|
36
|
+
function make(layerScope, stateRef, rebalanceSemaphore, eventsHub, healthApi, podApi, stateRepository, config) {
|
37
|
+
const getAssignments = pipe(RefSynchronized.get(stateRef), Effect.map(_ => _.shards));
|
38
|
+
const getShardingEvents = Stream.fromPubSub(eventsHub);
|
39
|
+
function register(pod) {
|
40
|
+
return pipe(Effect.logDebug("Registering " + pod.address + "@" + pod.version), Effect.zipRight(RefSynchronized.updateAndGetEffect(stateRef, state => pipe(Effect.flatMap(Effect.clock, _ => _.currentTimeMillis), Effect.map(cdt => ShardManagerState.make(HashMap.set(state.pods, pod.address, PodWithMetadata.make(pod, cdt)), state.shards))))), Effect.zipLeft(PubSub.publish(eventsHub, ShardingEvent.PodRegistered(pod.address))), Effect.flatMap(state => Effect.when(rebalance(false), () => HashSet.size(state.unassignedShards) > 0)), Effect.zipRight(Effect.forkIn(layerScope)(persistPods)), Effect.asVoid);
|
41
|
+
}
|
42
|
+
function stateHasPod(podAddress) {
|
43
|
+
return pipe(RefSynchronized.get(stateRef), Effect.map(_ => HashMap.has(_.pods, podAddress)));
|
44
|
+
}
|
45
|
+
function notifyUnhealthyPod(podAddress) {
|
46
|
+
return pipe(Effect.whenEffect(pipe(PubSub.publish(eventsHub, ShardingEvent.PodHealthChecked(podAddress)), Effect.zipRight(Effect.unlessEffect(Effect.zipRight(Effect.logWarning(`${podAddress} is not alive, unregistering`), unregister(podAddress)), healthApi.isAlive(podAddress)))), stateHasPod(podAddress)), Effect.asVoid);
|
47
|
+
}
|
48
|
+
const checkAllPodsHealth = pipe(RefSynchronized.get(stateRef), Effect.map(_ => HashMap.keySet(_.pods)), Effect.flatMap(_ => Effect.forEach(_, notifyUnhealthyPod, {
|
49
|
+
concurrency: 4,
|
50
|
+
discard: true
|
51
|
+
})));
|
52
|
+
function unregister(podAddress) {
|
53
|
+
const eff = pipe(Effect.Do, Effect.zipLeft(Effect.logDebug(`Unregistering ${podAddress}`)), Effect.bind("unassignments", _ => pipe(stateRef, RefSynchronized.modify(state => [pipe(state.shards, HashMap.filter(pod => equals(pod)(Option.some(podAddress))), HashMap.keySet), {
|
54
|
+
...state,
|
55
|
+
pods: HashMap.remove(state.pods, podAddress),
|
56
|
+
shards: HashMap.map(state.shards, _ => equals(_)(Option.some(podAddress)) ? Option.none() : _)
|
57
|
+
}]))), Effect.tap(_ => PubSub.publish(eventsHub, ShardingEvent.PodUnregistered(podAddress))), Effect.tap(_ => Effect.when(PubSub.publish(eventsHub, ShardingEvent.ShardsUnassigned(podAddress, _.unassignments)), () => HashSet.size(_.unassignments) > 0)), Effect.zipLeft(Effect.forkIn(layerScope)(persistPods)), Effect.zipLeft(Effect.forkIn(layerScope)(rebalance(true))));
|
58
|
+
return Effect.asVoid(Effect.whenEffect(eff, stateHasPod(podAddress)));
|
59
|
+
}
|
60
|
+
function withRetry(zio) {
|
61
|
+
return pipe(zio, Effect.retry(pipe(Schedule.spaced(config.persistRetryInterval), Schedule.andThen(Schedule.recurs(config.persistRetryCount)))), Effect.ignore);
|
62
|
+
}
|
63
|
+
const persistAssignments = withRetry(pipe(RefSynchronized.get(stateRef), Effect.flatMap(state => stateRepository.saveAssignments(state.shards))));
|
64
|
+
const persistPods = withRetry(pipe(RefSynchronized.get(stateRef), Effect.flatMap(state => stateRepository.savePods(HashMap.map(state.pods, v => v.pod)))));
|
65
|
+
function updateShardsState(shards, pod) {
|
66
|
+
return RefSynchronized.updateEffect(stateRef, state => {
|
67
|
+
if (Option.isSome(pod) && !HashMap.has(state.pods, pod.value)) {
|
68
|
+
return Effect.fail(new ShardingException.PodNoLongerRegisteredException({
|
69
|
+
podAddress: pod.value
|
70
|
+
}));
|
71
|
+
}
|
72
|
+
return Effect.succeed({
|
73
|
+
...state,
|
74
|
+
shards: pipe(state.shards, HashMap.map((assignment, shard) => HashSet.has(shards, shard) ? pod : assignment))
|
75
|
+
});
|
76
|
+
});
|
77
|
+
}
|
78
|
+
function rebalance(rebalanceImmediately) {
|
79
|
+
const algo = Effect.gen(function* (_) {
|
80
|
+
const state = yield* _(RefSynchronized.get(stateRef));
|
81
|
+
const [assignments, unassignments] = rebalanceImmediately || HashSet.size(state.unassignedShards) > 0 ? decideAssignmentsForUnassignedShards(state) : decideAssignmentsForUnbalancedShards(state, config.rebalanceRate);
|
82
|
+
const areChanges = HashMap.size(assignments) > 0 || HashMap.size(unassignments) > 0;
|
83
|
+
if (areChanges) {
|
84
|
+
yield* _(Effect.logDebug("Rebalance (rebalanceImmidiately=" + JSON.stringify(rebalanceImmediately) + ")"));
|
85
|
+
}
|
86
|
+
const failedPingedPods = yield* _(HashSet.union(HashMap.keySet(assignments), HashMap.keySet(unassignments)), Effect.forEach(pod => pipe(podApi.ping(pod), Effect.timeout(config.pingTimeout), Effect.match({
|
87
|
+
onFailure: () => Chunk.fromIterable([pod]),
|
88
|
+
onSuccess: () => Chunk.empty()
|
89
|
+
})), {
|
90
|
+
concurrency: "inherit"
|
91
|
+
}), Effect.map(Chunk.fromIterable), Effect.map(_ => Chunk.flatten(_)), Effect.map(HashSet.fromIterable));
|
92
|
+
const shardsToRemove = pipe(List.fromIterable(assignments), List.appendAll(List.fromIterable(unassignments)), List.filter(([pod, __]) => HashSet.has(failedPingedPods, pod)), List.map(([_, shards]) => List.fromIterable(shards)), List.flatMap(_ => _),
|
93
|
+
// TODO: List is missing flatMap
|
94
|
+
HashSet.fromIterable);
|
95
|
+
const readyAssignments = pipe(assignments, HashMap.map(HashSet.difference(shardsToRemove)), HashMap.filter(__ => HashSet.size(__) > 0));
|
96
|
+
const readyUnassignments = pipe(unassignments, HashMap.map(HashSet.difference(shardsToRemove)), HashMap.filter(__ => HashSet.size(__) > 0));
|
97
|
+
const [failedUnassignedPods, failedUnassignedShards] = yield* _(Effect.forEach(readyUnassignments, ([pod, shards]) => pipe(podApi.unassignShards(pod, shards), Effect.zipRight(updateShardsState(shards, Option.none())), Effect.matchEffect({
|
98
|
+
onFailure: () => Effect.succeed([HashSet.fromIterable([pod]), shards]),
|
99
|
+
onSuccess: () => pipe(PubSub.publish(eventsHub, ShardingEvent.ShardsUnassigned(pod, shards)), Effect.as([HashSet.empty(), HashSet.empty()]))
|
100
|
+
})), {
|
101
|
+
concurrency: "inherit"
|
102
|
+
}), Effect.map(Chunk.fromIterable), Effect.map(_ => Chunk.unzip(_)), Effect.map(([pods, shards]) => [Chunk.map(pods, Chunk.fromIterable), Chunk.map(shards, Chunk.fromIterable)]), Effect.map(([pods, shards]) => [HashSet.fromIterable(Chunk.flatten(pods)), HashSet.fromIterable(Chunk.flatten(shards))]));
|
103
|
+
// remove assignments of shards that couldn't be unassigned, as well as faulty pods.
|
104
|
+
const filteredAssignments = pipe(HashMap.removeMany(readyAssignments, failedUnassignedPods), HashMap.map((shards, __) => HashSet.difference(shards, failedUnassignedShards)));
|
105
|
+
// then do the assignments
|
106
|
+
const failedAssignedPods = yield* _(Effect.forEach(filteredAssignments, ([pod, shards]) => pipe(podApi.assignShards(pod, shards), Effect.zipRight(updateShardsState(shards, Option.some(pod))), Effect.matchEffect({
|
107
|
+
onFailure: () => Effect.succeed(Chunk.fromIterable([pod])),
|
108
|
+
onSuccess: () => pipe(PubSub.publish(eventsHub, ShardingEvent.ShardsAssigned(pod, shards)), Effect.as(Chunk.empty()))
|
109
|
+
})), {
|
110
|
+
concurrency: "inherit"
|
111
|
+
}), Effect.map(Chunk.fromIterable), Effect.map(_ => Chunk.flatten(_)), Effect.map(HashSet.fromIterable));
|
112
|
+
const failedPods = HashSet.union(HashSet.union(failedPingedPods, failedUnassignedPods), failedAssignedPods);
|
113
|
+
// check if failing pods are still up
|
114
|
+
yield* _(Effect.forkIn(layerScope)(Effect.forEach(failedPods, _ => notifyUnhealthyPod(_), {
|
115
|
+
discard: true
|
116
|
+
})));
|
117
|
+
if (HashSet.size(failedPods) > 0) {
|
118
|
+
yield* _(Effect.logDebug("Failed to rebalance pods: " + failedPods + " failed pinged: " + failedPingedPods + " failed assigned: " + failedAssignedPods + " failed unassigned: " + failedUnassignedPods));
|
119
|
+
}
|
120
|
+
// retry rebalancing later if there was any failure
|
121
|
+
if (HashSet.size(failedPods) > 0 && rebalanceImmediately) {
|
122
|
+
yield* _(Effect.sleep(config.rebalanceRetryInterval), Effect.zipRight(rebalance(rebalanceImmediately)), Effect.forkIn(layerScope));
|
123
|
+
}
|
124
|
+
// persist state changes to Redis
|
125
|
+
if (areChanges) {
|
126
|
+
yield* _(Effect.forkIn(layerScope)(persistAssignments));
|
127
|
+
}
|
128
|
+
});
|
129
|
+
return rebalanceSemaphore.withPermits(1)(algo);
|
130
|
+
}
|
131
|
+
return {
|
132
|
+
getAssignments,
|
133
|
+
getShardingEvents,
|
134
|
+
register,
|
135
|
+
unregister,
|
136
|
+
persistPods,
|
137
|
+
rebalance,
|
138
|
+
notifyUnhealthyPod,
|
139
|
+
checkAllPodsHealth
|
140
|
+
};
|
141
|
+
}
|
142
|
+
/** @internal */
|
143
|
+
export function decideAssignmentsForUnassignedShards(state) {
|
144
|
+
return pickNewPods(List.fromIterable(state.unassignedShards), state, true, 1);
|
145
|
+
}
|
146
|
+
/** @internal */
|
147
|
+
export function decideAssignmentsForUnbalancedShards(state, rebalanceRate) {
|
148
|
+
// don't do regular rebalance in the middle of a rolling update
|
149
|
+
const extraShardsToAllocate = state.allPodsHaveMaxVersion ? pipe(state.shardsPerPod, HashMap.flatMap((shards, _) => {
|
150
|
+
// count how many extra shards compared to the average
|
151
|
+
const extraShards = Math.max(HashSet.size(shards) - state.averageShardsPerPod.value, 0);
|
152
|
+
return pipe(HashMap.empty(), HashMap.set(_, HashSet.fromIterable(List.take(List.fromIterable(shards), extraShards))));
|
153
|
+
}), HashSet.fromIterable, HashSet.map(_ => _[1]), HashSet.flatMap(_ => _)) : HashSet.empty();
|
154
|
+
/*
|
155
|
+
TODO: port sortBy
|
156
|
+
val sortedShardsToRebalance = extraShardsToAllocate.toList.sortBy { shard =>
|
157
|
+
// handle unassigned shards first, then shards on the pods with most shards, then shards on old pods
|
158
|
+
state.shards.get(shard).flatten.fold((Int.MinValue, OffsetDateTime.MIN)) { pod =>
|
159
|
+
(
|
160
|
+
state.shardsPerPod.get(pod).fold(Int.MinValue)(-_.size),
|
161
|
+
state.pods.get(pod).fold(OffsetDateTime.MIN)(_.registered)
|
162
|
+
)
|
163
|
+
}
|
164
|
+
}
|
165
|
+
* */
|
166
|
+
const sortedShardsToRebalance = List.fromIterable(extraShardsToAllocate);
|
167
|
+
return pickNewPods(sortedShardsToRebalance, state, false, rebalanceRate);
|
168
|
+
}
|
169
|
+
function pickNewPods(shardsToRebalance, state, rebalanceImmediately, rebalanceRate) {
|
170
|
+
const [_, assignments] = pipe(List.reduce(shardsToRebalance, [state.shardsPerPod, List.empty()], ([shardsPerPod, assignments], shard) => {
|
171
|
+
const unassignedPods = pipe(assignments, List.flatMap(([shard, _]) => pipe(HashMap.get(state.shards, shard), Option.flatten, Option.toArray, List.fromIterable)));
|
172
|
+
// find pod with least amount of shards
|
173
|
+
return pipe(
|
174
|
+
// keep only pods with the max version
|
175
|
+
HashMap.filter(shardsPerPod, (_, pod) => {
|
176
|
+
const maxVersion = state.maxVersion;
|
177
|
+
if (Option.isNone(maxVersion)) return true;
|
178
|
+
return pipe(HashMap.get(state.pods, pod), Option.map(PodWithMetadata.extractVersion), Option.map(_ => PodWithMetadata.compareVersion(_, maxVersion.value) === 0), Option.getOrElse(() => false));
|
179
|
+
}),
|
180
|
+
// don't assign too many shards to the same pods, unless we need rebalance immediately
|
181
|
+
HashMap.filter((_, pod) => {
|
182
|
+
if (rebalanceImmediately) return true;
|
183
|
+
return pipe(assignments, List.filter(([_, p]) => equals(p)(pod)), List.size) < HashMap.size(state.shards) * rebalanceRate;
|
184
|
+
}),
|
185
|
+
// don't assign to a pod that was unassigned in the same rebalance
|
186
|
+
HashMap.filter((_, pod) => !Option.isSome(List.findFirst(unassignedPods, equals(pod)))), minByOption(([_, pods]) => HashSet.size(pods)), Option.match({
|
187
|
+
onNone: () => [shardsPerPod, assignments],
|
188
|
+
onSome: ([pod, shards]) => {
|
189
|
+
const oldPod = Option.flatten(HashMap.get(state.shards, shard));
|
190
|
+
// if old pod is same as new pod, don't change anything
|
191
|
+
if (equals(oldPod)(pod)) {
|
192
|
+
return [shardsPerPod, assignments];
|
193
|
+
// if the new pod has more, as much, or only 1 less shard than the old pod, don't change anything
|
194
|
+
} else if (Option.match(HashMap.get(shardsPerPod, pod), {
|
195
|
+
onNone: () => 0,
|
196
|
+
onSome: HashSet.size
|
197
|
+
}) + 1 >= Option.match(oldPod, {
|
198
|
+
onNone: () => Number.MAX_SAFE_INTEGER,
|
199
|
+
onSome: _ => Option.match(HashMap.get(shardsPerPod, _), {
|
200
|
+
onNone: () => 0,
|
201
|
+
onSome: HashSet.size
|
202
|
+
})
|
203
|
+
})) {
|
204
|
+
return [shardsPerPod, assignments];
|
205
|
+
// otherwise, create a new assignment
|
206
|
+
} else {
|
207
|
+
const unassigned = Option.match(oldPod, {
|
208
|
+
onNone: () => shardsPerPod,
|
209
|
+
onSome: oldPod => HashMap.modify(shardsPerPod, oldPod, HashSet.remove(shard))
|
210
|
+
});
|
211
|
+
return [HashMap.modify(unassigned, pod, _ => HashSet.add(shards, shard)), List.prepend(assignments, [shard, pod])];
|
212
|
+
}
|
213
|
+
}
|
214
|
+
}));
|
215
|
+
}));
|
216
|
+
const unassignments = List.flatMap(assignments, ([shard, _]) => pipe(Option.flatten(HashMap.get(state.shards, shard)), Option.map(_ => [shard, _]), Option.match({
|
217
|
+
onNone: List.empty,
|
218
|
+
onSome: List.of
|
219
|
+
})));
|
220
|
+
const assignmentsPerPod = pipe(assignments, groupBy(([_, pod]) => pod), HashMap.map(HashSet.map(([shardId, _]) => shardId)));
|
221
|
+
const unassignmentsPerPod = pipe(unassignments, groupBy(([_, pod]) => pod), HashMap.map(HashSet.map(([shardId, _]) => shardId)));
|
222
|
+
return [assignmentsPerPod, unassignmentsPerPod];
|
223
|
+
}
|
224
|
+
/**
|
225
|
+
* @since 1.0.0
|
226
|
+
* @category layers
|
227
|
+
*/
|
228
|
+
export const live = /*#__PURE__*/Effect.gen(function* (_) {
|
229
|
+
const config = yield* _(ManagerConfig.ManagerConfig);
|
230
|
+
const stateRepository = yield* _(Storage.Storage);
|
231
|
+
const healthApi = yield* _(PodsHealth.PodsHealth);
|
232
|
+
const podsApi = yield* _(Pods.Pods);
|
233
|
+
const layerScope = yield* _(Effect.scope);
|
234
|
+
const pods = yield* _(stateRepository.getPods);
|
235
|
+
const assignments = yield* _(stateRepository.getAssignments);
|
236
|
+
const filteredPods = yield* _(Effect.filter(pods, ([podAddress]) => healthApi.isAlive(podAddress), {
|
237
|
+
concurrency: "inherit"
|
238
|
+
}), Effect.map(HashMap.fromIterable));
|
239
|
+
const filteredAssignments = HashMap.filter(assignments, pod => Option.isSome(pod) && HashMap.has(filteredPods, pod.value));
|
240
|
+
const cdt = yield* _(Clock.currentTimeMillis);
|
241
|
+
const initialState = ShardManagerState.make(HashMap.map(filteredPods, pod => PodWithMetadata.make(pod, cdt)), HashMap.union(filteredAssignments, pipe(Chunk.range(1, config.numberOfShards), Chunk.map(n => [ShardId.make(n), Option.none()]), HashMap.fromIterable)));
|
242
|
+
const state = yield* _(RefSynchronized.make(initialState));
|
243
|
+
const rebalanceSemaphore = yield* _(Effect.makeSemaphore(1));
|
244
|
+
const eventsHub = yield* _(PubSub.unbounded());
|
245
|
+
const shardManager = make(layerScope, state, rebalanceSemaphore, eventsHub, healthApi, podsApi, stateRepository, config);
|
246
|
+
yield* _(Effect.forkIn(layerScope)(shardManager.persistPods));
|
247
|
+
// rebalance immediately if there are unassigned shards
|
248
|
+
yield* _(shardManager.rebalance(HashSet.size(initialState.unassignedShards) > 0));
|
249
|
+
// start a regular rebalance at the given interval
|
250
|
+
yield* _(shardManager.rebalance(false), Effect.repeat(Schedule.spaced(config.rebalanceInterval)), Effect.forkIn(layerScope));
|
251
|
+
// log info events
|
252
|
+
yield* _(shardManager.getShardingEvents, Stream.mapEffect(_ => Effect.logDebug(JSON.stringify(_))), Stream.runDrain, Effect.forkIn(layerScope));
|
253
|
+
yield* _(Effect.logDebug("Shard Manager loaded"));
|
254
|
+
return shardManager;
|
255
|
+
}).pipe( /*#__PURE__*/Layer.scoped(shardManagerTag));
|
256
|
+
//# sourceMappingURL=shardManager.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"shardManager.js","names":["Chunk","Clock","GenericTag","Effect","equals","pipe","HashMap","HashSet","Layer","List","Option","PubSub","Schedule","Stream","RefSynchronized","ManagerConfig","Pods","PodsHealth","ShardId","ShardingEvent","ShardingException","Storage","PodWithMetadata","ShardManagerState","groupBy","minByOption","ShardManagerSymbolKey","ShardManagerTypeId","Symbol","for","shardManagerTag","make","layerScope","stateRef","rebalanceSemaphore","eventsHub","healthApi","podApi","stateRepository","config","getAssignments","get","map","_","shards","getShardingEvents","fromPubSub","register","pod","logDebug","address","version","zipRight","updateAndGetEffect","state","flatMap","clock","currentTimeMillis","cdt","set","pods","zipLeft","publish","PodRegistered","when","rebalance","size","unassignedShards","forkIn","persistPods","asVoid","stateHasPod","podAddress","has","notifyUnhealthyPod","whenEffect","PodHealthChecked","unlessEffect","logWarning","unregister","isAlive","checkAllPodsHealth","keySet","forEach","concurrency","discard","eff","Do","bind","modify","filter","some","remove","none","tap","PodUnregistered","ShardsUnassigned","unassignments","withRetry","zio","retry","spaced","persistRetryInterval","andThen","recurs","persistRetryCount","ignore","persistAssignments","saveAssignments","savePods","v","updateShardsState","updateEffect","isSome","value","fail","PodNoLongerRegisteredException","succeed","assignment","shard","rebalanceImmediately","algo","gen","assignments","decideAssignmentsForUnassignedShards","decideAssignmentsForUnbalancedShards","rebalanceRate","areChanges","JSON","stringify","failedPingedPods","union","ping","timeout","pingTimeout","match","onFailure","fromIterable","onSuccess","empty","flatten","shardsToRemove","appendAll","__","readyAssignments","difference","readyUnassignments","failedUnassignedPods","failedUnassignedShards","unassignShards","matchEffect","as","unzip","filteredAssignments","removeMany","failedAssignedPods","assignShards","ShardsAssigned","failedPods","sleep","rebalanceRetryInterval","withPermits","pickNewPods","extraShardsToAllocate","allPodsHaveMaxVersion","shardsPerPod","extraShards","Math","max","averageShardsPerPod","take","sortedShardsToRebalance","shardsToRebalance","reduce","unassignedPods","toArray","maxVersion","isNone","extractVersion","compareVersion","getOrElse","p","findFirst","onNone","onSome","oldPod","Number","MAX_SAFE_INTEGER","unassigned","add","prepend","of","assignmentsPerPod","shardId","unassignmentsPerPod","live","podsApi","scope","getPods","filteredPods","initialState","range","numberOfShards","n","makeSemaphore","unbounded","shardManager","repeat","rebalanceInterval","mapEffect","runDrain","scoped"],"sources":["../../../src/internal/shardManager.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import * as Context from "effect/Context";
|
2
|
+
import * as Effect from "effect/Effect";
|
3
|
+
import { pipe } from "effect/Function";
|
4
|
+
import * as HashMap from "effect/HashMap";
|
5
|
+
import * as Layer from "effect/Layer";
|
6
|
+
import * as Option from "effect/Option";
|
7
|
+
import * as PodAddress from "../PodAddress.js";
|
8
|
+
import * as ShardId from "../ShardId.js";
|
9
|
+
import * as ShardingConfig from "../ShardingConfig.js";
|
10
|
+
/** @internal */
|
11
|
+
const ShardManagerSymbolKey = "@effect/cluster/ShardManagerClient";
|
12
|
+
/** @internal */
|
13
|
+
export const ShardManagerClientTypeId = /*#__PURE__*/Symbol.for(ShardManagerSymbolKey);
|
14
|
+
/** @internal */
|
15
|
+
export const shardManagerClientTag = /*#__PURE__*/Context.GenericTag(ShardManagerSymbolKey);
|
16
|
+
/** @internal */
|
17
|
+
export function make(args) {
|
18
|
+
return {
|
19
|
+
[ShardManagerClientTypeId]: ShardManagerClientTypeId,
|
20
|
+
...args
|
21
|
+
};
|
22
|
+
}
|
23
|
+
/** @internal */
|
24
|
+
export const local = /*#__PURE__*/pipe( /*#__PURE__*/Layer.effect(shardManagerClientTag, /*#__PURE__*/Effect.gen(function* ($) {
|
25
|
+
const config = yield* $(ShardingConfig.ShardingConfig);
|
26
|
+
const pod = PodAddress.make(config.selfHost, config.shardingPort);
|
27
|
+
let shards = HashMap.empty();
|
28
|
+
for (let i = 1; i <= config.numberOfShards; i++) {
|
29
|
+
shards = HashMap.set(shards, ShardId.make(i), Option.some(pod));
|
30
|
+
}
|
31
|
+
return make({
|
32
|
+
register: () => Effect.void,
|
33
|
+
unregister: () => Effect.void,
|
34
|
+
notifyUnhealthyPod: () => Effect.void,
|
35
|
+
getAssignments: Effect.succeed(shards)
|
36
|
+
});
|
37
|
+
})));
|
38
|
+
//# sourceMappingURL=shardManagerClient.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"shardManagerClient.js","names":["Context","Effect","pipe","HashMap","Layer","Option","PodAddress","ShardId","ShardingConfig","ShardManagerSymbolKey","ShardManagerClientTypeId","Symbol","for","shardManagerClientTag","GenericTag","make","args","local","effect","gen","$","config","pod","selfHost","shardingPort","shards","empty","i","numberOfShards","set","some","register","void","unregister","notifyUnhealthyPod","getAssignments","succeed"],"sources":["../../../src/internal/shardManagerClient.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,IAAI,QAAQ,iBAAiB;AACtC,OAAO,KAAKC,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,UAAU,MAAM,kBAAkB;AAC9C,OAAO,KAAKC,OAAO,MAAM,eAAe;AACxC,OAAO,KAAKC,cAAc,MAAM,sBAAsB;AAGtD;AACA,MAAMC,qBAAqB,GAAG,oCAAoC;AAElE;AACA,OAAO,MAAMC,wBAAwB,gBAAgDC,MAAM,CAACC,GAAG,CAC7FH,qBAAqB,CACyB;AAEhD;AACA,OAAO,MAAMI,qBAAqB,gBAAGb,OAAO,CAACc,UAAU,CAAwCL,qBAAqB,CAAC;AAErH;AACA,OAAM,SAAUM,IAAIA,CAClBC,IAA8F;EAE9F,OAAQ;IAAE,CAACN,wBAAwB,GAAGA,wBAAwB;IAAE,GAAGM;EAAI,CAAE;AAC3E;AAEA;AACA,OAAO,MAAMC,KAAK,gBAAGf,IAAI,eACvBE,KAAK,CAACc,MAAM,CACVL,qBAAqB,eACrBZ,MAAM,CAACkB,GAAG,CAAC,WAAUC,CAAC;EACpB,MAAMC,MAAM,GAAG,OAAOD,CAAC,CAACZ,cAAc,CAACA,cAAc,CAAC;EACtD,MAAMc,GAAG,GAAGhB,UAAU,CAACS,IAAI,CAACM,MAAM,CAACE,QAAQ,EAAEF,MAAM,CAACG,YAAY,CAAC;EACjE,IAAIC,MAAM,GAAGtB,OAAO,CAACuB,KAAK,EAAyD;EACnF,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIN,MAAM,CAACO,cAAc,EAAED,CAAC,EAAE,EAAE;IAC/CF,MAAM,GAAGtB,OAAO,CAAC0B,GAAG,CAACJ,MAAM,EAAElB,OAAO,CAACQ,IAAI,CAACY,CAAC,CAAC,EAAEtB,MAAM,CAACyB,IAAI,CAACR,GAAG,CAAC,CAAC;EACjE;EACA,OAAOP,IAAI,CAAC;IACVgB,QAAQ,EAAEA,CAAA,KAAM9B,MAAM,CAAC+B,IAAI;IAC3BC,UAAU,EAAEA,CAAA,KAAMhC,MAAM,CAAC+B,IAAI;IAC7BE,kBAAkB,EAAEA,CAAA,KAAMjC,MAAM,CAAC+B,IAAI;IACrCG,cAAc,EAAElC,MAAM,CAACmC,OAAO,CAACX,MAAM;GACtC,CAAC;AACJ,CAAC,CAAC,CACH,CACF","ignoreList":[]}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
import { equals } from "effect/Equal";
|
2
|
+
import { pipe } from "effect/Function";
|
3
|
+
import * as HashMap from "effect/HashMap";
|
4
|
+
import * as HashSet from "effect/HashSet";
|
5
|
+
import * as List from "effect/List";
|
6
|
+
import * as Option from "effect/Option";
|
7
|
+
import * as ShardId from "../ShardId.js";
|
8
|
+
import * as PodWithMetadata from "./podWithMetadata.js";
|
9
|
+
/**
|
10
|
+
* @since 1.0.0
|
11
|
+
* @category constructors
|
12
|
+
*/
|
13
|
+
export function make(pods, shards) {
|
14
|
+
const podVersions = pipe(HashMap.values(pods), List.fromIterable, List.map(PodWithMetadata.extractVersion));
|
15
|
+
const maxVersion = pipe(podVersions, List.reduce(List.empty(), (curr, a) => PodWithMetadata.compareVersion(curr, a) === -1 ? a : curr), result => List.size(result) === 0 ? Option.none() : Option.some(result));
|
16
|
+
const shardsPerPodPods = pipe(HashMap.reduce(shards, HashMap.empty(), (curr, optionPod, shardId) => {
|
17
|
+
if (Option.isNone(optionPod)) return curr;
|
18
|
+
if (HashMap.has(curr, optionPod.value)) {
|
19
|
+
return HashMap.modify(curr, optionPod.value, HashSet.add(shardId));
|
20
|
+
} else {
|
21
|
+
return HashMap.set(curr, optionPod.value, HashSet.fromIterable([shardId]));
|
22
|
+
}
|
23
|
+
}));
|
24
|
+
const shardsPerPod = pipe(HashMap.map(pods, () => HashSet.empty()), HashMap.union(shardsPerPodPods));
|
25
|
+
const allPodsHaveMaxVersion = List.every(podVersions, _ => equals(Option.some(_))(maxVersion));
|
26
|
+
return {
|
27
|
+
pods,
|
28
|
+
shards,
|
29
|
+
unassignedShards: pipe(HashMap.filter(shards, (a, _) => Option.isNone(a)), HashSet.fromIterable, HashSet.map(([k, _]) => k)),
|
30
|
+
averageShardsPerPod: pipe(HashMap.isEmpty(pods) ? ShardId.make(0) : ShardId.make(HashMap.size(shards) / HashMap.size(pods))),
|
31
|
+
shardsPerPod,
|
32
|
+
maxVersion,
|
33
|
+
allPodsHaveMaxVersion
|
34
|
+
};
|
35
|
+
}
|
36
|
+
//# sourceMappingURL=shardManagerState.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"shardManagerState.js","names":["equals","pipe","HashMap","HashSet","List","Option","ShardId","PodWithMetadata","make","pods","shards","podVersions","values","fromIterable","map","extractVersion","maxVersion","reduce","empty","curr","a","compareVersion","result","size","none","some","shardsPerPodPods","optionPod","shardId","isNone","has","value","modify","add","set","shardsPerPod","union","allPodsHaveMaxVersion","every","_","unassignedShards","filter","k","averageShardsPerPod","isEmpty"],"sources":["../../../src/internal/shardManagerState.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|