@effect/cluster 0.28.4 → 0.29.1
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/ClusterError/package.json +6 -0
- package/ClusterMetrics/package.json +6 -0
- package/ClusterSchema/package.json +6 -0
- package/DeliverAt/package.json +6 -0
- package/Entity/package.json +6 -0
- package/EntityAddress/package.json +6 -0
- package/EntityId/package.json +6 -0
- package/EntityType/package.json +6 -0
- package/Envelope/package.json +6 -0
- package/HttpCommon/package.json +6 -0
- package/HttpRunner/package.json +6 -0
- package/HttpShardManager/package.json +6 -0
- package/MachineId/package.json +6 -0
- package/MessageStorage/package.json +6 -0
- package/README.md +2 -2
- package/Reply/package.json +6 -0
- package/Runner/package.json +6 -0
- package/RunnerAddress/package.json +6 -0
- package/RunnerHealth/package.json +6 -0
- package/RunnerServer/package.json +6 -0
- package/Runners/package.json +6 -0
- package/ShardStorage/package.json +6 -0
- package/Singleton/package.json +6 -0
- package/SingletonAddress/package.json +6 -0
- package/Snowflake/package.json +6 -0
- package/SocketRunner/package.json +6 -0
- package/SocketShardManager/package.json +6 -0
- package/SqlMessageStorage/package.json +6 -0
- package/SqlShardStorage/package.json +6 -0
- package/SynchronizedClock/package.json +6 -0
- package/dist/cjs/ClusterError.js +180 -0
- package/dist/cjs/ClusterError.js.map +1 -0
- package/dist/cjs/ClusterMetrics.js +63 -0
- package/dist/cjs/ClusterMetrics.js.map +1 -0
- package/dist/cjs/{Pods.js → ClusterSchema.js} +10 -22
- package/dist/cjs/ClusterSchema.js.map +1 -0
- package/dist/cjs/DeliverAt.js +30 -0
- package/dist/cjs/DeliverAt.js.map +1 -0
- package/dist/cjs/Entity.js +187 -0
- package/dist/cjs/Entity.js.map +1 -0
- package/dist/cjs/EntityAddress.js +54 -0
- package/dist/cjs/EntityAddress.js.map +1 -0
- package/dist/cjs/{AtLeastOnce.js → EntityId.js} +6 -7
- package/dist/cjs/EntityId.js.map +1 -0
- package/dist/cjs/{ShardManagerClient.js → EntityType.js} +5 -16
- package/dist/cjs/EntityType.js.map +1 -0
- package/dist/cjs/Envelope.js +168 -0
- package/dist/cjs/Envelope.js.map +1 -0
- package/dist/cjs/HttpCommon.js +49 -0
- package/dist/cjs/HttpCommon.js.map +1 -0
- package/dist/cjs/HttpRunner.js +108 -0
- package/dist/cjs/HttpRunner.js.map +1 -0
- package/dist/cjs/HttpShardManager.js +140 -0
- package/dist/cjs/HttpShardManager.js.map +1 -0
- package/dist/cjs/{AtLeastOnceStorage.js → MachineId.js} +11 -9
- package/dist/cjs/MachineId.js.map +1 -0
- package/dist/cjs/Message.js +99 -18
- package/dist/cjs/Message.js.map +1 -1
- package/dist/cjs/MessageStorage.js +356 -0
- package/dist/cjs/MessageStorage.js.map +1 -0
- package/dist/cjs/Reply.js +200 -0
- package/dist/cjs/Reply.js.map +1 -0
- package/dist/cjs/Runner.js +79 -0
- package/dist/cjs/Runner.js.map +1 -0
- package/dist/cjs/RunnerAddress.js +63 -0
- package/dist/cjs/RunnerAddress.js.map +1 -0
- package/dist/cjs/RunnerHealth.js +68 -0
- package/dist/cjs/RunnerHealth.js.map +1 -0
- package/dist/cjs/RunnerServer.js +125 -0
- package/dist/cjs/RunnerServer.js.map +1 -0
- package/dist/cjs/Runners.js +344 -0
- package/dist/cjs/Runners.js.map +1 -0
- package/dist/cjs/ShardId.js +7 -46
- package/dist/cjs/ShardId.js.map +1 -1
- package/dist/cjs/ShardManager.js +493 -8
- package/dist/cjs/ShardManager.js.map +1 -1
- package/dist/cjs/ShardStorage.js +139 -0
- package/dist/cjs/ShardStorage.js.map +1 -0
- package/dist/cjs/Sharding.js +731 -91
- package/dist/cjs/Sharding.js.map +1 -1
- package/dist/cjs/ShardingConfig.js +85 -18
- package/dist/cjs/ShardingConfig.js.map +1 -1
- package/dist/cjs/ShardingRegistrationEvent.js +26 -32
- package/dist/cjs/ShardingRegistrationEvent.js.map +1 -1
- package/dist/cjs/{ManagerConfig.js → Singleton.js} +11 -20
- package/dist/cjs/Singleton.js.map +1 -0
- package/dist/cjs/SingletonAddress.js +50 -0
- package/dist/cjs/SingletonAddress.js.map +1 -0
- package/dist/cjs/Snowflake.js +133 -0
- package/dist/cjs/Snowflake.js.map +1 -0
- package/dist/cjs/SocketRunner.js +40 -0
- package/dist/cjs/SocketRunner.js.map +1 -0
- package/dist/cjs/SocketShardManager.js +33 -0
- package/dist/cjs/SocketShardManager.js.map +1 -0
- package/dist/cjs/SqlMessageStorage.js +668 -0
- package/dist/cjs/SqlMessageStorage.js.map +1 -0
- package/dist/cjs/SqlShardStorage.js +228 -0
- package/dist/cjs/SqlShardStorage.js.map +1 -0
- package/dist/cjs/SynchronizedClock.js +66 -0
- package/dist/cjs/SynchronizedClock.js.map +1 -0
- package/dist/cjs/index.js +57 -45
- package/dist/cjs/internal/entityManager.js +311 -143
- package/dist/cjs/internal/entityManager.js.map +1 -1
- package/dist/cjs/internal/entityReaper.js +47 -0
- package/dist/cjs/internal/entityReaper.js.map +1 -0
- package/dist/cjs/internal/hash.js +20 -0
- package/dist/cjs/internal/hash.js.map +1 -0
- package/dist/cjs/internal/interruptors.js +9 -0
- package/dist/cjs/internal/interruptors.js.map +1 -0
- package/dist/cjs/internal/resourceMap.js +88 -0
- package/dist/cjs/internal/resourceMap.js.map +1 -0
- package/dist/cjs/internal/resourceRef.js +92 -0
- package/dist/cjs/internal/resourceRef.js.map +1 -0
- package/dist/cjs/internal/shardManager.js +219 -235
- package/dist/cjs/internal/shardManager.js.map +1 -1
- package/dist/dts/ClusterError.d.ts +169 -0
- package/dist/dts/ClusterError.d.ts.map +1 -0
- package/dist/dts/ClusterMetrics.d.ts +50 -0
- package/dist/dts/ClusterMetrics.d.ts.map +1 -0
- package/dist/dts/ClusterSchema.d.ts +13 -0
- package/dist/dts/ClusterSchema.d.ts.map +1 -0
- package/dist/dts/DeliverAt.d.ts +27 -0
- package/dist/dts/DeliverAt.d.ts.map +1 -0
- package/dist/dts/Entity.d.ts +180 -0
- package/dist/dts/Entity.d.ts.map +1 -0
- package/dist/dts/EntityAddress.d.ts +55 -0
- package/dist/dts/EntityAddress.d.ts.map +1 -0
- package/dist/dts/EntityId.d.ts +15 -0
- package/dist/dts/EntityId.d.ts.map +1 -0
- package/dist/dts/EntityType.d.ts +15 -0
- package/dist/dts/EntityType.d.ts.map +1 -0
- package/dist/dts/Envelope.d.ts +252 -0
- package/dist/dts/Envelope.d.ts.map +1 -0
- package/dist/dts/HttpCommon.d.ts +25 -0
- package/dist/dts/HttpCommon.d.ts.map +1 -0
- package/dist/dts/HttpRunner.d.ts +76 -0
- package/dist/dts/HttpRunner.d.ts.map +1 -0
- package/dist/dts/HttpShardManager.d.ts +119 -0
- package/dist/dts/HttpShardManager.d.ts.map +1 -0
- package/dist/dts/MachineId.d.ts +20 -0
- package/dist/dts/MachineId.d.ts.map +1 -0
- package/dist/dts/Message.d.ts +91 -74
- package/dist/dts/Message.d.ts.map +1 -1
- package/dist/dts/MessageStorage.d.ts +336 -0
- package/dist/dts/MessageStorage.d.ts.map +1 -0
- package/dist/dts/Reply.d.ts +171 -0
- package/dist/dts/Reply.d.ts.map +1 -0
- package/dist/dts/Runner.d.ts +81 -0
- package/dist/dts/Runner.d.ts.map +1 -0
- package/dist/dts/RunnerAddress.d.ts +56 -0
- package/dist/dts/RunnerAddress.d.ts.map +1 -0
- package/dist/dts/RunnerHealth.d.ts +54 -0
- package/dist/dts/RunnerHealth.d.ts.map +1 -0
- package/dist/dts/RunnerServer.d.ts +44 -0
- package/dist/dts/RunnerServer.d.ts.map +1 -0
- package/dist/dts/Runners.d.ts +161 -0
- package/dist/dts/Runners.d.ts.map +1 -0
- package/dist/dts/ShardId.d.ts +5 -55
- package/dist/dts/ShardId.d.ts.map +1 -1
- package/dist/dts/ShardManager.d.ts +435 -23
- package/dist/dts/ShardManager.d.ts.map +1 -1
- package/dist/dts/ShardStorage.d.ts +200 -0
- package/dist/dts/ShardStorage.d.ts.map +1 -0
- package/dist/dts/Sharding.d.ts +64 -133
- package/dist/dts/Sharding.d.ts.map +1 -1
- package/dist/dts/ShardingConfig.d.ts +147 -44
- package/dist/dts/ShardingConfig.d.ts.map +1 -1
- package/dist/dts/ShardingRegistrationEvent.d.ts +38 -23
- package/dist/dts/ShardingRegistrationEvent.d.ts.map +1 -1
- package/dist/dts/Singleton.d.ts +13 -0
- package/dist/dts/Singleton.d.ts.map +1 -0
- package/dist/dts/SingletonAddress.d.ts +49 -0
- package/dist/dts/SingletonAddress.d.ts.map +1 -0
- package/dist/dts/Snowflake.d.ts +121 -0
- package/dist/dts/Snowflake.d.ts.map +1 -0
- package/dist/dts/SocketRunner.d.ts +22 -0
- package/dist/dts/SocketRunner.d.ts.map +1 -0
- package/dist/dts/SocketShardManager.d.ts +17 -0
- package/dist/dts/SocketShardManager.d.ts.map +1 -0
- package/dist/dts/SqlMessageStorage.d.ts +43 -0
- package/dist/dts/SqlMessageStorage.d.ts.map +1 -0
- package/dist/dts/SqlShardStorage.d.ts +38 -0
- package/dist/dts/SqlShardStorage.d.ts.map +1 -0
- package/dist/dts/SynchronizedClock.d.ts +19 -0
- package/dist/dts/SynchronizedClock.d.ts.map +1 -0
- package/dist/dts/index.d.ts +48 -24
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/entityReaper.d.ts +2 -0
- package/dist/dts/internal/entityReaper.d.ts.map +1 -0
- package/dist/dts/internal/hash.d.ts +2 -0
- package/dist/dts/internal/hash.d.ts.map +1 -0
- package/dist/dts/internal/interruptors.d.ts +2 -0
- package/dist/dts/internal/interruptors.d.ts.map +1 -0
- package/dist/dts/internal/resourceMap.d.ts +22 -0
- package/dist/dts/internal/resourceMap.d.ts.map +1 -0
- package/dist/dts/internal/resourceRef.d.ts +25 -0
- package/dist/dts/internal/resourceRef.d.ts.map +1 -0
- package/dist/dts/internal/shardManager.d.ts +1 -11
- package/dist/dts/internal/shardManager.d.ts.map +1 -1
- package/dist/esm/ClusterError.js +164 -0
- package/dist/esm/ClusterError.js.map +1 -0
- package/dist/esm/ClusterMetrics.js +54 -0
- package/dist/esm/ClusterMetrics.js.map +1 -0
- package/dist/esm/ClusterSchema.js +13 -0
- package/dist/esm/ClusterSchema.js.map +1 -0
- package/dist/esm/DeliverAt.js +22 -0
- package/dist/esm/DeliverAt.js.map +1 -0
- package/dist/esm/Entity.js +173 -0
- package/dist/esm/Entity.js.map +1 -0
- package/dist/esm/EntityAddress.js +44 -0
- package/dist/esm/EntityAddress.js.map +1 -0
- package/dist/esm/EntityId.js +10 -0
- package/dist/esm/EntityId.js.map +1 -0
- package/dist/esm/EntityType.js +10 -0
- package/dist/esm/EntityType.js.map +1 -0
- package/dist/esm/Envelope.js +154 -0
- package/dist/esm/Envelope.js.map +1 -0
- package/dist/esm/HttpCommon.js +38 -0
- package/dist/esm/HttpCommon.js.map +1 -0
- package/dist/esm/HttpRunner.js +98 -0
- package/dist/esm/HttpRunner.js.map +1 -0
- package/dist/esm/HttpShardManager.js +128 -0
- package/dist/esm/HttpShardManager.js.map +1 -0
- package/dist/esm/MachineId.js +17 -0
- package/dist/esm/MachineId.js.map +1 -0
- package/dist/esm/Message.js +88 -17
- package/dist/esm/Message.js.map +1 -1
- package/dist/esm/MessageStorage.js +345 -0
- package/dist/esm/MessageStorage.js.map +1 -0
- package/dist/esm/Reply.js +184 -0
- package/dist/esm/Reply.js.map +1 -0
- package/dist/esm/Runner.js +68 -0
- package/dist/esm/Runner.js.map +1 -0
- package/dist/esm/RunnerAddress.js +52 -0
- package/dist/esm/RunnerAddress.js.map +1 -0
- package/dist/esm/RunnerHealth.js +58 -0
- package/dist/esm/RunnerHealth.js.map +1 -0
- package/dist/esm/RunnerServer.js +116 -0
- package/dist/esm/RunnerServer.js.map +1 -0
- package/dist/esm/Runners.js +332 -0
- package/dist/esm/Runners.js.map +1 -0
- package/dist/esm/ShardId.js +5 -42
- package/dist/esm/ShardId.js.map +1 -1
- package/dist/esm/ShardManager.js +486 -7
- package/dist/esm/ShardManager.js.map +1 -1
- package/dist/esm/ShardStorage.js +129 -0
- package/dist/esm/ShardStorage.js.map +1 -0
- package/dist/esm/Sharding.js +729 -90
- package/dist/esm/Sharding.js.map +1 -1
- package/dist/esm/ShardingConfig.js +80 -17
- package/dist/esm/ShardingConfig.js.map +1 -1
- package/dist/esm/ShardingRegistrationEvent.js +19 -29
- package/dist/esm/ShardingRegistrationEvent.js.map +1 -1
- package/dist/esm/Singleton.js +15 -0
- package/dist/esm/Singleton.js.map +1 -0
- package/dist/esm/SingletonAddress.js +40 -0
- package/dist/esm/SingletonAddress.js.map +1 -0
- package/dist/esm/Snowflake.js +117 -0
- package/dist/esm/Snowflake.js.map +1 -0
- package/dist/esm/SocketRunner.js +31 -0
- package/dist/esm/SocketRunner.js.map +1 -0
- package/dist/esm/SocketShardManager.js +24 -0
- package/dist/esm/SocketShardManager.js.map +1 -0
- package/dist/esm/SqlMessageStorage.js +658 -0
- package/dist/esm/SqlMessageStorage.js.map +1 -0
- package/dist/esm/SqlShardStorage.js +218 -0
- package/dist/esm/SqlShardStorage.js.map +1 -0
- package/dist/esm/SynchronizedClock.js +57 -0
- package/dist/esm/SynchronizedClock.js.map +1 -0
- package/dist/esm/index.js +48 -24
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/entityManager.js +311 -142
- package/dist/esm/internal/entityManager.js.map +1 -1
- package/dist/esm/internal/entityReaper.js +38 -0
- package/dist/esm/internal/entityReaper.js.map +1 -0
- package/dist/esm/internal/hash.js +12 -0
- package/dist/esm/internal/hash.js.map +1 -0
- package/dist/esm/internal/interruptors.js +3 -0
- package/dist/esm/internal/interruptors.js.map +1 -0
- package/dist/esm/internal/resourceMap.js +79 -0
- package/dist/esm/internal/resourceMap.js.map +1 -0
- package/dist/esm/internal/resourceRef.js +83 -0
- package/dist/esm/internal/resourceRef.js.map +1 -0
- package/dist/esm/internal/shardManager.js +217 -233
- package/dist/esm/internal/shardManager.js.map +1 -1
- package/package.json +212 -154
- package/src/ClusterError.ts +193 -0
- package/src/ClusterMetrics.ts +62 -0
- package/src/ClusterSchema.ts +13 -0
- package/src/DeliverAt.ts +36 -0
- package/src/Entity.ts +438 -0
- package/src/EntityAddress.ts +55 -0
- package/src/EntityId.ts +16 -0
- package/src/EntityType.ts +16 -0
- package/src/Envelope.ts +352 -0
- package/src/HttpCommon.ts +73 -0
- package/src/HttpRunner.ts +196 -0
- package/src/HttpShardManager.ts +273 -0
- package/src/MachineId.ts +27 -0
- package/src/Message.ts +143 -92
- package/src/MessageStorage.ts +697 -0
- package/src/Reply.ts +295 -0
- package/src/Runner.ts +84 -0
- package/src/RunnerAddress.ts +61 -0
- package/src/RunnerHealth.ts +87 -0
- package/src/RunnerServer.ts +156 -0
- package/src/Runners.ts +533 -0
- package/src/ShardId.ts +10 -62
- package/src/ShardManager.ts +780 -29
- package/src/ShardStorage.ts +289 -0
- package/src/Sharding.ts +1059 -186
- package/src/ShardingConfig.ts +186 -45
- package/src/ShardingRegistrationEvent.ts +38 -39
- package/src/Singleton.ts +20 -0
- package/src/SingletonAddress.ts +47 -0
- package/src/Snowflake.ts +194 -0
- package/src/SocketRunner.ts +59 -0
- package/src/SocketShardManager.ts +48 -0
- package/src/SqlMessageStorage.ts +833 -0
- package/src/SqlShardStorage.ts +292 -0
- package/src/SynchronizedClock.ts +82 -0
- package/src/index.ts +54 -24
- package/src/internal/entityManager.ts +464 -361
- package/src/internal/entityReaper.ts +53 -0
- package/src/internal/hash.ts +11 -0
- package/src/internal/interruptors.ts +4 -0
- package/src/internal/resourceMap.ts +89 -0
- package/src/internal/resourceRef.ts +88 -0
- package/src/internal/shardManager.ts +273 -546
- package/AtLeastOnce/package.json +0 -6
- package/AtLeastOnceStorage/package.json +0 -6
- package/Broadcaster/package.json +0 -6
- package/ManagerConfig/package.json +0 -6
- package/MessageState/package.json +0 -6
- package/Messenger/package.json +0 -6
- package/Pod/package.json +0 -6
- package/PodAddress/package.json +0 -6
- package/Pods/package.json +0 -6
- package/PodsHealth/package.json +0 -6
- package/PoisonPill/package.json +0 -6
- package/RecipientAddress/package.json +0 -6
- package/RecipientBehaviour/package.json +0 -6
- package/RecipientBehaviourContext/package.json +0 -6
- package/RecipientType/package.json +0 -6
- package/Serialization/package.json +0 -6
- package/SerializedEnvelope/package.json +0 -6
- package/SerializedMessage/package.json +0 -6
- package/ShardManagerClient/package.json +0 -6
- package/ShardingEvent/package.json +0 -6
- package/ShardingException/package.json +0 -6
- package/Storage/package.json +0 -6
- package/dist/cjs/AtLeastOnce.js.map +0 -1
- package/dist/cjs/AtLeastOnceStorage.js.map +0 -1
- package/dist/cjs/Broadcaster.js +0 -6
- package/dist/cjs/Broadcaster.js.map +0 -1
- package/dist/cjs/ManagerConfig.js.map +0 -1
- package/dist/cjs/MessageState.js +0 -55
- package/dist/cjs/MessageState.js.map +0 -1
- package/dist/cjs/Messenger.js +0 -6
- package/dist/cjs/Messenger.js.map +0 -1
- package/dist/cjs/Pod.js +0 -78
- package/dist/cjs/Pod.js.map +0 -1
- package/dist/cjs/PodAddress.js +0 -77
- package/dist/cjs/PodAddress.js.map +0 -1
- package/dist/cjs/Pods.js.map +0 -1
- package/dist/cjs/PodsHealth.js +0 -41
- package/dist/cjs/PodsHealth.js.map +0 -1
- package/dist/cjs/PoisonPill.js +0 -78
- package/dist/cjs/PoisonPill.js.map +0 -1
- package/dist/cjs/RecipientAddress.js +0 -79
- package/dist/cjs/RecipientAddress.js.map +0 -1
- package/dist/cjs/RecipientBehaviour.js +0 -38
- package/dist/cjs/RecipientBehaviour.js.map +0 -1
- package/dist/cjs/RecipientBehaviourContext.js +0 -64
- package/dist/cjs/RecipientBehaviourContext.js.map +0 -1
- package/dist/cjs/RecipientType.js +0 -123
- package/dist/cjs/RecipientType.js.map +0 -1
- package/dist/cjs/Serialization.js +0 -32
- package/dist/cjs/Serialization.js.map +0 -1
- package/dist/cjs/SerializedEnvelope.js +0 -87
- package/dist/cjs/SerializedEnvelope.js.map +0 -1
- package/dist/cjs/SerializedMessage.js +0 -64
- package/dist/cjs/SerializedMessage.js.map +0 -1
- package/dist/cjs/ShardManagerClient.js.map +0 -1
- package/dist/cjs/ShardingEvent.js +0 -72
- package/dist/cjs/ShardingEvent.js.map +0 -1
- package/dist/cjs/ShardingException.js +0 -107
- package/dist/cjs/ShardingException.js.map +0 -1
- package/dist/cjs/Storage.js +0 -40
- package/dist/cjs/Storage.js.map +0 -1
- package/dist/cjs/internal/atLeastOnce.js +0 -35
- package/dist/cjs/internal/atLeastOnce.js.map +0 -1
- package/dist/cjs/internal/atLeastOnceStorage.js +0 -163
- package/dist/cjs/internal/atLeastOnceStorage.js.map +0 -1
- package/dist/cjs/internal/entityState.js +0 -47
- package/dist/cjs/internal/entityState.js.map +0 -1
- package/dist/cjs/internal/managerConfig.js +0 -46
- package/dist/cjs/internal/managerConfig.js.map +0 -1
- package/dist/cjs/internal/message.js +0 -48
- package/dist/cjs/internal/message.js.map +0 -1
- package/dist/cjs/internal/messageState.js +0 -79
- package/dist/cjs/internal/messageState.js.map +0 -1
- package/dist/cjs/internal/podWithMetadata.js +0 -54
- package/dist/cjs/internal/podWithMetadata.js.map +0 -1
- package/dist/cjs/internal/pods.js +0 -35
- package/dist/cjs/internal/pods.js.map +0 -1
- package/dist/cjs/internal/podsHealth.js +0 -40
- package/dist/cjs/internal/podsHealth.js.map +0 -1
- package/dist/cjs/internal/recipientBehaviour.js +0 -52
- package/dist/cjs/internal/recipientBehaviour.js.map +0 -1
- package/dist/cjs/internal/recipientBehaviourContext.js +0 -36
- package/dist/cjs/internal/recipientBehaviourContext.js.map +0 -1
- package/dist/cjs/internal/serialization.js +0 -48
- package/dist/cjs/internal/serialization.js.map +0 -1
- package/dist/cjs/internal/shardManagerClient.js +0 -48
- package/dist/cjs/internal/shardManagerClient.js.map +0 -1
- package/dist/cjs/internal/shardManagerState.js +0 -44
- package/dist/cjs/internal/shardManagerState.js.map +0 -1
- package/dist/cjs/internal/sharding.js +0 -306
- package/dist/cjs/internal/sharding.js.map +0 -1
- package/dist/cjs/internal/shardingConfig.js +0 -56
- package/dist/cjs/internal/shardingConfig.js.map +0 -1
- package/dist/cjs/internal/storage.js +0 -52
- package/dist/cjs/internal/storage.js.map +0 -1
- package/dist/cjs/internal/utils.js +0 -69
- package/dist/cjs/internal/utils.js.map +0 -1
- package/dist/dts/AtLeastOnce.d.ts +0 -20
- package/dist/dts/AtLeastOnce.d.ts.map +0 -1
- package/dist/dts/AtLeastOnceStorage.d.ts +0 -75
- package/dist/dts/AtLeastOnceStorage.d.ts.map +0 -1
- package/dist/dts/Broadcaster.d.ts +0 -32
- package/dist/dts/Broadcaster.d.ts.map +0 -1
- package/dist/dts/ManagerConfig.d.ts +0 -61
- package/dist/dts/ManagerConfig.d.ts.map +0 -1
- package/dist/dts/MessageState.d.ts +0 -107
- package/dist/dts/MessageState.d.ts.map +0 -1
- package/dist/dts/Messenger.d.ts +0 -32
- package/dist/dts/Messenger.d.ts.map +0 -1
- package/dist/dts/Pod.d.ts +0 -81
- package/dist/dts/Pod.d.ts.map +0 -1
- package/dist/dts/PodAddress.d.ts +0 -80
- package/dist/dts/PodAddress.d.ts.map +0 -1
- package/dist/dts/Pods.d.ts +0 -78
- package/dist/dts/Pods.d.ts.map +0 -1
- package/dist/dts/PodsHealth.d.ts +0 -66
- package/dist/dts/PodsHealth.d.ts.map +0 -1
- package/dist/dts/PoisonPill.d.ts +0 -78
- package/dist/dts/PoisonPill.d.ts.map +0 -1
- package/dist/dts/RecipientAddress.d.ts +0 -57
- package/dist/dts/RecipientAddress.d.ts.map +0 -1
- package/dist/dts/RecipientBehaviour.d.ts +0 -72
- package/dist/dts/RecipientBehaviour.d.ts.map +0 -1
- package/dist/dts/RecipientBehaviourContext.d.ts +0 -83
- package/dist/dts/RecipientBehaviourContext.d.ts.map +0 -1
- package/dist/dts/RecipientType.d.ts +0 -93
- package/dist/dts/RecipientType.d.ts.map +0 -1
- package/dist/dts/Serialization.d.ts +0 -58
- package/dist/dts/Serialization.d.ts.map +0 -1
- package/dist/dts/SerializedEnvelope.d.ts +0 -86
- package/dist/dts/SerializedEnvelope.d.ts.map +0 -1
- package/dist/dts/SerializedMessage.d.ts +0 -66
- package/dist/dts/SerializedMessage.d.ts.map +0 -1
- package/dist/dts/ShardManagerClient.d.ts +0 -50
- package/dist/dts/ShardManagerClient.d.ts.map +0 -1
- package/dist/dts/ShardingEvent.d.ts +0 -90
- package/dist/dts/ShardingEvent.d.ts.map +0 -1
- package/dist/dts/ShardingException.d.ts +0 -125
- package/dist/dts/ShardingException.d.ts.map +0 -1
- package/dist/dts/Storage.d.ts +0 -78
- package/dist/dts/Storage.d.ts.map +0 -1
- package/dist/dts/internal/atLeastOnce.d.ts +0 -2
- package/dist/dts/internal/atLeastOnce.d.ts.map +0 -1
- package/dist/dts/internal/atLeastOnceStorage.d.ts +0 -2
- package/dist/dts/internal/atLeastOnceStorage.d.ts.map +0 -1
- package/dist/dts/internal/entityState.d.ts +0 -21
- package/dist/dts/internal/entityState.d.ts.map +0 -1
- package/dist/dts/internal/managerConfig.d.ts +0 -2
- package/dist/dts/internal/managerConfig.d.ts.map +0 -1
- package/dist/dts/internal/message.d.ts +0 -9
- package/dist/dts/internal/message.d.ts.map +0 -1
- package/dist/dts/internal/messageState.d.ts +0 -2
- package/dist/dts/internal/messageState.d.ts.map +0 -1
- package/dist/dts/internal/podWithMetadata.d.ts +0 -2
- package/dist/dts/internal/podWithMetadata.d.ts.map +0 -1
- package/dist/dts/internal/pods.d.ts +0 -2
- package/dist/dts/internal/pods.d.ts.map +0 -1
- package/dist/dts/internal/podsHealth.d.ts +0 -2
- package/dist/dts/internal/podsHealth.d.ts.map +0 -1
- package/dist/dts/internal/recipientBehaviour.d.ts +0 -2
- package/dist/dts/internal/recipientBehaviour.d.ts.map +0 -1
- package/dist/dts/internal/recipientBehaviourContext.d.ts +0 -2
- package/dist/dts/internal/recipientBehaviourContext.d.ts.map +0 -1
- package/dist/dts/internal/serialization.d.ts +0 -2
- package/dist/dts/internal/serialization.d.ts.map +0 -1
- package/dist/dts/internal/shardManagerClient.d.ts +0 -2
- package/dist/dts/internal/shardManagerClient.d.ts.map +0 -1
- package/dist/dts/internal/shardManagerState.d.ts +0 -26
- package/dist/dts/internal/shardManagerState.d.ts.map +0 -1
- package/dist/dts/internal/sharding.d.ts +0 -2
- package/dist/dts/internal/sharding.d.ts.map +0 -1
- package/dist/dts/internal/shardingConfig.d.ts +0 -2
- package/dist/dts/internal/shardingConfig.d.ts.map +0 -1
- package/dist/dts/internal/storage.d.ts +0 -2
- package/dist/dts/internal/storage.d.ts.map +0 -1
- package/dist/dts/internal/utils.d.ts +0 -2
- package/dist/dts/internal/utils.d.ts.map +0 -1
- package/dist/esm/AtLeastOnce.js +0 -12
- package/dist/esm/AtLeastOnce.js.map +0 -1
- package/dist/esm/AtLeastOnceStorage.js +0 -17
- package/dist/esm/AtLeastOnceStorage.js.map +0 -1
- package/dist/esm/Broadcaster.js +0 -2
- package/dist/esm/Broadcaster.js.map +0 -1
- package/dist/esm/ManagerConfig.js +0 -26
- package/dist/esm/ManagerConfig.js.map +0 -1
- package/dist/esm/MessageState.js +0 -47
- package/dist/esm/MessageState.js.map +0 -1
- package/dist/esm/Messenger.js +0 -2
- package/dist/esm/Messenger.js.map +0 -1
- package/dist/esm/Pod.js +0 -65
- package/dist/esm/Pod.js.map +0 -1
- package/dist/esm/PodAddress.js +0 -64
- package/dist/esm/PodAddress.js.map +0 -1
- package/dist/esm/Pods.js +0 -27
- package/dist/esm/Pods.js.map +0 -1
- package/dist/esm/PodsHealth.js +0 -33
- package/dist/esm/PodsHealth.js.map +0 -1
- package/dist/esm/PoisonPill.js +0 -65
- package/dist/esm/PoisonPill.js.map +0 -1
- package/dist/esm/RecipientAddress.js +0 -67
- package/dist/esm/RecipientAddress.js.map +0 -1
- package/dist/esm/RecipientBehaviour.js +0 -30
- package/dist/esm/RecipientBehaviour.js.map +0 -1
- package/dist/esm/RecipientBehaviourContext.js +0 -56
- package/dist/esm/RecipientBehaviourContext.js.map +0 -1
- package/dist/esm/RecipientType.js +0 -108
- package/dist/esm/RecipientType.js.map +0 -1
- package/dist/esm/Serialization.js +0 -24
- package/dist/esm/Serialization.js.map +0 -1
- package/dist/esm/SerializedEnvelope.js +0 -74
- package/dist/esm/SerializedEnvelope.js.map +0 -1
- package/dist/esm/SerializedMessage.js +0 -51
- package/dist/esm/SerializedMessage.js.map +0 -1
- package/dist/esm/ShardManagerClient.js +0 -22
- package/dist/esm/ShardManagerClient.js.map +0 -1
- package/dist/esm/ShardingEvent.js +0 -62
- package/dist/esm/ShardingEvent.js.map +0 -1
- package/dist/esm/ShardingException.js +0 -91
- package/dist/esm/ShardingException.js.map +0 -1
- package/dist/esm/Storage.js +0 -32
- package/dist/esm/Storage.js.map +0 -1
- package/dist/esm/internal/atLeastOnce.js +0 -26
- package/dist/esm/internal/atLeastOnce.js.map +0 -1
- package/dist/esm/internal/atLeastOnceStorage.js +0 -154
- package/dist/esm/internal/atLeastOnceStorage.js.map +0 -1
- package/dist/esm/internal/entityState.js +0 -35
- package/dist/esm/internal/entityState.js.map +0 -1
- package/dist/esm/internal/managerConfig.js +0 -38
- package/dist/esm/internal/managerConfig.js.map +0 -1
- package/dist/esm/internal/message.js +0 -35
- package/dist/esm/internal/message.js.map +0 -1
- package/dist/esm/internal/messageState.js +0 -66
- package/dist/esm/internal/messageState.js.map +0 -1
- package/dist/esm/internal/podWithMetadata.js +0 -41
- package/dist/esm/internal/podWithMetadata.js.map +0 -1
- package/dist/esm/internal/pods.js +0 -25
- package/dist/esm/internal/pods.js.map +0 -1
- package/dist/esm/internal/podsHealth.js +0 -30
- package/dist/esm/internal/podsHealth.js.map +0 -1
- package/dist/esm/internal/recipientBehaviour.js +0 -42
- package/dist/esm/internal/recipientBehaviour.js.map +0 -1
- package/dist/esm/internal/recipientBehaviourContext.js +0 -26
- package/dist/esm/internal/recipientBehaviourContext.js.map +0 -1
- package/dist/esm/internal/serialization.js +0 -38
- package/dist/esm/internal/serialization.js.map +0 -1
- package/dist/esm/internal/shardManagerClient.js +0 -38
- package/dist/esm/internal/shardManagerClient.js.map +0 -1
- package/dist/esm/internal/shardManagerState.js +0 -36
- package/dist/esm/internal/shardManagerState.js.map +0 -1
- package/dist/esm/internal/sharding.js +0 -288
- package/dist/esm/internal/sharding.js.map +0 -1
- package/dist/esm/internal/shardingConfig.js +0 -47
- package/dist/esm/internal/shardingConfig.js.map +0 -1
- package/dist/esm/internal/storage.js +0 -42
- package/dist/esm/internal/storage.js.map +0 -1
- package/dist/esm/internal/utils.js +0 -56
- package/dist/esm/internal/utils.js.map +0 -1
- package/src/AtLeastOnce.ts +0 -28
- package/src/AtLeastOnceStorage.ts +0 -96
- package/src/Broadcaster.ts +0 -48
- package/src/ManagerConfig.ts +0 -67
- package/src/MessageState.ts +0 -126
- package/src/Messenger.ts +0 -40
- package/src/Pod.ts +0 -95
- package/src/PodAddress.ts +0 -94
- package/src/Pods.ts +0 -100
- package/src/PodsHealth.ts +0 -74
- package/src/PoisonPill.ts +0 -105
- package/src/RecipientAddress.ts +0 -72
- package/src/RecipientBehaviour.ts +0 -108
- package/src/RecipientBehaviourContext.ts +0 -101
- package/src/RecipientType.ts +0 -134
- package/src/Serialization.ts +0 -72
- package/src/SerializedEnvelope.ts +0 -108
- package/src/SerializedMessage.ts +0 -82
- package/src/ShardManagerClient.ts +0 -57
- package/src/ShardingEvent.ts +0 -121
- package/src/ShardingException.ts +0 -151
- package/src/Storage.ts +0 -92
- package/src/internal/atLeastOnce.ts +0 -59
- package/src/internal/atLeastOnceStorage.ts +0 -218
- package/src/internal/entityState.ts +0 -64
- package/src/internal/managerConfig.ts +0 -84
- package/src/internal/message.ts +0 -63
- package/src/internal/messageState.ts +0 -98
- package/src/internal/podWithMetadata.ts +0 -72
- package/src/internal/pods.ts +0 -29
- package/src/internal/podsHealth.ts +0 -39
- package/src/internal/recipientBehaviour.ts +0 -133
- package/src/internal/recipientBehaviourContext.ts +0 -70
- package/src/internal/serialization.ts +0 -63
- package/src/internal/shardManagerClient.ts +0 -49
- package/src/internal/shardManagerState.ts +0 -80
- package/src/internal/sharding.ts +0 -789
- package/src/internal/shardingConfig.ts +0 -97
- package/src/internal/storage.ts +0 -60
- package/src/internal/utils.ts +0 -54
package/src/ShardingConfig.ts
CHANGED
@@ -1,76 +1,217 @@
|
|
1
1
|
/**
|
2
2
|
* @since 1.0.0
|
3
3
|
*/
|
4
|
-
import
|
5
|
-
import type
|
6
|
-
import
|
7
|
-
import
|
8
|
-
import
|
4
|
+
import * as Config from "effect/Config"
|
5
|
+
import type { ConfigError } from "effect/ConfigError"
|
6
|
+
import * as ConfigProvider from "effect/ConfigProvider"
|
7
|
+
import * as Context from "effect/Context"
|
8
|
+
import type { DurationInput } from "effect/Duration"
|
9
|
+
import * as Duration from "effect/Duration"
|
10
|
+
import * as Effect from "effect/Effect"
|
11
|
+
import * as Layer from "effect/Layer"
|
12
|
+
import * as Option from "effect/Option"
|
13
|
+
import { RunnerAddress } from "./RunnerAddress.js"
|
9
14
|
|
10
15
|
/**
|
16
|
+
* Represents the configuration for the `Sharding` service on a given runner.
|
17
|
+
*
|
11
18
|
* @since 1.0.0
|
12
|
-
* @category
|
19
|
+
* @category models
|
13
20
|
*/
|
14
|
-
export
|
21
|
+
export class ShardingConfig extends Context.Tag("@effect/cluster/ShardingConfig")<ShardingConfig, {
|
22
|
+
/**
|
23
|
+
* The address for the current runner.
|
24
|
+
*
|
25
|
+
* If `None`, the runner is not part of the cluster and will be in a client-only
|
26
|
+
* mode.
|
27
|
+
*/
|
28
|
+
readonly runnerAddress: Option.Option<RunnerAddress>
|
29
|
+
/**
|
30
|
+
* The version of the current runner.
|
31
|
+
*/
|
32
|
+
readonly serverVersion: number
|
33
|
+
/**
|
34
|
+
* The number of shards to allocate to a runner.
|
35
|
+
*
|
36
|
+
* **Note**: this value should be consistent across all runners.
|
37
|
+
*/
|
38
|
+
readonly numberOfShards: number
|
39
|
+
/**
|
40
|
+
* The address of the shard manager.
|
41
|
+
*/
|
42
|
+
readonly shardManagerAddress: RunnerAddress
|
43
|
+
/**
|
44
|
+
* If the shard manager is unavailable for this duration, all the shard
|
45
|
+
* assignments will be reset.
|
46
|
+
*/
|
47
|
+
readonly shardManagerUnavailableTimeout: DurationInput
|
48
|
+
/**
|
49
|
+
* The default capacity of the mailbox for entities.
|
50
|
+
*/
|
51
|
+
readonly entityMailboxCapacity: number | "unbounded"
|
52
|
+
/**
|
53
|
+
* The maximum duration of inactivity (i.e. without receiving a message)
|
54
|
+
* after which an entity will be interrupted.
|
55
|
+
*/
|
56
|
+
readonly entityMaxIdleTime: DurationInput
|
57
|
+
/**
|
58
|
+
* The maximum duration of time to wait for an entity to terminate.
|
59
|
+
*
|
60
|
+
* By default this is set to 15 seconds to stay within kubernetes defaults.
|
61
|
+
*/
|
62
|
+
readonly entityTerminationTimeout: DurationInput
|
63
|
+
/**
|
64
|
+
* The interval at which to poll for unprocessed messages from storage.
|
65
|
+
*/
|
66
|
+
readonly entityMessagePollInterval: DurationInput
|
67
|
+
/**
|
68
|
+
* The interval at which to poll for client replies from storage.
|
69
|
+
*/
|
70
|
+
readonly entityReplyPollInterval: DurationInput
|
71
|
+
readonly refreshAssignmentsInterval: DurationInput
|
72
|
+
/**
|
73
|
+
* The interval to retry a send if EntityNotManagedByRunner is returned.
|
74
|
+
*/
|
75
|
+
readonly sendRetryInterval: DurationInput
|
76
|
+
// readonly unhealthyRunnerReportInterval: Duration.Duration
|
77
|
+
/**
|
78
|
+
* Simulate serialization and deserialization to remote runners for local
|
79
|
+
* entities.
|
80
|
+
*/
|
81
|
+
readonly simulateRemoteSerialization: boolean
|
82
|
+
}>() {}
|
83
|
+
|
84
|
+
const defaultRunnerAddress = RunnerAddress.make({ host: "localhost", port: 34431 })
|
15
85
|
|
16
86
|
/**
|
17
87
|
* @since 1.0.0
|
18
|
-
* @category
|
88
|
+
* @category defaults
|
19
89
|
*/
|
20
|
-
export
|
90
|
+
export const defaults: ShardingConfig["Type"] = {
|
91
|
+
runnerAddress: Option.some(defaultRunnerAddress),
|
92
|
+
serverVersion: 1,
|
93
|
+
numberOfShards: 300,
|
94
|
+
shardManagerAddress: RunnerAddress.make({ host: "localhost", port: 8080 }),
|
95
|
+
shardManagerUnavailableTimeout: Duration.minutes(10),
|
96
|
+
entityMailboxCapacity: 4096,
|
97
|
+
entityMaxIdleTime: Duration.minutes(1),
|
98
|
+
entityTerminationTimeout: Duration.seconds(15),
|
99
|
+
entityMessagePollInterval: Duration.seconds(10),
|
100
|
+
entityReplyPollInterval: Duration.millis(200),
|
101
|
+
sendRetryInterval: Duration.millis(100),
|
102
|
+
refreshAssignmentsInterval: Duration.minutes(5),
|
103
|
+
simulateRemoteSerialization: true
|
104
|
+
}
|
21
105
|
|
22
106
|
/**
|
23
|
-
* Sharding configuration
|
24
|
-
* @param numberOfShards number of shards (see documentation on how to choose this), should be same on all nodes
|
25
|
-
* @param selfHost hostname or IP address of the current pod
|
26
|
-
* @param shardingPort port used for pods to communicate together
|
27
|
-
* @param shardManagerUri url of the Shard Manager API
|
28
|
-
* @param serverVersion version of the current pod
|
29
|
-
* @param entityMaxIdleTime time of inactivity (without receiving any message) after which an entity will be interrupted
|
30
|
-
* @param entityTerminationTimeout time we give to an entity to handle the termination message before interrupting it
|
31
|
-
* @param refreshAssignmentsRetryInterval retry interval in case of failure getting shard assignments from storage
|
32
|
-
* @param unhealthyPodReportInterval interval to report unhealthy pods to the Shard Manager (this exists to prevent calling the Shard Manager for each failed message)
|
33
107
|
* @since 1.0.0
|
34
|
-
* @category
|
108
|
+
* @category Layers
|
35
109
|
*/
|
36
|
-
export
|
37
|
-
|
38
|
-
readonly selfHost: string
|
39
|
-
readonly shardingPort: number
|
40
|
-
readonly shardManagerUri: string
|
41
|
-
readonly serverVersion: string
|
42
|
-
readonly entityMaxIdleTime: Duration.Duration
|
43
|
-
readonly entityTerminationTimeout: Duration.Duration
|
44
|
-
readonly refreshAssignmentsRetryInterval: Duration.Duration
|
45
|
-
readonly unhealthyPodReportInterval: Duration.Duration
|
46
|
-
}
|
110
|
+
export const layer = (options?: Partial<ShardingConfig["Type"]>): Layer.Layer<ShardingConfig> =>
|
111
|
+
Layer.succeed(ShardingConfig, { ...defaults, ...options })
|
47
112
|
|
48
113
|
/**
|
49
114
|
* @since 1.0.0
|
50
|
-
* @category
|
115
|
+
* @category defaults
|
51
116
|
*/
|
52
|
-
export const
|
117
|
+
export const layerDefaults: Layer.Layer<ShardingConfig> = layer()
|
53
118
|
|
54
119
|
/**
|
55
|
-
* Provides the default values for the ShardingConfig.
|
56
|
-
*
|
57
120
|
* @since 1.0.0
|
58
|
-
* @category
|
121
|
+
* @category Config
|
59
122
|
*/
|
60
|
-
export const
|
123
|
+
export const config: Config.Config<ShardingConfig["Type"]> = Config.all({
|
124
|
+
runnerAddress: Config.all({
|
125
|
+
host: Config.string("host").pipe(
|
126
|
+
Config.withDefault(defaultRunnerAddress.host),
|
127
|
+
Config.withDescription("The hostname or IP address of the runner.")
|
128
|
+
),
|
129
|
+
port: Config.integer("port").pipe(
|
130
|
+
Config.withDefault(defaultRunnerAddress.port),
|
131
|
+
Config.withDescription("The port used for inter-runner communication.")
|
132
|
+
)
|
133
|
+
}).pipe(Config.map((options) => RunnerAddress.make(options)), Config.option),
|
134
|
+
serverVersion: Config.integer("serverVersion").pipe(
|
135
|
+
Config.withDefault(defaults.serverVersion),
|
136
|
+
Config.withDescription("The version of the current runner.")
|
137
|
+
),
|
138
|
+
numberOfShards: Config.integer("numberOfShards").pipe(
|
139
|
+
Config.withDefault(defaults.numberOfShards),
|
140
|
+
Config.withDescription("The number of shards to allocate to a runner.")
|
141
|
+
),
|
142
|
+
shardManagerAddress: Config.all({
|
143
|
+
host: Config.string("shardManagerHost").pipe(
|
144
|
+
Config.withDefault(defaults.shardManagerAddress.host),
|
145
|
+
Config.withDescription("The host of the shard manager.")
|
146
|
+
),
|
147
|
+
port: Config.integer("shardManagerPort").pipe(
|
148
|
+
Config.withDefault(defaults.shardManagerAddress.port),
|
149
|
+
Config.withDescription("The port of the shard manager.")
|
150
|
+
)
|
151
|
+
}).pipe(Config.map((options) => RunnerAddress.make(options))),
|
152
|
+
shardManagerUnavailableTimeout: Config.duration("shardManagerUnavailableTimeout").pipe(
|
153
|
+
Config.withDefault(defaults.shardManagerUnavailableTimeout),
|
154
|
+
Config.withDescription(
|
155
|
+
"If the shard is unavilable for this duration, all the shard assignments will be reset."
|
156
|
+
)
|
157
|
+
),
|
158
|
+
entityMailboxCapacity: Config.integer("entityMailboxCapacity").pipe(
|
159
|
+
Config.withDefault(defaults.entityMailboxCapacity),
|
160
|
+
Config.withDescription("The default capacity of the mailbox for entities.")
|
161
|
+
),
|
162
|
+
entityMaxIdleTime: Config.duration("entityMaxIdleTime").pipe(
|
163
|
+
Config.withDefault(defaults.entityMaxIdleTime),
|
164
|
+
Config.withDescription(
|
165
|
+
"The maximum duration of inactivity (i.e. without receiving a message) after which an entity will be interrupted."
|
166
|
+
)
|
167
|
+
),
|
168
|
+
entityTerminationTimeout: Config.duration("entityTerminationTimeout").pipe(
|
169
|
+
Config.withDefault(defaults.entityTerminationTimeout),
|
170
|
+
Config.withDescription("The maximum duration of time to wait for an entity to terminate.")
|
171
|
+
),
|
172
|
+
entityMessagePollInterval: Config.duration("entityMessagePollInterval").pipe(
|
173
|
+
Config.withDefault(defaults.entityMessagePollInterval),
|
174
|
+
Config.withDescription("The interval at which to poll for unprocessed messages from storage.")
|
175
|
+
),
|
176
|
+
entityReplyPollInterval: Config.duration("entityReplyPollInterval").pipe(
|
177
|
+
Config.withDefault(defaults.entityReplyPollInterval),
|
178
|
+
Config.withDescription("The interval at which to poll for client replies from storage.")
|
179
|
+
),
|
180
|
+
sendRetryInterval: Config.duration("sendRetryInterval").pipe(
|
181
|
+
Config.withDefault(defaults.sendRetryInterval),
|
182
|
+
Config.withDescription("The interval to retry a send if EntityNotManagedByRunner is returned.")
|
183
|
+
),
|
184
|
+
refreshAssignmentsInterval: Config.duration("refreshAssignmentsInterval").pipe(
|
185
|
+
Config.withDefault(defaults.refreshAssignmentsInterval),
|
186
|
+
Config.withDescription("The interval at which to refresh shard assignments.")
|
187
|
+
),
|
188
|
+
simulateRemoteSerialization: Config.boolean("simulateRemoteSerialization").pipe(
|
189
|
+
Config.withDefault(defaults.simulateRemoteSerialization),
|
190
|
+
Config.withDescription("Simulate serialization and deserialization to remote runners for local entities.")
|
191
|
+
)
|
192
|
+
})
|
61
193
|
|
62
194
|
/**
|
63
|
-
* Provides the ShardingConfig, values that are omitted will be read from the defaults
|
64
|
-
*
|
65
195
|
* @since 1.0.0
|
66
|
-
* @category
|
196
|
+
* @category Config
|
67
197
|
*/
|
68
|
-
export const
|
198
|
+
export const configFromEnv = config.pipe(
|
199
|
+
Effect.withConfigProvider(
|
200
|
+
ConfigProvider.fromEnv().pipe(
|
201
|
+
ConfigProvider.constantCase
|
202
|
+
)
|
203
|
+
)
|
204
|
+
)
|
69
205
|
|
70
206
|
/**
|
71
|
-
* Reads the ShardingConfig from the effect/ConfigProvider
|
72
|
-
*
|
73
207
|
* @since 1.0.0
|
74
|
-
* @category
|
208
|
+
* @category Layers
|
75
209
|
*/
|
76
|
-
export const
|
210
|
+
export const layerFromEnv = (options?: Partial<ShardingConfig["Type"]> | undefined): Layer.Layer<
|
211
|
+
ShardingConfig,
|
212
|
+
ConfigError
|
213
|
+
> =>
|
214
|
+
Layer.effect(
|
215
|
+
ShardingConfig,
|
216
|
+
options ? Effect.map(configFromEnv, (config) => ({ ...config, ...options })) : configFromEnv
|
217
|
+
)
|
@@ -1,62 +1,61 @@
|
|
1
1
|
/**
|
2
2
|
* @since 1.0.0
|
3
3
|
*/
|
4
|
-
import
|
5
|
-
import type
|
6
|
-
|
7
|
-
interface EntityRegistered<Msg extends Message.Message.Any> {
|
8
|
-
_tag: "EntityRegistered"
|
9
|
-
entityType: RecipientType.EntityType<Msg>
|
10
|
-
}
|
4
|
+
import * as Data from "effect/Data"
|
5
|
+
import type { Entity } from "./Entity.js"
|
6
|
+
import type { SingletonAddress } from "./SingletonAddress.js"
|
11
7
|
|
12
8
|
/**
|
13
|
-
*
|
9
|
+
* Represents events that can occur when a runner registers entities or singletons.
|
14
10
|
*
|
15
11
|
* @since 1.0.0
|
16
|
-
* @category
|
12
|
+
* @category models
|
17
13
|
*/
|
18
|
-
export
|
19
|
-
|
20
|
-
|
21
|
-
return ({ _tag: "EntityRegistered", entityType })
|
22
|
-
}
|
23
|
-
|
24
|
-
interface SingletonRegistered {
|
25
|
-
_tag: "SingletonRegistered"
|
26
|
-
name: string
|
27
|
-
}
|
14
|
+
export type ShardingRegistrationEvent =
|
15
|
+
| EntityRegistered
|
16
|
+
| SingletonRegistered
|
28
17
|
|
29
18
|
/**
|
30
|
-
*
|
19
|
+
* Represents an event that occurs when a new entity is registered with a runner.
|
31
20
|
*
|
32
21
|
* @since 1.0.0
|
33
|
-
* @category
|
22
|
+
* @category models
|
34
23
|
*/
|
35
|
-
export
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
interface TopicRegistered<Msg extends Message.Message.Any> {
|
40
|
-
_tag: "TopicRegistered"
|
41
|
-
topicType: RecipientType.TopicType<Msg>
|
24
|
+
export interface EntityRegistered {
|
25
|
+
readonly _tag: "EntityRegistered"
|
26
|
+
readonly entity: Entity<any>
|
42
27
|
}
|
43
28
|
|
44
29
|
/**
|
45
|
-
*
|
30
|
+
* Represents an event that occurs when a new singleton is registered with a
|
31
|
+
* runner.
|
32
|
+
*
|
46
33
|
* @since 1.0.0
|
47
|
-
* @category
|
34
|
+
* @category models
|
48
35
|
*/
|
49
|
-
export
|
50
|
-
|
51
|
-
|
52
|
-
return ({ _tag: "TopicRegistered", topicType })
|
36
|
+
export interface SingletonRegistered {
|
37
|
+
readonly _tag: "SingletonRegistered"
|
38
|
+
readonly address: SingletonAddress
|
53
39
|
}
|
54
40
|
|
55
41
|
/**
|
56
42
|
* @since 1.0.0
|
57
|
-
* @category
|
43
|
+
* @category pattern matching
|
58
44
|
*/
|
59
|
-
export
|
60
|
-
|
61
|
-
|
62
|
-
|
45
|
+
export const {
|
46
|
+
/**
|
47
|
+
* @since 1.0.0
|
48
|
+
* @category pattern matching
|
49
|
+
*/
|
50
|
+
$match: match,
|
51
|
+
/**
|
52
|
+
* @since 1.0.0
|
53
|
+
* @category constructors
|
54
|
+
*/
|
55
|
+
EntityRegistered,
|
56
|
+
/**
|
57
|
+
* @since 1.0.0
|
58
|
+
* @category constructors
|
59
|
+
*/
|
60
|
+
SingletonRegistered
|
61
|
+
} = Data.taggedEnum<ShardingRegistrationEvent>()
|
package/src/Singleton.ts
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
/**
|
2
|
+
* @since 1.0.0
|
3
|
+
*/
|
4
|
+
import * as Effect from "effect/Effect"
|
5
|
+
import * as Layer from "effect/Layer"
|
6
|
+
import type { Scope } from "effect/Scope"
|
7
|
+
import { Sharding } from "./Sharding.js"
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @since 1.0.0
|
11
|
+
* @category constructors
|
12
|
+
*/
|
13
|
+
export const make = <E, R>(
|
14
|
+
name: string,
|
15
|
+
run: Effect.Effect<void, E, R>
|
16
|
+
): Layer.Layer<never, never, Sharding | Exclude<R, Scope>> =>
|
17
|
+
Layer.effectDiscard(Effect.gen(function*() {
|
18
|
+
const sharding = yield* Sharding
|
19
|
+
yield* sharding.registerSingleton(name, run)
|
20
|
+
}))
|
@@ -0,0 +1,47 @@
|
|
1
|
+
/**
|
2
|
+
* @since 1.0.0
|
3
|
+
*/
|
4
|
+
import * as Equal from "effect/Equal"
|
5
|
+
import * as Hash from "effect/Hash"
|
6
|
+
import * as Schema from "effect/Schema"
|
7
|
+
import { ShardId } from "./ShardId.js"
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @since 1.0.0
|
11
|
+
* @category Address
|
12
|
+
*/
|
13
|
+
export const TypeId: unique symbol = Symbol.for("@effect/cluster/SingletonAddress")
|
14
|
+
|
15
|
+
/**
|
16
|
+
* @since 1.0.0
|
17
|
+
* @category Address
|
18
|
+
*/
|
19
|
+
export type TypeId = typeof TypeId
|
20
|
+
|
21
|
+
/**
|
22
|
+
* Represents the unique address of an singleton within the cluster.
|
23
|
+
*
|
24
|
+
* @since 1.0.0
|
25
|
+
* @category Address
|
26
|
+
*/
|
27
|
+
export class SingletonAddress extends Schema.Class<SingletonAddress>("@effect/cluster/SingletonAddress")({
|
28
|
+
shardId: ShardId,
|
29
|
+
name: Schema.NonEmptyTrimmedString
|
30
|
+
}) {
|
31
|
+
/**
|
32
|
+
* @since 1.0.0
|
33
|
+
*/
|
34
|
+
readonly [TypeId] = TypeId;
|
35
|
+
/**
|
36
|
+
* @since 1.0.0
|
37
|
+
*/
|
38
|
+
[Hash.symbol]() {
|
39
|
+
return Hash.cached(this)(Hash.string(`${this.shardId}:${this.name}`))
|
40
|
+
}
|
41
|
+
/**
|
42
|
+
* @since 1.0.0
|
43
|
+
*/
|
44
|
+
[Equal.symbol](that: SingletonAddress): boolean {
|
45
|
+
return this.shardId === that.shardId && this.name === that.name
|
46
|
+
}
|
47
|
+
}
|
package/src/Snowflake.ts
ADDED
@@ -0,0 +1,194 @@
|
|
1
|
+
/**
|
2
|
+
* @since 1.0.0
|
3
|
+
*/
|
4
|
+
import type * as Brand from "effect/Brand"
|
5
|
+
import * as Context from "effect/Context"
|
6
|
+
import * as DateTime from "effect/DateTime"
|
7
|
+
import * as Effect from "effect/Effect"
|
8
|
+
import { identity } from "effect/Function"
|
9
|
+
import * as Layer from "effect/Layer"
|
10
|
+
import * as Schema from "effect/Schema"
|
11
|
+
import type { MachineId } from "./MachineId.js"
|
12
|
+
|
13
|
+
/**
|
14
|
+
* @since 1.0.0
|
15
|
+
* @category Symbols
|
16
|
+
*/
|
17
|
+
export const TypeId: unique symbol = Symbol.for("@effect/cluster/Snowflake")
|
18
|
+
|
19
|
+
/**
|
20
|
+
* @since 1.0.0
|
21
|
+
* @category Symbols
|
22
|
+
*/
|
23
|
+
export type TypeId = typeof TypeId
|
24
|
+
|
25
|
+
/**
|
26
|
+
* @since 1.0.0
|
27
|
+
* @category Models
|
28
|
+
*/
|
29
|
+
export type Snowflake = Brand.Branded<bigint, TypeId>
|
30
|
+
|
31
|
+
/**
|
32
|
+
* @since 1.0.0
|
33
|
+
* @category Models
|
34
|
+
*/
|
35
|
+
export const Snowflake = (input: string | bigint): Snowflake =>
|
36
|
+
typeof input === "string" ? BigInt(input) as Snowflake : input as Snowflake
|
37
|
+
|
38
|
+
/**
|
39
|
+
* @since 1.0.0
|
40
|
+
* @category Models
|
41
|
+
*/
|
42
|
+
export declare namespace Snowflake {
|
43
|
+
/**
|
44
|
+
* @since 1.0.0
|
45
|
+
* @category Models
|
46
|
+
*/
|
47
|
+
export interface Parts {
|
48
|
+
readonly timestamp: number
|
49
|
+
readonly machineId: MachineId
|
50
|
+
readonly sequence: number
|
51
|
+
}
|
52
|
+
|
53
|
+
/**
|
54
|
+
* @since 1.0.0
|
55
|
+
* @category Models
|
56
|
+
*/
|
57
|
+
export interface Generator {
|
58
|
+
readonly unsafeNext: () => Snowflake
|
59
|
+
readonly setMachineId: (machineId: MachineId) => Effect.Effect<void>
|
60
|
+
}
|
61
|
+
}
|
62
|
+
|
63
|
+
/**
|
64
|
+
* @since 1.0.0
|
65
|
+
* @category Schemas
|
66
|
+
*/
|
67
|
+
export const SnowflakeFromBigInt: Schema.Schema<Snowflake, bigint> = Schema.BigIntFromSelf.pipe(
|
68
|
+
Schema.brand(TypeId)
|
69
|
+
)
|
70
|
+
|
71
|
+
/**
|
72
|
+
* @since 1.0.0
|
73
|
+
* @category Schemas
|
74
|
+
*/
|
75
|
+
export const SnowflakeFromString: Schema.Schema<Snowflake, string> = Schema.BigInt.pipe(
|
76
|
+
Schema.brand(TypeId)
|
77
|
+
)
|
78
|
+
|
79
|
+
/**
|
80
|
+
* @since 1.0.0
|
81
|
+
* @category Epoch
|
82
|
+
*/
|
83
|
+
export const constEpochMillis: number = Date.UTC(2025, 0, 1)
|
84
|
+
|
85
|
+
const sinceUnixEpoch = constEpochMillis - Date.UTC(1970, 0, 1)
|
86
|
+
const constBigInt12 = BigInt(12)
|
87
|
+
const constBigInt22 = BigInt(22)
|
88
|
+
const constBigInt1024 = BigInt(1024)
|
89
|
+
const constBigInt4096 = BigInt(4096)
|
90
|
+
|
91
|
+
/**
|
92
|
+
* @since 1.0.0
|
93
|
+
* @category constructors
|
94
|
+
*/
|
95
|
+
export const make = (options: {
|
96
|
+
readonly machineId: MachineId
|
97
|
+
readonly sequence: number
|
98
|
+
readonly timestamp: number
|
99
|
+
}): Snowflake =>
|
100
|
+
(BigInt(options.timestamp - constEpochMillis) << constBigInt22
|
101
|
+
| (BigInt(options.machineId % 1024) << constBigInt12)
|
102
|
+
| BigInt(options.sequence % 4096)) as Snowflake
|
103
|
+
|
104
|
+
/**
|
105
|
+
* @since 1.0.0
|
106
|
+
* @category Parts
|
107
|
+
*/
|
108
|
+
export const timestamp = (snowflake: Snowflake): number => Number(snowflake >> constBigInt22) + sinceUnixEpoch
|
109
|
+
|
110
|
+
/**
|
111
|
+
* @since 1.0.0
|
112
|
+
* @category Parts
|
113
|
+
*/
|
114
|
+
export const dateTime = (snowflake: Snowflake): DateTime.Utc => DateTime.unsafeMake(timestamp(snowflake))
|
115
|
+
|
116
|
+
/**
|
117
|
+
* @since 1.0.0
|
118
|
+
* @category Parts
|
119
|
+
*/
|
120
|
+
export const machineId = (snowflake: Snowflake): MachineId =>
|
121
|
+
Number((snowflake >> constBigInt12) % constBigInt1024) as MachineId
|
122
|
+
|
123
|
+
/**
|
124
|
+
* @since 1.0.0
|
125
|
+
* @category Parts
|
126
|
+
*/
|
127
|
+
export const sequence = (snowflake: Snowflake): number => Number(snowflake % constBigInt4096)
|
128
|
+
|
129
|
+
/**
|
130
|
+
* @since 1.0.0
|
131
|
+
* @category Parts
|
132
|
+
*/
|
133
|
+
export const toParts = (snowflake: Snowflake): Snowflake.Parts => ({
|
134
|
+
timestamp: timestamp(snowflake),
|
135
|
+
machineId: machineId(snowflake),
|
136
|
+
sequence: sequence(snowflake)
|
137
|
+
})
|
138
|
+
|
139
|
+
/**
|
140
|
+
* @since 1.0.0
|
141
|
+
* @category Generator
|
142
|
+
*/
|
143
|
+
export const makeGenerator: Effect.Effect<Snowflake.Generator> = Effect.gen(function*() {
|
144
|
+
let machineId = Math.floor(Math.random() * 1024) as MachineId
|
145
|
+
const clock = yield* Effect.clock
|
146
|
+
|
147
|
+
let sequence = 0
|
148
|
+
let sequenceAt = clock.unsafeCurrentTimeMillis()
|
149
|
+
|
150
|
+
return identity<Snowflake.Generator>({
|
151
|
+
setMachineId: (newMachineId) =>
|
152
|
+
Effect.sync(() => {
|
153
|
+
machineId = newMachineId
|
154
|
+
}),
|
155
|
+
unsafeNext() {
|
156
|
+
let now = clock.unsafeCurrentTimeMillis()
|
157
|
+
|
158
|
+
// account for clock drift, only allow time to move forward
|
159
|
+
if (now < sequenceAt) {
|
160
|
+
now = sequenceAt
|
161
|
+
} else if (now > sequenceAt) {
|
162
|
+
// reset sequence if we're in a new millisecond
|
163
|
+
sequence = 0
|
164
|
+
sequenceAt = now
|
165
|
+
} else if (sequence >= 1024) {
|
166
|
+
// if we've hit the max sequence for this millisecond, go to the next
|
167
|
+
// millisecond
|
168
|
+
sequenceAt++
|
169
|
+
sequence = 0
|
170
|
+
}
|
171
|
+
|
172
|
+
return make({
|
173
|
+
machineId,
|
174
|
+
sequence: sequence++,
|
175
|
+
timestamp: sequenceAt
|
176
|
+
})
|
177
|
+
}
|
178
|
+
})
|
179
|
+
})
|
180
|
+
|
181
|
+
/**
|
182
|
+
* @since 1.0.0
|
183
|
+
* @category Generator
|
184
|
+
*/
|
185
|
+
export class Generator extends Context.Tag("@effect/cluster/Snowflake/Generator")<
|
186
|
+
Generator,
|
187
|
+
Snowflake.Generator
|
188
|
+
>() {}
|
189
|
+
|
190
|
+
/**
|
191
|
+
* @since 1.0.0
|
192
|
+
* @category Generator
|
193
|
+
*/
|
194
|
+
export const layerGenerator: Layer.Layer<Generator> = Layer.effect(Generator, makeGenerator)
|
@@ -0,0 +1,59 @@
|
|
1
|
+
/**
|
2
|
+
* @since 1.0.0
|
3
|
+
*/
|
4
|
+
import { SocketServer } from "@effect/platform/SocketServer"
|
5
|
+
import type * as RpcSerialization from "@effect/rpc/RpcSerialization"
|
6
|
+
import * as RpcServer from "@effect/rpc/RpcServer"
|
7
|
+
import * as Effect from "effect/Effect"
|
8
|
+
import * as Layer from "effect/Layer"
|
9
|
+
import type { MessageStorage } from "./MessageStorage.js"
|
10
|
+
import * as Runners from "./Runners.js"
|
11
|
+
import * as RunnerServer from "./RunnerServer.js"
|
12
|
+
import * as Sharding from "./Sharding.js"
|
13
|
+
import type { ShardingConfig } from "./ShardingConfig.js"
|
14
|
+
import * as ShardManager from "./ShardManager.js"
|
15
|
+
import * as ShardStorage from "./ShardStorage.js"
|
16
|
+
|
17
|
+
const withLogAddress = <A, E, R>(layer: Layer.Layer<A, E, R>): Layer.Layer<A, E, R | SocketServer> =>
|
18
|
+
Layer.effectDiscard(Effect.gen(function*() {
|
19
|
+
const server = yield* SocketServer
|
20
|
+
const address = server.address._tag === "UnixAddress"
|
21
|
+
? server.address.path
|
22
|
+
: `${server.address.hostname}:${server.address.port}`
|
23
|
+
yield* Effect.annotateLogs(Effect.logInfo(`Listening on: ${address}`), {
|
24
|
+
package: "@effect/cluster",
|
25
|
+
service: "Runner"
|
26
|
+
})
|
27
|
+
})).pipe(Layer.provideMerge(layer))
|
28
|
+
|
29
|
+
/**
|
30
|
+
* @since 1.0.0
|
31
|
+
* @category Layers
|
32
|
+
*/
|
33
|
+
export const layer: Layer.Layer<
|
34
|
+
Sharding.Sharding | Runners.Runners,
|
35
|
+
never,
|
36
|
+
| Runners.RpcClientProtocol
|
37
|
+
| ShardingConfig
|
38
|
+
| RpcSerialization.RpcSerialization
|
39
|
+
| SocketServer
|
40
|
+
| MessageStorage
|
41
|
+
| ShardStorage.ShardStorage
|
42
|
+
> = RunnerServer.layerWithClients.pipe(
|
43
|
+
withLogAddress,
|
44
|
+
Layer.provide(RpcServer.layerProtocolSocketServer)
|
45
|
+
)
|
46
|
+
|
47
|
+
/**
|
48
|
+
* @since 1.0.0
|
49
|
+
* @category Layers
|
50
|
+
*/
|
51
|
+
export const layerClientOnly: Layer.Layer<
|
52
|
+
Sharding.Sharding | Runners.Runners,
|
53
|
+
never,
|
54
|
+
Runners.RpcClientProtocol | ShardingConfig | MessageStorage
|
55
|
+
> = Sharding.layer.pipe(
|
56
|
+
Layer.provideMerge(Runners.layerRpc),
|
57
|
+
Layer.provide(ShardManager.layerClientRpc),
|
58
|
+
Layer.provide(ShardStorage.layerNoop)
|
59
|
+
)
|