Commit 97f4ffff authored by Jacob Vosmaer's avatar Jacob Vosmaer

Add a 'circuit breaker' for repo checks

parent b37d3b94
...@@ -275,5 +275,18 @@ ...@@ -275,5 +275,18 @@
.col-sm-10 .col-sm-10
= f.text_field :sentry_dsn, class: 'form-control' = 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 .form-actions
= f.submit 'Save', class: 'btn btn-save' = f.submit 'Save', class: 'btn btn-save'
...@@ -15,6 +15,7 @@ class RepositoryCheckWorker ...@@ -15,6 +15,7 @@ class RepositoryCheckWorker
# check, only one (or two) will be checked at a time. # check, only one (or two) will be checked at a time.
project_ids.each do |project_id| project_ids.each do |project_id|
break if Time.now - start >= RUN_TIME break if Time.now - start >= RUN_TIME
break unless current_settings.repository_checks_enabled
next if !try_obtain_lease(project_id) next if !try_obtain_lease(project_id)
...@@ -45,4 +46,11 @@ class RepositoryCheckWorker ...@@ -45,4 +46,11 @@ class RepositoryCheckWorker
) )
lease.try_obtain lease.try_obtain
end 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 end
...@@ -34,7 +34,8 @@ module Gitlab ...@@ -34,7 +34,8 @@ module Gitlab
max_artifacts_size: Settings.artifacts['max_size'], max_artifacts_size: Settings.artifacts['max_size'],
require_two_factor_authentication: false, require_two_factor_authentication: false,
two_factor_grace_period: 48, two_factor_grace_period: 48,
akismet_enabled: false akismet_enabled: false,
repository_checks_enabled: true,
) )
end end
......
...@@ -28,4 +28,12 @@ describe RepositoryCheckWorker do ...@@ -28,4 +28,12 @@ describe RepositoryCheckWorker do
expect(subject.perform).to eq([projects[1].id]) expect(subject.perform).to eq([projects[1].id])
end 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 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