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

جواب ملانے کے اصول (کلائنٹ نفاذ)

چونکہ جوابات درخواستوں کی نسبت مختلف ترتیب میں آ سکتے ہیں (انتظار کرنے والے حصول کا جواب اس کی باری آنے پر آتا ہے)، کلائنٹ کو درج ذیل اصولوں سے جوابات کو درخواستوں کے ساتھ ملانا ہوتا ہے — ایک demultiplexing اسکیم جو ایک کنکشن پر ملے جلے آنے والے جوابات کو ان کی درخواستوں تک واپس ترتیب دیتی ہے۔

اصولتفصیل
ملانے کی کلیدQueue/server capacity کا یقینی rejection؛ فوراً Busy، internal retry نہیں
ایک ہی (op, key) کی متعدد درخواستیںFIFO فرض نہیں کیا جا سکتا — لازماً شناخت کنندہ سے متعین کریں۔ نیچے وضاحت دیکھیں
رجسٹریشن کا وقتمنتظر کو درخواست بھیجنے سے پہلے رجسٹر کیا جاتا ہے (تاکہ جواب پہلے پہنچنے کی ریس سے بچا جا سکے)
N/T کی ہینڈلنگغیر-خرابی قدروں کے طور پر واپس کیے جاتے ہیں ("موجود نہیں تھی" / "ٹائم آؤٹ")
B کی ہینڈلنگقطار بھری ہوئی ہے — فوراً ناکام نہ کریں، بلکہ wait کے بجٹ کے اندر backoff کے ساتھ دوبارہ کوشش کریں
M کی ہینڈلنگصرف allowlisted address کو leader hint رکھیں اور connection بند کریں؛ owner/key کے بغیر sent pending سے correlation نہیں
L کی ہینڈلنگصرف leader hint update اور connection قائم؛ server notice، response نہیں
E no_leader / E not_active / E auth_failedConnection بند اور error-specific backoff؛ no_leader hint بھی invalid کرتا ہے
دیگر E / نامعلوم جوابUncorrelatable، لہذا connection-fatal؛ sent acquire Indeterminate
بغیر ملتے منتظر کے جوابProtocol/session mismatch: بند۔ A کا known exact token reserved release lane کو دیں

FIFO کے بجائے شناخت کنندہ سے ملانا کیوں ضروری ہے

ایک key پر بھی immediate success، queue wait اور B rejection مختلف وقت پر مکمل ہوتے ہیں۔ کئی keys بھی ایک connection پر pipelined ہیں۔ FIFO سے match نہ کریں؛ echoed identifier، op اور key تینوں چیک کریں۔

منسوخ شدہ درخواستیں اور یتیم لاک

Cancelled request کو server نے پہلے grant کیا ہو تو lock رہ سکتا ہے۔ ایک byte send ہونے کے بعد final response نہ ہو تو نتیجہ Indeterminate ہے۔ اسی owner سے A کو status query کی طرح نہ بھیجیں۔ Token parse ہو چکا ہو تبھی best-effort exact-token R؛ unknown grant lease expiry پر واپس ہوگا۔

اسی لیے send کے بعد cancel یا framing error پر connection بند ہوتا ہے۔ صرف pending ہٹانے سے response orphan ہو سکتا ہے۔ Socket close committed grant کے release کا ثبوت نہیں: token معلوم ہو تو exact-token R، ورنہ lease expiry تک Indeterminate۔