Un Error Adorable en HyperQueue: SIGTERM y el Misterio de los Diez Segundos
2025-02-24
Un curioso error surgió en HyperQueue, un planificador de tareas distribuido basado en Rust. Las tareas, particularmente las que dormían durante más de 10 segundos, terminaban misteriosamente. La depuración reveló un cambio aparentemente inofensivo: la descarga de la generación de procesos a `tokio::task::spawn_blocking`. Esto, combinado con `PR_SET_PDEATHSIG` (que envía SIGTERM cuando el proceso padre muere), causó el problema. El hilo worker generado por `spawn_blocking` estaba siendo recolectado por Tokio después de la inactividad, activando la señal SIGTERM. El error se solucionó revirtiendo la optimización, destacando las interacciones sutiles entre concurrencia, llamadas al sistema y gestión de hilos.
Desarrollo