الخلاصة

  • إذا وُسِم دليل بالخاصية الجديدة، فلا يجوز للعميل الملتزم أن يخدم تعداده الجديد بنتائج READDIR من تعداد سابق، ولا أن يعرض لسجل أعاده READDIR الأخير قيمة تلقاها قبل ذلك الرد.
  • القاعدة تخص النتيجة المشاهدة، لا شكل الذاكرة الداخلية. وهي محدودة بمسار الدليل والسجل الذي أُعيد ولحظة ملاحظة الخادم، مع استثناء لقيمة أحدث يحتفظ بها صاحب تفويض الكتابة.
  • يمكن لهذا الحد أن يمنع النسخ الاحتياطي أو المزامنة من تجاوز ملف تغيّر فعلاً، لكنه يستهلك عملاً إضافياً ولا يمنح الخادم دليلاً بروتوكولياً على أن كل عميل نفّذ المعنى.

دليل صحيح وملف موصوف بزمن قديم

للدليل وللملف الذي يسميه ساعتان مختلفتان. يتكون سجل الدليل من الاسم وfileid. إنشاء الاسم أو حذفه أو تغييره يحرك خاصية change الخاصة بالدليل. أما تمديد ملف موجود من عميل آخر فيغير size وtime_modify من دون أن يغير الاسم أو fileid أو بنية الدليل.

يستطيع READDIR إعادة خصائص الملف مع كل سجل، ويحتفظ بها العميل كي لا يرسل GETATTR مستقلاً لكل ملف. تسمح RFC 8881 بذلك ضمن مدة محدودة. في دليل هادئ تكون المقايضة معقولة؛ وفي دليل نتائج حوسبة عالية الأداء أو منطقة إدخال يكتب إليها منتجون كثيرون، يمكن أن تكون أي مدة موجبة أطول من دورة التغيير الفعلية.

النتيجة ليست مجرد شاشة قديمة. قد تعتمد أداة نسخ تدريجي على الحجم ووقت التعديل فتقرر أن ملفاً لم يتغير، ثم تترك بيانات جديدة بلا نسخ. تتيح fattr4_uncacheable_dirent_metadata للخادم تحديد الأدلة التي تستحق ملاحظة خادم جديدة في كل جولة. عدم ضبطها في مكان آخر ليس شهادة بأن بيانات ذلك المكان حديثة.

المراجعة 11 تحدد الفعل الذي يمكن الحكم عليه

أُودعت draft-ietf-nfsv4-uncacheable-directories-11 في 5 سبتمبر 2026. وهي وثيقة نشطة لمجموعة عمل NFSv4 على مسار المعايير. تذكر نماذج أولية لخادم Hammerspace وعميل Linux، لكنها ما زالت Internet-Draft، لا RFC ولا موافقة من IETF ولا برهان انتشار تشغيلي.

كانت المراجعة 10 تقول إن العميل يسترجع بيانات السجل من الخادم «في كل READDIR». لكن READDIR عملية شبكية تذهب إلى الخادم أصلاً. لم تمنع العبارة بوضوح أن يجدد العميل الأسماء ثم يسلّم التطبيق حجماً قديماً من مخزن خصائص inode المعتاد.

تكتب المراجعة الجديدة الحظر على سطح النتيجة. لا يمكن تلبية readdir في جولة جديدة بنتيجة READDIR حصل عليها العميل في جولة مختلفة. وإذا أعاد أحدث READDIR سجلاً، فلا يجوز عرض قيمة خاصية تلقاها العميل قبل READDIR ذاك، بصرف النظر عن العملية التي ملأت المخزن سابقاً.

يمكن اختبار ذلك من الخارج: تعداد أول، كتابة متزامنة من عميل آخر، تعداد ثان، ثم stat. القيمة المحظورة هي القيمة التي تسبق READDIR في الجولة الثانية. أما حذف النسخة القديمة أو استبدالها أو الاحتفاظ بها داخلياً فليس شرطاً ما دامت لا تصبح جواب الجولة الجديدة.

وحدة الالتزام هي جولة التعداد

أزالت المراجعة التباساً بين طبقتين. readdir بالأحرف الصغيرة هو طلب التطبيق. READDIR بالأحرف الكبيرة هو عملية NFSv4.2. أما enumeration فهي مرور واحد على الدليل، وقد تضم طلبات تطبيق كثيرة وعدة عمليات READDIR متتابعة. عادة يكفي READDIR واحد لعدد كبير من استدعاءات readdir.

لذلك لا تفرض القاعدة رحلة شبكية لكل اسم. إنها تفرض أن تستند الجولة الحالية إلى READDIRs تخصها. ينبغي للعميل أن يطلب في attr_request الخصائص التي سيعرضها. ويمكنه الحصول عليها لاحقاً، لكن GETATTR لكل سجل يعيد عاصفة الطلبات التي صُمم READDIR الغني لتجنبها.

بعد انتهاء الجولة يجوز الاحتفاظ بالقيم. وبين جولتين تستمر قواعد عمر مخزن الخصائص العادية. عندما يعيد READDIR التالي السجل، تصبح القيمة الأقدم منه غير صالحة كجواب لهذه الجولة. الاسم «غير قابل للتخزين المؤقت» أوسع من الحقيقة؛ فالآلية تقيد نسب الإجابة إلى ملاحظتها، لا وجود الذاكرة.

إعلان الخادم لا يصبح تنفيذاً فوراً

إذا غيّر الخادم الخاصية من FALSE إلى TRUE، فقد يكون العميل محتفظاً بالنسخة السابقة من خصائص الدليل. تسمح المسودة باستمرار سلوكه السابق إلى أن تنتهي مهلة ذلك المخزن أو تكشف إعادة التحقق أن change تحرك. لا يلتزم العميل بسياسة لم يرها بعد.

وهكذا توجد ثلاثة أزمنة ينبغي عدم دمجها: وقت SETATTR عند الخادم، ووقت أول ملاحظة للقيمة الجديدة لدى كل فئة من العملاء، ووقت أول جواب يراه التطبيق مطابقاً للقاعدة. لوحة تعرض الأول فقط لا تثبت الثاني ولا الثالث.

تفويض الدليل يوضح الانتقال. يسمح التفويض للعميل بخدمة حالة الدليل من دون الرجوع إلى الخادم، بينما تتطلب الخاصية الجديدة الرجوع في كل جولة. لذلك يجب استدعاء أي تفويض قائم، ولا يجوز منح تفويض جديد ما دامت الخاصية TRUE. وإشعارات تغير خصائص الأبناء ليست بديلاً عاماً؛ فهي اختيارية، وقد لا تُنفذ، وتتسع كلفتها مع حاصل ضرب العملاء في التغييرات.

قد يحمل العميل حقيقة أحدث من الخادم

عندما يحمل عميل تفويض OPEN_DELEGATE_WRITE، قد يكون لديه size أو change أحدث من النسخة المحلية عند الخادم. تسمح RFC 8881 للخادم بطلب هذه القيم من العميل عبر CB_GETATTR لأن سلطة الكتابة المؤقتة موجودة هناك. إحلال قيمة خادم أقدم محلها ليس تحديثاً.

تعترف المراجعة 11 بهذا الاستثناء. الحظر موجه إلى قيمة أقدم مما سيعيده الخادم، ولا يجبر صاحب التفويض على التخلص من قيمته الأحدث. لا يحدد اتجاه الطلب حداثة الحقيقة وحده؛ تحددها أيضاً سلطة الكتابة الفعلية.

ولا تصبح قيمة READDIR صالحة إلى الأبد. يمكن أن تصل كتابة جديدة بعد الرد مباشرة. الضمان هو حالة الخادم عند الملاحظة التي أعادت السجل، لا لقطة ذرية لكل البيانات والبيانات الوصفية في النظام.

سلطة الدليل محدودة بمساره

تُضبط الخاصية لكل دليل وتتحكم في السجلات التي جرى تعدادها من خلاله. إذا كان الملف نفسه مرتبطاً ارتباطاً صلباً بدليل موسوم وآخر غير موسوم، فلا يتأثر المسار الثاني. كذلك لا تفرض المسودة توريثاً تلقائياً للأدلة الفرعية؛ أي توريث هو سياسة محلية يجب إثباتها لا افتراضها.

وصُحح التعامل مع نوع الكائن. بما أن دعم الخاصية يُعلن لكل نظام ملفات، يعيد GETATTR على كائن غير دليل القيمة FALSE بدلاً من ادعاء غياب الدعم. أما SETATTR على النوع الخطأ فيعيد NFS4ERR_WRONG_TYPE. معرفة نظام الملفات بالخاصية لا تعني أنها ذات معنى لكل كائن.

معرفة رقم الخاصية ليست إيصال امتثال

الخاصية إرشادية. رؤية GETATTR أو SETATTR تثبت أن العميل يعرف الحقل، لا أنه ينفذ قاعدته. لا يستطيع الخادم من ذلك وحده التفريق بين عميل ملتزم، وعميل واعٍ يتجاهل، وعميل غير منفذ. لذلك لا ينبغي أن تعتمد صحة الخادم على امتثال شامل لا يستطيع التحقق منه.

وتفرض الآلية تكلفة متعمدة. كل جولة في دليل موسوم تعيد العمل إلى الخادم؛ ومسار READDIR للأسماء فقط ثم GETATTR لكل سجل أغلى. إذا استطاع مستخدم غير مخول ضبط الخاصية على شجرة ساخنة، أمكن لتغيير واحد أن يضاعف العمل على كل العملاء الملتزمين. صلاحية التعديل وسياسة التصدير والملكية وسقف السعة أجزاء من القرار.

تثبت المصادر نص المسودة وتاريخها وقواعد RFC وأسباب التغييرات العامة ووجود نماذج أولية كما يذكر المساهمون. ولا تثبت إصدار Linux موزعاً أو سلوك منتج Hammerspace أو انتشاراً أو قياساً أو حادثة أو فائدة محققة. والمسودة المنفصلة لبيانات الملف تعالج المحتوى والمتانة، لا توسع قاعدة بيانات السجل هنا.

وفق طبقات الواقع لدى Heng Lu، خاصية الخادم إعلان، ومخزن العميل حالة خاصة، وREADDIR ملاحظة، وstat قول يصل إلى التطبيق. أصبحت المواصفة أقوى عندما توقفت عن منح إعلان واحد سلطة تغطي الطبقات الأربع.

المصادر