Erlang 21 - 4. Upgrade when Erlang/OTP has Changed

4 अपग्रेड करें जब Erlang / OTP बदल गया हो




erlang

4 अपग्रेड करें जब Erlang / OTP बदल गया हो

४.१ परिचय

appup / ओटीपी 17 के रूप में, अधिकांश एप्लिकेशन एक मान्य एप्लिकेशन अपग्रेड फ़ाइल ( appup ) प्रदान करते हैं। पहले के रिलीज़ में, Erlang / OTP में अधिकांश एप्लिकेशन ने अपग्रेड का समर्थन नहीं किया था। कई एप्लिकेशन restart_application निर्देश का उपयोग करते हैं। ये ऐसे एप्लिकेशन हैं जिनके लिए वास्तविक सॉफ्ट अपग्रेड का समर्थन करना महत्वपूर्ण नहीं है, उदाहरण के लिए, उपकरण और लाइब्रेरी एप्लिकेशन। restart_application निर्देश सुनिश्चित करता है कि एप्लिकेशन के सभी मॉड्यूल पुनः लोड किए गए हैं और जिससे नया कोड चल रहा है।

4.2 कोर अनुप्रयोगों का उन्नयन

मुख्य अनुप्रयोग ERTS, कर्नेल, STDLIB और SASL कभी भी वास्तविक सॉफ्ट अपग्रेड की अनुमति नहीं देते हैं, लेकिन Erlang एमुलेटर को पुनः आरंभ करने की आवश्यकता होती है। यह उन्नयन निर्देश restart_new_emulator द्वारा restart_new_emulator को इंगित किया गया है। यह निर्देश हमेशा निष्पादित होने वाला पहला पहला निर्देश है, और यह एमुलेटर को उपरोक्त उल्लिखित कोर अनुप्रयोगों के नए संस्करणों और अन्य सभी अनुप्रयोगों के पुराने संस्करणों के साथ पुनः आरंभ करता है। जब नोड का बैकअप लिया जाता है, तो अन्य सभी अपग्रेड निर्देशों को निष्पादित किया जाता है, यह सुनिश्चित करते हुए कि प्रत्येक एप्लिकेशन अंत में अपना नया संस्करण चला रहा है।

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

यदि, हालांकि, अधिक क्रूर संस्करण को प्राथमिकता दी जाती है, तो रिलीज़ अपग्रेड फ़ाइल को केवल एकल नवीनीकरण निर्देश restart_emulator का उपयोग करके हस्तलिखित किया जा सकता है। यह निर्देश, पुनरारंभ_ restart_new_emulator विपरीत, सभी अनुप्रयोगों के नए संस्करणों के साथ एमुलेटर को पुनरारंभ करने का कारण बनता है।

नोट: यदि हस्तलिखित relup फ़ाइल में restart_emulator से पहले अन्य निर्देशों को शामिल किया relup है, तो उन्हें पुराने एमुलेटर में निष्पादित किया जाता है। यह एक बड़ा जोखिम है क्योंकि इस बात की कोई गारंटी नहीं है कि नए बीम कोड को पुराने एमुलेटर में लोड किया जा सकता है। restart_emulator निर्देश के बाद निर्देश जोड़ने का कोई प्रभाव नहीं होता क्योंकि restart_emulator उन्हें निष्पादित नहीं करेगा।

रिलीज़ अपग्रेड फ़ाइल के बारे में जानकारी के लिए relup(4) में relup(4) मैनुअल पेज देखें। उन्नयन के निर्देशों के बारे में अधिक जानकारी के लिए, appup(4) में appup(4) मैनुअल पेज देखें।

4.3 अनुप्रयोग जो अभी भी कोड अपग्रेड की अनुमति नहीं देते हैं

कुछ अनुप्रयोग, जैसे कि हायपीई, अपग्रेड का समर्थन नहीं करते हैं। यह केवल {Vsn,[],[]} युक्त एप्लिकेशन अपग्रेड फ़ाइल द्वारा इंगित किया गया है। इस तरह के इनपुट के साथ रिलीज़ अपग्रेड फ़ाइल बनाने का कोई भी प्रयास विफल रहता है। इस तरह से अपग्रेड किए गए एप्लिकेशन को अपग्रेड करने के लिए केवल एक ही तरीका है कि फाइल को फिर से relup , अधिमानतः जैसा कि केवल restart_emulator निर्देश के साथ ऊपर वर्णित है।