現在テスト中です: 完了後にGitHubのコードを公開する予定です。

T · タイムアウト

構造refresh

獲得リクエスト(A)がwait以内にロックを 獲得できなかったときに送られます — サーバーは発行せずに諦めます(これはエラーでは ありません)。

ownerはリクエストに載せた値をそのまま返した相関子です — クライアントはこの値で、どの リクエストに対する応答かを特定します (応答マッチングルール)。

バイト表記: opはASCII文字、ownerはバイナリ(u64、ビッグエンディアン)、keyはUTF-8 テキスト(可変長、構造上はNと表記)です。末尾の\n0Aです。固定ヘッダはバイナリ値のため 0x0Aを含みうるので、改行を探す前にバイト数で先に消費しなければなりません。

フロー

クライアント
サーバー
A · 獲得 (key · wait · lease · owner)
使用中 → キューに登録
wait秒以内に順番が来ない
T · タイムアウト
キューから削除 — 再試行するには新しいAを送る
リクエストレスポンス

Tが届いた時点で、そのリクエストはすでにキューから削除されているため、後になって ロックが発行されることはありません。トークンも発行されていないため、後片付けは 不要です — 再試行するだけです。