EntityResource
Keeps resources available across cluster entity restarts.
EntityResource is useful for long-lived resources tied to an entity
address, such as external processes, network clients, Kubernetes Pods, or
other handles that should survive routine shard movement. This module
includes the resource wrapper, a close scope that survives normal entity
restarts, a generic resource constructor, and a Kubernetes Pod resource
helper built on K8sHttpClient.
Constructors
Creates an EntityResource that can be acquired inside a cluster entity.
When to use
Use when a cluster entity should lazily share an acquired resource across messages and release it only on idle timeout or explicit close.
Details
The resource will only be fully released when the idle time to live is
reached, or when the close effect is called.
Gotchas
By default, the idleTimeToLive is infinite, meaning the resource will only
be released when close is called.
Signature
declare const make: <A, E, R>(options: { readonly acquire: Effect.Effect<A, E, R>; readonly acquireEagerly?: boolean; readonly idleTimeToLive?: Duration.Input;}) => Effect.Effect<EntityResource<A, E>, E, Scope.Scope | Exclude<R, CloseScope> | Sharding | Entity.CurrentAddress>makeK8sPod
Creates an EntityResource backed by a Kubernetes Pod.
Details
The pod is created and waited on through K8sHttpClient, and is kept alive
until the resource is closed or its idle time to live expires.
Signature
declare const makeK8sPod: (spec: K8sPod, options?: { readonly idleTimeToLive?: Duration.Input;}) => Effect.Effect<EntityResource<K8sHttpClient.PodStatus>, never, Scope.Scope | Sharding | Entity.CurrentAddress | K8sHttpClient.K8sHttpClient>Models
EntityResource interface
A resource acquired inside a cluster entity and kept alive across restarts.
Details
get acquires or reuses the resource in the caller's scope, while close
invalidates it so its close scope can be released.
Signature
interface EntityResource<out A, out E = never> { readonly "~effect/cluster/EntityResource": "~effect/cluster/EntityResource"; readonly close: Effect<void>; readonly get: Effect<A, E, Scope>;}Services
CloseScope
Context service for a Scope that is only closed when the resource is explicitly closed.
When to use
Use when a cluster entity resource needs a scope that survives restarts and closes only through the resource lifecycle.
Gotchas
It is not closed during restarts, due to shard movement or node shutdowns.
Signature
declare class CloseScope extends Shape<"effect/cluster/EntityResource/CloseScope", Scope, this> { constructor(_: never);}