pub struct StreamTailer { /* private fields */ }Expand description
Stream tailer for a single peer’s CDC stream.
Implementations§
Source§impl StreamTailer
impl StreamTailer
Sourcepub fn new(
peer_id: String,
stream_key: String,
block_timeout: Duration,
batch_size: usize,
) -> Self
pub fn new( peer_id: String, stream_key: String, block_timeout: Duration, batch_size: usize, ) -> Self
Create a new stream tailer.
Sourcepub fn batch_size(&self) -> usize
pub fn batch_size(&self) -> usize
Get the current batch size.
Sourcepub fn set_batch_size(&mut self, size: usize)
pub fn set_batch_size(&mut self, size: usize)
Update the batch size (for adaptive sizing).
Sourcepub async fn get_oldest_id(
&self,
conn: &mut ConnectionManager,
) -> Result<Option<String>>
pub async fn get_oldest_id( &self, conn: &mut ConnectionManager, ) -> Result<Option<String>>
Get the oldest entry ID in the stream, if any.
Returns None if the stream is empty or doesn’t exist.
Sourcepub async fn get_latest_id(
&self,
conn: &mut ConnectionManager,
) -> Result<Option<String>>
pub async fn get_latest_id( &self, conn: &mut ConnectionManager, ) -> Result<Option<String>>
Get the latest (newest) entry ID in the stream, if any.
Returns None if the stream is empty or doesn’t exist.
Sourcepub async fn get_stream_length(
&self,
conn: &mut ConnectionManager,
) -> Result<u64>
pub async fn get_stream_length( &self, conn: &mut ConnectionManager, ) -> Result<u64>
Get the total number of entries in the stream.
Returns 0 if the stream doesn’t exist.
Sourcepub async fn check_cursor_valid(
&self,
conn: &mut ConnectionManager,
cursor: &str,
) -> Result<Option<String>>
pub async fn check_cursor_valid( &self, conn: &mut ConnectionManager, cursor: &str, ) -> Result<Option<String>>
Check if a cursor is still valid (not older than the oldest stream entry).
Returns the oldest ID if the cursor is invalid, None if cursor is valid.
Sourcepub async fn read_events_checked(
&self,
conn: &mut ConnectionManager,
cursor: &str,
) -> Result<ReadResult>
pub async fn read_events_checked( &self, conn: &mut ConnectionManager, cursor: &str, ) -> Result<ReadResult>
Read events from the stream with trim detection.
This is the preferred method for production use. It detects when the
stream has been trimmed past our cursor and returns ReadResult::StreamTrimmed
so callers can handle the gap appropriately.
Sourcepub async fn read_events(
&self,
conn: &mut ConnectionManager,
cursor: &str,
) -> Result<Vec<CdcEvent>>
pub async fn read_events( &self, conn: &mut ConnectionManager, cursor: &str, ) -> Result<Vec<CdcEvent>>
Read events from the stream starting after cursor.
Returns a vector of parsed events. Empty vector means no new events (timeout or stream empty).
The cursor should be the last successfully processed stream ID, or “0” to start from the beginning.
Sourcepub async fn read_events_range(
&self,
conn: &mut ConnectionManager,
start: &str,
count: usize,
) -> Result<Vec<CdcEvent>>
pub async fn read_events_range( &self, conn: &mut ConnectionManager, start: &str, count: usize, ) -> Result<Vec<CdcEvent>>
Read a range of events using XRANGE (non-blocking).
This is faster than XREAD for catchup scenarios because:
- No blocking timeout overhead
- Simpler command (no consumer group semantics)
- Better for bulk reads when we know we’re behind
Use this when catching up, then switch to read_events (XREAD) when tailing.
§Arguments
start- Exclusive start ID (use “0” to start from beginning, or last processed ID)count- Maximum number of entries to fetch
§Returns
Vector of parsed events. Empty means we’ve caught up.
Auto Trait Implementations§
impl Freeze for StreamTailer
impl RefUnwindSafe for StreamTailer
impl Send for StreamTailer
impl Sync for StreamTailer
impl Unpin for StreamTailer
impl UnwindSafe for StreamTailer
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
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 more