pub struct LinearizableReader { /* private fields */ }Expand description
A read accessor that goes through Raft consensus before returning a value.
Implementations§
Source§impl LinearizableReader
impl LinearizableReader
Sourcepub fn new(
consensus: Arc<ConsensusManager>,
state: Arc<RaftBackedOperatorState>,
config: LinearizableReadConfig,
) -> Self
pub fn new( consensus: Arc<ConsensusManager>, state: Arc<RaftBackedOperatorState>, config: LinearizableReadConfig, ) -> Self
Build a reader.
Sourcepub async fn is_leader(&self) -> bool
pub async fn is_leader(&self) -> bool
Returns true if the local node currently believes itself the leader.
Sourcepub async fn get(&self, key: &str) -> LinearizableReadResult<Option<StateValue>>
pub async fn get(&self, key: &str) -> LinearizableReadResult<Option<StateValue>>
Leader-stickiness read of a key.
Cheap read path: checks that the local node is the leader, snapshots
the current term, then serves from the local cache. The cache only
reflects committed state, so this is monotonic when read from the
leader. For strictly linearizable reads under contention, use
Self::get_with_barrier.
Sourcepub async fn get_with_barrier(
&self,
key: &str,
) -> LinearizableReadResult<Option<StateValue>>
pub async fn get_with_barrier( &self, key: &str, ) -> LinearizableReadResult<Option<StateValue>>
Strict linearizable read of a key.
Issues a BeginTransaction / RollbackTransaction pair through
ConsensusManager::propose_command before reading the local cache.
The pair is a Raft round-trip, so on return every commit issued
before this call has been applied to the local replica.
Costs one Raft round-trip per call; use sparingly.
Sourcepub fn state(&self) -> &Arc<RaftBackedOperatorState> ⓘ
pub fn state(&self) -> &Arc<RaftBackedOperatorState> ⓘ
Underlying operator state handle.
Sourcepub fn consensus(&self) -> &Arc<ConsensusManager> ⓘ
pub fn consensus(&self) -> &Arc<ConsensusManager> ⓘ
Underlying consensus manager handle.
Auto Trait Implementations§
impl !RefUnwindSafe for LinearizableReader
impl !UnwindSafe for LinearizableReader
impl Freeze for LinearizableReader
impl Send for LinearizableReader
impl Sync for LinearizableReader
impl Unpin for LinearizableReader
impl UnsafeUnpin for LinearizableReader
Blanket Implementations§
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<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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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>
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>
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 moreimpl<T> MaybeDebug for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
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.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.