diff options
Diffstat (limited to 'app/workers/concerns/waitable_worker.rb')
-rw-r--r-- | app/workers/concerns/waitable_worker.rb | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/app/workers/concerns/waitable_worker.rb b/app/workers/concerns/waitable_worker.rb index f995aced542..b9ea585d49b 100644 --- a/app/workers/concerns/waitable_worker.rb +++ b/app/workers/concerns/waitable_worker.rb @@ -9,6 +9,15 @@ module WaitableWorker # Short-circuit: it's more efficient to do small numbers of jobs inline return bulk_perform_inline(args_list) if args_list.size <= 3 + # Don't wait if there's too many jobs to be waited for. Not including the + # waiter allows them to be deduplicated and it skips waiting for jobs that + # are not likely to finish within the timeout. This assumes we can process + # 10 jobs per second: + # https://gitlab.com/gitlab-com/gl-infra/scalability/-/issues/205 + if ::Feature.enabled?(:skip_job_waiter_for_large_batches) + return bulk_perform_async(args_list) if args_list.length >= 10 * timeout + end + waiter = Gitlab::JobWaiter.new(args_list.size, worker_label: self.to_s) # Point all the bulk jobs at the same JobWaiter. Converts, [[1], [2], [3]] |