在模块教程 KernelSU 解决方案中,我们讨论了关于schedules.rs文件中的run()函数在队列满时如何处理next_run_at的更新问题。当前实现中,当run()在队列满时将next_run_at更新为now + BUSY_RETRY_MS,这会导致重试后的run()将这个值视为due,进而影响整个网格的时间线后移,并改变request_key,使得幂等保护失效。例如,一个间隔为60分钟的计划,在首次运行时间10:00遇到Busy,之后的运行时间会变成10:01、11:01、12:01等,多次Busy会导致时间累加。为了解决这个问题,我们需要确保重试仅改变本次触发时间,而保持原网格与原request_key不变。为此,我们可以在schedules_tests.rs中增加Busy用例,以验证恢复后next_run_at是否仍在first_run_at + k * interval上。这需要我们调整代码逻辑,确保重试机制不会影响原有的时间线安排和请求键值。