在模块教程 KernelSU 解决方案中,我们讨论了如何处理 backend/src/schedules.rs 文件中 run() 函数的 Busy 处理逻辑。该逻辑在队列繁忙时,将计划的 next_run_at 直接设置为“现在 + 1 分钟”。这种做法虽然可以暂时缓解队列压力,但会导致时间网格的偏移,并造成网格无法自行恢复的问题。具体来说,当任务在 10:00 执行时队列满,其计划时间被改到 10:01,导致实际执行时间变为 10:01、11:01、12:01,每次队列满时都会进一步偏移。此外,request_key 使用 due 拼接,在重试时 key 会发生变化,与代码注释中“同一个槽位”的描述不符。因此,我们期望重试操作不会改变网格,仅推迟本次执行。目前,针对这一路径的测试尚未实现。为了解决这个问题,我们需要重新设计重试逻辑,确保在队列繁忙时,任务的执行时间可以适当推迟,而不会导致时间网格的偏移。同时,我们需要更新 request_key 的生成方式,使其在重试时保持不变,以符合“同一个槽位”的描述。此外,我们还需要编写针对这一路径的测试,以确保解决方案的有效性。
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议。转载请注明来自KernelSU分享库 !
评论已关闭