Add a 'circuit breaker' for repo checks

This commit is contained in:
Jacob Vosmaer 2016-04-12 17:07:54 +02:00
parent b37d3b9423
commit 97f4ffff1e
4 changed files with 31 additions and 1 deletions

View file

@ -275,5 +275,18 @@
.col-sm-10
= f.text_field :sentry_dsn, class: 'form-control'
%fieldset
%legend Repository Checks
.form-group
.col-sm-offset-2.col-sm-10
.checkbox
= f.label :repository_checks_enabled do
= f.check_box :repository_checks_enabled
Enable Repository Checks
.help-block
GitLab will periodically run
%a{ href: 'https://www.kernel.org/pub/software/scm/git/docs/git-fsck.html', target: 'blank' } 'git fsck'
in all project and wiki repositories to look for silent disk corruption issues.
.form-actions
= f.submit 'Save', class: 'btn btn-save'

View file

@ -15,6 +15,7 @@ class RepositoryCheckWorker
# check, only one (or two) will be checked at a time.
project_ids.each do |project_id|
break if Time.now - start >= RUN_TIME
break unless current_settings.repository_checks_enabled
next if !try_obtain_lease(project_id)
@ -45,4 +46,11 @@ class RepositoryCheckWorker
)
lease.try_obtain
end
def current_settings
# No caching of the settings! If we cache them and an admin disables
# this feature, an active RepositoryCheckWorker would keep going for up
# to 1 hour after the feature was disabled.
ApplicationSetting.current || Gitlab::CurrentSettings.fake_application_settings
end
end

View file

@ -34,7 +34,8 @@ module Gitlab
max_artifacts_size: Settings.artifacts['max_size'],
require_two_factor_authentication: false,
two_factor_grace_period: 48,
akismet_enabled: false
akismet_enabled: false,
repository_checks_enabled: true,
)
end

View file

@ -28,4 +28,12 @@ describe RepositoryCheckWorker do
expect(subject.perform).to eq([projects[1].id])
end
it 'does nothing when repository checks are disabled' do
create(:empty_project)
current_settings = double('settings', repository_checks_enabled: false)
expect(subject).to receive(:current_settings) { current_settings }
expect(subject.perform).to eq(nil)
end
end