Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-06-20 13:43:29 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-06-20 13:43:29 +0300
commit3b1af5cc7ed2666ff18b718ce5d30fa5a2756674 (patch)
tree3bc4a40e0ee51ec27eabf917c537033c0c5b14d4 /lib/gitlab/database/database_connection_info.rb
parent9bba14be3f2c211bf79e15769cd9b77bc73a13bc (diff)
Add latest changes from gitlab-org/gitlab@16-1-stable-eev16.1.0-rc42
Diffstat (limited to 'lib/gitlab/database/database_connection_info.rb')
-rw-r--r--lib/gitlab/database/database_connection_info.rb71
1 files changed, 71 insertions, 0 deletions
diff --git a/lib/gitlab/database/database_connection_info.rb b/lib/gitlab/database/database_connection_info.rb
new file mode 100644
index 00000000000..57ecbcd64ae
--- /dev/null
+++ b/lib/gitlab/database/database_connection_info.rb
@@ -0,0 +1,71 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Database
+ DatabaseConnectionInfo = Struct.new(
+ :name,
+ :description,
+ :gitlab_schemas,
+ :klass,
+ :fallback_database,
+ :db_dir,
+ :uses_load_balancing,
+ :file_path,
+ keyword_init: true
+ ) do
+ include Gitlab::Utils::StrongMemoize
+
+ def initialize(*)
+ super
+ self.name = name.to_sym
+ self.gitlab_schemas = gitlab_schemas.map(&:to_sym)
+ self.klass = klass.constantize
+ self.fallback_database = fallback_database&.to_sym
+ self.db_dir = Rails.root.join(db_dir || 'db')
+ end
+
+ def self.load_file(yaml_file)
+ content = YAML.load_file(yaml_file)
+ new(**content.deep_symbolize_keys.merge(file_path: yaml_file))
+ end
+
+ def active_record_base?
+ klass == ActiveRecord::Base
+ end
+ private :active_record_base?
+
+ strong_memoize_attr def connection_class
+ klass.connection_class || active_record_base? ? klass : nil
+ end
+
+ strong_memoize_attr def order
+ # Retain order of configurations as they are defined in `config/database.yml`
+ ActiveRecord::Base.configurations
+ .configs_for(env_name: Rails.env)
+ .map(&:name)
+ .index(name.to_s) || 1_000
+ end
+
+ def connection_class_or_fallback(all_databases)
+ if connection_class
+ connection_class
+ elsif fallback_database
+ all_databases.fetch(fallback_database)
+ .connection_class_or_fallback(all_databases)
+ end
+ end
+
+ def has_gitlab_shared?
+ gitlab_schemas.include?(:gitlab_shared)
+ end
+
+ def uses_load_balancing?
+ !!uses_load_balancing
+ end
+
+ def db_docs_dir
+ db_dir.join('docs')
+ end
+ end
+ end
+end