Actualmente en pruebas: el código de GitHub se abrirá al finalizar.

R · Liberar

Estructurarefresh

Una solicitud de liberación de bloqueo. token es el token de fencing recibido en esa adquisición, y la liberación solo ocurre si coincide con el token actualmente retenido. La respuesta es Liberado R o No encontrado N.

token — el mecanismo para no soltar el bloqueo ajeno

Sin la verificación del token aparece una secuencia peligrosa. Mientras una solicitud de liberación se reintenta a través de un failover, el bloqueo original puede ser recuperado por la expiración del lease y concedido de nuevo a otro cliente — y entonces la liberación que llega tarde soltaría el bloqueo de ese nuevo poseedor. Liberar solo cuando el token coincide corta ese camino.

Si el token es distinto, llega N (no encontrado) y el bloqueo permanece intacto. Los reintentos de liberación deben enviarse siempre con el mismo token, y el emparejamiento de respuestas también usa el token reflejado de vuelta (Reglas de emparejamiento de respuestas).

Notación de bytes: op es un carácter ASCII, token es binario (u64, big-endian), y key es texto UTF-8 (longitud variable, mostrado como N en la estructura). El \n final es 0A. La cabecera fija es un valor binario y puede contener 0x0A, así que hay que consumirla primero según su número de bytes antes de buscar el salto de línea.

Flujo

Poseedor X
Servidor
Esperador Y
R · liberar (key · token)
R · liberado
si hay un esperador → A · entrega directa (nuevo token)
si la clave no existía o el token no coincide
N · no encontrado
solicitudrespuesta

Si hay un esperador para la clave liberada, se le entrega directamente al primero de la cola sin volver a competir por ella — por separado del R (liberado) enviado a quien libera, el esperador recibe un A (adquirido) con un nuevo token.