Skip to main content

WatchGuard

Struct WatchGuard 

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

RAII handle to the leader-watch task spawned by Server::into_router.

The watch task holds an Arc<Server> (and thus the consensus driver) and maintains serving state across leadership transitions. This guard ties the task’s lifetime to the guard’s: dropping it cooperatively cancels the task, and the task publishes ServingState::NotServing before it stops, so any Routes an embedder still has mounted fails subsequent RPCs fast.

Cancellation is cooperative — the task stops at its next await boundary and never mid-fence, so it is never torn down while holding internal locks, in contrast to a raw tokio::task::JoinHandle::abort.

Implementations§

Source§

impl WatchGuard

Source

pub async fn shutdown(self) -> Result<(), ServerError>

Signal the leader-watch task to stop, wait for it to drain, and report its outcome.

A cooperatively cancelled task returns Ok(()) — the stop was requested, so it is not an error. If the task had already terminated on its own (driver error, stream EOF, or panic) the original outcome is surfaced verbatim: Err(e) or ServerError::WatchPanic. Either way serving state is NotServing once this returns.

The cooperative wait is bounded by the configured ServerBuilder::shutdown_grace: if the task is parked in a consensus-driver call that never returns it is aborted once the grace elapses (still reported as Ok(())), so an embedder’s shutdown can never wedge behind a hung driver.

Source

pub fn abort(self)

Hard-abort the leader-watch task without waiting for a cooperative stop.

Prefer Self::shutdown or simply dropping the guard; both let the task stop at a safe point. This is an escape hatch for callers that cannot await and accept that the task may be torn down mid-fence.

Source

pub fn is_finished(&self) -> bool

Whether the leader-watch task has finished — terminated for any reason (cooperative cancel, driver error, stream EOF, or panic).

A read-only liveness probe that neither consumes the guard nor disturbs its cancel-on-drop behavior, so an embedder can poll task health while keeping the guard alive.

Trait Implementations§

Source§

impl Drop for WatchGuard

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. 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> 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, 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<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