Ticketing
Documentación

Estructura de trama

El framing binario con prefijo de longitud que transporta los RPC de Raft. A diferencia de las tramas del protocolo de cliente terminadas en \n, aquí se envía primero la longitud y luego se leen exactamente esos bytes. Los pares solicitud-respuesta en una conexión se suceden de forma secuencial, y el lado que llama (dial) es siempre el solicitante.

Solicitud (quien llama → quien recibe)

Estructurarefresh

Respuesta (quien recibe → quien llama)

Estructurarefresh
CampoTamañoContenido
tagu8Tipo de RPC — consulta Tipos de RPC (solo en la solicitud)
lenu32, big-endianLongitud en bytes del payload que sigue
payloadlen bytesUn tipo de openraft serializado en formato postcard

Reglas de gestión de la conexión

  • len tiene un límite de 64 MiB (comprobado al recibir). Cualquier trama que lo supere, una trama malformada, un tag desconocido o un error de procesamiento de Raft se gestionan todos cerrando la conexión — el lado que llama (openraft) se reconecta y reintenta.
  • El lado que llama reutiliza una conexión por nodo de destino. Ante un error de E/S, o si un ciclo de solicitud-respuesta se cancela a medias, esa conexión se descarta y se establece una nueva en la siguiente llamada — un flujo leído a medias nunca se reutiliza en un estado desalineado.

Terminología

  • Prefijo de longitud (length-prefix) — framing que envía primero la longitud del cuerpo, y luego lee exactamente esa cantidad de bytes. No hace falta ningún delimitador como \n, así que puede transportarse cualquier dato binario tal cual.
  • Serialización — convertir una estructura en memoria en una secuencia de bytes apta para el transporte.
  • RPC (llamada a procedimiento remoto) — un par solicitud-respuesta que llama a una función de otro servidor a través de la red, como si se llamara localmente.