/** * 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. * * @stability unstable * @since 4.0.0 */ import { type NonEmptyArray } from "../Array.ts"; import * as Context from "../Context.ts"; import * as Effect from "../Effect.ts"; import * as Layer from "../Layer.ts"; import type { PersistenceError } from "./ClusterError.ts"; import * as MachineId from "./MachineId.ts"; import { Runner } from "./Runner.ts"; import type { RunnerAddress } from "./RunnerAddress.ts"; import * as ShardId from "./ShardId.ts"; declare const RunnerStorage_base: Context.ServiceClass Effect.Effect; /** * Unregister the runner with the given address. */ readonly unregister: (address: RunnerAddress) => Effect.Effect; /** * Get all runners registered with the cluster. */ readonly getRunners: Effect.Effect, PersistenceError>; /** * Set the health status of the given runner. */ readonly setRunnerHealth: (address: RunnerAddress, healthy: boolean) => Effect.Effect; /** * Try to acquire the given shard ids for processing. * * It returns an array of shards it was able to acquire. */ readonly acquire: (address: RunnerAddress, shardIds: Iterable) => Effect.Effect, PersistenceError>; /** * Refresh the locks owned by the given runner. */ readonly refresh: (address: RunnerAddress, shardIds: Iterable) => Effect.Effect, PersistenceError>; /** * Release the given shard ids. */ readonly release: (address: RunnerAddress, shardId: ShardId.ShardId) => Effect.Effect; /** * Release all the shards assigned to the given runner. */ readonly releaseAll: (address: RunnerAddress) => Effect.Effect; }>; /** * Represents a generic interface to the persistent storage required by the * cluster. * * @stability unstable * @category services * @since 4.0.0 */ export declare class RunnerStorage extends RunnerStorage_base { } /** * String-encoded runner storage interface used by adapters that persist runner * addresses, runners, machine ids, and shard ids outside the in-memory model. * * @stability unstable * @category services * @since 4.0.0 */ export interface Encoded { /** * Get all runners registered with the cluster. */ readonly getRunners: Effect.Effect, PersistenceError>; /** * Register a new runner with the cluster. */ readonly register: (address: string, runner: string, healthy: boolean) => Effect.Effect; /** * Unregister the runner with the given address. */ readonly unregister: (address: string) => Effect.Effect; /** * Set the health status of the given runner. */ readonly setRunnerHealth: (address: string, healthy: boolean) => Effect.Effect; /** * Acquire the lock on the given shards, returning the shards that were * successfully locked. */ readonly acquire: (address: string, shardIds: NonEmptyArray) => Effect.Effect, PersistenceError>; /** * Refresh the lock on the given shards, returning the shards that were * successfully locked. */ readonly refresh: (address: string, shardIds: Array) => Effect.Effect, PersistenceError>; /** * Release the lock on the given shard. */ readonly release: (address: string, shardId: string) => Effect.Effect; /** * Release the lock on all shards for the given runner. */ readonly releaseAll: (address: string) => Effect.Effect; } /** * 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. * * @stability unstable * @category layers * @since 4.0.0 */ export declare const makeEncoded: (encoded: Encoded) => { /** * Register a new runner with the cluster. */ readonly register: (runner: Runner, healthy: boolean) => Effect.Effect; /** * Unregister the runner with the given address. */ readonly unregister: (address: RunnerAddress) => Effect.Effect; /** * Get all runners registered with the cluster. */ readonly getRunners: Effect.Effect, PersistenceError>; /** * Set the health status of the given runner. */ readonly setRunnerHealth: (address: RunnerAddress, healthy: boolean) => Effect.Effect; /** * Try to acquire the given shard ids for processing. * * It returns an array of shards it was able to acquire. */ readonly acquire: (address: RunnerAddress, shardIds: Iterable) => Effect.Effect, PersistenceError>; /** * Refresh the locks owned by the given runner. */ readonly refresh: (address: RunnerAddress, shardIds: Iterable) => Effect.Effect, PersistenceError>; /** * Release the given shard ids. */ readonly release: (address: RunnerAddress, shardId: ShardId.ShardId) => Effect.Effect; /** * Release all the shards assigned to the given runner. */ readonly releaseAll: (address: RunnerAddress) => Effect.Effect; }; /** * Creates an in-memory `RunnerStorage` implementation for tests and local use. * * **Details** * * Runner health and shard acquisition are kept only in process memory. * * @stability unstable * @category constructors * @since 4.0.0 */ export declare const makeMemory: Effect.Effect<{ /** * Register a new runner with the cluster. */ readonly register: (runner: Runner, healthy: boolean) => Effect.Effect; /** * Unregister the runner with the given address. */ readonly unregister: (address: RunnerAddress) => Effect.Effect; /** * Get all runners registered with the cluster. */ readonly getRunners: Effect.Effect, PersistenceError>; /** * Set the health status of the given runner. */ readonly setRunnerHealth: (address: RunnerAddress, healthy: boolean) => Effect.Effect; /** * Try to acquire the given shard ids for processing. * * It returns an array of shards it was able to acquire. */ readonly acquire: (address: RunnerAddress, shardIds: Iterable) => Effect.Effect, PersistenceError>; /** * Refresh the locks owned by the given runner. */ readonly refresh: (address: RunnerAddress, shardIds: Iterable) => Effect.Effect, PersistenceError>; /** * Release the given shard ids. */ readonly release: (address: RunnerAddress, shardId: ShardId.ShardId) => Effect.Effect; /** * Release all the shards assigned to the given runner. */ readonly releaseAll: (address: RunnerAddress) => Effect.Effect; }, never, never>; /** * Layer that provides the in-memory `RunnerStorage` implementation. * * @stability unstable * @category layers * @since 4.0.0 */ export declare const layerMemory: Layer.Layer; export {}; //# sourceMappingURL=RunnerStorage.d.ts.map