pub struct DurableChannel { /* private fields */ }Expand description
Haematite-backed durable channel state.
Implementations§
Source§impl DurableChannel
impl DurableChannel
Sourcepub fn pending_append(&self) -> Option<UnresolvedAppend>
pub fn pending_append(&self) -> Option<UnresolvedAppend>
Evidence retained for this channel’s unresolved append.
Sourcepub async fn resolve_pending(
&mut self,
) -> Result<Option<AppendResolution>, DurabilityError>
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
impl DurableChannel
Sourcepub fn key_lookup(&self) -> KeyLookup
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.
Sourcepub async fn find_idempotency_key(
&self,
key: &str,
from: &[u64],
) -> Result<AppendResolution, DurabilityError>
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
impl DurableChannel
Sourcepub fn new(
channel_id: impl Into<String>,
partition_count: usize,
store: Arc<dyn DurableStore>,
) -> Result<Self, DurabilityError>
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.
Sourcepub fn with_partition_key<F>(
channel_id: impl Into<String>,
partition_count: usize,
store: Arc<dyn DurableStore>,
partition_key: F,
) -> Result<Self, DurabilityError>
pub fn with_partition_key<F>( channel_id: impl Into<String>, partition_count: usize, store: Arc<dyn DurableStore>, partition_key: F, ) -> Result<Self, DurabilityError>
Creates a durable channel with a caller-provided partition key function.
§Errors
Returns DurabilityError::ConfigError when partition_count is zero.
Sourcepub fn from_recovered_sequences(
channel_id: impl Into<String>,
partition_count: usize,
store: Arc<dyn DurableStore>,
next_sequences: Vec<u64>,
) -> Result<Self, DurabilityError>
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.
Sourcepub fn from_config(
channel_id: impl Into<String>,
config: DurabilityConfig,
store: Arc<dyn DurableStore>,
) -> Result<Self, DurabilityError>
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.
Sourcepub fn channel_id(&self) -> &str
pub fn channel_id(&self) -> &str
Returns the durable channel identifier.
Sourcepub const fn partition_count(&self) -> usize
pub const fn partition_count(&self) -> usize
Returns the number of partitions owned by this channel.
Sourcepub fn next_expected_sequence(&self, partition_index: usize) -> Option<u64>
pub fn next_expected_sequence(&self, partition_index: usize) -> Option<u64>
Returns the next expected sequence for a partition, if it exists.
Sourcepub fn next_sequences(&self) -> &[u64]
pub fn next_sequences(&self) -> &[u64]
Returns all next expected sequence counters.
Sourcepub fn partition_for(&self, envelope: &MessageEnvelope) -> usize
pub fn partition_for(&self, envelope: &MessageEnvelope) -> usize
Computes the partition index for an envelope without touching storage.
Sourcepub fn stream_key_for(&self, partition_index: usize) -> String
pub fn stream_key_for(&self, partition_index: usize) -> String
Formats the haematite stream key for a channel partition.
Sourcepub async fn publish(
&mut self,
envelope: &MessageEnvelope,
) -> Result<u64, DurabilityError>
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.
Sourcepub async fn flush_store(&self) -> Result<(), DurabilityError>
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.