A (Acquire)
| Key state | Server action | Response | Timing |
|---|---|---|---|
| Not registered | Register (expiry = now+lease), issue token | A+token+key | Immediately |
| Registered + expiry passed | Renew (now+lease), new token | A+token+key | Immediately |
| Registered + valid (held) | Register on wait queue, hold response | A+token+key or T+key | The moment it's acquired via release/expiry, or T if wait is exceeded |
R, it's handed directly to the waiter at the front of the queue (no re-contention, a new token).A again on a key it already holds → goes to the wait queue).R (Release)
| Key state | Server action | Response |
|---|---|---|
| Registered, has waiters | Hand off directly to the waiter at the front (new token) | R+key |
| Registered, no waiters | Delete the key | R+key |
| Not registered | Nothing | N+key |