pub(crate) enum ShapeReport {
Clamped {
requested: Option<Duration>,
applied: Duration,
},
Expired,
BurstBelowUnit {
class: Class,
burst_bytes: u64,
unit_bytes: u64,
},
}Expand description
What a shaped release wants the pipe loop to report.
The queue owns the decision and the caller owns the reporting: egress
has no Reporter, no ProxyObserver and no session id, and giving it
one would put the whole event surface behind a type whose job is a deque.
Variants§
Clamped
A unit went out at its max_hold clamp rather than when its bucket
would have allowed it. Report Impairment{HoldClamped}, whose
cardinality is already once per clamped unit.
Fields
requested: Option<Duration>What the bucket asked for, or None when it named no instant at
all — a zero rate, or a unit larger than burst_bytes, where the
wait is genuinely unbounded.
None rather than a sentinel duration: a finite figure here
would be a fabrication, and the largest representable one renders
as an eighteen-quintillion-second request that reads as an
encoding fault rather than as “unbounded”.
Expired
A unit outlived its clamp under Expiry::ResetStream, and the queue
has replaced everything with the reset. Report exactly one
Shaped{Expired}.
BurstBelowUnit
The head could not be granted because its class’s burst_bytes is
smaller than the head itself, so that class’s configured rate can
never pace anything. Report Impairment{ShapeBurstBelowUnit}.
The queue produces this on every refusal of such a unit and does
not deduplicate: the burst is a property of the session’s profile,
not of this stream, so the report-once state belongs to the scheduler
and the caller claims it there through
Scheduler::claim_burst_report. A per-queue latch would report once
per stream for a fault that is the same fault on every stream.
Carries the class rather than its name so this type stays Copy;
resolving a name here would allocate on a release path for an event
that is emitted once.
Trait Implementations§
Source§impl Clone for ShapeReport
impl Clone for ShapeReport
Source§fn clone(&self) -> ShapeReport
fn clone(&self) -> ShapeReport
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more