वर्तमान में परीक्षण चल रहा है: पूरा होने पर GitHub कोड खोला जाएगा।

फ़ील्ड बाधाएँ और मान सीमाएँ

अनुरोध फ़ील्ड (C→S)

फ़ील्डप्रकारमान्य सीमाअर्थउल्लंघन पर
opASCII 1BA(0x41) · R(0x52)अनुरोध का प्रकारE bad_op
waitu80255 (सेकंड)0 बिना queue तत्काल प्रयास; 1..255 acquire प्रतीक्षा सीमा— (टाइप से हमेशा मान्य)
leaseu81250 (सेकंड)Lease; 0 और 251..255 अस्वीकृत/reservedE bad_lease
owneru64 BE02^64-1 पूराअधिग्रहण प्रयास का पहचानकर्ता (क्लाइंट द्वारा निर्मित)— (सर्वर इसकी जाँच नहीं करता)
tokenu64 BEसर्वर द्वारा जारी मानक्या रिलीज़ करना है यह तय करता है (केवल R)मेल न खाने पर N
keyUTF-81 – 128 बाइटलॉक का नाम। स्पेस (0x20) या नई लाइन (0x0A) नहींE bad_key
  • अनंत wait/lease नहीं है। आधिकारिक क्लाइंट उप-सेकंड मान को ऊपर round करके range जाँचते हैं और clamp या send करने के बजाय पहले स्पष्ट input error देते हैं। Default lease 30 सेकंड है।
  • आधिकारिक client API में wait, call शुरू होने से local queue, निश्चित रूप से unsent connection retry और write होते हुए response तक का पूरा acquire limit है। केवल एक monotonic operation deadline बनती है; वास्तविक send से ठीक पहले writer बचा समय u8 सेकंड में ऊपर round करके frame के wait में डालता है। इसलिए देर से उपलब्ध connection या निश्चित unsent failover server wait को शुरू से फिर नहीं चला सकता। deadline पर request अभी queue में हो तो वह निश्चित unsent timeout है; यदि एक byte भी भेजा गया हो सकता है तो उसी exact session को बंद करके परिणाम Indeterminate होता है। केवल मूल wait=0 wire 0 इस्तेमाल करता है, और इस immediate attempt के लिए भी अलग finite I/O deadline है ताकि रुका transport अनंत समय तक न रोके। यदि deadline से ठीक पहले correlated A Ticket delivery gate पर देर से मिले, तो server waiter पहले ही समाप्त हो चुका है: session खुला रखा जाता है, ज्ञात exact token का compensating release किया जाता है और परिणाम Indeterminate रहता है। Correlated T/B निश्चित non-acquisition हैं।
  • मूल wait=0 के लिए wire और server व्यवहार बिना queue का केवल एक immediate attempt ही रहता है। इसकी अलग 5-सेकंड transport deadline में, निश्चित unsent failure दूसरी connection चुनकर उसी owner से retry कर सकता है। एक byte भी भेजा गया हो सकता है, उसके बाद acquire कभी retransmit नहीं होता।
  • आधिकारिक client API में wire पर न मौजूद min_work_budget अनिवार्य है। यह critical work + अपेक्षित pause + DB commit/rollback completion को कवर करे, 0..250 सेकंड हो और normalized lease से अधिक न हो। उल्लंघन send से पहले UnsupportedDuration/InsufficientLease वर्ग की error देता है।
  • कुंजी की लंबाई अक्षरों में नहीं, बाइट में गिनी जाती है — कोरियाई अक्षर UTF-8 में प्रति अक्षर 3 बाइट लेते हैं, इसलिए अधिकतम 42 अक्षर।
  • owner केवल response correlation ID है, authority नहीं। वही मान फिर भेजने से active token नहीं लौटता और lease renew नहीं होता। एक client के concurrent in-flight requests में अलग nonzero values चाहिए; counter 0 या wrap होने पर official clients fail-closed होते हैं।
  • ज्ञात token के explicit और compensating release में call/enqueue से reconnect/retry सहित पूर्ण 5 सेकंड होते हैं। R सफलता, N पहले से हटे या current token न होने को बताता है। बिना response सफलता नहीं मानी जाती; bounded compensation queue भरने पर lease expiry safety net है।
  • bad_key एक खाली कुंजी, 128 बाइट से अधिक, स्पेस या नई लाइन वाली, और अमान्य UTF-8 — इन सभी को कवर करता है। आधिकारिक क्लाइंट इसके अतिरिक्त कभी भी \r नहीं भेजते — \r पर समाप्त होने वाली कुंजी चुपचाप एक अलग कुंजी बन जाएगी।

प्रतिक्रिया फ़ील्ड (S→C)

फ़ील्डप्रकारसीमाकिन प्रतिक्रियाओं में
tokenu64 BE1 या अधिक, हर जारी होने पर बढ़ताA (नया जारी) · R/N (अनुरोध की प्रतिध्वनि)
owneru64 BEअनुरोध का मान ज्यों-का-त्योंA · T · B (अनुरोध की प्रतिध्वनि)
keyUTF-8अनुरोध का मान ज्यों-का-त्यों (1–128 B)A · T · B · R · N
addrUTF-8host:portM · L
reasonASCIIनिर्धारित 8E

सर्वर token 0 कभी जारी नहीं करता। Single वर्तमान process lifetime का counter उपयोग करता है; cluster consensus-replicated counter उपयोग करता है और overflow से पहले fail-closed होता है। Wall clock या randomness restart के बाद monotonicity की गारंटी नहीं हैं।

फ़िक्स्ड हेडर की लंबाई

op के ठीक बाद आने वाला निश्चित लंबाई का बाइनरी खंड। इन बाइट्स में 0x0A हो सकता है, इसलिए पार्सर को नई लाइन खोजने से पहले ठीक इतनी लंबाई पढ़ लेनी चाहिए।

दिशाopफ़िक्स्ड हेडरसंरचना
C→SA10 Bwait(1) + lease(1) + owner(8)
C→SR8 Btoken(8)
S→CA16 Btoken(8) + owner(8)
S→CT · B8 Bowner(8)
S→CR · N8 Btoken(8)
S→CM · L · E0 Bकोई नहीं (op के तुरंत बाद टेक्स्ट)

बाइट कम पड़ने पर E bad_request मिलता है।

फ़्रेम आकार

मदमान
फ़्रेम की ऊपरी सीमा (\n को छोड़कर)192 बाइट — इससे अधिक पर E line_too_long
अधिकतम A अनुरोध1 + 10 + 128 + 1 = 140 B
अधिकतम R अनुरोध1 + 8 + 128 + 1 = 138 B
अधिकतम A प्रतिक्रिया1 + 16 + 128 + 1 = 146 B
खाली फ़्रेम (सिर्फ \n)keep-alive — सर्वर इसे अनदेखा करता है

192B सीमा अधिकतम frame (146B) से बड़ी है, इसलिए compliant client इसे नहीं छूता। संरचनात्मक रूप से malformed या oversized frame के बाद framing पर भरोसा नहीं किया जाता और connection बंद होता है।

प्रमाणीकरण हैंडशेक

मदमान
हैशSHA-256 (challenge लाइन में दर्ज)
noncebase64url के 8 अक्षर
प्रतिक्रिया डाइजेस्टbase64url के 43 अक्षर (बिना पैडिंग)
लाइन की ऊपरी सीमा256 बाइट
समय सीमा10 सेकंड (TLS वार्ता सहित) — इससे अधिक होने पर कनेक्शन बंद

विस्तृत प्रक्रिया के लिए प्रमाणीकरण हैंडशेक देखें।

सर्वर-साइड सीमाएँ

क्लाइंट इन्हें सीधे सेट नहीं करता, पर ये व्यवहार प्रभावित करती हैं।

आइटमडिफ़ॉल्टसेटिंगसीमा पार होने पर
प्रति key waiter2048 (hard cap 16384)MAX_WAITERSB (busy)
कुल waiter16384 (hard cap 65536)MAX_TOTAL_WAITERSउस acquire को B
concurrent client connections1024 (hard cap 8192)MAX_CONNECTIONSतुरंत बंद
प्रति connection pending replies256compile-timeधीमा connection बंद
global in-flight acquire4096compile-timeउस acquire को B
global in-flight release512, अलग lanecompile-timeconnection close तक bounded wait
cluster active keys65536compile-timeनई key acquire को B

Read buffer (4096B), response batch (64), शुरू client frame progress timeout (5 सेकंड) और single expiry sweep (5 सेकंड) compile-time constants हैं। Cluster expiry full scan के बजाय token-जाँच वाला deadline min-heap उपयोग करता है। कॉन्फ़िगरेशन देखें।

सभी acquire, नई key और सभी waiter का admission hard limit के 90% पर बंद और usage 75% से कम होने पर दोबारा खुलता है। इसलिए limit से पहले भी नया acquire B पा सकता है; release और Raft recovery की reserved capacity इस hysteresis से अलग है।

उल्लंघन → प्रतिक्रिया सारांश

स्थितिप्रतिक्रियाकनेक्शन
अज्ञात opE bad_opबंद
फ़िक्स्ड हेडर कमE bad_requestबंद
lease = 0 या 251..255E bad_leaseबंद
कुंजी खाली / 128 B से अधिक / स्पेस या नई लाइन वाली / UTF-8 नहींE bad_keyबंद
फ़्रेम 192 B से अधिकE line_too_longबंद
प्रमाणीकरण डाइजेस्ट मेल नहीं खाताE auth_failedबंद
प्रतीक्षा कतार भरीB + owner + keyबना रहता है
रिलीज़ टोकन मेल नहीं खाताN + token + keyबना रहता है

सभी त्रुटि कारण और कनेक्शन का व्यवहार प्रतिक्रिया · त्रुटि E में देखें।