pub struct ReportContext<'a, 's, B, const N: usize>{ /* private fields */ }Expand description
Per-subscription context for an in-progress report.
Implementations§
Source§impl<'a, 's, B, const N: usize> ReportContext<'a, 's, B, N>
impl<'a, 's, B, const N: usize> ReportContext<'a, 's, B, N>
Sourcepub fn subscription(&self) -> &Subscription
pub fn subscription(&self) -> &Subscription
Return a reference to the subscription being reported on.
Sourcepub fn rx(&self) -> &[u8] ⓘ
pub fn rx(&self) -> &[u8] ⓘ
Return a reference to the RX buffer associated with the subscription being reported on.
Sourcepub fn should_send_if_empty(&self) -> bool
pub fn should_send_if_empty(&self) -> bool
Return true if the report should be sent even if it turns out to be empty
(i.e. no attributes or events to report), or false if it can be skipped in that case.
Sourcepub fn should_report_attr(
&self,
endpoint_id: u16,
cluster_id: u32,
attr_id: u32,
) -> bool
pub fn should_report_attr( &self, endpoint_id: u16, cluster_id: u32, attr_id: u32, ) -> bool
Return true if the subscription should report the attribute
identified by the given triple, or false if it can skip it.
Sourcepub fn max_seen_event_number(&self) -> u64
pub fn max_seen_event_number(&self) -> u64
Return the maximum event number the subscription has seen so far.
Sourcepub fn next_max_seen_event_number(&self) -> u64
pub fn next_max_seen_event_number(&self) -> u64
Return the next maximum event number to be updated into the subscription upon returning it to the table.
Sourcepub fn set_keep(&mut self)
pub fn set_keep(&mut self)
Mark the subscription to be kept in the table after the report completes, meaning the other peer acknowledged our report.
Sourcepub fn set_keep_retry(&mut self)
pub fn set_keep_retry(&mut self)
Keep the subscription in the table after a failed send to the peer, so it retries — with a back-off, and without advancing its watermarks or its last-success timestamp.
Three things happen, each of which matters:
- Watermarks are preserved.
Self::set_keepis only correct after a delivered report:report()captured the current change/event watermarks as “what this report covers”, and committing them would mark the still-unsent changes/events as seen — they would then never be reported. We restore the last actually-reported values so the pending data is re-attempted. reported_atis preserved (not advanced to now).is_expiredmeasuresmax_intfromreported_at, so keeping it pinned to the last successful report means a run of failures eventually expires the subscription instead of retrying it forever.- A back-off is scheduled.
retry_atis pushed to a growing (capped) delay from now, so an unreachable peer is retried with exponential back-off rather than in a tight loop that would flood the network.
Trait Implementations§
Source§impl<'a, 's, B, const N: usize> Drop for ReportContext<'a, 's, B, N>
impl<'a, 's, B, const N: usize> Drop for ReportContext<'a, 's, B, N>
Auto Trait Implementations§
impl<'a, 's, B, const N: usize> !RefUnwindSafe for ReportContext<'a, 's, B, N>
impl<'a, 's, B, const N: usize> !Send for ReportContext<'a, 's, B, N>
impl<'a, 's, B, const N: usize> !Sync for ReportContext<'a, 's, B, N>
impl<'a, 's, B, const N: usize> !UnwindSafe for ReportContext<'a, 's, B, N>
impl<'a, 's, B, const N: usize> Freeze for ReportContext<'a, 's, B, N>
impl<'a, 's, B, const N: usize> Unpin for ReportContext<'a, 's, B, N>
impl<'a, 's, B, const N: usize> UnsafeUnpin for ReportContext<'a, 's, B, N>
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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> ⓘ
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> ⓘ
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