WorkTypeValidationError

Enum WorkTypeValidationError 

Source
pub enum WorkTypeValidationError {
    ZeroBurstDuration {
        group_idx: usize,
    },
    ZeroSleepDuration {
        group_idx: usize,
    },
    ZeroTimerInterval {
        group_idx: usize,
    },
    NetTrafficFrameBytes {
        frame_bytes: u16,
        group_idx: usize,
    },
    IrqWakeFrameBytes {
        frame_bytes: u16,
        group_idx: usize,
    },
    InsufficientWakeChainDepth {
        depth: usize,
        group_idx: usize,
    },
    NonDivisibleWorkerCount {
        name: String,
        group_idx: usize,
        group_size: usize,
        num_workers: usize,
    },
    ZeroIpcVarianceParam {
        field: &'static str,
        group_idx: usize,
    },
}
Expand description

Spawn-time validation failures for WorkType preconditions.

Returned (boxed inside anyhow::Error) by WorkloadHandle::spawn when a per-group WorkSpec violates a runtime invariant the variant doc declares as a precondition. Tests that need to assert on a specific variant downcast via err.downcast_ref::<WorkTypeValidationError>(); the Display impl carries the same human-readable text the previous anyhow::bail! strings did so call sites that match on the rendered message keep working.

Each variant carries group_idx, a unified group index where 0 is the primary group and the i-th WorkloadConfig::composed entry is group_idx == i + 1, so multi-group scenarios can locate the offending entry without re-parsing the message string. Variants with multiple constraint inputs (depth, divisor, observed count) expose those values as named fields to the same end.

Variants§

§

ZeroBurstDuration

WorkType::IdleChurn with burst_duration == Duration::ZERO. Collapses the per-iteration loop to pure nanosleep so the worker accrues no runtime — useless as a scheduler test. See the variant doc’s “Spawn-time validation” section for the full rationale.

Fields

§group_idx: usize

Unified group index of the offending group: 0 for the primary group, i + 1 for WorkloadConfig::composed[i].

§

ZeroSleepDuration

WorkType::IdleChurn with sleep_duration == Duration::ZERO. Collapses the per-iteration loop to a CPU-bound burst with no idle path; the kernel’s nanosleep(0) is yield-like rather than idle-like. The diagnostic steers the caller to WorkType::SpinWait (pure CPU spin) or WorkType::YieldHeavy (the closer overlap).

Fields

§group_idx: usize

Unified group index of the offending group: 0 for the primary group, i + 1 for WorkloadConfig::composed[i].

§

ZeroTimerInterval

WorkType::TimerLatency with interval_us == 0. A zero interval never advances the absolute deadline, collapsing the cyclictest loop to a tight busy-spin rather than a timer-latency probe.

Fields

§group_idx: usize

Unified group index of the offending group: 0 for the primary group, i + 1 for WorkloadConfig::composed[i].

§

NetTrafficFrameBytes

WorkType::NetTraffic with frame_bytes outside [60, 1514]. Below 60 (ETH_ZLEN) there is no room for the L2 header the loopback echoes; above 1514 (standard MTU + header) the frame exceeds the virtio-net MTU.

Fields

§frame_bytes: u16

The offending frame_bytes value the caller supplied.

§group_idx: usize

Unified group index of the offending group: 0 for the primary group, i + 1 for WorkloadConfig::composed[i].

§

IrqWakeFrameBytes

WorkType::IrqWake with frame_bytes outside [60, 1514] — same bound and reasoning as Self::NetTrafficFrameBytes (the IrqWake sender reuses the NetTraffic frame builder).

Fields

§frame_bytes: u16

The offending frame_bytes value the caller supplied.

§group_idx: usize

Unified group index of the offending group: 0 for the primary group, i + 1 for WorkloadConfig::composed[i].

§

InsufficientWakeChainDepth

WorkType::WakeChain with depth < 2. A 1-stage chain has no successor to wake, and the post-fork close-other-fds block would close the worker’s own write end (deadlock).

Fields

§depth: usize

The offending depth value the caller supplied.

§group_idx: usize

Unified group index of the offending group: 0 for the primary group, i + 1 for WorkloadConfig::composed[i].

§

NonDivisibleWorkerCount

num_workers is not a positive multiple of the variant’s worker_group_size. Affects every grouped variant (paired, fan-out, herd, contention, chain). The diagnostic names the variant via WorkType::name.

Fields

§name: String

PascalCase variant name from WorkType::name.

§group_idx: usize

Unified group index of the offending group: 0 for the primary group, i + 1 for WorkloadConfig::composed[i].

§group_size: usize

Required group size (the variant’s worker_group_size).

§num_workers: usize

The num_workers count the caller supplied.

§

ZeroIpcVarianceParam

WorkType::IpcVariance with one of hot_iters, cold_iters, or period_iters equal to 0. A zero in any of the three collapses the alternation: zero hot_iters produces a pure cold-phase memory loop, zero cold_iters produces a pure ALU loop (use WorkType::AluHot directly for that), and zero period_iters produces a worker that never advances past the first stop check. Each rejection names the offending field so the caller knows which to fix.

Fields

§field: &'static str

Static name of the offending field — "hot_iters", "cold_iters", or "period_iters".

§group_idx: usize

Unified group index of the offending group: 0 for the primary group, i + 1 for WorkloadConfig::composed[i].

Trait Implementations§

Source§

impl Clone for WorkTypeValidationError

Source§

fn clone(&self) -> WorkTypeValidationError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for WorkTypeValidationError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for WorkTypeValidationError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for WorkTypeValidationError

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl Hash for WorkTypeValidationError

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for WorkTypeValidationError

Source§

fn eq(&self, other: &WorkTypeValidationError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for WorkTypeValidationError

Source§

impl StructuralPartialEq for WorkTypeValidationError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<T> ErrorExt for T
where T: Error + Send + Sync + 'static,

§

fn raise(self) -> Exn<Self>
where Self: Sized,

Raise this error as a new exception.
§

fn and_raise<T>(self, context: T) -> Exn<T>
where T: Error + Send + Sync + 'static, Self: Sized,

Raise this error as a child of a new exception with the given context error. Read more
§

fn raise_erased(self) -> Exn
where Self: Sized,

Raise this error as a new exception, with type erasure.
§

fn raise_all<T, I>(self, sources: I) -> Exn<Self>
where Self: Sized, T: Error + Send + Sync + 'static, I: IntoIterator, <I as IntoIterator>::Item: Into<Exn<T>>,

Raise this error as a new exception, with sources as causes.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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 more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> MaybeSend for T
where T: Send,

§

impl<T> MaybeSend for T
where T: Send,