mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-10-12 03:51:01 +00:00
A worker leads a process group of its own, so it outlives a server crash. The restarted server released the run's lease from outside and launched a resume while that worker could still be running: a worker whose lease is released keeps acting until its next write, beside its successor. A delete likewise dropped the lease without knowing the worker was gone. Now each worker holds a lock on `worker.lock` in its run's scratch directory for its whole life, taken before anything else. It is a POSIX record lock: the kernel frees it only when the worker exits, and names the process that holds it. Before the server ends a lease from outside (the relaunch after a restart or a store interruption, and a delete), it kills whatever process still holds the lock, with its process group, and waits until the lock is free. A worker that finds the lock held does not start. - fabro-proc: ProcessLock::try_hold and stop_lock_holder, tested with this test binary as the holding process. - fabro-config: RunScratch::worker_lock_path. - New scenario: a worker that outlives the server is gone before the resume's worker launches, and the run succeeds once. It fails without the server-side stop. A host stage process runs in a process group of its own and still outlives its killed worker, as it did at a worker crash. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| src | ||
| tests | ||
| build.rs | ||
| Cargo.toml | ||