Skip to main content

KinesisPosition

Enum KinesisPosition 

Source
pub enum KinesisPosition {
    Horizon,
    Latest,
    Timestamp(u64),
    Sequence {
        shard: String,
        sequence: String,
    },
}
Expand description

A position in the stream’s retained log: the whole start vocabulary of this broker, accepted by Seeker::seek and by the start_at(..) clause of #[subscriber(..)].

Repositioning resets the checkpoint bookkeeping of every shard it moves: acknowledgements of records delivered before the seek stop advancing the watermark, so a stale checkpoint cannot drag the cursor back over the position just taken. Records from the new position onward are delivered again, which at-least-once permits.

Without a position a subscription resumes from the stored checkpoint of each shard, and starts at the tip on a shard that has none. A position given to start_at(..) applies to the shards the subscription opens with; a shard it takes on later resumes from its checkpoint.

Opening a subscription returns once every shard it took has its reader and its starting cursor, so the tip is the moment the subscription opened: a record published after that is read.

§Examples

use ruststream_kinesis::prelude::*;
use serde::Deserialize;

#[derive(Deserialize)]
struct Order {
    id: u64,
}

/// Rebuilds a read model from every record the stream still retains, on every shard.
#[subscriber(KinesisStream::new("orders"), start_at(KinesisPosition::horizon()))]
async fn backfill(order: &Order) -> HandlerOutcome {
    tracing::info!(order.id, "backfilled");
    HandlerOutcome::ack()
}

#[ruststream::app]
fn app() -> impl App {
    RustStream::new(AppInfo::new("orders", "0.1.0")).with_broker(KinesisBroker::new(), |b| {
        b.include(backfill);
    })
}

Variants§

§

Horizon

The trim horizon: everything the stream still retains.

Stream-wide - it applies to every shard the subscription reads when it lands, and to a shard whose reader starts later without a checkpoint.

§

Latest

The tip: only records published after the reposition.

Stream-wide, and the position a shard without a checkpoint starts at by default. A child of a split or a merge whose parent was read to its end opens at its own beginning instead, so nothing written to it before its reader started is skipped.

§

Timestamp(u64)

The first record at or after this timestamp, in milliseconds since the Unix epoch.

Stream-wide; each shard opens at its own first record from that instant. The instant is matched against the arrival timestamp the service stamped on the record, and the service calls that stamp approximate: records that arrived around the same moment are not separated exactly.

§

Sequence

Exactly one record on one shard.

This is the pinned form the framework defines for captured positions (Positioned::position): seeking to one redelivers that very record. It addresses a single shard, so it moves that shard’s reader only, the way a partitioned log seeks per partition, and the shard must be owned and live.

Fields

§shard: String

The shard the position lives on.

§sequence: String

The record’s sequence number.

Implementations§

Source§

impl KinesisPosition

Source

pub const fn horizon() -> Self

The trim horizon, for every shard: see KinesisPosition::Horizon.

Source

pub const fn latest() -> Self

The tip, for every shard: see KinesisPosition::Latest.

Source

pub const fn timestamp(millis: u64) -> Self

A wall-clock instant (milliseconds since the Unix epoch), for every shard: see KinesisPosition::Timestamp.

Source

pub fn sequence(shard: impl Into<String>, sequence: impl Into<String>) -> Self

One record on one shard: see KinesisPosition::Sequence.

Captured positions come from Positioned::position; this constructor is for a sequence number carried in from elsewhere (an operator’s replay request, say).

Trait Implementations§

Source§

impl Clone for KinesisPosition

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for KinesisPosition

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for KinesisPosition

Source§

impl PartialEq for KinesisPosition

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for KinesisPosition

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

Source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
Source§

impl<T> PublishedThrough<DefaultSlot> for T

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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<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