Ticketing
دستاویزات

نقل شدہ کمانڈز

ہر لاک-حالت کی تبدیلی نیچے دیے گئے کمانڈز میں سے ایک کے طور پر نقل کی جاتی ہے، AppendEntries میں ایک لاگ اندراج کے طور پر لے جائی جاتی ہے، اور اکثریت کی کمٹ کے بعد ہر نوڈ اسے ایک ہی ترتیب میں لاگو کرتا ہے۔

کمانڈز (قائد کی جانب سے تجویز کردہ)

کمانڈفیلڈزمعنی
Grantkey, lease_msکلید کا حصول۔ ٹوکن کمانڈ میں نہیں ہوتا — ہر نوڈ کا اسٹیٹ مشین اسے لاگو ہونے کے لمحے متعین طور پر تفویض کرتا ہے، اس لیے ہر نوڈ ایک ہی ٹوکن شمار کرتا ہے
Releasekeyکلید کا اجراء
Expirekey, tokenقائد کی جانب سے چلائی گئی lease کی میعاد ختم ہونا۔ صرف اس صورت میں ہٹایا جاتا ہے جب token میل کھائے — دیر سے آنے والا یا دہرایا گیا میعاد ختم ہونا اس دوران تازہ جاری کیے گئے لاک کو حذف نہیں کر سکتا (idempotent)

لاگو ہونے کے نتائج (اسٹیٹ مشین → قائد)

نتیجہمعنی
Granted { token }حصول کامیاب — جاری کیا گیا فینسنگ ٹوکن
GrantRejectedایک Grant پہلے سے مصروف کلید کے لیے آیا (دفاعی — معمول کے بہاؤ میں کبھی نہیں ہوتا)
Releasedجاری کر دیا گیا
NotFoundجاری کرنے کے لیے کلید موجود نہیں تھی
Expired { existed }میعاد ختم ہونا پروسیس ہو گیا — existed بتاتا ہے کہ آیا واقعی ہٹایا گیا
Noopکچھ نہیں ہوا

ہر نوڈ lease کے بقیہ وقت کو اپنی مقامی گھڑی سے ٹریک کرتا ہے، لیکن اصل ہٹانا ہمیشہ صرف ایک کمٹ شدہ Expire کمانڈ کے ذریعے ہوتا ہے — یہی وجہ ہے کہ نوڈز کے درمیان گھڑی کا فرق کبھی لاک کی حالت کو تقسیم نہیں کر سکتا۔ اگر کوئی کلائنٹ اپنا جواب ملنے سے پہلے منقطع ہو جائے، تو قائد جاری کرنے کے فوراً بعد خود ایک Release تجویز کرتا ہے تاکہ بھوت لاک کو فوراً صاف کیا جا سکے۔

بہاؤ — Expire کی نقل

قائد
فالوور 1
فالوور 2
اپنی مقامی گھڑی سے lease کی میعاد ختم ہونا محسوس کرتا ہے
AppendEntries · Expire (key, token)
AppendEntries · Expire (key, token)
OK
اکثریت کی کمٹ → ہر نوڈ ایک ہی ترتیب میں لاگو کرتا ہے
token میل نہ کھائے → نظر انداز — تازہ جاری شدہ لاک کی حفاظت
اتفاق رائے RPC (Raft)

میعاد ختم ہونا بھی محض ایک اور کمانڈ ہے جو قائد کی تجویز → اکثریت کی کمٹ سے گزرتا ہے۔ token جانچ کی بدولت، اگر کمٹ میں تاخیر کے دوران وہی کلید دوبارہ جاری کر دی گئی ہو، تو دیر سے لاگو ہونے والا Expire نئے لاک کو حذف نہیں کر سکتا۔

اصطلاحات

  • state machine — وہ حصہ جو کمٹ شدہ کمانڈز کو ترتیب سے لاگو کر کے موجودہ حالت (یہاں، لاک ٹیبل) بناتا ہے۔ چونکہ ہر نوڈ ایک ہی کمانڈز کو ایک ہی ترتیب میں لاگو کرتا ہے، وہ ہمیشہ ایک ہی حالت پر پہنچتے ہیں۔
  • commit — وہ "حتمی" حیثیت جو ایک حالت اکثریت نوڈز کے اسے ریکارڈ کرنے کے بعد حاصل کرتی ہے۔ صرف کمٹ شدہ کمانڈز ہی اسٹیٹ مشین پر لاگو ہوتی ہیں۔
  • idempotent — وہ خاصیت جس میں ایک ہی کمانڈ کا غلطی سے دو بار لاگو ہونا نتیجہ نہیں بدلتا۔