আমি একাধিক ক্লায়েন্টে ব্যবহৃত ফাইলগুলি লক করতে ফ্লক () / BSD লকগুলি ব্যবহার করার চেষ্টা করছি, তবে ফাইলগুলি দূষিত হয়ে যায়। কিভাবে? এ। ফ্লক () / বিএসডি লকগুলি কেবলমাত্র স্থানীয়ভাবে লিনাক্স এনএফএস ক্লায়েন্টগুলিতে 2.6.12 এর আগে কাজ করে। ফাইল লকগুলি অন্য ক্লায়েন্টদের কাছে দৃশ্যমান কিনা তা নিশ্চিত করতে fcntl () / POSIX লক ব্যবহার করুন।
একটি এনএফএস ফাইলে অ্যাক্সেসকে সিরিয়ালাইজ করার কয়েকটি উপায় এখানে রয়েছে।
Fcntl () / POSIX লকিং API ব্যবহার করুন। এই ধরণের লকিং এনএলএম প্রোটোকলের মাধ্যমে বা এনএফএসভি 4 এর মাধ্যমে একাধিক ক্লায়েন্ট জুড়ে বাইট-রেঞ্জ লকিং সরবরাহ করে। একটি পৃথক লকফিল ব্যবহার করুন এবং এর সাথে কঠোর লিঙ্ক তৈরি করুন। ক্রিয়েট (2) ম্যান পৃষ্ঠার ও_এক্সসিএল বিভাগে বর্ণনাটি দেখুন। এটি লক্ষণীয় যে 2.6 কার্নেলগুলির প্রথমদিকে, O_EXCL তৈরি করা লিনাক্স এনএফএস ক্লায়েন্টগুলিতে পারমাণবিক ছিল না। আপনি যদি ২.6.৫ এর চেয়ে নতুন কার্নেল চালা না করেন তবে O_EXCL একাধিক এনএফএস ক্লায়েন্টের মধ্যে পারমাণবিক আচরণ তৈরি এবং প্রত্যাশা করবেন না।
এটি একটি পরিচিত সমস্যা যা পার্ল ডিফল্টরূপে ফ্লক () / BSD লকিং ব্যবহার করে। এটি অন্যান্য অপারেটিং সিস্টেমগুলি যেমন সোলারিস থেকে পোর্ট করা প্রোগ্রামগুলি ভেঙে ফেলতে পারে যা আশা করে যে পল / বিএসডি লকগুলি পসিএক্স লক্সের মতো কাজ করবে।
লিনাক্সে, হার্ড লিঙ্কের পরিবর্তে ফাইল লকিং ব্যবহার করে ক্লায়েন্টের ক্যাশে সার্ভারের সাথে চেকপয়েন্টে যুক্ত করার অতিরিক্ত সুবিধা রয়েছে। যখন কোনও ফাইল লক অর্জিত হয়, ক্লায়েন্ট সেই ফাইলটির জন্য পৃষ্ঠা ক্যাশেটি ফ্লাশ করে দেবে যাতে পরবর্তী কোনও পাঠক সার্ভার থেকে নতুন ডেটা পান। যখন কোনও ফাইল লক প্রকাশ হয়, তখন সেই ক্লায়েন্টের ফাইলটিতে যে কোনও পরিবর্তন ঘটে তা লকটি প্রকাশের আগেই সার্ভারে ফিরে যায় যাতে সেই ফাইলটি লক করার অপেক্ষায় থাকা অন্যান্য ক্লায়েন্টরা পরিবর্তনগুলি দেখতে পারে।
২.6.১২ এ এনএফএস ক্লায়েন্ট পসিক্স বাইট রেঞ্জ লকের ক্ষেত্রে বিএসডি-স্টাইলের লকগুলি অনুকরণ করে এনএফএস ফাইলগুলিতে ফ্লক () / বিএসডি লক্সের জন্য সমর্থন সরবরাহ করে। অন্যান্য এনএফএস ক্লায়েন্ট যারা একই ইমুলেশন মেকানিজম ব্যবহার করে বা fcntl () / POSIX লক ব্যবহার করে, তারপরে লিনাক্স এনএফএস ক্লায়েন্ট দেখতে পারা একই লক দেখতে পাবে।
স্থানীয় লিনাক্স ফাইল সিস্টেমে, পসিক্স লক এবং বিএসডি লকগুলি একে অপরের কাছে অদৃশ্য। সুতরাং, এই অনুকরণের কারণে, একটি লিনাক্স এনএফএস সার্ভারে চলমান অ্যাপ্লিকেশনগুলি এখনও এনএফএস ক্লায়েন্টদের দ্বারা লক করা ফাইলগুলি একটি fcntl () / POSIX লক দ্বারা লক হিসাবে দেখতে পাবে, ক্লায়েন্টের অ্যাপ্লিকেশনটি BSD- স্টাইল ব্যবহার করছে বা একটি পসিক্স- শৈলী লক সার্ভার অ্যাপ্লিকেশন যদি ফ্লক () বিএসডি লক ব্যবহার করে তবে এটি এনএফএস ক্লায়েন্টদের ব্যবহৃত লকগুলি দেখতে পাবে না।