Commit 5bf83afb authored by Gabriel Mazetto's avatar Gabriel Mazetto

Don't run sidekiq bulk notify worker on readonly nodes

parent 660e23c4
......@@ -24,6 +24,8 @@ class GeoNode < ActiveRecord::Base
validates :primary, uniqueness: { message: 'primary node already exists' }, if: :primary
validates :schema, inclusion: %w(http https)
after_save :refresh_bulk_notify_worker_status
after_destroy :refresh_bulk_notify_worker_status
after_destroy :destroy_orphaned_geo_node_key
def uri
......@@ -54,4 +56,8 @@ class GeoNode < ActiveRecord::Base
self.geo_node_key.destroy
end
def refresh_bulk_notify_worker_status
Gitlab::Geo.primary? ? Gitlab::Geo.bulk_notify_job.try(:enable!) : Gitlab::Geo.bulk_notify_job.try(:disable!)
end
end
......@@ -5,7 +5,6 @@ class GeoBulkNotifyWorker
def perform
return unless Gitlab::Geo.enabled?
Geo::NotifyNodesService.new.execute
end
end
......@@ -25,6 +25,9 @@ Sidekiq.configure_server do |config|
cron_jobs.each { |k,v| cron_jobs[k]['class'] = cron_jobs[k].delete('job_class') }
Sidekiq::Cron::Job.load_from_hash! cron_jobs
# Gitlab Geo: enable bulk notify job only on primary node
Gitlab::Geo.bulk_notify_job.disable! unless Gitlab::Geo.primary?
# Database pool should be at least `sidekiq_concurrency` + 2
# For more info, see: https://github.com/mperham/sidekiq/blob/master/4.0-Upgrade.md
config = ActiveRecord::Base.configurations[Rails.env] ||
......
......@@ -20,8 +20,12 @@ module Gitlab
RequestStore.store[:geo_node_enabled] ||= GeoNode.exists?
end
def self.primary?
RequestStore.store[:geo_node_primary?] ||= self.enabled? && self.current_node && self.current_node.primary?
end
def self.readonly?
RequestStore.store[:geo_node_readonly] ||= self.enabled? && self.current_node && !self.current_node.primary?
RequestStore.store[:geo_node_readonly?] ||= self.enabled? && self.current_node && !self.current_node.primary?
end
def self.geo_node?(host:, port:)
......@@ -31,5 +35,9 @@ module Gitlab
def self.notify_update(project)
::Geo::EnqueueUpdateService.new(project).execute
end
def self.bulk_notify_job
Sidekiq::Cron::Job.find 'geo_bulk_notify_worker'
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment