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

M · Movido

Estructurarefresh

Indica al cliente que este nodo no es el líder, así que debe ir al líder en su lugar (solo en clúster). El cuerpo es la dirección de cliente del líder (host:port) como texto — la dirección a la que el propio cliente se conecta, no el puerto Raft.

Los clientes oficiales solo recuerdan la dirección como pista del líder si coincide exactamente con una dirección ya registrada en su allowlist, y después cierran esa session. Un acquire del que pudo enviarse un solo byte no se asocia arbitrariamente con M ni se reenvía; termina como Indeterminate. Las solicitudes independientes posteriores y las aún no enviadas que el writer todavía no posee usan la nueva conexión al líder. Si aún no se ha elegido un líder y no hay ninguna dirección que indicar, se envía en su lugar un E no_leader.

Consulta Protocolo (clúster) para el comportamiento completo del clúster.

Notación de bytes: op es un carácter ASCII, y addr es texto UTF-8 (longitud variable, mostrado como N en la estructura). El \n final es 0A.

Flujo

Cliente
Seguidor
Líder
A · adquirir (key)
M · movido (dirección del líder)
cierra la session anterior · acquire enviado = Indeterminate
el siguiente acquire independiente empieza en el líder
solicitudrespuesta

M no contiene owner ni key y una session puede mezclar varios acquires. Durante una transición líder→seguidor pueden coexistir solicitudes en commit con otras rechazadas por el seguidor; por eso un M no demuestra que un pending concreto no adquirió el lock. Esta regla conservadora evita acquires duplicados y la extensión del lease con el mismo owner.