mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-10-26 21:26:39 +00:00
* fix(scheduler): read the lease owner under SQLite's writer lock release_dispatch_lease guards on the lease owner and then writes the status its caller asked for — "enabled" for a scheduled dispatch. It read the row with session.get(..., with_for_update=True), and FOR UPDATE is ignored on SQLite, so that guard ran against whatever snapshot the plain SELECT saw. A user pausing a task while its dispatch was in flight therefore lost the pause: pause clears lease_owner, which is exactly what the guard checks, but the release had already read the pre-pause row, passed the check, and overwrote status with "enabled". The API had answered "paused", the task row went back to enabled with next_run_at untouched, and the scheduler kept firing it. The read now goes through _lock_task, the helper every other mutating path here uses, which takes the writer up front on SQLite (FOR UPDATE keeps doing the work on Postgres, where a pause that commits first is seen and the release declines). The reconciliation paths in this file keep their documented "no SQLite writer emulation" trade-off. * docs(changelog): note the scheduler lease-release lock fix (#5777) --------- Co-authored-by: Willem Jiang <willem.jiang@gmail.com>