Skip to main content

SupervisorHandle

Struct SupervisorHandle 

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

A handle for spawning dynamic children on a running Supervisor.

Obtained from Supervisor::handle. Handles are cheap to clone and can be shared across tasks.

Spawning is synchronous and infallible, in the spirit of tokio::spawn: the child is queued for the running supervisor and the call returns immediately with the child’s ChildId. Also as with tokio::spawn, being accepted is not a promise of being run – if the supervisor isn’t running, or shuts down before it gets to the queued child, the child is never started at all.

§Ambient spawning

Code running under supervision usually doesn’t need a handle at all: spawn targets the supervisor of whatever process is currently running. Use a handle when spawning from outside supervision, or when targeting a supervisor other than the ambient one. scope bridges the two by making a handle the ambient supervisor for a future.

Implementations§

Source§

impl SupervisorHandle

Source

pub fn name(&self) -> &str

Returns the name of the supervisor this handle refers to.

Source

pub fn spawn<S, T>(&self, child: T) -> ChildId

Spawns a new dynamic child.

Accepts anything Supervisor::add_worker accepts: a bare Supervisable, a Supervisor to run as a nested supervision subtree, or a ChildSpecification configured in detail.

Unless ChildBuilder says otherwise, a dynamic child is hosted. A hosted child that can be started again, such as most Supervisables and every Supervisor, is restarted only if it fails. A child that cannot be started again, such as an FnWorker, is never restarted. See the runtime documentation.

A dynamic child is not restored when the supervisor itself restarts. The supervisor stops the child when the supervisor restarts or terminates.

The returned ChildId identifies the child for the lifetime of the supervisor run. The child is queued rather than started synchronously, so it may not have begun running by the time this returns; if the supervisor isn’t running, or shuts down before reaching the child, it never runs at all.

Source

pub fn is_running(&self) -> bool

Returns whether the supervisor is currently running.

Source

pub fn active_children(&self) -> usize

Returns the number of dynamic children currently running under the supervisor.

Counts children the supervisor has actually started, so a child that has been spawned but not yet picked up isn’t included yet.

Source§

impl SupervisorHandle

Source

pub fn scope<F>(&self, fut: F) -> TaskLocalFuture<SupervisorHandle, F>
where F: Future,

Runs fut with this supervisor installed as the ambient supervisor.

Anything fut spawns through spawn_sibling becomes a child of this supervisor. So does anything that fut spawns through spawn, but only if fut runs outside supervision. Code in a supervised process has a current scope, and spawn uses that scope instead of the ambient supervisor. Thus, this function is for code that runs outside supervision – a test driving a component directly, or a task started with tokio::spawn that needs to attach children to a known supervisor.

The ambient supervisor applies only for the duration of fut, and shadows any supervisor already installed.

Source§

impl SupervisorHandle

Source

pub fn worker<N, Fut>(&self, name: N, fut: Fut) -> ChildBuilder<'_>
where N: Into<String>, Fut: Future + Send + 'static, Fut::Output: IntoWorkerResult,

Creates a builder for a child task built from a plain future.

The task runs until it reaches its own terminal condition; it is never handed the shutdown signal. See FnWorker for what that means at shutdown, and for the two cases that need something else.

Use this method when advanced configuration of the underlying task is required. Otherwise, prefer spawn_worker.

§Examples
supervisor.worker("encoder", encode()).on_runtime(pool).spawn();
Source

pub fn worker_with_shutdown<N, F, Fut>(&self, name: N, f: F) -> ChildBuilder<'_>
where N: Into<String>, F: FnOnce(ShutdownHandle) -> Fut + Send + 'static, Fut: Future + Send + 'static, Fut::Output: IntoWorkerResult,

Creates a builder for a child task with a body that receives the shutdown signal.

f receives the [ShutdownHandle] of the task when the task starts. Use this method for work that must observe shutdown to stop in time. Such work stops when it observes shutdown, not when it reaches its own terminal condition. An example is a long-lived connection that must close gracefully. See FnWorker::with_shutdown.

Source

pub fn supervisable<T>(&self, worker: T) -> ChildBuilder<'_, Restartable>
where T: Supervisable + 'static,

Creates a builder for a supervisable child task.

Supervisable tasks are those where the worker already implements Supervisable, which lets the builder serve as a consistent control surface for spawning both arbitrary asynchronous functions and more full-fledged workers.

A supervisable task can usually be started again, so its owner restarts it when it fails. A task that reports through can_restart that it cannot be started again is never restarted. See the runtime documentation for how its restart policy is decided.

Use this method when advanced configuration of the underlying task is required. Otherwise, prefer spawn_supervisable.

Source

pub fn spawn_worker<N, Fut>(&self, name: N, fut: Fut) -> ChildId
where N: Into<String>, Fut: Future + Send + 'static, Fut::Output: IntoWorkerResult,

Spawns a child task built from a plain future.

The task runs until it reaches its own terminal condition; it is never handed the shutdown signal. See FnWorker for what that means at shutdown, and for the two cases that need something else.

Use worker when advanced configuration of the underlying task is required.

Source

pub fn spawn_supervisable<T>(&self, worker: T) -> ChildId
where T: Supervisable + 'static,

Spawns a supervisable child task.

Supervisable tasks are those where the worker already implements Supervisable, which lets the builder serve as a consistent control surface for spawning both arbitrary asynchronous functions and more full-fledged workers.

Use supervisable when advanced configuration of the underlying task is required.

Source

pub fn nested_supervisor( &self, supervisor: Supervisor, ) -> NestedSupervisorBuilder<'_>

Creates a builder for a nested supervisor.

You can give a Supervisor directly to spawn or Supervisor::add_worker. Most callers need only that. This builder is for the settings that are not available in that way: whether the subtree is needed or hosted, and whether it stops with its owner in a scope.

Unlike supervisable, there is no placement or shutdown setting. A nested supervisor runs wherever its parent does and its children carry their own placement, and its drain is bounded by its children’s timeouts and by its owner.

Trait Implementations§

Source§

impl Clone for SupervisorHandle

Source§

fn clone(&self) -> SupervisorHandle

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
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
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> Track for T

§

fn track_resources(self, token: ResourceGroupToken) -> Tracked<Self>

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

fn in_current_resource_group(self) -> Tracked<Self>

Instruments this type by attaching the current resource 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
Source§

impl<T> CloneAny for T
where T: Any + Clone,