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

B · مشغول

البنيةrefresh

استجابة لـAcquire request (A) لم يُقبل لأن queue الخاصة بالـkey أو admission العام لـkey/waiter/pending/memory بلغ الحد. هذا الطلب لم يحصل على lock يقينًا ولم يكن frame تالفًا.

owner هو قيمة الطلب المعادة echo كـcorrelator، ويحدد acquire المرفوض بدقة (راجع قواعد المطابقة).

معالجة العميل

تعيد العملاء الرسمية B المرتبطة فورًا إلى caller كخطأ Busy/Capacity ولا تعيد الطلب المنطقي نفسه داخليًا. للمحاولة مجددًا يحدد caller deadline عامًا وbackoff ثم يبدأ صراحة acquire جديدًا بـowner جديد.

تثبت B المرصودة فعليًا عدم الحصول، لذا call منفصل جديد آمن. لا تستنتج B من إرسال بلا استجابة؛ تلك النتيجة Indeterminate.

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

التدفق

العميل
الخادم
A · حصول (key · owner)
بلوغ طابور هذا المفتاح حدَّ max_waiters
B · مشغول (صدى owner)
إعادة Busy — يقرر caller acquire منطقيًا جديدًا
A · acquire جديد (retry اختياري)
عند توفر مكان → A · acquired (token)
طلباستجابة

هذه الحدود memory guardrails. ترفض acquires الجديدة قبل OOM للـdaemon وتحتفظ بموارد لـexact-token release والاستجابات الموافق عليها وcleanup وRaft recovery. تُميّز أسباب مثل key_busy وper_key_limit وglobal_overload في metrics/logs لا في wire.