خطأ لطيف في HyperQueue: SIGTERM وغموض العشر ثوانٍ
2025-02-24
ظهر خطأ غريب في HyperQueue، وهو مُخطِّط مهام موزّع مكتوب بلغة Rust. كانت المهام، وخاصةً تلك التي تنام لأكثر من 10 ثوانٍ، تنتهي بشكل غامض. كشف تصحيح الأخطاء عن تغيير بسيط للوهلة الأولى: نقل إنشاء العمليات إلى `tokio::task::spawn_blocking`. هذا، بالإضافة إلى `PR_SET_PDEATHSIG` (التي ترسل SIGTERM عند موت عملية الأب)، تسبب في المشكلة. تم جمع مؤشر العمل الذي أنشأته `spawn_blocking` بواسطة Tokio بعد فترة من الخمول، مما أدى إلى إرسال إشارة SIGTERM. تم إصلاح الخطأ من خلال التراجع عن التحسين، مما يبرز التفاعلات الدقيقة بين التزامن، ودعوات النظام، وإدارة الخيوط.
التطوير