2009-05-10 10 views
7

क्रैश प्रक्रिया को पुनरारंभ करते समय राज्य को बनाए रखने का एक अच्छा तरीका क्या है?क्रैश के बाद मैं प्रक्रिया स्थिति को कैसे पुनर्स्थापित कर सकता हूं?

मेरे पास एक ओटीपी एप्लिकेशन में पर्यवेक्षक है जो कई "सबसिस्टम" gen_servers देखता है।

उदाहरण के लिए, एक "मौसम" उपप्रणाली है जो प्रत्येक 15 मिनट में एक नया मौसम राज्य उत्पन्न करती है और मौसम की वर्तमान स्थिति के लिए प्रश्नों को संभालती है। (नींबू पानी के स्टैंड गेम को सोचें)

यदि वह gen_server क्रैश हो जाता है, तो मैं इसे पुनरारंभ करना चाहता हूं, लेकिन इसे हालिया मौसम स्थिति के साथ पुनरारंभ किया जाना चाहिए, कुछ मनमानी स्थिति init() में हार्डकोड नहीं किया जाना चाहिए। यह सिमुलेशन राज्य के लिए अचानक "गड़गड़ाहट तूफान" से दुर्घटना के कारण "सुखद और उग्र" तक जाने के लिए समझ में नहीं आता।

मैं अतिरिक्त जटिलता के कारण हर अद्यतन के बाद राज्य को स्टोर करने के लिए मेनेसिया या ईटीएस का उपयोग करने में संकोच करता हूं; क्या कोई आसान तरीका है?

उत्तर

4

जब तक इसे रनटाइम के दौरान होना चाहिए, तो ईटीएस के उपयोग का सुझाव दिया जाएगा। मूल्य जटिलता से कहीं अधिक है। एपीआई सरल है और यदि आप नामित तालिकाओं के साथ काम कर रहे हैं तो एक्सेस भी सरल है। पर्यवेक्षक द्वारा आपके gen_server शुरू होने से पहले आपको केवल तालिका बनाना होगा।

दो - और अधिक जटिल - विकल्प:

  • बिल्ड प्रक्रियाओं की एक जोड़ी, क्या करने के लिए इस काम के लिए एक, राज्य के रखरखाव के लिए एक। दूसरे की सादगी के कारण यह वास्तव में विश्वसनीय होगा।
  • एक वास्तविक मूर्ख व्यक्ति पर्यवेक्षक के बच्चे के नमूने का वर्तमान राज्य के साथ विनिमय के रूप में प्रत्येक बार राज्य बदल रहा है। (मुस्कान) नहीं, बस मजाक कर रहे हैं।
2

क्या कोई आसान तरीका है?

जब प्रक्रिया यह मृत्यु हो गई है कि इस प्रक्रिया के राज्य युक्त पर्यवेक्षक को संदेश भेजता है, तो आप और जब अपने सर्वर शुरू कर देंगे (में init) (mnesia या पर्यवेक्षक के राज्य में) पर्यवेक्षक में स्टोर करने के लिए इस मान का उपयोग कर सकते हैं यह राज्य मूल्य प्राप्त करने के लिए पर्यवेक्षक को सिंक कॉल भेजना होगा। मेरे पास असली उदाहरण नहीं है, लेकिन मुझे उम्मीद है कि यह समझ में आता है।

वैसे भी मुझे वास्तव में मैनेशिया में राज्य को स्टोर करने में समस्या दिखाई नहीं दे रही है।

क्षमा करें मेरी अंग्रेजी :)

+1

पर्यवेक्षक को यथासंभव तर्क जितना कम होना चाहिए और केवल पुनरारंभ करने के लिए ज़िम्मेदार होना चाहिए। उस तर्क में एक भी बग दुर्घटनाग्रस्त होने के लिए पूरी उप-चीज का कारण बन सकती है। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^