pub struct KeyedBatchHook<K, V, O: Ordering = TotalOrder, R: Retries = ExactlyOnce> { /* private fields */ }Expand description
A hook handle controlling a batch operator over a keyed stream with keys K, values
V, per-key value ordering O, and retry guarantee R (mirroring the type of the
keyed stream being batched).
A decision for a keyed batch hook says which buffered (key, value) entries form the
next batch released into the tick. See hydro_lang::sim::hooks for the decisions
offered.
Implementations§
Source§impl<K, V, O: Ordering, R: Retries> KeyedBatchHook<K, V, O, R>
impl<K, V, O: Ordering, R: Retries> KeyedBatchHook<K, V, O, R>
Sourcepub fn pause(&self)
Available on crate feature sim only.
pub fn pause(&self)
sim only.Declares that buffering at this operator is intended: while paused, the hook is exempt from the missing-decision error, never causes its tick to run, and — if its tick runs anyway because other hooks feed it — contributes its “nothing new” behavior each time. Scripting any decision implicitly resumes the hook.
A pause takes its place in the script like everything else: requested while a decision is still pending, the hold begins once that decision has been consumed.
Sourcepub fn resume(&self)
Available on crate feature sim only.
pub fn resume(&self)
sim only.Ends a Self::pause (and clears Self::auto_pause mode).
Sourcepub fn auto_pause(&self)
Available on crate feature sim only.
pub fn auto_pause(&self)
sim only.Sets a standing mode where this hook only ever acts when scripted: it holds immediately, and every scripted decision leaves a fresh hold in place behind it.
This deliberately opts out of the forgotten-hook protection: if the test
forgets a step, the operator silently holds its data instead of failing. The
one auto_pause() line at the top of a test is the reviewer-visible marker
that this hook’s timing is entirely script-driven, missed steps and all.
Sourcepub async fn pause_while<Fut: Future>(&self, body: Fut) -> Fut::Output
Available on crate feature sim only.
pub async fn pause_while<Fut: Future>(&self, body: Fut) -> Fut::Output
sim only.Pauses the hook exactly for the duration of body (resuming even on panic), so
a bracketed buffering phase cannot leak a paused hook.
Sourcepub fn pause_until(
&self,
predicate: impl Fn(&BatchStatus) -> bool + Unpin,
) -> PauseUntilFuture<BatchStatus, impl Fn(&BatchStatus) -> bool + Unpin> ⓘ
Available on crate feature sim only.
pub fn pause_until( &self, predicate: impl Fn(&BatchStatus) -> bool + Unpin, ) -> PauseUntilFuture<BatchStatus, impl Fn(&BatchStatus) -> bool + Unpin> ⓘ
sim only.Pauses the hook and returns a future that resolves once the hook’s
pending-input status satisfies predicate — a synchronization point for
scripts where the right decision is not knowable upfront. The status is read
on demand at every scheduling point. After the future resolves, the hook is
unpaused; the ordinary missing-decision error applies from there on.
Sourcepub fn pause_until_count(
&self,
n: usize,
) -> PauseUntilFuture<BatchStatus, impl Fn(&BatchStatus) -> bool + Unpin> ⓘ
Available on crate feature sim only.
pub fn pause_until_count( &self, n: usize, ) -> PauseUntilFuture<BatchStatus, impl Fn(&BatchStatus) -> bool + Unpin> ⓘ
sim only.Pauses the hook and returns a future that resolves once at least n entries are
buffered (in total, across all keys); see Self::pause_until.
Source§impl<K, V, R: Retries> KeyedBatchHook<K, V, TotalOrder, R>
impl<K, V, R: Retries> KeyedBatchHook<K, V, TotalOrder, R>
Sourcepub fn release(
&self,
counts: impl IntoIterator<Item = (K, usize)>,
) -> DecisionFuture ⓘ
Available on crate feature sim only.
pub fn release( &self, counts: impl IntoIterator<Item = (K, usize)>, ) -> DecisionFuture ⓘ
sim only.Scripts the next batch to be exactly the next count buffered values of each
named key. The tick fires at the first moment the decision can be honored in
full.
§Panics
Panics immediately if counts names the same key more than once.
Sourcepub fn release_values(
&self,
entries: impl IntoIterator<Item = (K, V)>,
) -> DecisionFuture ⓘ
Available on crate feature sim only.
pub fn release_values( &self, entries: impl IntoIterator<Item = (K, V)>, ) -> DecisionFuture ⓘ
sim only.Scripts the next batch to be exactly these (key, value) entries. Each key’s
values must match that key’s buffered prefix in order (the interleaving of
different keys in the scripted sequence is irrelevant): a mismatching available
value panics immediately, while a matching but incomplete prefix waits for the
remaining values to arrive.
Sourcepub fn release_all(&self) -> DecisionFuture ⓘ
Available on crate feature sim only.
pub fn release_all(&self) -> DecisionFuture ⓘ
sim only.Scripts the next batch to be everything that has arrived by the time the tick
fires. Under fuzzing, the released contents co-vary with the schedule being
explored; use Self::release_values to name them exactly.
Sourcepub fn release_empty(&self) -> DecisionFuture ⓘ
Available on crate feature sim only.
pub fn release_empty(&self) -> DecisionFuture ⓘ
sim only.Scripts the next batch to be empty, holding everything buffered. Shorthand for
Self::release_values with no entries.
Source§impl<K, V, R: Retries> KeyedBatchHook<K, V, NoOrder, R>
impl<K, V, R: Retries> KeyedBatchHook<K, V, NoOrder, R>
Sourcepub fn release_values(
&self,
entries: impl IntoIterator<Item = (K, V)>,
) -> DecisionFuture ⓘ
Available on crate feature sim only.
pub fn release_values( &self, entries: impl IntoIterator<Item = (K, V)>, ) -> DecisionFuture ⓘ
sim only.Scripts the next batch to contain exactly these (key, value) entries. Values are
matched per key as multisets (independently of arrival order); duplicates request
the corresponding number of equal buffered items. The tick fires once every
requested entry exists.
Sourcepub fn release_all(&self) -> DecisionFuture ⓘ
Available on crate feature sim only.
pub fn release_all(&self) -> DecisionFuture ⓘ
sim only.Scripts the next batch to be everything that has arrived by the time the tick
fires. Under fuzzing, the released contents co-vary with the schedule being
explored; use Self::release_values to name them exactly.
Sourcepub fn release_empty(&self) -> DecisionFuture ⓘ
Available on crate feature sim only.
pub fn release_empty(&self) -> DecisionFuture ⓘ
sim only.Scripts the next batch to be empty, holding everything buffered. Shorthand for
Self::release_values with no entries.
Trait Implementations§
impl<K, V, O: Ordering, R: Retries> Copy for KeyedBatchHook<K, V, O, R>
Source§impl<K, V, O: Ordering, R: Retries> SimHook for KeyedBatchHook<K, V, O, R>where
K: Hash + Eq + Clone + Serialize + DeserializeOwned,
V: Serialize + DeserializeOwned + PartialEq,
impl<K, V, O: Ordering, R: Retries> SimHook for KeyedBatchHook<K, V, O, R>where
K: Hash + Eq + Clone + Serialize + DeserializeOwned,
V: Serialize + DeserializeOwned + PartialEq,
Auto Trait Implementations§
impl<K, V, O, R> Freeze for KeyedBatchHook<K, V, O, R>
impl<K, V, O, R> RefUnwindSafe for KeyedBatchHook<K, V, O, R>
impl<K, V, O, R> Send for KeyedBatchHook<K, V, O, R>
impl<K, V, O, R> Sync for KeyedBatchHook<K, V, O, R>
impl<K, V, O, R> Unpin for KeyedBatchHook<K, V, O, R>
impl<K, V, O, R> UnsafeUnpin for KeyedBatchHook<K, V, O, R>
impl<K, V, O, R> UnwindSafe for KeyedBatchHook<K, V, O, R>
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> 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> ⓘ
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