Skip to main content

Supervisor

Struct Supervisor 

Source
pub struct Supervisor { /* private fields */ }
Expand description

Supervises a set of workers.

§Workers

All workers are defined through implementation of the Supervisable trait, which provides the logic for both creating the underlying worker future that is spawned, as well as other metadata, such as the worker’s name, how the worker should be shutdown, and so on.

Supervisors also (indirectly) implement the Supervisable trait, allowing them to be supervised by other supervisors in order to construct supervision trees.

§Instrumentation

Supervisors automatically create their own allocation group ([TrackingAllocator][memory_accounting::allocator::TrackingAllocator]), which is used to track both the memory usage of the supervisor itself and its children. Additionally, individual worker processes are wrapped in a dedicated tracing::Span to allow tracing the casual relationship between arbitrary code and the worker executing it.

§Restart Strategies

As the main purpose of a supervisor, restart behavior is fully configurable. A number of restart strategies are available, which generally relate to the purpose of the supervisor: whether the workers being managed are independent or interdependent.

All restart strategies are configured through RestartStrategy, which has more information on the available strategies and configuration settings.

Implementations§

Source§

impl Supervisor

Source

pub fn new<S: AsRef<str>>(supervisor_id: S) -> Result<Self, SupervisorError>

Creates an empty Supervisor with the default restart strategy.

Source

pub fn with_restart_strategy(self, strategy: RestartStrategy) -> Self

Sets the restart strategy for the supervisor.

Source

pub fn add_worker<T: Into<ChildSpecification>>(&mut self, process: T)

Adds a worker to the supervisor.

A worker can be anything that implements the Supervisable trait. A Supervisor can also be added as a worker and managed in a nested fashion, known as a supervision tree.

Source

pub async fn run(&mut self) -> Result<(), SupervisorError>

Runs the supervisor forever.

§Errors

If the supervisor exceeds its restart limits, or fails to initialize a child process, an error is returned.

Source

pub async fn run_with_shutdown<F: Future + Send + 'static>( &mut self, shutdown: F, ) -> Result<(), SupervisorError>

Runs the supervisor until shutdown is triggered.

When shutdown resolves, the supervisor will shutdown all child processes according to their shutdown strategy, and then return.

§Errors

If the supervisor exceeds its restart limits, or fails to initialize a child process, an error is returned.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Track for T

§

fn track_allocations(self, token: AllocationGroupToken) -> Tracked<Self>

Instruments this type by attaching the given allocation group token, returning a Tracked wrapper. Read more
§

fn in_current_allocation_group(self) -> Tracked<Self>

Instruments this type by attaching the current allocation group, returning a Tracked wrapper. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more