प्रतिकृत कमांड
हर लॉक-स्थिति परिवर्तन नीचे दिए गए कमांड में से एक के रूप में प्रतिकृत होता है, जिसे AppendEntries में एक लॉग एंट्री के रूप में ले जाया जाता है, और बहुमत कमिट के बाद हर नोड द्वारा एक ही क्रम में लागू किया जाता है।
कमांड (लीडर द्वारा प्रस्तावित)
| कमांड | फ़ील्ड | अर्थ |
|---|---|---|
Grant | key, lease_ms | एक कुंजी अधिग्रहित करना। टोकन कमांड में नहीं होता — हर नोड का स्टेट मशीन इसे लागू करने के समय निर्धारक रूप से देता है, इसलिए हर नोड वही टोकन गणना करता है |
Release | key | एक कुंजी रिलीज़ करना |
Expire | key, token | लीडर-संचालित lease समाप्ति। केवल token मेल खाने पर ही हटाया जाता है — इस बीच नए दिए गए किसी लॉक को एक देर से आई या डुप्लिकेट समाप्ति हटा नहीं सकती (मेल-रहित/idempotent) |
लागू परिणाम (स्टेट मशीन → लीडर)
| परिणाम | अर्थ |
|---|---|
Granted { token } | अधिग्रहण सफल — जारी किया गया फेंसिंग टोकन |
GrantRejected | पहले से धारित कुंजी के लिए एक Grant आया (रक्षात्मक — सामान्य प्रवाह में कभी नहीं होता) |
Released | रिलीज़ हुआ |
NotFound | रिलीज़ करने वाली कुंजी मौजूद नहीं थी |
Expired { existed } | समाप्ति प्रोसेस हुई — existed बताता है कि क्या वास्तव में हटाया गया |
Noop | कुछ नहीं हुआ |
हर नोड अपनी स्थानीय घड़ी से किसी lease के शेष समय को ट्रैक करता है, लेकिन वास्तविक हटाना हमेशा केवल एक कमिट किए गए Expire कमांड के ज़रिए ही होता है — यही कारण है कि नोड्स के बीच घड़ी का अंतर कभी भी लॉक स्थिति को विभाजित नहीं कर सकता। यदि कोई क्लाइंट अपनी प्रतिक्रिया मिलने से पहले डिस्कनेक्ट हो जाता है, तो लीडर अधिग्रहण के तुरंत बाद स्वयं के लिए एक Release प्रस्तावित करता है, ताकि भूतिया (ghost) लॉक को तुरंत साफ़ किया जा सके।
प्रवाह — एक Expire की प्रतिकृति
समाप्ति भी बस एक और कमांड है जो लीडर के प्रस्ताव → बहुमत कमिट से गुज़रती है। token जाँच के कारण, भले ही कमिट में देरी होने के दौरान वही कुंजी फिर से दे दी गई हो, एक देर से लागू होने वाला Expire नए लॉक को हटा नहीं सकता।
शब्दावली
- स्टेट मशीन (state machine) — वह हिस्सा जो वर्तमान स्थिति (यहाँ, लॉक तालिका) बनाने के लिए कमिट किए गए कमांड को क्रम से लागू करता है। चूँकि हर नोड एक ही क्रम में एक ही कमांड लागू करता है, वे हमेशा एक ही स्थिति पर पहुँचते हैं।
- कमिट (commit) — वह "अंतिम" स्थिति जो एक स्थिति तब पाती है जब बहुमत नोड ने इसे दर्ज कर लिया हो। केवल कमिट किए गए कमांड ही स्टेट मशीन पर लागू होते हैं।
- मेल-रहित (idempotent) — वह गुण जहाँ गलती से एक ही कमांड को दो बार लागू करने से परिणाम नहीं बदलता।