pub struct FencingToken(pub u64);Expand description
A packed monotonically increasing fencing token that uniquely identifies a write epoch.
Encoded as a single u64:
- High 32 bits = Raft term (capped at
u32::MAXfor compactness; terms exceedingu32::MAXare exceedingly unlikely in any realistic deployment). - Low 32 bits = per-term monotonic sequence number.
Each time a node becomes leader it resets the sequence to zero and bumps the term
component via FencingToken::new_leader_term. Storage backends and followers use
the token to reject stale writes from former leaders: a write is stale when its
token’s term is less than the current term, or the term matches but the sequence
has been superseded by a higher-sequence write in the same term.
§Format
[term: 32 bits][seq: 32 bits]Tuple Fields§
§0: u64Implementations§
Source§impl FencingToken
impl FencingToken
Sourcepub fn bump_seq(self) -> Self
pub fn bump_seq(self) -> Self
Return a new token with the sequence number incremented by one, keeping the term unchanged.
Wraps on u32 overflow (extremely unlikely in practice).
Sourcepub fn new_leader_term(term: u32) -> Self
pub fn new_leader_term(term: u32) -> Self
Return a fresh token for a new leader term; the sequence number resets to 0.
Trait Implementations§
Source§impl Clone for FencingToken
impl Clone for FencingToken
Source§fn clone(&self) -> FencingToken
fn clone(&self) -> FencingToken
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl Copy for FencingToken
Source§impl Debug for FencingToken
impl Debug for FencingToken
Source§impl Default for FencingToken
impl Default for FencingToken
Source§fn default() -> FencingToken
fn default() -> FencingToken
Returns the “default value” for a type. Read more
impl Eq for FencingToken
Source§impl Hash for FencingToken
impl Hash for FencingToken
Source§impl Ord for FencingToken
impl Ord for FencingToken
Source§fn cmp(&self, other: &FencingToken) -> Ordering
fn cmp(&self, other: &FencingToken) -> Ordering
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
Source§impl PartialEq for FencingToken
impl PartialEq for FencingToken
Source§fn eq(&self, other: &FencingToken) -> bool
fn eq(&self, other: &FencingToken) -> bool
Tests for
self and other values to be equal, and is used by ==.Source§impl PartialOrd for FencingToken
impl PartialOrd for FencingToken
impl StructuralPartialEq for FencingToken
Auto Trait Implementations§
impl Freeze for FencingToken
impl RefUnwindSafe for FencingToken
impl Send for FencingToken
impl Sync for FencingToken
impl Unpin for FencingToken
impl UnsafeUnpin for FencingToken
impl UnwindSafe for FencingToken
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
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>
Converts
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>
Converts
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 moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Returns the layout of the type.
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Returns whether the given value has been niched. Read more
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
Writes data to
out indicating that a T is niched.