Un bug mignon dans HyperQueue : SIGTERM et le mystère des dix secondes

2025-02-24

Un bug curieux est apparu dans HyperQueue, un ordonnanceur de tâches distribué écrit en Rust. Les tâches, en particulier celles qui dorment plus de 10 secondes, se terminaient mystérieusement. Le débogage a révélé un changement apparemment anodin : le déchargement de la création de processus vers `tokio::task::spawn_blocking`. Cela, combiné à `PR_SET_PDEATHSIG` (qui envoie SIGTERM à la mort du processus parent), a causé le problème. Le thread worker créé par `spawn_blocking` était récupéré par Tokio après une période d’inactivité, déclenchant le signal SIGTERM. Le bug a été corrigé en revenant à la version précédente de l’optimisation, soulignant les interactions subtiles entre la concurrence, les appels système et la gestion des threads.

Développement