Rust分布式任务调度器HyperQueue中的一个奇葩Bug

2025-02-24

作者在Rust编写的分布式任务调度器HyperQueue中发现了一个奇特的bug:任务在运行一段时间后会被终止,尤其当任务睡眠时间超过10秒时。通过`git bisect`定位到问题代码,发现是将进程创建操作移到`tokio::task::spawn_blocking`中导致的。原因是`PR_SET_PDEATHSIG`设置的父进程死亡信号,在`spawn_blocking`后,目标变成了工作线程,而该线程会在几秒钟空闲后被`tokio`回收,从而导致任务收到`SIGTERM`信号被终止。最终,作者通过回滚代码修复了bug,并补充了相关测试用例。

开发 HyperQueue