RunnerStorage
Stores runner registration and shard-lock state for cluster sharding.
RunnerStorage records which runners are registered, whether they are healthy, which machine id a runner receives, and which shard locks are held by each runner. This module includes the typed storage service, a string-encoded backend interface, an adapter from encoded storage to the typed service, and an in-memory implementation for tests and local use.
Constructors
makeMemory
Signature
declare const makeMemory: Effect<
{
readonly acquire: (
address: RunnerAddress,
shardIds: Iterable<ShardId>,
) => Effect<Array<ShardId>, PersistenceError>;
readonly getRunners: Effect<Array<readonly [Runner, boolean]>, PersistenceError>;
readonly refresh: (
address: RunnerAddress,
shardIds: Iterable<ShardId>,
) => Effect<Array<ShardId>, PersistenceError>;
readonly register: (
runner: Runner,
healthy: boolean,
) => Effect<number & Brand<"~effect/cluster/MachineId">, PersistenceError>;
readonly release: (address: RunnerAddress, shardId: ShardId) => Effect<void, PersistenceError>;
readonly releaseAll: (address: RunnerAddress) => Effect<void, PersistenceError>;
readonly setRunnerHealth: (
address: RunnerAddress,
healthy: boolean,
) => Effect<void, PersistenceError>;
readonly unregister: (address: RunnerAddress) => Effect<void, PersistenceError>;
},
never,
never
>;Layers
layerMemory
Layer that provides the in-memory RunnerStorage implementation.
Signature
declare const layerMemory: Layer.Layer<RunnerStorage>;makeEncoded
Adapts an encoded runner storage implementation into RunnerStorage, converting runner addresses, runners, machine ids, and shard ids between typed values and their string or numeric storage forms.
Signature
declare function makeEncoded(encoded: Encoded): {
readonly acquire: (
address: RunnerAddress,
shardIds: Iterable<ShardId>,
) => Effect<Array<ShardId>, PersistenceError>;
readonly getRunners: Effect<Array<readonly [Runner, boolean]>, PersistenceError>;
readonly refresh: (
address: RunnerAddress,
shardIds: Iterable<ShardId>,
) => Effect<Array<ShardId>, PersistenceError>;
readonly register: (
runner: Runner,
healthy: boolean,
) => Effect<number & Brand<"~effect/cluster/MachineId">, PersistenceError>;
readonly release: (address: RunnerAddress, shardId: ShardId) => Effect<void, PersistenceError>;
readonly releaseAll: (address: RunnerAddress) => Effect<void, PersistenceError>;
readonly setRunnerHealth: (
address: RunnerAddress,
healthy: boolean,
) => Effect<void, PersistenceError>;
readonly unregister: (address: RunnerAddress) => Effect<void, PersistenceError>;
};Services
String-encoded runner storage interface used by adapters that persist runner addresses, runners, machine ids, and shard ids outside the in-memory model.
Signature
interface Encoded {
readonly acquire: (address: string, shardIds: [string, ...Array<string>]) => Effect<Array<string>, PersistenceError>;
readonly getRunners: Effect<Array<readonly [string, boolean]>, PersistenceError>;
readonly refresh: (address: string, shardIds: Array<string>) => Effect<readonly Array<string>, PersistenceError>;
readonly register: (address: string, runner: string, healthy: boolean) => Effect<number, PersistenceError>;
readonly release: (address: string, shardId: string) => Effect<void, PersistenceError>;
readonly releaseAll: (address: string) => Effect<void, PersistenceError>;
readonly setRunnerHealth: (address: string, healthy: boolean) => Effect<void, PersistenceError>;
readonly unregister: (address: string) => Effect<void, PersistenceError>;
}RunnerStorage
Represents a generic interface to the persistent storage required by the cluster.
Signature
declare class RunnerStorage extends Shape<
"effect/cluster/RunnerStorage",
{
readonly acquire: (
address: RunnerAddress,
shardIds: Iterable<ShardId>,
) => Effect<Array<ShardId>, PersistenceError>;
readonly getRunners: Effect<Array<readonly [Runner, boolean]>, PersistenceError>;
readonly refresh: (
address: RunnerAddress,
shardIds: Iterable<ShardId>,
) => Effect<Array<ShardId>, PersistenceError>;
readonly register: (
runner: Runner,
healthy: boolean,
) => Effect<number & Brand<"~effect/cluster/MachineId">, PersistenceError>;
readonly release: (address: RunnerAddress, shardId: ShardId) => Effect<void, PersistenceError>;
readonly releaseAll: (address: RunnerAddress) => Effect<void, PersistenceError>;
readonly setRunnerHealth: (
address: RunnerAddress,
healthy: boolean,
) => Effect<void, PersistenceError>;
readonly unregister: (address: RunnerAddress) => Effect<void, PersistenceError>;
},
this
> {
constructor(_: never);
}
Creates an in-memory
RunnerStorageimplementation for tests and local use.Details
Runner health and shard acquisition are kept only in process memory.