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.
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.
Unknown
No leader is currently known (election in progress, partition, etc.).
Trait Implementations§
Source§impl Clone for LeaderState
impl Clone for LeaderState
Source§fn clone(&self) -> LeaderState
fn clone(&self) -> LeaderState
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for LeaderState
impl Debug for LeaderState
Source§impl PartialEq for LeaderState
impl PartialEq for LeaderState
Source§fn eq(&self, other: &LeaderState) -> bool
fn eq(&self, other: &LeaderState) -> bool
self and other values to be equal, and is used by ==.