diff options
author | Nick Thomas <nick@gitlab.com> | 2016-11-03 14:12:20 +0000 |
---|---|---|
committer | Nick Thomas <nick@gitlab.com> | 2016-11-04 04:01:08 +0000 |
commit | c1388d0efb79b755c06b9db19fc4ad47af7cf0a3 (patch) | |
tree | 4f1bbfca15dc287d2b14a68f4e5167c18f5a1b10 /app/models/application_setting.rb | |
parent | 3a8a7c1251cef4098ffbc54718ba21736c5e2800 (diff) | |
download | gitlab-ce-c1388d0efb79b755c06b9db19fc4ad47af7cf0a3.tar.gz |
Allow multiple repository storage shards to be enabled, and automatically round-robin between them
Diffstat (limited to 'app/models/application_setting.rb')
-rw-r--r-- | app/models/application_setting.rb | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/app/models/application_setting.rb b/app/models/application_setting.rb index c99aa7772bb..6e7a90e7d9c 100644 --- a/app/models/application_setting.rb +++ b/app/models/application_setting.rb @@ -18,6 +18,7 @@ class ApplicationSetting < ActiveRecord::Base serialize :disabled_oauth_sign_in_sources, Array serialize :domain_whitelist, Array serialize :domain_blacklist, Array + serialize :repository_storages cache_markdown_field :sign_in_text cache_markdown_field :help_page_text @@ -74,9 +75,8 @@ class ApplicationSetting < ActiveRecord::Base presence: true, numericality: { only_integer: true, greater_than: 0 } - validates :repository_storage, - presence: true, - inclusion: { in: ->(_object) { Gitlab.config.repositories.storages.keys } } + validates :repository_storages, presence: true + validate :check_repository_storages validates :enabled_git_access_protocol, inclusion: { in: %w(ssh http), allow_blank: true, allow_nil: true } @@ -166,7 +166,7 @@ class ApplicationSetting < ActiveRecord::Base disabled_oauth_sign_in_sources: [], send_user_confirmation_email: false, container_registry_token_expire_delay: 5, - repository_storage: 'default', + repository_storages: ['default'], user_default_external: false, ) end @@ -201,6 +201,29 @@ class ApplicationSetting < ActiveRecord::Base self.domain_blacklist_raw = file.read end + def repository_storages + value = read_attribute(:repository_storages) + value = [value] if value.is_a?(String) + value = [] if value.nil? + + value + end + + # repository_storage is still required in the API. Remove in 9.0 + def repository_storage + repository_storages.first + end + + def repository_storage=(value) + self.repository_storages = [value] + end + + # Choose one of the available repository storage options. Currently all have + # equal weighting. + def pick_repository_storage + repository_storages.sample + end + def runners_registration_token ensure_runners_registration_token! end @@ -208,4 +231,12 @@ class ApplicationSetting < ActiveRecord::Base def health_check_access_token ensure_health_check_access_token! end + + private + + def check_repository_storages + invalid = repository_storages - Gitlab.config.repositories.storages.keys + errors.add(:repository_storages, "can't include: #{invalid.join(", ")}") unless + invalid.empty? + end end |