Bedrock.ControlPlane.Director.Nodes (bedrock v0.6.0)
View SourceManages node lifecycle and service discovery integration for the director.
This module handles the registration and tracking of services as nodes join and leave the cluster. It serves as the bridge between the coordinator's service discovery and the director's internal service representation.
Service Discovery Integration
Services discovered through the coordinator are registered directly in coordinator format without conversion. This unified approach maintains consistent service identity throughout the system while eliminating format translation overhead.
The coordinator format {kind, {otp_name, node}} flows directly from
service registration through recovery phases, ensuring that service
identity and location information remains consistent across all system
components. Status information is tracked separately when needed, allowing
the core service identity to remain simple and cacheable.
Node rejoin operations batch service registrations to minimize state transitions while maintaining atomic updates to the director's service directory.
Summary
Types
Functions
@spec add_running_service( Bedrock.ControlPlane.Director.State.t(), node(), service_info :: Bedrock.ControlPlane.Director.running_service_info() ) :: Bedrock.ControlPlane.Director.State.t()
@spec add_running_services( Bedrock.ControlPlane.Director.State.t(), node(), service_infos :: [Bedrock.ControlPlane.Director.running_service_info()] ) :: Bedrock.ControlPlane.Director.State.t()
@spec determine_dead_nodes( Bedrock.ControlPlane.Director.State.t(), at :: DateTime.t() ) :: Bedrock.ControlPlane.Director.State.t()
@spec maybe_add_node(Bedrock.ControlPlane.Director.State.t(), node()) :: Bedrock.ControlPlane.Director.State.t()
@spec node_added_worker( Bedrock.ControlPlane.Director.State.t(), node(), Bedrock.ControlPlane.Director.running_service_info(), DateTime.t() ) :: Bedrock.ControlPlane.Director.State.t()
@spec node_down(Bedrock.ControlPlane.Director.State.t(), node()) :: Bedrock.ControlPlane.Director.State.t()
@spec ping_all_coordinators(Bedrock.ControlPlane.Director.State.t()) :: Bedrock.ControlPlane.Director.State.t()
@spec request_to_rejoin( Bedrock.ControlPlane.Director.State.t(), node(), capabilities :: [Bedrock.Cluster.capability()], running_services :: [Bedrock.ControlPlane.Director.running_service_info()], at :: DateTime.t() ) :: {:ok, Bedrock.ControlPlane.Director.State.t()}
@spec request_worker_creation( Bedrock.ControlPlane.Director.State.t(), node(), Bedrock.Service.Worker.id(), :log | :materializer ) :: {:ok, Bedrock.ControlPlane.Director.running_service_info()} | {:error, worker_creation_error()}
@spec update_capabilities(Bedrock.ControlPlane.Director.State.t(), node(), [ Bedrock.Cluster.capability() ]) :: Bedrock.ControlPlane.Director.State.t()
@spec update_last_seen_at( Bedrock.ControlPlane.Director.State.t(), node(), at :: DateTime.t() ) :: Bedrock.ControlPlane.Director.State.t()
@spec update_minimum_read_version( Bedrock.ControlPlane.Director.State.t(), node(), minimum_read_version :: Bedrock.version() | nil ) :: Bedrock.ControlPlane.Director.State.t()