Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: Add time.Sleep to mitigate race condition. (#1923)
The ShuffleQueue scheduler strategy has an infrequent race condition, as explained by the comment: ``` // A race condition is possible when the last active table asynchronously // queues a relation. The table finishes (calling `.Done()`) a moment // before the queue receives the `.Push()`. At this point, the queue is // empty and there are no active workers. // // A moment later, the queue receives the `.Push()` and queues a new task. // // This is a very infrequent case according to tests, but it happens. ``` After many attempts at a more elegant solution, I finally yielded: ``` time.Sleep(10 * time.Millisecond) ``` Looks ugly, but after running the tests 300 times (so around 3000 syncs), it works 🤷 ``` ✓ cloudquery/plugin-sdk main* $ go test ./scheduler -count=100 -run TestScheduler ⏱ 15:04:12 ok github.com/cloudquery/plugin-sdk/v4/scheduler 143.523s ✓ cloudquery/plugin-sdk main* $ go test ./scheduler -count=100 -run TestScheduler ⏱ 15:06:56 ok github.com/cloudquery/plugin-sdk/v4/scheduler 142.796s ✓ cloudquery/plugin-sdk main* $ go test ./scheduler -count=100 -run TestScheduler ⏱ 15:09:22 ok github.com/cloudquery/plugin-sdk/v4/scheduler 144.304s ```
- Loading branch information