मेरे उत्पादन माहौल में हमारे पास भ्रष्ट स्टेश हैश, Storable.pm द्वारा बनाई गई है, जो हम मानते हैं। मैं देव में व्यवहार को दोहराने में असमर्थ हूं, जिसने वास्तव में निदान करना मुश्किल बना दिया है।Storable.pm - गैर-छिड़काव फ़ाइल को सहेजते समय दूषित
कोड लंबे समय से काम कर रहा है, और जिस बदलाव ने इसे ब्रेक को हैश से हटा दिया था। हाल ही में तक, हैश या तो एक ही आकार में रहा, या बढ़ गया।
फ़ाइल को पटकथा में खोला गया है, और फिर store_fd फ़ाइल को लिखता है। हैश अब (कभी-कभी) छोटा है, यह 1000bytes से इस 2000byte फ़ाइल को लिखने के लिए कहेंगे। पूंछ 1000 बाइट पुराने, कचरा डेटा हैं। मेरे परीक्षण मामलों में, जब मैं हैश पुनर्प्राप्त करता हूं, तो कचरा डेटा को अनदेखा किया जाता है, क्योंकि अपेक्षित है।
open($sf, "+< $self->{mod_state_filename}");
flock($sf, LOCK_EX);
$self->{mod_state} = fd_retrieve($sf);
delete ($self->{mod_state}{"somekey"});
seek($sf, 0, 0);
store_fd($self->{mod_state}, $sf);
flock($sf, LOCK_UN)
close($sf);
मेरे सवालों का:
- इस काम है, या यह जरूरी मैं फ़ाइल काटना है कि है चाहिए?
- क्या संग्रहीत हैश फ़ाइल टर्मिनेटर चरित्र के किसी प्रकार का उपयोग करता है? यदि ऐसा है, तो यह क्या है?
- उपरोक्त कोड, हटाकर और जोड़ना और हटाना, मेरे परीक्षण मामले में पूरी तरह से काम करता है। क्या आप किसी भी टेस्ट केस अनुक्रम का सुझाव दे सकते हैं जो गैर-कटा हुआ फ़ाइल के कारण विफल हो सकता है? (मुझे पता है कि यह वास्तव में अस्पष्ट प्रश्न है, इसलिए इसे अनदेखा करने के लिए स्वतंत्र महसूस करें)।
आप स्टोरेज के निर्मित स्टोर का उपयोग क्यों नहीं कर रहे हैं और कार्यों को पुनर्प्राप्त नहीं कर रहे हैं। आराध्य भी लॉकिंग का समर्थन करता है http://search.cpan.org/~ams/Storable-2.24/Storable.pm#ADVISORY_LOCKING – singingfish
मुझे पता है कि यह करता है, लेकिन मैंने कोड नहीं लिखा था। इससे पहले कि मैंने इसे विरासत में लिया था, इस तरह से (हटाए जाने के अलावा)। मैं स्टेरेट :: लॉकिंग का उपयोग करने के लिए कोड को बदलने पर विचार करता हूं, लेकिन मुझे नहीं पता कि यह होगा (और संदेह है कि यह संभवतः नहीं होगा) मेरी समस्या को ठीक करें। (मैं कोशिश कर सकता था, लेकिन समस्या केवल उत्पादन में दिखाई देती है, इसलिए मुझे फिक्स के बारे में सुनिश्चित होना चाहिए। मैं परीक्षण और त्रुटि नहीं कर सकता)। मुझे नहीं लगता कि मेरी समस्या लॉक होने के कारण है। – Brock