summaryrefslogtreecommitdiff
path: root/app/workers/concerns/application_worker.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/workers/concerns/application_worker.rb')
-rw-r--r--app/workers/concerns/application_worker.rb17
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