A fenced, expiring lease per key. Implementations must make each call atomic:
acquire
owner
null
renew
token
release
A fenced, expiring lease per key. Implementations must make each call atomic:
acquiregrants the key when it is free or expired (a new, larger token), or extends it whenowneralready holds it (same token); else returnsnull.renewextends the lease only whenownerstill holds it withtoken.releasefrees the key only whenownerholds it withtoken(else no-op). Tokens never go backwards for a key, even across release and expiry.