pub struct PhasePollContext {
pub kernel: Arc<ScopeKernel>,
pub interval: Duration,
pub deadline: Instant,
pub started_at: Instant,
pub metric_name: Option<String>,
pub max_error_retries: u32,
pub on_timeout: PhasePollTimeoutPolicy,
pub require: Vec<String>,
pub require_grace: Instant,
}Expand description
Runtime context for SRD-75 phase-level poll. Carried on
Activity when the phase declares a poll: block;
consumed by the fiber loop after each source-exhaustion
event to decide whether to terminate (predicate satisfied
or timeout) or rewind and run another iteration.
Fields§
§kernel: Arc<ScopeKernel>Handle to the phase scope kernel. After each iteration the fiber loop
resolves crate::wrappers::condition::UNTIL_BINDING through
CycleWires over the per-fiber kernel — the same call an op-level
poll: makes — and ends the loop when it reads truthy per
crate::wrappers::condition::is_truthy. lookup would not do: the
predicate is a DYNAMIC binding fed by per-iteration capture writes, so
it has to be pulled or it returns the last-evaluated value forever.
interval: DurationSleep between iterations (after a predicate check returns “not done”).
deadline: InstantWall-clock cap on the whole poll loop. Computed at
run-phase entry as Instant::now() + timeout_ms.
started_at: InstantInstant the loop started — used to compute the
elapsed-time value emitted under metric_name
(if set) on successful completion.
metric_name: Option<String>Optional named metric to emit on successful loop
completion (predicate fired). Value is the elapsed
wall-clock decoded per the existing _ns / _us /
_ms / _s / _m / _h suffix convention. None
⇒ no metric written.
max_error_retries: u32Tolerated consecutive retryable inner-op errors
before the loop propagates the error. Mirrors the
per-op PollingDispenser max_error_retries
semantics. Default 0 (strict).
on_timeout: PhasePollTimeoutPolicyWhat to do when the deadline fires without
satisfying the predicate. SRD-75 §“on_timeout”:
Error(default) — set the activity’s stop_flag + stop_reason. The phase returns an error; the scenario walker’s error-routing policy decides whether sibling phases continue.Abort— additionally callsession_signals::request_stop()so the whole scenario terminates. The workload-author declares the predicate’s satisfaction as a precondition for any downstream phase being meaningful; a stuck synchronizer invalidates the rest of the run.
require: Vec<String>SRD-75 (C5) — strict-gate selectors: each must resolve to a
registered instrument before the gate’s predicate is trusted.
While any selector is unresolved the gate HOLDS (the predicate
is not consulted — an unregistered family reads 0.0, which
could satisfy a >=-shaped predicate spuriously); past
Self::require_grace an unresolved selector is a hard
poll_require failure.
require_grace: InstantGrace deadline for Self::require resolution: the first
poll interval after loop start (late registration is normal —
a producing daemon registers its instruments as it spins up).
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for PhasePollContext
impl !UnwindSafe for PhasePollContext
impl Freeze for PhasePollContext
impl Send for PhasePollContext
impl Sync for PhasePollContext
impl Unpin for PhasePollContext
impl UnsafeUnpin for PhasePollContext
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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> ⓘ
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