Skip to main content

DurableChannel

Struct DurableChannel 

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

Haematite-backed durable channel state.

Implementations§

Source§

impl DurableChannel

Source

pub fn pending_append(&self) -> Option<UnresolvedAppend>

Evidence retained for this channel’s unresolved append.

Source

pub async fn resolve_pending( &mut self, ) -> Result<Option<AppendResolution>, DurabilityError>

Resolve the exact reserved slot without writing another row.

A row with the pending bytes at the reserved sequence is the append, committed. No row, or another writer’s row there, means the append is absent: the store refuses an append at an occupied sequence. Another writer’s row also moves the partition head past it, as a sequence conflict does.

§Errors

An unreadable slot retains its original evidence and refuses by name.

Source§

impl DurableChannel

Source

pub fn key_lookup(&self) -> KeyLookup

The streams that answer for this channel’s idempotency keys.

A key is looked up only once its pending append is settled, and a held key is never appended again, so rows appended while the lookup reads cannot carry it: the lookup needs no lock.

Source

pub async fn find_idempotency_key( &self, key: &str, from: &[u64], ) -> Result<AppendResolution, DurabilityError>

Find the original durable position of a producer’s key across partitions, reading each partition from its position in from.

§Errors

Propagates authoritative read and envelope decode errors. A failed read never establishes absence.

Source§

impl DurableChannel

Source

pub fn new( channel_id: impl Into<String>, partition_count: usize, store: Arc<dyn DurableStore>, ) -> Result<Self, DurabilityError>

Creates a new durable channel with all partition sequences initialized to zero.

§Errors

Returns DurabilityError::ConfigError when partition_count is zero.

Source

pub fn with_partition_key<F>( channel_id: impl Into<String>, partition_count: usize, store: Arc<dyn DurableStore>, partition_key: F, ) -> Result<Self, DurabilityError>
where F: Fn(&MessageEnvelope) -> u64 + Send + Sync + 'static,

Creates a durable channel with a caller-provided partition key function.

§Errors

Returns DurabilityError::ConfigError when partition_count is zero.

Source

pub fn from_recovered_sequences( channel_id: impl Into<String>, partition_count: usize, store: Arc<dyn DurableStore>, next_sequences: Vec<u64>, ) -> Result<Self, DurabilityError>

Creates a durable channel from explicit recovered next sequence counters.

§Errors

Returns DurabilityError::ConfigError when partition_count is zero or the recovered sequence vector length differs from partition_count.

Source

pub fn from_config( channel_id: impl Into<String>, config: DurabilityConfig, store: Arc<dyn DurableStore>, ) -> Result<Self, DurabilityError>

Creates a durable channel from validated durability configuration.

§Errors

Returns DurabilityError::ConfigError when config is ephemeral.

Source

pub fn channel_id(&self) -> &str

Returns the durable channel identifier.

Source

pub const fn partition_count(&self) -> usize

Returns the number of partitions owned by this channel.

Source

pub fn next_expected_sequence(&self, partition_index: usize) -> Option<u64>

Returns the next expected sequence for a partition, if it exists.

Source

pub fn next_sequences(&self) -> &[u64]

Returns all next expected sequence counters.

Source

pub fn partition_for(&self, envelope: &MessageEnvelope) -> usize

Computes the partition index for an envelope without touching storage.

Source

pub fn stream_key_for(&self, partition_index: usize) -> String

Formats the haematite stream key for a channel partition.

Source

pub async fn publish( &mut self, envelope: &MessageEnvelope, ) -> Result<u64, DurabilityError>

Persists an envelope, retaining exact evidence before the cancellable append.

§Errors

Returns serialization and store errors. An earlier unresolved append is reconciled by one read before this one is sent, and an unreadable one refuses this publish by name. A definite sequence conflict reads the current tail and retries this refused append once. An uncertain append error keeps its evidence and is returned without resubmitting its payload.

Source

pub async fn flush_store(&self) -> Result<(), DurabilityError>

Flushes the backing store so every appended message is durably persisted.

§Errors

Propagates any DurabilityError returned by DurableStore::flush.

Trait Implementations§

Source§

impl Clone for DurableChannel

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 DurableChannel

Source§

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

Formats the value using the given formatter. Read more

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> 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> 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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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