在模块教程 KernelSU 解决方案中,我们遇到了一个关于任务调度的问题,具体体现在 backend/src/schedules.rs 文件中的 run 函数。当遇到 Err(AppError::Busy) 错误时,代码将 next_run_at 设置为 now + BUSY_RETRY_MS,而不是保留原始的 due 值。这导致后续的 following() 函数继续使用这个被修改过的值,从而每次执行任务时都存在相同的偏差。
具体的行为表现如下:
- 新建一个计划任务,首次执行时间为 10:00,间隔 60 分钟。
- 在 10:00 时,使队列处于满状态。
- 队列恢复后,计划任务应该在 10:01 执行。
- 但实际上,后续的任务执行时间变成了 11:01、12:01,而不是预期的 11:00、12:00。
此外,还有一个附带的问题:request_key 包含 due 信息,在重试时 key 发生改变,这与“重试同一个槽位”的注释相矛盾。
针对上述问题,我们期望的是只延迟本次任务的触发,而不是影响后续任务的执行。建议可以单独保存重试时间,或者在任务成功后根据原始的 due 值来计算下一个槽位。同时,我们也建议补充关于 Busy 路径的测试,以确保系统的稳定性和可靠性。
评论已关闭