فی الحال ٹیسٹنگ جاری ہے: مکمل ہونے پر GitHub کوڈ کھول دیا جائے گا۔

A · حصول

ساختrefresh

یہ lock acquire request ہے۔ lease حفاظتی مدت ہے جس سے client کے بغیر release ختم ہونے پر server expiry کے بعد key واپس لیتا ہے۔ wait سیکنڈ میں انتظار کی حد ہے؛ 0 queue میں داخل ہوئے بغیر ایک فوری کوشش کرتا ہے۔ لامحدود انتظار نہیں۔ کامیابی پر Acquired A، wait ختم ہونے پر Timeout T، اور queue/server capacity بھرنے پر Busy B آتا ہے۔

owner — Response correlation identifier

owner ایک acquire کوشش کی response ID ہے۔ Client ہر call پر نئی قدر بناتا ہے اور server A، T، B میں وہی قدر echo کرتا ہے تاکہ pipeline responses ملائے جا سکیں۔

owner lock authority یا fencing token نہیں۔ اسی key اور owner کو دوبارہ بھیجنے سے active token واپس یا lease renew نہیں ہوتا۔ اگر request کا ایک byte بھی بھیجا گیا ہو سکتا ہے اور response confirm نہ ہو تو client اسی owner سے acquire auto-resend نہیں کرتا؛ نتیجہ Indeterminate ہے۔ Critical section میں داخل نہیں ہونا اور غیر مشاہدہ grant زیادہ سے زیادہ lease expiry پر واپس لیا جاتا ہے۔

سرکاری clients caller کے normalized wait سے پورے operation کی ایک monotonic deadline صرف ایک بار بناتے ہیں اور یقینی unsent retry میں وہی deadline اور owner برقرار رکھتے ہیں۔ Send سے عین پہلے writer باقی وقت کو اوپر round کر کے wire wait دوبارہ شمار کرتا ہے، اس لیے دیر سے ملنے والا connection server پر نیا 255 سیکنڈ wait شروع نہیں کرتا۔ پوری deadline سے گزر چکی queued request نہیں بھیجی جاتی؛ اگر وہ پہلے بھیجی گئی ہو سکتی ہے تو اس کی exact session بند کر کے Indeterminate لوٹایا جاتا ہے۔ اگر deadline سے عین پہلے correlated A Ticket delivery مرحلے میں دیر سے ملے تو session بند کرنا ضروری نہیں، مگر exact token کا compensating release schedule کر کے Indeterminate لوٹایا جاتا ہے۔ Correlated T اور B بالترتیب یقینی timeout اور یقینی busy رہتے ہیں۔

اصل wait=0 wire پر فوری کوشش ہی رہتا ہے۔ اس کی الگ 5 سیکنڈ transport deadline میں client صرف request کے یقینی unsent رہنے تک دوسری connection منتخب کر کے اسی owner سے retry کر سکتا ہے؛ اصل server-side کوشش اب بھی ٹھیک ایک ہے۔ Possible send کے بعد کبھی retransmit نہیں کرتا۔

بائٹ نوٹیشن: op ایک ASCII حرف ہے، wait/lease بائنری (u8، big-endian) ہیں، owner بائنری (u64، big-endian) ہے، اور key UTF-8 متن ہے (متغیر لمبائی، ڈھانچے میں N کے طور پر)۔ آخری \n 0A ہے۔ فکسڈ ہیڈر بائنری قدر ہے جس میں 0x0A آ سکتا ہے، اس لیے نئی لائن تلاش کرنے سے پہلے بائٹ کی تعداد کے مطابق پہلے کھپانا ہوگا۔

بہاؤ

کلائنٹ
سرور
A · حصول (key · wait · lease · owner)
کلید خالی → فوراً جاری
A · حاصل شدہ (token)
مصروف → FIFO قطار میں باری کا انتظار
باری آنے پر A · حاصل شدہ (token)
wait سے تجاوز → T · ٹائم آؤٹ
wait=0 + lock held → T · فوری حاصل نہیں ہوا
قطار بھر گئی → B · مصروف
درخواستجواب

کلید کی حالت کے مطابق مکمل رویے کے اصولوں کے لیے درخواست × کلید-حالت میٹرکس دیکھیں۔