pub struct Permits { /* private fields */ }Expand description
The pool, as a directory.
Implementations§
Source§impl Permits
impl Permits
pub fn new(dir: impl Into<PathBuf>, capacity: usize) -> Self
pub fn dir(&self) -> &Path
Sourcepub fn live(&self) -> Vec<Permit>
pub fn live(&self) -> Vec<Permit>
Live holders, sweeping any whose process is gone.
The sweep is what makes a crash cost one stale file rather than a
permanently smaller pool — runmarker’s rule, and the reason this is
a read that also writes.
Sourcepub fn take(&self, what: &str) -> Result<Result<Held, Vec<Permit>>>
pub fn take(&self, what: &str) -> Result<Result<Held, Vec<Permit>>>
Take a seat, or say who has them.
Never blocks. A caller that waits is a caller holding a slot in some other queue — a web request, a Slack ack with three seconds to answer in — so this reports the refusal and lets the caller decide, which for a delegation means telling the owner it is queued rather than freezing the tap they just used.
The race is real and deliberately unguarded: two callers can both see
a free seat and both take it. The cost is one extra concurrent run
against a soft latency target, and the alternative is a lock held
across process boundaries for the length of an agent run — which is
the thing runmarker refuses to do with the trigger flock, for the
same reason. Over-admitting by one occasionally is cheaper than a
stuck pool.