Structure de trame
Le trâmage binaire à préfixe de longueur qui transporte les RPC Raft. Contrairement aux trames terminées par \n du protocole client, la longueur est envoyée en premier, puis ce nombre d'octets est lu. Les paires requête-réponse sur une connexion s'enchaînent séquentiellement, et le côté qui appelle (dial) est toujours le demandeur.
Requête (appelant → récepteur)
Structurerefresh
Réponse (récepteur → appelant)
Structurerefresh
| Champ | Taille | Contenu |
|---|---|---|
tag | u8 | Type de RPC — voir Types de RPC (requête uniquement) |
len | u32, big-endian | Longueur en octets du payload qui suit |
payload | len octets | Un type openraft sérialisé au format postcard |
Règles de gestion de connexion
lenest plafonné à 64 Mio (vérifié à la réception). Toute trame dépassant la limite, une trame malformée, untaginconnu, ou une erreur de traitement Raft sont tous traités par la fermeture de la connexion — le côté appelant (openraft) se reconnecte et réessaie.- Le côté appelant réutilise une connexion par nœud cible. En cas d'erreur d'E/S, ou si un aller-retour est annulé en cours de route, cette connexion est abandonnée et une nouvelle est établie au prochain appel — un flux à moitié lu n'est jamais réutilisé dans un état désaligné.
Terminologie
- Préfixe de longueur (length-prefix) — un trâmage qui envoie d'abord la longueur du corps, puis lit exactement ce nombre d'octets. Aucun délimiteur comme
\nn'est nécessaire, ce qui permet de transporter des données binaires arbitraires telles quelles. - Sérialisation — transformer une structure en mémoire en une séquence d'octets adaptée au transport.
- RPC (appel de procédure distante) — une paire requête-réponse qui appelle une fonction sur un autre serveur via le réseau, comme si on l'appelait localement.