Add a 'circuit breaker' for repo checks
This commit is contained in:
parent
b37d3b9423
commit
97f4ffff1e
4 changed files with 31 additions and 1 deletions
|
@ -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'
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue