Commit 109d8095 authored by Jan Provaznik's avatar Jan Provaznik

Merge branch '11925-geo-sidekiq-nodes-try-to-run-jobs-even-thought-db-is-readonly' into 'master'

Ensure DB is writable before continuing job

Closes #11925

See merge request gitlab-org/gitlab-ee!13943
parents c53eda91 4c431e85
...@@ -5,6 +5,8 @@ class PagesDomainVerificationCronWorker ...@@ -5,6 +5,8 @@ class PagesDomainVerificationCronWorker
include CronjobQueue include CronjobQueue
def perform def perform
return if Gitlab::Database.read_only?
PagesDomain.needs_verification.find_each do |domain| PagesDomain.needs_verification.find_each do |domain|
PagesDomainVerificationWorker.perform_async(domain.id) PagesDomainVerificationWorker.perform_async(domain.id)
end end
......
...@@ -5,6 +5,8 @@ class PagesDomainVerificationWorker ...@@ -5,6 +5,8 @@ class PagesDomainVerificationWorker
# rubocop: disable CodeReuse/ActiveRecord # rubocop: disable CodeReuse/ActiveRecord
def perform(domain_id) def perform(domain_id)
return if Gitlab::Database.read_only?
domain = PagesDomain.find_by(id: domain_id) domain = PagesDomain.find_by(id: domain_id)
return unless domain return unless domain
......
...@@ -10,6 +10,8 @@ class ProjectImportScheduleWorker ...@@ -10,6 +10,8 @@ class ProjectImportScheduleWorker
# rubocop: disable CodeReuse/ActiveRecord # rubocop: disable CodeReuse/ActiveRecord
def perform(project_id) def perform(project_id)
return if Gitlab::Database.read_only?
import_state = ProjectImportState.find_by(project_id: project_id) import_state = ProjectImportState.find_by(project_id: project_id)
raise ImportStateNotFound unless import_state raise ImportStateNotFound unless import_state
......
...@@ -10,6 +10,8 @@ class UpdateAllMirrorsWorker ...@@ -10,6 +10,8 @@ class UpdateAllMirrorsWorker
RESCHEDULE_WAIT = 10.seconds RESCHEDULE_WAIT = 10.seconds
def perform def perform
return if Gitlab::Database.read_only?
scheduling_ran = with_lease do scheduling_ran = with_lease do
schedule_mirrors! schedule_mirrors!
end end
......
...@@ -2,6 +2,15 @@ require 'spec_helper' ...@@ -2,6 +2,15 @@ require 'spec_helper'
describe ProjectImportScheduleWorker do describe ProjectImportScheduleWorker do
describe '#perform' do describe '#perform' do
it 'does nothing if the database is read-only' do
project = create(:project)
allow(Gitlab::Database).to receive(:read_only?).and_return(true)
expect(ProjectImportState).not_to receive(:project_id).with(project_id: project.id)
subject.perform(project.id)
end
it 'schedules an import for a project' do it 'schedules an import for a project' do
import_state = create(:import_state) import_state = create(:import_state)
......
...@@ -10,6 +10,13 @@ describe UpdateAllMirrorsWorker do ...@@ -10,6 +10,13 @@ describe UpdateAllMirrorsWorker do
end end
describe '#perform' do describe '#perform' do
it 'does nothing if the database is read-only' do
allow(Gitlab::Database).to receive(:read_only?).and_return(true)
expect(worker).not_to receive(:schedule_mirrors!)
worker.perform
end
it 'does not execute if cannot get the lease' do it 'does not execute if cannot get the lease' do
stub_exclusive_lease_taken stub_exclusive_lease_taken
......
...@@ -10,6 +10,13 @@ describe PagesDomainVerificationCronWorker do ...@@ -10,6 +10,13 @@ describe PagesDomainVerificationCronWorker do
let!(:reverify) { create(:pages_domain, :reverify) } let!(:reverify) { create(:pages_domain, :reverify) }
let!(:disabled) { create(:pages_domain, :disabled) } let!(:disabled) { create(:pages_domain, :disabled) }
it 'does nothing if the database is read-only' do
allow(Gitlab::Database).to receive(:read_only?).and_return(true)
expect(PagesDomainVerificationWorker).not_to receive(:perform_async).with(reverify.id)
worker.perform
end
it 'enqueues a PagesDomainVerificationWorker for domains needing verification' do it 'enqueues a PagesDomainVerificationWorker for domains needing verification' do
[reverify, disabled].each do |domain| [reverify, disabled].each do |domain|
expect(PagesDomainVerificationWorker).to receive(:perform_async).with(domain.id) expect(PagesDomainVerificationWorker).to receive(:perform_async).with(domain.id)
......
...@@ -8,6 +8,13 @@ describe PagesDomainVerificationWorker do ...@@ -8,6 +8,13 @@ describe PagesDomainVerificationWorker do
let(:domain) { create(:pages_domain) } let(:domain) { create(:pages_domain) }
describe '#perform' do describe '#perform' do
it 'does nothing if the database is read-only' do
allow(Gitlab::Database).to receive(:read_only?).and_return(true)
expect(PagesDomain).not_to receive(:find_by).with(id: domain.id)
worker.perform(domain.id)
end
it 'does nothing for a non-existent domain' do it 'does nothing for a non-existent domain' do
domain.destroy domain.destroy
......
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