pub struct FilteredReader { /* private fields */ }Expand description
Reads the records a consumer group’s policy selects, with their original offsets, and stores progress through fenced acknowledgments.
Pages are read ahead of acknowledgments. An acknowledgment stores a page’s safe offset only after that page and every earlier page of the partition are fully handled, so progress never skips an unhandled record. Pages that matched nothing are stored by the reader itself.
A partition that fails, faults, or blocks waits one idle interval before it is read again, while the other partitions keep reading. A purge or a new group binding restarts the partition from its stored offset once, and the error that reports it reaches the caller.
Every method is cancel-safe: a cancelled call leaves the position and the unstored progress as they were, and the next call repeats the work.
Implementations§
Source§impl FilteredReader
impl FilteredReader
Sourcepub async fn next_page(&mut self) -> Result<MatchedPage, LaserError>
pub async fn next_page(&mut self) -> Result<MatchedPage, LaserError>
The next page with at least one matching record. Waits while every partition has nothing new. Wrap it in a timeout to bound the wait.
Sourcepub async fn try_next_page(&mut self) -> Result<Option<MatchedPage>, LaserError>
pub async fn try_next_page(&mut self) -> Result<Option<MatchedPage>, LaserError>
Read each partition in turn until a page matches or every partition
has nothing new, without the idle wait. None when nothing is new, so
a caller that drives its own loop waits idle_interval
before it asks again.
Sourcepub async fn read_round(
&mut self,
) -> Result<(Option<MatchedPage>, bool), LaserError>
pub async fn read_round( &mut self, ) -> Result<(Option<MatchedPage>, bool), LaserError>
Perform one bounded round without an idle wait. The flag means unmatched
work remains. Read examined_in_round for its
source-record count, including pages that matched nothing.
Sourcepub const fn examined_in_round(&self) -> u64
pub const fn examined_in_round(&self) -> u64
Source records examined by the last bounded round, including empty pages that advance progress.
Sourcepub const fn idle_interval(&self) -> Duration
pub const fn idle_interval(&self) -> Duration
How long this reader waits when nothing is new.
Sourcepub fn owns(&self, page: &MatchedPage) -> bool
pub fn owns(&self, page: &MatchedPage) -> bool
Whether page came from this reader in its current membership, so its
records can still be acknowledged. A rejoin retires every earlier page.
Sourcepub async fn next_record(&mut self) -> Result<MatchedRecord, LaserError>
pub async fn next_record(&mut self) -> Result<MatchedRecord, LaserError>
The next matching record, one at a time over next_page.
Sourcepub async fn ack(&mut self, record: &MatchedRecord) -> Result<(), LaserError>
pub async fn ack(&mut self, record: &MatchedRecord) -> Result<(), LaserError>
Mark one record handled, and store the progress this completes.
Sourcepub async fn ack_through(
&mut self,
record: &MatchedRecord,
) -> Result<(), LaserError>
pub async fn ack_through( &mut self, record: &MatchedRecord, ) -> Result<(), LaserError>
Mark every record on this partition through record handled, and
store that completed prefix. Process all preceding records first.
Records after it remain pending, even inside the same page.
Sourcepub async fn ack_page(&mut self, page: &MatchedPage) -> Result<(), LaserError>
pub async fn ack_page(&mut self, page: &MatchedPage) -> Result<(), LaserError>
Mark every record of page handled, and store the progress this
completes.
Sourcepub fn data_connections_opened(&self) -> u64
pub fn data_connections_opened(&self) -> u64
Data connections this reader opened to partition primaries. A healthy reader opens one per node and keeps it: the count grows only when a node stops being primary, a connection fails, or the group session ends. A local reader opens none.
Sourcepub fn partitions(&self) -> Vec<u32>
pub fn partitions(&self) -> Vec<u32>
The partitions this reader reads now.
Sourcepub async fn close(self) -> Result<(), LaserError>
pub async fn close(self) -> Result<(), LaserError>
Store completed progress, leave the group, and close the data
connections. Handled records that were not acknowledged are read again
by the next reader. A reader dropped without close leaves its group
when its own coordinator connection closes.
Auto Trait Implementations§
impl !RefUnwindSafe for FilteredReader
impl !UnwindSafe for FilteredReader
impl Freeze for FilteredReader
impl Send for FilteredReader
impl Sync for FilteredReader
impl Unpin for FilteredReader
impl UnsafeUnpin for FilteredReader
Blanket Implementations§
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> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.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> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.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<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.