A · Acquire
Anfrage zum Erwerb eines Locks. lease ist das Sicherheitsnetz, mit dem der Server den Key nach Ablauf zurücknimmt, wenn der Client ohne release stirbt. wait begrenzt die Wartezeit in Sekunden; 0 versucht genau einmal sofort und ohne Queue. Unendliches Warten gibt es nicht. Erfolg liefert Erworben A, abgelaufene Wartezeit Timeout T, volle Queue/Server-Kapazität Busy B.
owner — Antwort-Korrelations-ID
owner ist die Antwort-ID eines einzelnen Acquire-Versuchs. Der Client erzeugt pro Aufruf einen neuen Wert; der Server echo't ihn in A, T und B, damit pipelinete Antworten zugeordnet werden können.
owner ist weder Lock-Berechtigung noch Fencing-Token. Derselbe Key und Owner liefern keinen active token zurück und erneuern keine Lease. Sobald auch nur ein Request-Byte gesendet worden sein könnte und keine Antwort bestätigt wurde, darf der Client den Acquire nicht automatisch mit demselben Owner senden; das Ergebnis ist Indeterminate. Die Critical Section darf nicht betreten werden, und ein unbeobachteter Grant wird spätestens beim Lease-Ablauf zurückgenommen.
Offizielle Clients erzeugen aus dem normalisierten wait des Callers einmalig eine monotonic deadline für die Gesamtoperation und behalten diese deadline sowie den Owner bei sicher ungesendeten Retries bei. Unmittelbar vor dem Senden rundet der Writer die Restzeit auf und berechnet das wire wait neu, sodass eine späte Verbindung keine neue 255-sekündige Server-Wartezeit startet. Eine nach der Gesamtdeadline noch queued Anfrage wird nicht gesendet; könnte sie bereits gesendet worden sein, wird ihre exakte Session geschlossen und mit Indeterminate beendet. Wird ein kurz vor der deadline bereits korreliertes A erst am Ticket-Auslieferungsgate entdeckt, muss die Session nicht geschlossen werden; stattdessen wird ein kompensierender Release des exact token geplant und Indeterminate zurückgegeben. Korrelierte T und B bleiben jeweils definitiver Timeout und definitives Busy.
Ein ursprüngliches wait=0 bleibt auf dem Wire ein Sofortversuch. Während seiner getrennten fünfsekündigen Transport-deadline darf der Client nur bei sicher ungesendeter Anfrage eine andere Verbindung auswählen und mit demselben Owner wiederholen; der tatsächliche server-side Versuch bleibt exakt einer. Nach einem möglichen Senden erfolgt niemals eine Wiederholung.
Byte-Notation:
opist ein ASCII-Zeichen,wait/leasesind binär (u8, big-endian),ownerist binär (u64, big-endian), undkeyist UTF-8-Text (variable Länge, in der Struktur alsNdargestellt). Das abschließende\nist0A. Der feste Header ist ein Binärwert und kann0x0Aenthalten — er muss daher zuerst anhand der Bytezahl verbraucht werden, bevor nach dem Zeilenumbruch gesucht wird.
Ablauf
Die vollständigen Regeln zum Verhalten je Schlüsselzustand findest du unter Anfrage-×-Schlüsselzustand-Matrix.