pub enum ShutdownRequest {
Requested,
Signalled,
}Expand description
Why a shutdown was asked for.
The distinction is the whole point. Cleanup failing used to refuse the
shutdown whatever asked for it, and that is right for one of these two and
catastrophic for the other: a daemon whose cleanup can never succeed —
because its state directory has been deleted out from under it, which is
what happens to a parity gate’s temp fixture — becomes immortal. Four of
them were found alive on this machine, up to ten days old, ignoring
SIGTERM and holding a listening socket on a directory that no longer
existed.
Variants§
Requested
POST /api/daemon/shutdown. A caller asked and is waiting for an
answer, so a cleanup failure is worth reporting and worth staying up
for — the next request reaches a daemon that knows it has processes it
could not account for.
Signalled
SIGTERM, SIGINT, or the future handed to serve_until.
Not a request that may be declined. Cleanup is still attempted and its failure still reported, but the process exits either way: a service this daemon could not stop is a leaked service, while refusing to exit leaks the service and the daemon, forever, with nothing left that can ask it again.
Trait Implementations§
Source§impl Clone for ShutdownRequest
impl Clone for ShutdownRequest
Source§fn clone(&self) -> ShutdownRequest
fn clone(&self) -> ShutdownRequest
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for ShutdownRequest
Source§impl Debug for ShutdownRequest
impl Debug for ShutdownRequest
impl Eq for ShutdownRequest
Source§impl PartialEq for ShutdownRequest
impl PartialEq for ShutdownRequest
impl StructuralPartialEq for ShutdownRequest
Auto Trait Implementations§
impl Freeze for ShutdownRequest
impl RefUnwindSafe for ShutdownRequest
impl Send for ShutdownRequest
impl Sync for ShutdownRequest
impl Unpin for ShutdownRequest
impl UnsafeUnpin for ShutdownRequest
impl UnwindSafe for ShutdownRequest
Blanket Implementations§
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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§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