pub struct BootstrapProcManager { /* private fields */ }Expand description
Host-side manager for launching and supervising bootstrap
processes (via the bootstrap entry point).
BootstrapProcManager is responsible for:
- choosing and constructing the configured
ProcLauncherbackend, - preparing the bootstrap command/environment for each proc,
- tracking proc lifecycle state via
BootstrapProcHandle/ProcStatus, - providing status/query APIs over the set of active procs.
It maintains an async registry mapping [ProcId] →
BootstrapProcHandle for lifecycle queries and exit
observation.
§Stdio and cleanup
Stdio handling and shutdown/cleanup behavior are launcher-dependent:
- The native launcher may capture/tail stdout/stderr and manages OS child processes directly.
- The systemd launcher delegates supervision to systemd transient units on the user manager and does not expose a PID; stdio is managed by systemd.
On drop/shutdown, process cleanup is best-effort and performed
via the selected launcher (e.g. direct child termination for
native, StopUnit for systemd).
Implementations§
Source§impl BootstrapProcManager
impl BootstrapProcManager
Sourcepub fn set_launcher(
&self,
launcher: Arc<dyn ProcLauncher>,
) -> Result<(), ProcLauncherError>
pub fn set_launcher( &self, launcher: Arc<dyn ProcLauncher>, ) -> Result<(), ProcLauncherError>
Install a custom launcher.
Returns error if already initialized (by prior
set_launcher() OR by a spawn that triggered default init via
launcher()).
Must be called before any spawn operation that would initialize the default launcher.
Sourcepub fn launcher(&self) -> &Arc<dyn ProcLauncher>
pub fn launcher(&self) -> &Arc<dyn ProcLauncher>
Get the launcher, initializing with the default if not already set.
Once this is called, any subsequent calls to set_launcher()
will fail.
Sourcepub fn command(&self) -> &BootstrapCommand
pub fn command(&self) -> &BootstrapCommand
The bootstrap command used to launch processes.
Sourcepub fn socket_dir(&self) -> &Path
pub fn socket_dir(&self) -> &Path
The socket directory, where per-proc Unix sockets are placed.
Sourcepub async fn status(&self, proc_id: &ProcId) -> Option<ProcStatus>
pub async fn status(&self, proc_id: &ProcId) -> Option<ProcStatus>
Return the current ProcStatus for the given [ProcId], if
the proc is known to this manager.
This queries the live BootstrapProcHandle stored in the
manager’s internal map. It provides an immediate snapshot of
lifecycle state (Starting, Running, Stopping, Stopped,
etc.).
Returns None if the manager has no record of the proc (e.g.
never spawned here, or entry already removed).
Trait Implementations§
Source§impl BulkTerminate for BootstrapProcManager
impl BulkTerminate for BootstrapProcManager
Source§fn terminate_all<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
cx: &'life1 (impl 'async_trait + Actor),
timeout: Duration,
max_in_flight: usize,
reason: &'life2 str,
) -> Pin<Box<dyn Future<Output = TerminateSummary> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn terminate_all<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
cx: &'life1 (impl 'async_trait + Actor),
timeout: Duration,
max_in_flight: usize,
reason: &'life2 str,
) -> Pin<Box<dyn Future<Output = TerminateSummary> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Attempt to gracefully terminate all child procs managed by
this BootstrapProcManager.
Each child handle is asked to terminate(timeout), which
sends SIGTERM, waits up to the deadline, and escalates to
SIGKILL if necessary. Termination is attempted concurrently,
with at most max_in_flight tasks running at once.
Returns a TerminateSummary with counts of how many procs
were attempted, how many successfully terminated (including
those that were already terminal), and how many failed.
Logs a warning for each failure.
Source§impl ProcManager for BootstrapProcManager
impl ProcManager for BootstrapProcManager
Source§fn transport(&self) -> ChannelTransport
fn transport(&self) -> ChannelTransport
Return the ChannelTransport used by this proc manager.
For BootstrapProcManager this is always
ChannelTransport::Unix, since all procs are spawned
locally on the same host and communicate over Unix domain
sockets.
Source§fn spawn<'life0, 'async_trait>(
&'life0 self,
proc_id: ProcId,
backend_addr: ChannelAddr,
config: BootstrapProcConfig,
) -> Pin<Box<dyn Future<Output = Result<Self::Handle, HostError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn spawn<'life0, 'async_trait>(
&'life0 self,
proc_id: ProcId,
backend_addr: ChannelAddr,
config: BootstrapProcConfig,
) -> Pin<Box<dyn Future<Output = Result<Self::Handle, HostError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Launch a new proc under this BootstrapProcManager.
Spawns the configured bootstrap binary (self.program) in a
fresh child process. The environment is populated with
variables that describe the bootstrap context — most
importantly HYPERACTOR_MESH_BOOTSTRAP_MODE, which carries a
base64-encoded JSON Bootstrap::Proc payload (proc id,
backend addr, callback addr, optional config snapshot).
Additional variables like BOOTSTRAP_LOG_CHANNEL are also set
up for logging and control.
Responsibilities performed here:
- Create a one-shot callback channel so the child can confirm successful bootstrap and return its mailbox address plus agent reference.
- Spawn the OS process with stdout/stderr piped.
- Stamp the new
BootstrapProcHandleasProcStatus::Runningonce a PID is observed. - Wire stdout/stderr pipes into local writers and forward them
over the logging channel (
BOOTSTRAP_LOG_CHANNEL). - Insert the handle into the manager’s children map and start an exit monitor to track process termination.
Returns a BootstrapProcHandle that exposes the child
process’s lifecycle (status, wait/ready, termination). Errors
are surfaced as HostError.
Source§type Handle = BootstrapProcHandle
type Handle = BootstrapProcHandle
Source§type Config = BootstrapProcConfig
type Config = BootstrapProcConfig
Source§impl SingleTerminate for BootstrapProcManager
impl SingleTerminate for BootstrapProcManager
Source§fn terminate_proc<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
cx: &'life1 (impl 'async_trait + Actor),
proc: &'life2 ProcId,
timeout: Duration,
reason: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<(Vec<ActorId>, Vec<ActorId>), Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn terminate_proc<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
cx: &'life1 (impl 'async_trait + Actor),
proc: &'life2 ProcId,
timeout: Duration,
reason: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<(Vec<ActorId>, Vec<ActorId>), Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Attempt to gracefully terminate one child procs managed by
this BootstrapProcManager.
Each child handle is asked to terminate(timeout), which
sends SIGTERM, waits up to the deadline, and escalates to
SIGKILL if necessary. Termination is attempted concurrently,
with at most max_in_flight tasks running at once.
Logs a warning for each failure.
Auto Trait Implementations§
impl !Freeze for BootstrapProcManager
impl !RefUnwindSafe for BootstrapProcManager
impl Send for BootstrapProcManager
impl Sync for BootstrapProcManager
impl Unpin for BootstrapProcManager
impl !UnwindSafe for BootstrapProcManager
Blanket Implementations§
§impl<T> AnySync for T
impl<T> AnySync for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<A, M> Handler<IndexedErasedUnbound<M>> for A
impl<A, M> Handler<IndexedErasedUnbound<M>> for A
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].