Ticketing
दस्तावेज़

प्रतिकृत कमांड

हर लॉक-स्थिति परिवर्तन नीचे दिए गए कमांड में से एक के रूप में प्रतिकृत होता है, जिसे AppendEntries में एक लॉग एंट्री के रूप में ले जाया जाता है, और बहुमत कमिट के बाद हर नोड द्वारा एक ही क्रम में लागू किया जाता है

कमांड (लीडर द्वारा प्रस्तावित)

कमांडफ़ील्डअर्थ
Grantkey, lease_msएक कुंजी अधिग्रहित करना। टोकन कमांड में नहीं होता — हर नोड का स्टेट मशीन इसे लागू करने के समय निर्धारक रूप से देता है, इसलिए हर नोड वही टोकन गणना करता है
Releasekeyएक कुंजी रिलीज़ करना
Expirekey, tokenलीडर-संचालित lease समाप्ति। केवल token मेल खाने पर ही हटाया जाता है — इस बीच नए दिए गए किसी लॉक को एक देर से आई या डुप्लिकेट समाप्ति हटा नहीं सकती (मेल-रहित/idempotent)

लागू परिणाम (स्टेट मशीन → लीडर)

परिणामअर्थ
Granted { token }अधिग्रहण सफल — जारी किया गया फेंसिंग टोकन
GrantRejectedपहले से धारित कुंजी के लिए एक Grant आया (रक्षात्मक — सामान्य प्रवाह में कभी नहीं होता)
Releasedरिलीज़ हुआ
NotFoundरिलीज़ करने वाली कुंजी मौजूद नहीं थी
Expired { existed }समाप्ति प्रोसेस हुई — existed बताता है कि क्या वास्तव में हटाया गया
Noopकुछ नहीं हुआ

हर नोड अपनी स्थानीय घड़ी से किसी lease के शेष समय को ट्रैक करता है, लेकिन वास्तविक हटाना हमेशा केवल एक कमिट किए गए Expire कमांड के ज़रिए ही होता है — यही कारण है कि नोड्स के बीच घड़ी का अंतर कभी भी लॉक स्थिति को विभाजित नहीं कर सकता। यदि कोई क्लाइंट अपनी प्रतिक्रिया मिलने से पहले डिस्कनेक्ट हो जाता है, तो लीडर अधिग्रहण के तुरंत बाद स्वयं के लिए एक Release प्रस्तावित करता है, ताकि भूतिया (ghost) लॉक को तुरंत साफ़ किया जा सके।

प्रवाह — एक Expire की प्रतिकृति

लीडर
फॉलोवर 1
फॉलोवर 2
अपनी लोकल घड़ी से lease समाप्ति का पता चला
AppendEntries · Expire (key, token)
AppendEntries · Expire (key, token)
OK
बहुमत कमिट → हर नोड एक ही क्रम में लागू करता है
token बेमेल → अनदेखा — नए दिए गए लॉक की सुरक्षा
सर्वसम्मति RPC (Raft)

समाप्ति भी बस एक और कमांड है जो लीडर के प्रस्ताव → बहुमत कमिट से गुज़रती है। token जाँच के कारण, भले ही कमिट में देरी होने के दौरान वही कुंजी फिर से दे दी गई हो, एक देर से लागू होने वाला Expire नए लॉक को हटा नहीं सकता।

शब्दावली

  • स्टेट मशीन (state machine) — वह हिस्सा जो वर्तमान स्थिति (यहाँ, लॉक तालिका) बनाने के लिए कमिट किए गए कमांड को क्रम से लागू करता है। चूँकि हर नोड एक ही क्रम में एक ही कमांड लागू करता है, वे हमेशा एक ही स्थिति पर पहुँचते हैं।
  • कमिट (commit) — वह "अंतिम" स्थिति जो एक स्थिति तब पाती है जब बहुमत नोड ने इसे दर्ज कर लिया हो। केवल कमिट किए गए कमांड ही स्टेट मशीन पर लागू होते हैं।
  • मेल-रहित (idempotent) — वह गुण जहाँ गलती से एक ही कमांड को दो बार लागू करने से परिणाम नहीं बदलता।