diff options
Diffstat (limited to 'app/workers/concerns/application_worker.rb')
-rw-r--r-- | app/workers/concerns/application_worker.rb | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/app/workers/concerns/application_worker.rb b/app/workers/concerns/application_worker.rb index 843be4896a3..3cba1eb31c5 100644 --- a/app/workers/concerns/application_worker.rb +++ b/app/workers/concerns/application_worker.rb @@ -13,6 +13,7 @@ module ApplicationWorker include Gitlab::SidekiqVersioning::Worker LOGGING_EXTRA_KEY = 'extra' + DEFAULT_DELAY_INTERVAL = 1 included do set_queue @@ -51,6 +52,16 @@ module ApplicationWorker subclass.after_set_class_attribute { subclass.set_queue } end + def perform_async(*args) + # Worker execution for workers with data_consistency set to :delayed or :sticky + # will be delayed to give replication enough time to complete + if utilizes_load_balancing_capabilities? + perform_in(delay_interval, *args) + else + super + end + end + def set_queue queue_name = ::Gitlab::SidekiqConfig::WorkerRouter.global.route(self) sidekiq_options queue: queue_name # rubocop:disable Cop/SidekiqOptionsQueue @@ -111,5 +122,11 @@ module ApplicationWorker Sidekiq::Client.push_bulk('class' => self, 'args' => args_list, 'at' => schedule) end end + + protected + + def delay_interval + DEFAULT_DELAY_INTERVAL.seconds + end end end |