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
impl WatchGuard
Sourcepub async fn shutdown(self) -> Result<(), ServerError>
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.
Sourcepub fn abort(self)
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.
Sourcepub fn is_finished(&self) -> bool
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
impl Drop for WatchGuard
Auto Trait Implementations§
impl Freeze for WatchGuard
impl !RefUnwindSafe for WatchGuard
impl Send for WatchGuard
impl Sync for WatchGuard
impl Unpin for WatchGuard
impl UnsafeUnpin for WatchGuard
impl !UnwindSafe for WatchGuard
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
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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request