লিনাক্সে পুনরাবৃত্তিযোগ্য ডিরেক্টরি ক্রম নিশ্চিত করা


16

আমি একটি হোস্টেড অবিচ্ছিন্ন ইন্টিগ্রেশন সংস্থা পরিচালনা করি এবং আমরা আমাদের গ্রাহকদের লিনাক্সে কোড চালাই। প্রতিবার আমরা কোডটি চালাই, আমরা এটি একটি পৃথক ভার্চুয়াল মেশিনে চালিত করি। একটি ঘন ঘন সমস্যা দেখা দেয় যে গ্রাহকের পরীক্ষাগুলি কখনও কখনও ভিএম-তে চেক আউট করে তাদের কোডের ডিরেক্টরি আদেশের কারণে ব্যর্থ হয়ে যায়।

আমাকে আরও বিশদে যেতে দিন। ওএসএক্স-এ, এইচএফএস + ফাইল সিস্টেমটি নিশ্চিত করে যে ডিরেক্টরিগুলি সর্বদা একই ক্রমে ট্র্যাভ্রেস করা থাকে। ওএসএক্স ব্যবহারকারী প্রোগ্রামাররা ধরে নেয় যে এটি যদি তাদের মেশিনে কাজ করে তবে এটি অবশ্যই সর্বত্র কাজ করবে work তবে এটি প্রায়শই লিনাক্সে কাজ করে না, কারণ লিনাক্স ফাইল সিস্টেম ডিরেক্টরিগুলি ট্র্যাভার করার সময় আদেশের গ্যারান্টি সরবরাহ করে না।

উদাহরণ হিসাবে, 2 ফাইল, a.rb, বি.আর.বি রয়েছে বিবেচনা করুন a.rb সংজ্ঞায়িত করে MyObject, এবং b.rb ব্যবহার করে MyObject। যদি a.rb প্রথমে লোড হয় তবে সবকিছু কাজ করবে। যদি বি.আরবি প্রথমে লোড করা হয় তবে এটি একটি সংজ্ঞায়িত পরিবর্তনশীল অ্যাক্সেস করার চেষ্টা করবে MyObjectএবং ব্যর্থ হবে।

তবে এর চেয়েও খারাপ এটি হ'ল এটি সর্বদা ব্যর্থ হয় না। যেহেতু লিনাক্সে ফাইল সিস্টেম অর্ডার করার আদেশ দেওয়া হয়নি, এটি বিভিন্ন মেশিনে ভিন্ন আদেশ হবে। এটি আরও খারাপ কারণ কখনও কখনও পরীক্ষাগুলি পাস হয় এবং কখনও কখনও তারা ব্যর্থ হয়। এটি সবচেয়ে খারাপ সম্ভাব্য ফলাফল।

সুতরাং আমার প্রশ্নটি হল, ফাইল সিস্টেমের ক্রম পুনর্বারযোগ্যযোগ্য করার কোনও উপায় আছে কি? কিছু পতাকা সম্ভবত ext4 থেকে, এটি বলে যে এটি সর্বদা কোনও ক্রমে ডিরেক্টরিগুলি অতিক্রম করবে? অথবা এই গ্যারান্টিটি থাকতে পারে অন্য কোনও ফাইল সিস্টেমের?



সত্যিই সত্য উত্তর এছাড়া - কি হল "সঠিক" অর্ডার? শুধু বর্ণানুক্রমিকভাবে বাছাই করা হয়? নাকি সিটিটাইমের মাধ্যমে? যথেচ্ছভাবে যাদু? গ্রাহকরা মোতায়েনের ক্ষেত্রে এই আদেশটি কীভাবে নিশ্চিত করবেন? কীভাবে এই জাদুকরী আদেশের তথ্য আপনার কাছে স্থানান্তরিত করা উচিত?
মিচুয়েলনিক

@ মিচুয়েলনিক এখানে সত্যিকারের সঠিক অর্ডার নেই, তবে পুনরাবৃত্তযোগ্য কিছুটির অর্থ হ'ল আমরা প্রতিবার একই ফলাফল পেয়েছি, যা কোনও কিছুর চেয়ে ভাল হবে। আদর্শভাবে, আমরা এইচএফএস + ক্রম ব্যবহার করব, যা আমার মনে হয় বর্ণানুক্রমিক।
পল বিগগার

@ মিচুয়েলনিক এই সমস্যাটি মোতায়েনের চেয়ে পরীক্ষাগুলিকে অনেক বেশি প্রভাবিত করে মোতায়েন বেশিরভাগই লিনাক্সে ঘটে তবে কিছু ব্যর্থ হলে তারা এটিকে ঠিক করে দেবে। টেস্টগুলি বেশিরভাগই ওএসএক্সে চালিত হয় তাই যদি কিছু ব্যর্থ হয় তবে এটি অবশ্যই আমাদের ত্রুটি।
পল বিগগার

1
@PaulBiggar: আমি আপনার সমস্যাটি বোঝার জন্য এবং আমি একটি ভাল সমাধান প্রস্তাব করতে পারবেন না (যদি না আপনি একটি উপায় খুঁজে বের করতে পারবেন সনাক্ত ফাইলটি অর্ডার সমস্যার কারণ হয়)। কিন্তু আমি না সম্মত হন যে "পুনরাবৃত্তি সাফল্য অসঙ্গত failur বেশী ভালো": আমার উন্নয়ন (এবং ci) পরিবেশ বারবার সাফল্য আছে কিন্তু আমার স্থাপনার প্ল্যাটফর্ম "অবিশ্বস্ত ব্যর্থতা" syndrom হয়েছে তারপর আমি একটি খারাপ স্পট মধ্যে truely আছি। আমি বরং যত তাড়াতাড়ি সম্ভব অবিশ্বাস্য ব্যর্থতা দেখতে পাই (আদর্শভাবে আমার উন্নয়ন ব্যবস্থায় তবে কমপক্ষে আমার সিআই সিস্টেমে)।
জোছিম সউর

উত্তর:


16

আমি জানি আপনি যে উত্তরটি সন্ধান করছেন এটি নয়, তবে আমি বিশ্বাস করি যে সঠিক সমাধানটি কোনও ডিরেক্টরিতে ফাইলের ক্রমের উপর নির্ভর করে এড়ানো উচিত । সম্ভবত এটি সমস্ত এইচএফএস + ফাইল সিস্টেমের মধ্যে সর্বদা সামঞ্জস্যপূর্ণ এবং আপনি এটি এক্সট 4 বা অন্য কোনও ফাইল সিস্টেমগুলিতেও ধারাবাহিক করার উপায় খুঁজে পেতে পারেন তবে দীর্ঘমেয়াদে এটি আপনার সাশ্রয়ের চেয়ে আরও বেশি সমস্যার জন্য ব্যয় করবে। যখন আপনার অ্যাপ্লিকেশনটি ব্যবহার করছেন অন্য কেউ বাজে আশ্চর্য হয়ে যাবে যখন তারা বুঝতে পারে না যে এটি কেবল কিছু প্রকারের ফাইল সিস্টেমের সাথেই উপযুক্ত এবং অন্যদের সাথে নয়। ব্যাকআপ থেকে কোনও ফাইল সিস্টেম পুনরুদ্ধার করা থাকলে অর্ডার পরিবর্তন হতে পারে। আপনি সম্ভবত সামঞ্জস্যতা সমস্যার মধ্যে চলে যাবেন কারণ এইচএফএস + ধারাবাহিক অর্ডার এবং এক্সট 4 ধারাবাহিক অর্ডার একরকম নাও হতে পারে।

সমস্ত ডিরেক্টরি এন্ট্রি পড়ুন এবং তালিকাটি ব্যবহারের আগে অভিধানিকভাবে সাজান sort ঠিক যেমন lsকরে।

আপনি ফাইলগুলি উল্লেখ করেছেন a.rbএবং আপনি b.rbযদি প্রোগ্রামিং ল্যাঙ্গুয়েজ উত্স ফাইলগুলির বিষয়ে কথা বলছেন তবে প্রতিটি ফাইল ইতিমধ্যে তার সমস্ত নির্ভরতা আমদানি করে তা নিশ্চিত করার জন্য দায়বদ্ধ হওয়া উচিত নয়?


সমস্যাটি হ'ল আমরা যে কোডটি চালাচ্ছি তা আমরা লিখিনি। আমরা গ্রাহকদের কোড চালাই, এবং কোডটি কীভাবে লেখা হয়েছিল তাতে আমাদের কোনও নিয়ন্ত্রণ নেই। সুতরাং আমাদের সমস্যাটি হ'ল আমরা সমস্যার জন্য দোষী হচ্ছি কারণ এটি তাদের মেশিনে কাজ করে তবে আমাদের নয়। আমরা যদি সবাইকে সঠিক কোড লিখতে বাধ্য করতে পারি, তবে আমরা তা করব, তবে এটি আমাদের ক্ষমতার মধ্যে নেই :)
পল বিগগার

10
@ পলবিগগার: তবে "এটি এখানে চলে তবে প্রোডাক্টে নয়" সিআই-র ঠিক ঠিক যে সমস্যার সমাধান করার কথা? অন্য কথায়: "আমার কোডটি আপনার সিস্টেমে কেন ভেঙে যায়?" এর জবাব দেওয়া উচিত "কারণ আমরা আপনাকে যা চাইছি ঠিক তাই করছি!" ;-)
জোছিম সৌর

4
আমি অন্য কারও সম্পর্কে জানি না, তবে কোডটি যখন আমার মেশিনে কাজ করে এবং তারপরে সিআই বা সহকর্মীর চেকআউটে ব্যর্থ হয় আমি তত্ক্ষণাত্ ধরে নিয়েছি যে প্ল্যাটফর্ম- বা পরিবেশ-নির্ভর যে আমাকে ঠিক করতে হবে ...
matt5784

1
আপনি প্লাটফর্মটিতে অ্যাপ্লিকেশনটি বিকাশ করে আপনি উত্পাদন করতে পারবেন না এটি একটি খারাপ ধারণা? তারা যে প্ল্যাটফর্মটির জন্য লিখেছেন সেভাবে তাদের বিকাশ পান।
ম্যাথু ইফি

2
আমি একমত নই আমি এটি একটি দুর্দান্ত ধারণা। এটি ডেভলপমেন্ট থেকে টেস্ট সার্ভারে যাওয়ার সময় আরও অনেক ত্রুটি দেখা দেয়। এবং এইভাবে কোডটি প্রডাকশন সার্ভারগুলিতে চলে যাওয়ার আগে আরও অনেক শক্ত। সুতরাং একটি সঠিক বা তাত্ত্বিক বিশ্বে এটি আরও ভাল। এটি একই পৃথিবী যেখানে আপনি প্রত্যেককে সঠিক কোড লিখতে বাধ্য করতে পারেন, যা স্বপ্নের দেশ হিসাবেও পরিচিত।
হেনেস

5

লিনাক্স রিডডির () এর পসিক্স কলটি কোনও ধারাবাহিক অর্ডারের গ্যারান্টি দেয় না। আপনি যদি অর্ডার করা ফলাফল চান তবে যে অ্যাপ্লিকেশন ফাইলগুলি পরিচালনা করছে সেগুলি কলিংয়ের কার্যক্রমে কীভাবে উপস্থাপিত হয় তা অর্ডার দেওয়ার জন্য দায়বদ্ধ।

/programming/8977441/does-readdir-guarantee-an-order

এখন, যেহেতু আপনি বলেছিলেন এটি আপনার গ্রাহকের কোড এবং আপনি এটি ঠিক করতে পারবেন না, আপনি সম্ভবত সংযুক্ত লাইব্রেরিগুলিকে পরিবর্তন করতে পারেন যা ধারাবাহিক রিডডির () কল সরবরাহ করতে ব্যবহৃত হয়। এটি কিছু কাজ নেয় এবং এটি নিজের প্রশ্নের মূল্য হতে পারে। এ সম্পর্কে একটি দ্রুত রেফারেন্সের জন্য, http://www.ibm.com/developerworks/linux/library/l-glibc/index.html দেখুন

এটিকে পরিবর্তন করা আরও কয়েকটি সম্পূর্ণ সিরিজের ইস্যুগুলিকে উত্সাহিত করতে পারে যা আমি আগেই দেখতে পাব না। আপনাকে দৃ strongly়ভাবে সাবধান করা হয়েছে, তবে আপনার গ্রাহককে যথাযথভাবে শিক্ষিত না করা হলে এটি সমাধান হতে পারে।


1

আপনার গ্রাহককে শিক্ষিত করুন যে অন্তর্নিহিত অর্ডার নির্ভরতা রয়েছে যা স্পষ্টভাবে বলা উচিত। গ্রাহককে এমনভাবে নির্ভরতা প্রকাশ করতে সহায়তা করার অফার করুন যাতে একটি সংকলন সমস্ত সিস্টেমে কাজ করে এবং গ্রাহককে পরিবর্তিত প্রবাহটি গ্রহণ করে যা সংকলনের আদেশের নির্ভরতা অর্জন করে।

গ্রাহক যদি অন্য মেশিনগুলিতে সংকলন করতে সক্ষম হতে চান তবে এটি নিখরচায় আসে তা ভাবা তাদের পক্ষে চুরুচ হবে।


আমরা অবশ্যই এটি করতে যাচ্ছি। তবে এটি কার্যকর হবে যদি তারা আসলে আমাদের গ্রাহক হয় যাতে আমরা এটি করতে পারি।
পল বিগার

0

আধুনিক লিনাক্স (ext4) ফাইল তালিকার জন্য একটি বি-ট্রি সূচক যুক্ত করে। তার একটি প্রভাব ডিফল্ট ফাইল অর্ডার তাদের নামের একটি হ্যাশের উপর নির্ভর করে।

এই বৈশিষ্ট্যটি অক্ষম করতে ব্যবহার করুন:

tune2fs -O ir dir_index

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.