Struct Shutdown

pub struct Shutdown { /* private fields */ }
Expand description

The Shutdown struct is the main entry point to the shutdown system.

It is created by calling Shutdown::new, which takes a Future that will be awaited on when shutdown is requested. Most users will want to create a Shutdown with Shutdown::default, which uses the default signal handler to trigger shutdown. See default_signal for more info.

(NOTE: that these defaults are not available when compiling with –cfg loom)

See the README for more info on how to use this crate.

Implementations§

§

impl Shutdown

pub fn builder() -> ShutdownBuilder<WithSignal<Default>>

Create a ShutdownBuilder allowing you to add a delay, a custom shutdown trigger signal and even an overwrite signal to force a shutdown even if workers are still busy.

pub fn new(signal: impl Future + Send + 'static) -> Shutdown

Creates a new Shutdown struct with the given Future.

The Future will be awaited on when shutdown is requested.

pub fn no_signal() -> Shutdown

Creates a new Shutdown struct with no signal.

This is useful if you want to support a Waitgroup like system where you wish to wait for all open tasks without requiring a signal to be triggered first.

pub fn guard(&self) -> ShutdownGuard

Returns a ShutdownGuard which primary use is to prevent the Shutdown from shutting down.

The creation of a ShutdownGuard is lockfree.

pub fn guard_weak(&self) -> WeakShutdownGuard

Returns a WeakShutdownGuard which in contrast to ShutdownGuard does not prevent the Shutdown from shutting down.

Instead it is used to wait for “shutdown signal” to be triggered or to create a ShutdownGuard which prevents the Shutdown once and only once it is needed.

The creation of a WeakShutdownGuard is lockfree.

pub fn spawn_task<T>(&self, task: T) -> JoinHandle<<T as Future>::Output>
where T: Future + Send + 'static, <T as Future>::Output: Send + 'static,

Returns a Tokio [crate::sync::JoinHandle] that can be awaited on to wait for the spawned task to complete. See [crate::sync::spawn] for more information.

pub fn spawn_task_fn<T, F>(&self, task: F) -> JoinHandle<<T as Future>::Output>
where T: Future + Send + 'static, <T as Future>::Output: Send + 'static, F: FnOnce(ShutdownGuard) -> T + Send + 'static,

Returns a Tokio [crate::sync::JoinHandle] that can be awaited on to wait for the spawned task (fn) to complete. See [crate::sync::spawn] for more information.

pub async fn shutdown(self) -> Duration

Returns a future that completes once the Shutdown has been triggered and all ShutdownGuards have been dropped.

The resolved Duration is the time it took for the Shutdown to to wait for all ShutdownGuards to be dropped.

You can use Shutdown::shutdown_with_limit to limit the time the Shutdown waits for all ShutdownGuards to be dropped.

§Panics

This method can panic if the internal mutex is poisoned.

pub async fn shutdown_with_limit( self, limit: Duration, ) -> Result<Duration, TimeoutError>

Returns a future that completes once the Shutdown has been triggered and all ShutdownGuards have been dropped or the given Duration has elapsed.

The resolved Duration is the time it took for the Shutdown to to wait for all ShutdownGuards to be dropped.

You can use Shutdown::shutdown to wait for all ShutdownGuards to be dropped without a time limit.

§Panics

This method can panic if the internal mutex is poisoned.

Trait Implementations§

§

impl Default for Shutdown

§

fn default() -> Shutdown

Returns the “default value” for a type. 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
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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.

§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

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

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

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

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

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
§

impl<T, U> RamaInto<U> for T
where U: RamaFrom<T>,

§

fn rama_into(self) -> U

§

impl<T, U> RamaInto<U> for T
where U: RamaFrom<T>,

§

fn rama_into(self) -> U

§

impl<T, U> RamaTryInto<U> for T
where U: RamaTryFrom<T>,

§

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

§

fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T>>::Error>

§

impl<T, U> RamaTryInto<U> for T
where U: RamaTryFrom<T>,

§

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

§

fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T>>::Error>

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<T> ErasedDestructor for T
where T: 'static,