pub struct ClosedTimestampTracker { /* private fields */ }Expand description
Tracks the most recent apply instant per Raft group plus the shared node-wide HLC.
Implementations§
Source§impl ClosedTimestampTracker
impl ClosedTimestampTracker
Sourcepub fn new() -> Self
pub fn new() -> Self
Construct a tracker with a fresh, node-private HLC. Tests and
stand-alone follower-read setups use this; production paths
should call Self::with_hlc to share the node-wide clock.
Sourcepub fn with_hlc(hlc: Arc<HlcClock>) -> Self
pub fn with_hlc(hlc: Arc<HlcClock>) -> Self
Construct a tracker wired to a caller-supplied HLC. Use this
in production so the tracker’s fold_remote_hlc advances the
same clock that other subsystems read via now().
Sourcepub fn hlc(&self) -> &Arc<HlcClock> ⓘ
pub fn hlc(&self) -> &Arc<HlcClock> ⓘ
Read access to the shared HLC. Other apply-side subsystems (descriptor leases, metadata cache) advance and read it through this handle.
Sourcepub fn mark_applied(&self, group_id: u64)
pub fn mark_applied(&self, group_id: u64)
Record that group_id just applied one or more entries.
Called by the raft-loop applier after each apply batch.
Sourcepub fn mark_applied_at(&self, group_id: u64, at: Instant)
pub fn mark_applied_at(&self, group_id: u64, at: Instant)
Record that group_id just applied, using a caller-supplied
instant. Exposed for deterministic testing with paused time.
Sourcepub fn fold_remote_hlc(&self, group_id: u64, remote: Hlc) -> Hlc
pub fn fold_remote_hlc(&self, group_id: u64, remote: Hlc) -> Hlc
Mark a group applied AND fold the leader-stamped remote HLC
into the local clock. Returns the merged HLC that any local
stamp emitted after this call is guaranteed to be strictly
greater than.
This is the production apply-path entry point: every committed
entry that carries a leader HLC (descriptor leases, catalog
DDL, drain events) should route through here so cross-node
_ts_system skew is bounded at this node.
Sourcepub fn is_fresh_enough(&self, group_id: u64, max_staleness: Duration) -> bool
pub fn is_fresh_enough(&self, group_id: u64, max_staleness: Duration) -> bool
Check whether this node’s replica of group_id has applied
recently enough that a read with max_staleness can be
served locally.
Returns false if the group has never applied on this node
(no closed timestamp recorded).
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for ClosedTimestampTracker
impl RefUnwindSafe for ClosedTimestampTracker
impl Send for ClosedTimestampTracker
impl Sync for ClosedTimestampTracker
impl Unpin for ClosedTimestampTracker
impl UnsafeUnpin for ClosedTimestampTracker
impl UnwindSafe for ClosedTimestampTracker
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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> 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>
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
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.