pub struct SequenceDeduplicator { /* private fields */ }Expand description
Deduplication log using sequence numbers for exactly-once semantics.
Each source stream maintains a monotonically increasing sequence number. The log tracks the highest contiguous sequence received, plus a set of out-of-order sequences, to detect and reject duplicates.
Implementations§
Source§impl SequenceDeduplicator
impl SequenceDeduplicator
Sourcepub fn new(config: DeduplicationConfig) -> Self
pub fn new(config: DeduplicationConfig) -> Self
Creates a new deduplicator with the given configuration.
Sourcepub fn check_and_record(&self, source_id: &str, sequence_number: u64) -> bool
pub fn check_and_record(&self, source_id: &str, sequence_number: u64) -> bool
Checks whether a message is a duplicate.
Returns true if the message is new (not a duplicate) and should
be processed. Returns false if it is a duplicate.
Sourcepub fn high_watermark(&self, source_id: &str) -> u64
pub fn high_watermark(&self, source_id: &str) -> u64
Returns the high watermark for a source.
Sourcepub fn expire_old_entries(&self)
pub fn expire_old_entries(&self)
Expires old pending entries.
Sourcepub fn stats(&self) -> DeduplicationStats
pub fn stats(&self) -> DeduplicationStats
Returns deduplication statistics.
Auto Trait Implementations§
impl Freeze for SequenceDeduplicator
impl !RefUnwindSafe for SequenceDeduplicator
impl Send for SequenceDeduplicator
impl Sync for SequenceDeduplicator
impl Unpin for SequenceDeduplicator
impl UnsafeUnpin for SequenceDeduplicator
impl !UnwindSafe for SequenceDeduplicator
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
Mutably borrows from an owned value. Read more
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>
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 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>
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.