StreamTailer

Struct StreamTailer 

Source
pub struct StreamTailer { /* private fields */ }
Expand description

Stream tailer for a single peer’s CDC stream.

Implementations§

Source§

impl StreamTailer

Source

pub fn new( peer_id: String, stream_key: String, block_timeout: Duration, batch_size: usize, ) -> Self

Create a new stream tailer.

Source

pub fn batch_size(&self) -> usize

Get the current batch size.

Source

pub fn set_batch_size(&mut self, size: usize)

Update the batch size (for adaptive sizing).

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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:

  1. No blocking timeout overhead
  2. Simpler command (no consumer group semantics)
  3. 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§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more