Ticketing
Dokumentation

Frame-Struktur

Die längen-präfixierte binäre Rahmung, die Raft-RPCs trägt. Anders als bei den \n-terminierten Frames des Client-Protokolls wird zuerst die Länge gesendet und dann genau diese Anzahl an Bytes gelesen. Anfrage-Antwort-Paare auf einer Verbindung laufen sequenziell hin und her, und die anwählende Seite ist immer der Anfragende.

Anfrage (Anwähler → Empfänger)

Strukturrefresh

Antwort (Empfänger → Anwähler)

Strukturrefresh
FeldGrößeInhalt
tagu8RPC-Typ — siehe RPC-Typen (nur bei Anfragen)
lenu32, big-endianByte-Länge der nachfolgenden Payload
payloadlen ByteEin openraft-Typ, serialisiert im postcard-Format

Regeln zur Verbindungsverwaltung

  • len ist auf 64 MiB begrenzt (beim Empfang geprüft). Ein Frame über dem Limit, ein fehlerhafter Frame, ein unbekanntes tag oder ein Raft-Verarbeitungsfehler werden alle durch Schließen der Verbindung behandelt — die anwählende Seite (openraft) verbindet sich neu und versucht es erneut.
  • Die anwählende Seite verwendet eine Verbindung pro Zielknoten wieder. Bei einem E/A-Fehler oder wenn ein Umlauf mittendrin abgebrochen wird, wird diese Verbindung verworfen und beim nächsten Aufruf eine neue angewählt — ein halb gelesener Stream wird niemals in einem unausgerichteten Zustand wiederverwendet.

Begriffe

  • Längen-Präfix (length-prefix) — eine Rahmung, die zuerst die Länge des Bodys sendet und dann genau diese Anzahl an Bytes liest. Es wird kein Trennzeichen wie \n benötigt, sodass beliebige Binärdaten unverändert transportiert werden können.
  • Serialisierung — das Umwandeln einer In-Memory-Struktur in eine für den Transport geeignete Byte-Sequenz.
  • RPC (Remote Procedure Call) — ein Anfrage-Antwort-Paar, das eine Funktion auf einem anderen Server über das Netzwerk aufruft, als würde man sie lokal aufrufen.