Матрица запрос × состояние ключа
A (захват)
| Состояние ключа | Действие сервера | Ответ | Момент |
|---|---|---|---|
| не зарегистрирован | регистрация (expire=now+lease), выдача токена | A+token+owner+key | немедленно |
| зарегистрирован + срок истёк | обновление (now+lease), новый токен | A+token+owner+key | немедленно |
Зарегистрирован + действующий holder + wait=0 | Не ставить в очередь | T+owner+key | Сразу |
Зарегистрирован + действующий holder + wait>0 | Поставить в очередь, ждать ответ | A или T+owner+key | Захват по release/expiry либо T по окончании wait |
| Queue или capacity сервера на пределе | Не ставить в очередь | B+owner+key | Сразу |
- Путь освобождения справедлив по FIFO: когда владелец делает
R, блокировка передаётся напрямую первому в очереди (без повторной конкуренции, с новым токеном). - Только путь истечения не является FIFO.
- Совпадение
ownerс текущим holder не даёт особого режима. Это не полномочие вернуть active token или продлить lease; действуют обычные правила занятого key. - Ответы могут приходить не по порядку запросов; клиент сопоставляет по echoed
owner.R(освобождение)
| Состояние ключа | Действие сервера | Ответ |
|---|---|---|
| зарегистрирован + токен совпал, есть ожидающий | прямая передача первому в очереди (новый токен) | R+token+key |
| зарегистрирован + токен совпал, ожидающих нет | удаление ключа | R+token+key |
| зарегистрирован + токен не совпал | нет действия (блокировка сохраняется) | N+token+key |
| не зарегистрирован | нет действия | N+token+key |
Момент обработки истечения
- Одиночный режим обрабатывает истечение лениво (lazy) — ключ с истёкшим сроком подхватывается на месте следующим захватом (вторая строка таблицы выше), а отдельная очистка с периодом 5 секунд убирает истёкшие ключи без ожидающих. Поэтому освобождение ключа, который истёк, но ещё не был убран, может получить в ответ
R, а неN. - В cluster mode лидер ждёт следующего срока в token-validating deadline min-heap и commit команду
Expireчерез консенсус до удаления key. Так разница clock не разделяет состояние lock.