Derzeit im Test: Der GitHub-Code wird nach Abschluss veröffentlicht.

Anfrage-×-Schlüsselzustand-Matrix

A (Acquire)

SchlüsselzustandServeraktionAntwortZeitpunkt
Nicht registriertRegistrieren (Ablauf = jetzt+lease), Token ausstellenA+token+owner+keySofort
Registriert + abgelaufenErneuern (jetzt+lease), neues TokenA+token+owner+keySofort
Registriert + gültiger Holder + wait=0Nicht einreihenT+owner+keySofort
Registriert + gültiger Holder + wait>0Einreihen, Antwort offenA oder T+owner+keyErwerb durch release/expiry oder T bei wait-Ablauf
Queue- oder Server-Kapazität am LimitNicht einreihenB+owner+keySofort
  • Der Release-Pfad ist FIFO-fair: Macht der Inhaber R, wird direkt an den Wartenden an der Spitze der Warteschlange übergeben (kein erneuter Wettbewerb, ein neues Token).
  • Nur der Ablaufpfad ist nicht FIFO.
  • Ein owner, der dem aktuellen Holder entspricht, wird nicht besonders behandelt. Er berechtigt weder zur Rückgabe eines active token noch zur Lease-Erneuerung; die normalen Regeln für gehaltene Keys gelten.
  • Antworten können außerhalb der Request-Reihenfolge eintreffen; Clients matchen nach dem echoed owner. R (Release)
SchlüsselzustandServeraktionAntwort
Registriert + Token stimmt überein, hat WartendeDirekt an den Wartenden an der Spitze übergeben (neues Token)R+token+key
Registriert + Token stimmt überein, keine WartendenSchlüssel löschenR+token+key
Registriert + Token weicht abNichts (Sperre bleibt bestehen)N+token+key
Nicht registriertNichtsN+token+key

Wann der Ablauf verarbeitet wird

  • Der Single-Modus verarbeitet den Ablauf träge (lazy) — ein abgelaufener Schlüssel wird vom nächsten Acquire an Ort und Stelle übernommen (zweite Zeile oben), und ein separater 5-Sekunden-Sweep räumt abgelaufene Schlüssel ohne Wartende auf. Daher kann ein Release auf einem Schlüssel, der abgelaufen, aber noch nicht aufgeräumt ist, R statt N erhalten.
  • Im Cluster-Modus wartet der Leader auf den nächsten Eintrag eines tokenprüfenden Deadline-Min-Heaps und committet dann den Expire-Befehl per Konsens, bevor der Key verschwindet. Clock-Unterschiede teilen so den Lock-Zustand nicht.