mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-06 17:04:27 +01:00
fix(lease): second /ship review pass
- orphaned() reads the clock before the lock's mtime and requires the mtime unchanged at the end, so a lock made meanwhile is never removed; an mtime a minute or more ahead (clock skew) counts as old. - Claims older than 2 minutes are abandoned and pruned by touch. - A waiter skips the claim and mkdir while the lock is visibly held; the wait is bounded at 300 tries or 30 s; a non-numeric tries value falls back to 300; ten quick retries (not three) before a lock nobody holds is reported as untakeable; pid 1 is a valid holder again. - Tests: deterministic young-lock clock, skew and non-numeric owner shapes, abandoned claims, the deadline, explicit 30 s timeouts. Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
This commit is contained in:
1 parent
a94c167598
commit
3f6ebca2a5
4 files changed
+98
-27
No files matched your search
@@ -126,9 +126,10 @@ deleted and a live lease never disappears from a concurrent scan. The lock is a
|
||||
directory because `mkdir` is atomic on every host, while Git Bash on Windows
|
||||
cannot `ln -s` to a target that does not exist (#3330). A taker publishes a
|
||||
claim before its `mkdir` and renames it in as the owner after, so an ownerless
|
||||
lock (or one whose owner is empty or names no valid pid) is broken only once
|
||||
every claimant is dead and the lock is at least 2 s old, which keeps a taker
|
||||
between its two steps safe. The lock is broken only when its holder is dead or
|
||||
lock is broken only once no claimant younger than 2 minutes lives and the
|
||||
lock is at least 2 s old and unchanged while checked, which keeps a taker
|
||||
between its two steps safe; an owner that names no valid pid counts as a dead
|
||||
holder. A live holder that never lets go bounds the wait at 300 tries or 30 s. The lock is broken only when its holder is dead or
|
||||
its pid was reused, never by age, and breakers serialize on a second lock and
|
||||
reread the lock before removing it. A symlink `.lock` left by an older gstack
|
||||
is honored the same way. Two known limits remain. An older gstack's `ln -s`
|
||||
|
||||
Reference in new issue
Block a user