/** * Configures how an Effect Cluster runner participates in sharding. * * `ShardingConfig` describes the runner address, shard group membership, shard * counts and weights, lock timing, entity mailbox and lifecycle limits, polling * intervals, health checks, and local serialization simulation. This module * includes the service, default values, programmatic and environment-based * layers, a `Config` description for loading values, and helpers for normalizing * assigned shard groups. * * @stability unstable * @since 4.0.0 */ import * as Config from "../Config.ts"; import * as Context from "../Context.ts"; import * as Duration from "../Duration.ts"; import * as Effect from "../Effect.ts"; import * as Layer from "../Layer.ts"; import * as Option from "../Option.ts"; import { RunnerAddress } from "./RunnerAddress.ts"; declare const ShardingConfig_base: Context.ServiceClass; /** * The listen address for the current runner. * * Defaults to the `runnerAddress`. */ readonly runnerListenAddress: Option.Option; /** * A number that determines how many shards this runner will be assigned * relative to other runners. * * Defaults to `1`. * * A value of `2` means that this runner should be assigned twice as many * shards as a runner with a weight of `1`. */ readonly runnerShardWeight: number; /** * The shard groups available across all runners. * * Defaults to `["default"]`. */ readonly availableShardGroups: ReadonlyArray; /** * The shard groups that are assigned to this runner. * * Defaults to `["default"]`. */ readonly assignedShardGroups: ReadonlyArray; /** * The number of shards to allocate per shard group. * * **Note**: this value should be consistent across all runners. */ readonly shardsPerGroup: number; /** * The maximum interval between shard lock refreshes. * * The runner may shorten this interval to one third of * `shardLockExpiration` to preserve enough time to stop entities safely if * lock storage becomes unavailable. */ readonly shardLockRefreshInterval: Duration.Input; /** * Shard lock expiration duration. */ readonly shardLockExpiration: Duration.Input; /** * Disable the use of advisory locks for shard locking. * * PGlite clients never use advisory locks. */ readonly shardLockDisableAdvisory: boolean; /** * Start shutting down as soon as an Entity has started shutting down. * * Defaults to `true`. */ readonly preemptiveShutdown: boolean; /** * The default capacity of the mailbox for entities. */ readonly entityMailboxCapacity: number | "unbounded"; /** * Report the mailbox size of each resident entity with the * `effect_cluster_entity_mailbox_size` gauge, unless overridden by the * `mailboxMetrics` entity option. * * Defaults to `false`. */ readonly entityMailboxMetrics: boolean; /** * The maximum number of entities that can be resident on this runner at the * same time. * * When the limit is reached, no new entities are spawned: the storage read * loop stops admitting messages for new entity addresses (they stay in * storage until a slot frees up), and volatile sends to new addresses fail * with `MailboxFull`. * * `"unbounded"` can only be set programmatically; the environment * configuration only accepts integers. * * Defaults to `10_000`. */ readonly maxResidentEntities: number | "unbounded"; /** * The maximum number of unprocessed messages read from storage in a single * poll. * * Defaults to `1024`. */ readonly unprocessedMessageBatchSize: number; /** * The maximum duration of inactivity (i.e. without receiving a message) * after which an entity will be interrupted. */ readonly entityMaxIdleTime: Duration.Input; /** * If an entity does not register itself within this time after a message is * sent to it, the message will be marked as failed. * * Defaults to 1 minute. */ readonly entityRegistrationTimeout: Duration.Input; /** * The maximum duration of time to wait for an entity to terminate. * * By default this is set to 15 seconds to stay within kubernetes defaults. */ readonly entityTerminationTimeout: Duration.Input; /** * The interval at which to poll for unprocessed messages from storage. */ readonly entityMessagePollInterval: Duration.Input; /** * The interval at which to poll for client replies from storage. */ readonly entityReplyPollInterval: Duration.Input; /** * The interval at which to poll for new runners and refresh shard * assignments. */ readonly refreshAssignmentsInterval: Duration.Input; /** * The interval to retry a send if EntityNotAssignedToRunner is returned. */ readonly sendRetryInterval: Duration.Input; /** * The interval at which to check for unhealthy runners and report them */ readonly runnerHealthCheckInterval: Duration.Input; /** * Simulate serialization and deserialization to remote runners for local * entities. */ readonly simulateRemoteSerialization: boolean; }>; /** * Represents the configuration for the `Sharding` service on a given runner. * * @stability unstable * @category services * @since 4.0.0 */ export declare class ShardingConfig extends ShardingConfig_base { } /** * Default values for `ShardingConfig`, including the default local runner address, * shard group, shard count, mailbox settings, polling intervals, and remote * serialization simulation. * * @stability unstable * @category defaults * @since 4.0.0 */ export declare const defaults: ShardingConfig["Service"]; /** * Creates a `ShardingConfig` layer by merging the provided partial options over * `defaults`. * * **When to use** * * Use when you need to wire a cluster runner with explicit `ShardingConfig` * values, especially in tests, local development, or code paths where * configuration should be provided programmatically instead of loaded from * environment variables. * * **Details** * * The merge is shallow: omitted fields use `defaults`, and provided fields * replace the corresponding default value. * * **Gotchas** * * This layer only merges and provides configuration; it does not check that * cluster-wide settings are consistent across runners. Keep values such as * `shardsPerGroup` and `availableShardGroups` aligned for runners that should * share shard assignments. * * @see {@link defaults} for the values used when an option is omitted * @see {@link layerDefaults} for a layer with no overrides * @see {@link layerFromEnv} for loading configuration from environment variables before applying explicit overrides * * @stability unstable * @category layers * @since 4.0.0 */ export declare const layer: (options?: Partial) => Layer.Layer; /** * Layer that provides the default `ShardingConfig` values. * * @stability unstable * @category layers * @since 4.0.0 */ export declare const layerDefaults: Layer.Layer; /** * Describes how to load `ShardingConfig` values, applying the same * defaults used by the in-memory `defaults` object. * * @stability unstable * @category configuration * @since 4.0.0 */ export declare const config: Config.Config; /** * Effect that loads `ShardingConfig` from environment variables using the * constant-case config provider. * * @stability unstable * @category configuration * @since 4.0.0 */ export declare const configFromEnv: Effect.Effect<{ /** * The address for the current runner that other runners can use to * communicate with it. * * If `None`, the runner is not part of the cluster and will be in a client-only * mode. */ readonly runnerAddress: Option.Option; /** * The listen address for the current runner. * * Defaults to the `runnerAddress`. */ readonly runnerListenAddress: Option.Option; /** * A number that determines how many shards this runner will be assigned * relative to other runners. * * Defaults to `1`. * * A value of `2` means that this runner should be assigned twice as many * shards as a runner with a weight of `1`. */ readonly runnerShardWeight: number; /** * The shard groups available across all runners. * * Defaults to `["default"]`. */ readonly availableShardGroups: ReadonlyArray; /** * The shard groups that are assigned to this runner. * * Defaults to `["default"]`. */ readonly assignedShardGroups: ReadonlyArray; /** * The number of shards to allocate per shard group. * * **Note**: this value should be consistent across all runners. */ readonly shardsPerGroup: number; /** * The maximum interval between shard lock refreshes. * * The runner may shorten this interval to one third of * `shardLockExpiration` to preserve enough time to stop entities safely if * lock storage becomes unavailable. */ readonly shardLockRefreshInterval: Duration.Input; /** * Shard lock expiration duration. */ readonly shardLockExpiration: Duration.Input; /** * Disable the use of advisory locks for shard locking. * * PGlite clients never use advisory locks. */ readonly shardLockDisableAdvisory: boolean; /** * Start shutting down as soon as an Entity has started shutting down. * * Defaults to `true`. */ readonly preemptiveShutdown: boolean; /** * The default capacity of the mailbox for entities. */ readonly entityMailboxCapacity: number | "unbounded"; /** * Report the mailbox size of each resident entity with the * `effect_cluster_entity_mailbox_size` gauge, unless overridden by the * `mailboxMetrics` entity option. * * Defaults to `false`. */ readonly entityMailboxMetrics: boolean; /** * The maximum number of entities that can be resident on this runner at the * same time. * * When the limit is reached, no new entities are spawned: the storage read * loop stops admitting messages for new entity addresses (they stay in * storage until a slot frees up), and volatile sends to new addresses fail * with `MailboxFull`. * * `"unbounded"` can only be set programmatically; the environment * configuration only accepts integers. * * Defaults to `10_000`. */ readonly maxResidentEntities: number | "unbounded"; /** * The maximum number of unprocessed messages read from storage in a single * poll. * * Defaults to `1024`. */ readonly unprocessedMessageBatchSize: number; /** * The maximum duration of inactivity (i.e. without receiving a message) * after which an entity will be interrupted. */ readonly entityMaxIdleTime: Duration.Input; /** * If an entity does not register itself within this time after a message is * sent to it, the message will be marked as failed. * * Defaults to 1 minute. */ readonly entityRegistrationTimeout: Duration.Input; /** * The maximum duration of time to wait for an entity to terminate. * * By default this is set to 15 seconds to stay within kubernetes defaults. */ readonly entityTerminationTimeout: Duration.Input; /** * The interval at which to poll for unprocessed messages from storage. */ readonly entityMessagePollInterval: Duration.Input; /** * The interval at which to poll for client replies from storage. */ readonly entityReplyPollInterval: Duration.Input; /** * The interval at which to poll for new runners and refresh shard * assignments. */ readonly refreshAssignmentsInterval: Duration.Input; /** * The interval to retry a send if EntityNotAssignedToRunner is returned. */ readonly sendRetryInterval: Duration.Input; /** * The interval at which to check for unhealthy runners and report them */ readonly runnerHealthCheckInterval: Duration.Input; /** * Simulate serialization and deserialization to remote runners for local * entities. */ readonly simulateRemoteSerialization: boolean; }, Config.ConfigError, never>; /** * Layer that loads `ShardingConfig` from environment variables and, when options * are provided, overlays those options on top of the loaded values. * * @stability unstable * @category layers * @since 4.0.0 */ export declare const layerFromEnv: (options?: Partial | undefined) => Layer.Layer; /** * Normalizes the provided `ShardingConfig` to calculate the `available` and * `assigned` shard groups. * * @stability unstable * @category converting * @since 4.0.0 */ export declare const shardGroupConfig: (config: ShardingConfig["Service"]) => { readonly available: ReadonlySet; readonly assigned: ReadonlySet; }; export {}; //# sourceMappingURL=ShardingConfig.d.ts.map