Skip to content

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.

5 exports Added in v4.0.0 Source

Constructors

makeMemory

Added in v4.0.0 Source

Creates an in-memory RunnerStorage implementation for tests and local use.

Details

Runner health and shard acquisition are kept only in process memory.

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

Added in v4.0.0 Source

Layer that provides the in-memory RunnerStorage implementation.

Signature

declare const layerMemory: Layer.Layer<RunnerStorage>;

makeEncoded

Added in v4.0.0 Source

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

Encoded interface

Added in v4.0.0 Source

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>;
}

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);
}