Erlang 21

wrap_log_reader




erlang

wrap_log_reader

मॉड्यूल

wrap_log_reader

मॉड्यूल सारांश

आंतरिक रूप से स्वरूपित रैप डिस्क लॉग को पढ़ने के लिए एक सेवा।

विवरण

यह मॉड्यूल आंतरिक रूप से स्वरूपित रैप डिस्क लॉग को पढ़ना संभव बनाता है, disk_log(3) wrap_log_reader disk_log गतिविधियों में हस्तक्षेप नहीं करता है; फिर भी wrap_log_reader इस संस्करण में एक बग है, अनुभाग Known Limitations

एक रैप डिस्क लॉग फ़ाइल में कई फाइलें होती हैं, जिन्हें इंडेक्स फाइल कहा जाता है। एक लॉग फ़ाइल को खोला और बंद किया जा सकता है। साथ ही, एकल इंडेक्स फ़ाइल को अलग से खोला जा सकता है। यदि कोई गैर-मौजूद या गैर-आंतरिक स्वरूपित फ़ाइल खोली जाती है, तो एक त्रुटि संदेश वापस आ जाता है। यदि फ़ाइल दूषित है, तो उसे सुधारने के लिए कोई प्रयास नहीं किया जाता है, लेकिन एक त्रुटि संदेश वापस आ जाता है।

यदि एक लॉग को वितरित करने के लिए कॉन्फ़िगर किया गया है, तो संभव है कि सभी आइटम सभी नोड्स पर लॉग न हों। wrap_log_reader केवल लॉग को नोड पर पढ़ता है; यह सुनिश्चित करना उपयोगकर्ता के लिए है कि सभी आइटम पढ़े जाते हैं।

जानकारी का प्रकार

continuation()

open/1,2 या chunk/1,2 द्वारा जारी रखा गया।

निर्यात

chunk (निरंतरता) -> chunk_ret ​​()
chunk (कंटीन्यूशन, N) -> chunk_ret ​​()

प्रकार

कुशलता से उन शब्दों को पढ़ने में सक्षम करता है जो लॉग में जोड़े जाते हैं। फ़ाइल से 64 किलोबाइट विखंडू पढ़कर डिस्क I / O को छोटा करता है।

पहली बार chunk() कहा जाता है, open/1 या open/2 से लौटे एक प्रारंभिक निरंतरता प्रदान की जानी चाहिए।

जब chunk/3 कहा जाता है, तो N प्रत्येक चंक में लॉग से पढ़े जाने वाले शब्दों की अधिकतम संख्या को नियंत्रित करता है। infinity लिए चूक, जिसका अर्थ है कि 8K चंक में निहित सभी शब्दों को पढ़ा जाता है। यदि N से कम शर्तों को वापस किया जाता है, तो इसका मतलब यह नहीं है कि फ़ाइल का अंत तक पहुँच गया है।

एक tuple {Continuation2, Terms} लौटाता है, जहाँ Terms लॉग में पाए जाने वाले शब्दों की एक सूची है। Continuation2 अभी तक एक और निरंतरता है जिसे किसी भी बाद की कॉल को chunk() करने के लिए पारित किया जाना चाहिए chunk() । कॉल करने के लिए chunk() की एक श्रृंखला के साथ, फिर एक लॉग से सभी शर्तों को निकालना संभव है।

यदि कोई लॉग केवल मोड में पढ़ा जाता है और रीड चंक दूषित है {Continuation2, Terms, Badbytes} टपल {Continuation2, Terms, Badbytes} है। Badbytes में पाए जाने वाले गैर- Badbytes शब्दों की संख्या को इंगित करता है। ध्यान दें कि लॉग की मरम्मत नहीं की गई है।

लॉग के अंत तक पहुँचने पर {Continuation2, eof} लौटाता है, और यदि त्रुटि होती है {error, Reason} तो {error, Reason}

इस फ़ंक्शन के लिए अगली कॉल में लौटी निरंतरता या तो मान्य नहीं है। ऐसा इसलिए है क्योंकि लॉग उस फ़ाइल को लपेट और हटा सकता है जिसमें निरंतरता इंगित करती है। यह सुनिश्चित करने के लिए कि ऐसा नहीं होता है, खोज के दौरान लॉग को अवरुद्ध किया जा सकता है।

बंद (जारी) -> ठीक है | {त्रुटि, कारण}

प्रकार

लॉग फ़ाइल को ठीक से बंद करता है।

खुला (फ़ाइल नाम) -> open_ret ()
खुला (नाम, एन) -> open_ret ()

प्रकार

Filename नाम पढ़ा जाने वाला फ़ाइल का Filename निर्दिष्ट करता है।

N फ़ाइल को पढ़ने के लिए इंडेक्स निर्दिष्ट करता है। यदि N छोड़ा गया है, तो पूरी रैप लॉग फ़ाइल पढ़ी जाती है; यदि यह निर्दिष्ट किया जाता है, तो केवल निर्दिष्ट सूचकांक फ़ाइल को पढ़ा जाता है।

यदि लॉग / इंडेक्स फ़ाइल को सफलतापूर्वक खोला जाता है तो {ok, Continuation} लौटाता है। फ़ाइल को चूनते या बंद करते समय Continuation का उपयोग किया जाना है।

सभी त्रुटियों के लिए {error, Reason} देता है।

ज्ञात सीमाएँ

wrap_log_reader इस संस्करण का पता नहीं चलता है कि disk_log एक नई अनुक्रमणिका फ़ाइल में wrap_log_reader:open() लिए पहली कॉल और wrap_log_reader:chunk() बीच में कॉल करता है। यदि ऐसा होता है, तो कॉल chunk() लॉग फ़ाइल में अंतिम लॉग किए गए आइटम को पढ़ता है, क्योंकि खुली हुई इंडेक्स फ़ाइल को disk_log द्वारा काट दिया गया था।

यह भी देखें

disk_log(3)