Check if Geo secondary role is enabled rather than database config file

parent 0a7c7d25
...@@ -22,7 +22,7 @@ class GeoFileDownloadDispatchWorker ...@@ -22,7 +22,7 @@ class GeoFileDownloadDispatchWorker
# files, excluding ones in progress. # files, excluding ones in progress.
# 5. Quit when we have scheduled all downloads or exceeded an hour. # 5. Quit when we have scheduled all downloads or exceeded an hour.
def perform def perform
return unless Gitlab::Geo.configured? return unless Gitlab::Geo.secondary_role_enabled?
return unless Gitlab::Geo.secondary? return unless Gitlab::Geo.secondary?
@start_time = Time.now @start_time = Time.now
......
...@@ -7,7 +7,7 @@ class GeoRepositorySyncWorker ...@@ -7,7 +7,7 @@ class GeoRepositorySyncWorker
LAST_SYNC_INTERVAL = 24.hours LAST_SYNC_INTERVAL = 24.hours
def perform def perform
return unless Gitlab::Geo.configured? return unless Gitlab::Geo.secondary_role_enabled?
return unless Gitlab::Geo.primary_node.present? return unless Gitlab::Geo.primary_node.present?
start_time = Time.now start_time = Time.now
...@@ -20,7 +20,7 @@ class GeoRepositorySyncWorker ...@@ -20,7 +20,7 @@ class GeoRepositorySyncWorker
project_ids.each do |project_id| project_ids.each do |project_id|
begin begin
break if over_time?(start_time) break if over_time?(start_time)
break unless Gitlab::Geo.current_node_enabled? break unless node_enabled?
# We try to obtain a lease here for the entire sync process because we # We try to obtain a lease here for the entire sync process because we
# want to sync the repositories continuously at a controlled rate # want to sync the repositories continuously at a controlled rate
...@@ -73,6 +73,16 @@ class GeoRepositorySyncWorker ...@@ -73,6 +73,16 @@ class GeoRepositorySyncWorker
Time.now - start_time >= RUN_TIME Time.now - start_time >= RUN_TIME
end end
def node_enabled?
# Only check every minute to avoid polling the DB excessively
unless @last_enabled_check.present? && (Time.now - @last_enabled_check > 1.minute)
@last_enabled_check = Time.now
@current_node_enabled = nil
end
@current_node_enabled ||= Gitlab::Geo.current_node_enabled?
end
def try_obtain_lease def try_obtain_lease
lease = Gitlab::ExclusiveLease.new(lease_key, timeout: lease_timeout).try_obtain lease = Gitlab::ExclusiveLease.new(lease_key, timeout: lease_timeout).try_obtain
......
...@@ -112,7 +112,7 @@ module API ...@@ -112,7 +112,7 @@ module API
end end
def require_node_to_have_tracking_db! def require_node_to_have_tracking_db!
not_found! 'Geo node does not have its tracking database enabled.' unless Gitlab::Geo.configured? not_found! 'Geo node does not have its tracking database enabled.' unless Gitlab::Geo.secondary_role_enabled?
end end
end end
end end
......
...@@ -42,10 +42,6 @@ module Gitlab ...@@ -42,10 +42,6 @@ module Gitlab
Gitlab::Geo.current_node.reload.enabled? Gitlab::Geo.current_node.reload.enabled?
end end
def self.configured?
Rails.configuration.respond_to?(:geo_database)
end
def self.primary_role_enabled? def self.primary_role_enabled?
Gitlab.config.geo_primary_role['enable'] Gitlab.config.geo_primary_role['enable']
end end
......
...@@ -3,7 +3,7 @@ module Gitlab ...@@ -3,7 +3,7 @@ module Gitlab
class HealthCheck class HealthCheck
def self.perform_checks def self.perform_checks
return '' unless Gitlab::Geo.secondary? return '' unless Gitlab::Geo.secondary?
return 'The Geo database configuration file is missing.' unless Gitlab::Geo.configured? return 'The Geo database configuration file is missing.' unless self.geo_database_configured?
return 'The Geo node has a database that is not configured for streaming replication with the primary node.' unless self.database_secondary? return 'The Geo node has a database that is not configured for streaming replication with the primary node.' unless self.database_secondary?
database_version = self.get_database_version.to_i database_version = self.get_database_version.to_i
...@@ -57,6 +57,10 @@ module Gitlab ...@@ -57,6 +57,10 @@ module Gitlab
.first .first
.fetch('pg_is_in_recovery') == 't' .fetch('pg_is_in_recovery') == 't'
end end
def self.geo_database_configured?
Rails.configuration.respond_to?(:geo_database)
end
end end
end end
end end
...@@ -308,8 +308,8 @@ describe API::Geo, api: true do ...@@ -308,8 +308,8 @@ describe API::Geo, api: true do
expect(response).to match_response_schema('geo_node_status') expect(response).to match_response_schema('geo_node_status')
end end
it 'responds with a 404 when the tracking database is disabled' do it 'responds with a 404 when the secondary role is disabled' do
allow(Gitlab::Geo).to receive(:configured?).and_return(false) allow(Gitlab::Geo).to receive(:secondary_role_enabled?).and_return(false)
get api('/geo/status'), nil, request.headers get api('/geo/status'), nil, request.headers
......
...@@ -13,10 +13,10 @@ describe GeoFileDownloadDispatchWorker do ...@@ -13,10 +13,10 @@ describe GeoFileDownloadDispatchWorker do
subject { described_class.new } subject { described_class.new }
describe '#perform' do describe '#perform' do
it 'does not schedule anything when tracking DB is not available' do it 'does not schedule anything when secondary role is disabled' do
create(:lfs_object, :with_file) create(:lfs_object, :with_file)
allow(Rails.configuration).to receive(:respond_to?).with(:geo_database) { false } allow(Gitlab::Geo).to receive(:secondary_role_enabled?) { false }
expect(GeoFileDownloadWorker).not_to receive(:perform_async) expect(GeoFileDownloadWorker).not_to receive(:perform_async)
......
...@@ -52,8 +52,8 @@ describe GeoRepositorySyncWorker do ...@@ -52,8 +52,8 @@ describe GeoRepositorySyncWorker do
subject.perform subject.perform
end end
it 'does not perform Geo::RepositorySyncService when tracking DB is not available' do it 'does not perform Geo::RepositorySyncService when secondary role is disabled' do
allow(Rails.configuration).to receive(:respond_to?).with(:geo_database) { false } allow(Gitlab::Geo).to receive(:secondary_role_enabled?) { false }
expect(Geo::RepositorySyncService).not_to receive(:new) expect(Geo::RepositorySyncService).not_to receive(:new)
......
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