v1.0.0-beta.2
Pre-release
Pre-release
·
96 commits
to trunk
since this release
Added
- Lane takeover is covered by a test that holds a real dispatch inside the window between the two storage writes a takeover performs, so the one interleaving no previous test could reach is now exercised on every run.
- New
ErrorCode::AdmissionConflict(admission_conflict) tells a caller that admission lost a race and admitted nothing, as distinct fromoverlap_held, which means a still-running run owns the lane.
Changed
- Dispatch now admits again on the caller's behalf when it loses an admission race, up to three attempts in total, so
admission_conflictreaches a consumer only when a lane stayed contended throughout. A lost attempt leaves the lane as it found it and never reaches handler code, and an attempt that follows also takes custody of replaying a supersession the losing attempt could not restore. UnderReplacethis means a dispatch that lost a race can take the lane back from the one that just won it, which is what that policy asks for; underRejecta further attempt finds the live incumbent and reportsoverlap_held. Re-admission is logged at debug level. Scheduled occurrence delivery still admits once, because the scheduler redelivers a due occurrence on its own.
Fixed
- Admission and takeover paths that could not admit a run reported
overlap_held, which reads as "another run is doing this work" even when the lane was free; the eight such paths now returnadmission_conflict, so a caller that skips onoverlap_heldno longer drops work nobody is doing.