मैं एक ऐसा एप्लिकेशन विकसित कर रहा हूं जो हर 1 मिनट में अनुसूचित क्रॉन जॉब पर नई फाइलों के लिए नेटवर्क फ़ाइल सर्वर (सीआईएफ) पर एक फ़ोल्डर का चुनाव करता है।

जब यह एक नई फ़ाइल देखता है, तो यह इसे अस्थायी रूप से स्थानीय फ़ाइल सिस्टम में कॉपी करता है, जबकि यह फ़ाइल के साथ विभिन्न काम करता है फिर इसे स्थानीय और नेटवर्क फ़ाइल सिस्टम दोनों से हटा देता है।

मुझे दौड़ की स्थिति का सामना करने की संभावना के बारे में चिंता है जहां मेरा ऐप नेटवर्क फ़ोल्डर को उसी समय पोल करता है जब कोई नेटवर्क फ़ोल्डर में फ़ाइल जोड़ रहा हो। फ़ाइलें अविश्वसनीय रूप से छोटी (1kb) हैं और इसलिए यह अविश्वसनीय रूप से दुर्लभ होना चाहिए कि जब मैं फ़ोल्डर को मतदान करता हूं तब भी कोई फ़ाइल प्रतिलिपि बना रही होगी लेकिन ऐसा हो सकता है।

मेरा प्रश्न, क्या यह एक वैध चिंता है और यदि ऐसा है तो मुझे इसे कैसे संभालना चाहिए?

0
Ryan Mortier 6 नवम्बर 2018, 23:16

1 उत्तर

सबसे बढ़िया उत्तर

यहां बताया गया है कि मैंने अपनी समस्याओं का समाधान कैसे किया।

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

पहली समस्या को हल करने के लिए:

अपनी निर्धारित नौकरी में, मैंने सभी फाइलों के लिए निर्देशिका को स्कैन किया, फिर प्रत्येक फ़ाइल का एक एमडी 5 हैश उत्पन्न किया और इसे फ़ाइल पथ के साथ डेटाबेस में एक तालिका में सहेजा।

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

सभी फाइलों के संसाधित होने के बाद, मैं उस तालिका को काट देता हूं जो फाइलों को अनुक्रमित करती है और फिर सभी फाइलों को फिर से डेटाबेस में सहेजती है। एक मिनट बाद और मेरा काम फिर से इंडेक्स से फाइलों का उपभोग करना शुरू कर देता है।

इस तरह मैं कभी भी उन फाइलों के साथ काम नहीं कर रहा हूं जिन्हें मैंने पिछले जॉब रन से अनुक्रमित नहीं किया है। मेरा मानना ​​​​है कि यह मान लेना सुरक्षित है कि अगर फ़ाइल हैश 1 मिनट से अधिक नहीं बदली है तो फ़ाइल स्थानांतरित हो गई है और मैं इसका उपभोग कर सकता हूं।

दूसरी समस्या को हल करने के लिए:

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

0
Ryan Mortier 23 नवम्बर 2018, 16:55