Skip to main content

LeaderState

Enum LeaderState 

Source
pub enum LeaderState {
    Leader {
        epoch: Epoch,
    },
    Follower {
        leader_endpoint: Option<String>,
        leader_epoch: Option<Epoch>,
    },
    Unknown,
}
Expand description

Leadership state surfaced to the server’s leader-watch task.

PartialEq/Eq allow drivers to implement payload-aware debounce on a watch::Sender<LeaderState>: emitting only when the value (epoch, endpoint) has actually changed, not just when the variant tag differs. A variant-only check would silently drop term advances within a leadership streak and follower-side leader-endpoint changes, both of which downstream consumers must observe.

Variants§

§

Leader

This node is the elected leader at the given epoch.

Fields

§epoch: Epoch
§

Follower

This node is a follower. leader_endpoint is the advertised tsoracle service address of the current leader, when known. leader_epoch is the leader’s epoch (raft term) as observed by this follower, used by clients to reject a stale follower’s lower-epoch redirect; None when the driver does not surface it.

Contract — endpoint shape: leader_endpoint, when Some, MUST be a scheme-less host:port (e.g. leader:9000, 10.0.0.7:50551), never a http://... or https://... URL. The follower-redirect path surfaces this string to clients as a leader hint, and a TLS-configured client silently drops any http:// hint (rejects_plaintext_hint) to refuse a transport downgrade — so a scheme-bearing endpoint makes this leader unreachable via redirect, with only a log line as evidence. The shipped drivers satisfy this by reading the operator-configured membership service endpoint, which is itself contracted scheme-less.

Contract — epoch monotonicity: leader_epoch, across successive emissions from one node, MUST be non-decreasing. Clients gate redirects on it (compare_and_set_leader): a hint whose epoch cannot outrank the cached leader is dropped, so a regressing epoch makes clients drop valid redirects (or, the other way, admit a stale one). Raft/Paxos terms are monotonic per node, so the shipped drivers satisfy this by construction; None (an epoch-less hint) is always permitted and gates nothing.

Fields

§leader_endpoint: Option<String>
§leader_epoch: Option<Epoch>
§

Unknown

No leader is currently known (election in progress, partition, etc.).

Trait Implementations§

Source§

impl Clone for LeaderState

Source§

fn clone(&self) -> LeaderState

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for LeaderState

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for LeaderState

Source§

fn eq(&self, other: &LeaderState) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for LeaderState

Source§

impl StructuralPartialEq for LeaderState

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, 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> 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
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.