HyperQueueにおける可愛いバグ:SIGTERMと10秒の謎
2025-02-24
Rust製の分散タスクスケジューラであるHyperQueueで、奇妙なバグが発生しました。特に10秒以上スリープするタスクが、謎めいた方法で終了していました。デバッグの結果、一見無害な変更、つまりプロセス生成処理を`tokio::task::spawn_blocking`にオフロードしたことが原因であることが判明しました。これは、`PR_SET_PDEATHSIG`(親プロセスの終了時にSIGTERMを送信する)と組み合わせることで問題を引き起こしました。`spawn_blocking`によって生成されたワーカスレッドは、アイドル状態が続くとTokioによって回収され、SIGTERMシグナルが送信されていました。このバグは、最適化を元に戻すことで修正され、並行処理、システムコール、スレッド管理間の微妙な相互作用が浮き彫りになりました。
開発