Сейчас идёт тестирование: код на GitHub будет открыт после завершения.

Fencing-токен

  • token в ответе о захвате A — это монотонно возрастающий u64. Независимо от ключа и от того, какой это по счёту захват, значение всегда больше любого ранее выданного токена.
  • В одиночном режиме монотонность гарантирует глобальный счётчик сервера, а в режиме кластера — номер выдачи, реплицируемый через консенсус: токен назначается детерминированно в момент применения зафиксированной команды, поэтому все узлы вычисляют одно и то же значение, и он продолжает расти даже при смене лидера.
  • Если защищаемый ресурс соблюдает правило «отклонять любой токен ниже последнего увиденного», он может заблокировать доступ старого владельца, проснувшегося с опозданием после истечения lease (с меньшим токеном) — это последняя линия защиты от задержек на стороне клиента (например, пауз GC), которые сервер блокировок не может контролировать.

Сценарий, объясняющий необходимость этой проверки, смотрите в Как это работает.