Read this page in English
→ سجل المشروع

التحديث الليلي للبيانات صار يراجع نفسه ويدمج نفسه

منذ 5 تشرين الثاني تراجع مهمة طلب دمج البيانات لكل ليلة وفق خمس قواعد ثم تدمجه. والليلة التي تحذف أكثر من اللازم تبقى مفتوحة، مع الأسباب.

كيف تحدّث البيانات

الجواب باختصار.

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

القواعد الخمس.

لا يتغيّر إلا ما تحت data/ وdb/model/. يجب أن ينتهي كل فحص من دون فشل. لا يخسر أي جدول أكثر من 1% من صفوفه، مع السماح دائماً بـ50 صفاً. لا يختفي أكثر من 25 قانوناً، ولا أكثر من 25 حكماً. ولا يتحرك أكثر من 5% من تواريخ الصفحات.

لماذا هذه القواعد.

كل قاعدة تعود إلى ليلة ساءت. في 3 تشرين الثاني كان تشغيل تجريبي مبني من نسخة ناقصة من صفحات المصدر سيحذف 93,487 قانوناً. والتشغيل نفسه كان سيعيد ضبط 164,305 من أصل 165,855 تاريخ صفحة. وفي تشرين الأول بدا انقطاع في موقع المصدر كأنه سحب 3,000 قانون. وعند تشغيل المراجعة على بيانات تلك التجربة، ترفضها.

تدمج ما راجعته.

يسمّي الدمج الإيداع نفسه الذي جرت مراجعته، فلا يمكن دمج دفع لاحق إلى الفرع نفسه من دون أن يُرى. وقبل الدمج مباشرة تعيد المهمة قراءة لائحة ملفات ذلك الإيداع وترفض أي شيء خارج data/ وdb/model/. على طلب الدمج الحقيقي لأول ليلة طبعت ما وجده شخص يدوياً، مرسومين محذوفين وخمسة تواريخ متحركة، في 0.3 ثانية.

أجوبة النموذج لا تُطلب مرتين.

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

الصباح الذي لم يعمل فيه.

في 5 تشرين الثاني توقف تشغيل الساعة 06:40 بعد 7 ثوانٍ. كانت الليلة السابقة قد تركت تصديرها في مجلد العمل، والملفات نفسها دُمجت في هذه الأثناء، فرفض git التحديث فوقها. صار السكربت يعيد المجلد كما وجده عند انتهائه، ويفشل اختبار إذا لم يفعل.

المصادر

استخدم المكتبة