Commit f37f28b9 authored by Rémy Coutable's avatar Rémy Coutable

Fix race cond. in ApplicationSettingImplementation.create_from_defaults

Signed-off-by: default avatarRémy Coutable <remy@rymai.me>
parent a6e9175f
...@@ -223,4 +223,11 @@ class ApplicationSetting < ApplicationRecord ...@@ -223,4 +223,11 @@ class ApplicationSetting < ApplicationRecord
reset_memoized_terms reset_memoized_terms
end end
after_commit :expire_performance_bar_allowed_user_ids_cache, if: -> { previous_changes.key?('performance_bar_allowed_group_id') } after_commit :expire_performance_bar_allowed_user_ids_cache, if: -> { previous_changes.key?('performance_bar_allowed_group_id') }
def self.create_from_defaults
super
rescue ActiveRecord::RecordNotUnique
# We already have an ApplicationSetting record, so just return it.
current_without_cache
end
end end
# frozen_string_literal: true
puts "Creating the default ApplicationSetting record.".color(:green)
Gitlab::CurrentSettings.current_application_settings
# Details https://gitlab.com/gitlab-org/gitlab-ce/issues/46241
puts "Enable hashed storage for every new projects.".color(:green)
ApplicationSetting.current_without_cache.update!(hashed_storage_enabled: true)
print '.'
# frozen_string_literal: true
# Enable hashed storage, in development mode, for all projects by default.
Gitlab::Seeder.quiet do
ApplicationSetting.create_from_defaults unless ApplicationSetting.current_without_cache
ApplicationSetting.current_without_cache.update!(hashed_storage_enabled: true)
print '.'
end
# We want to enable hashed storage for every new project in development
# Details https://gitlab.com/gitlab-org/gitlab-ce/issues/46241
Gitlab::Seeder.quiet do
ApplicationSetting.create_from_defaults unless ApplicationSetting.current_without_cache
ApplicationSetting.current_without_cache.update!(hashed_storage_enabled: true)
print '.'
end
# frozen_string_literal: true
puts "Creating the default ApplicationSetting record.".color(:green) puts "Creating the default ApplicationSetting record.".color(:green)
Gitlab::CurrentSettings.current_application_settings Gitlab::CurrentSettings.current_application_settings
...@@ -6,6 +6,7 @@ describe ApplicationSetting do ...@@ -6,6 +6,7 @@ describe ApplicationSetting do
let(:setting) { described_class.create_from_defaults } let(:setting) { described_class.create_from_defaults }
it { include(CacheableAttributes) } it { include(CacheableAttributes) }
it { include(ApplicationSettingImplementation) }
it { expect(described_class.current_without_cache).to eq(described_class.last) } it { expect(described_class.current_without_cache).to eq(described_class.last) }
it { expect(setting).to be_valid } it { expect(setting).to be_valid }
...@@ -286,12 +287,10 @@ describe ApplicationSetting do ...@@ -286,12 +287,10 @@ describe ApplicationSetting do
end end
context 'restrict creating duplicates' do context 'restrict creating duplicates' do
before do let!(:current_settings) { described_class.create_from_defaults }
described_class.create_from_defaults
end
it 'raises an record creation violation if already created' do it 'returns the current settings' do
expect { described_class.create_from_defaults }.to raise_error(ActiveRecord::RecordNotUnique) expect(described_class.create_from_defaults).to eq(current_settings)
end 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