Expand description
The classification-driven selection wait. The selection wait, made honest.
Before R1 this loop was: registry miss, one tracing::info!, block. It
could not tell “served slowly” from “served by nobody”, so an operator had
nothing to alert on and a run could sit forever with no state.
Now every miss is classified against the deployed contract records and the
live poller census, published to the queue-service state, logged at WARN
with the reason and the last-compatible-poller age, and resolved by the
policy: structural unservability refuses at once, a fleet condition refuses
when the service-availability deadline expires, and durable_pending parks
visibly until a worker arrives.
What did NOT change: the drain gate still runs first and still wins, and a server with no configured deadline still waits — loudly, and with a state an operator can read.
That wait is unbounded only while the server is accepting work. The drain
gate here is consulted once per iteration, so it can only refuse a dispatch
that is between waits; releasing one that is already inside a wait is the
caller’s park contract below, and the caller owes it (#72).
Structs§
- Observed
Miss - What one classified selection miss turned out to be.
- Service
Wait - Everything the wait needs that outlives one iteration.
Enums§
- Selection
Refusal - Why selection ended without a worker.
Functions§
- clear_
selection_ miss - Clear one dispatch’s unserved entry once it is served or refused.
- observe_
selection_ miss - Classify one selection miss, publish it to the queryable unserved state, and state it in the log.
- select_
worker_ or_ refuse - Select a worker for the address, or refuse with a typed reason.