Saat ini dalam pengujian: kode GitHub akan dibuka setelah selesai.

R · Release

Strukturrefresh

Request untuk release lock. token adalah fencing token yang diterima saat acquire, dan lock hanya dirilis jika token itu cocok dengan token yang sedang dipegang. Responsnya adalah Released R atau Not Found N.

token — pengaman agar tidak merilis lock milik orang lain

Tanpa verifikasi token ada urutan yang berbahaya. Saat sebuah request release dicoba ulang melewati failover, lock aslinya bisa direbut kembali karena lease habis lalu diberikan ulang ke klien lain — release yang tiba terlambat kemudian akan melepas lock milik pemegang baru itu. Karena release hanya terjadi saat token cocok, jalur ini tertutup.

Jika token berbeda, N (not found) yang datang dan lock tetap dipegang. Percobaan ulang release harus selalu membawa token yang sama, dan pencocokan responsnya pun memakai token yang dipantulkan (Aturan pencocokan respons).

Notasi byte: op berupa karakter ASCII, token bersifat biner (u64, big-endian), dan key berupa teks UTF-8 (panjang variabel, ditampilkan sebagai N di struktur). \n di akhir adalah 0A. Header tetap adalah nilai biner yang bisa mengandung 0x0A, jadi konsumsi berdasarkan jumlah byte lebih dulu sebelum mencari newline.

Alur

Pemegang X
Server
Penunggu Y
R · release (key · token)
R · released
jika ada penunggu → A · handoff langsung (token baru)
jika key tidak ada atau token berbeda
N · not found
permintaanrespons

Jika ada penunggu untuk key yang dirilis, key tersebut diserahkan langsung ke depan antrean tanpa perebutan ulang — terpisah dari R (released) yang dikirim ke perilis, penunggu mendapat A (acquired) yang membawa token baru.