قيد الاختبار حاليًا: سيتم فتح كود GitHub عند الاكتمال.

R · تحرير

البنيةrefresh

طلب تحرير قفل. token هو رمز Fencing الذي استلمه ذلك الحصول، ولا يجري التحرير إلا إذا طابق الرمز الذي يحوزه المفتاح حاليًا. الاستجابة هي تم التحرير R أو غير موجود N.

token — الآلية التي تمنع تحرير قفل غيرك

بدون التحقق من الرمز ينشأ تسلسل خطر: بينما يُعاد إرسال طلب تحرير عبر تبديل الفشل (failover)، قد يسترد الخادم القفل الأصلي بانتهاء lease ويمنحه لعميل آخر — فيأتي التحرير المتأخر ليفك قفل الحائز الجديد. وبما أن التحرير لا يقع إلا عند تطابق الرمز، يُسد هذا المسار.

إذا اختلف الرمز تصل N (غير موجود) ويبقى القفل كما هو. يجب أن تُرسَل إعادة محاولة التحرير دائمًا بنفس الرمز، وتتم مطابقة الاستجابة كذلك بـ token المُعاد صداه (قواعد مطابقة الاستجابات).

ترميز البايتات: op حرف ASCII، وtoken ثنائي (u64، big-endian)، وkey نص UTF-8 (متغير الطول، يُعرض كـ N في البنية). \n الأخير هو 0A. الرأس الثابت قيمة ثنائية قد تحتوي على 0x0A، لذا يجب استهلاكه أولًا حسب عدد البايتات قبل البحث عن سطر جديد.

التدفق

الحائز X
الخادم
المنتظر Y
R · تحرير (key · token)
R · تم التحرير
إن وجد منتظر ← A · تسليم مباشر (token جديد)
إذا لم يكن المفتاح موجودًا أو اختلف الرمز
N · غير موجود
طلباستجابة

إذا كان للمفتاح المحرَّر منتظر، يُسلَّم مباشرة إلى مقدمة الطابور دون إعادة تنافس — وبمعزل عن R (تم التحرير) المرسلة إلى المُحرِّر، يحصل المنتظر على A (تم الحصول عليه) تحمل رمزًا جديدًا.