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
path: root/lib
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-05-24 21:09:18 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-05-24 21:09:18 +0300
commit8015f09545c35b833f4955fc2e0b8f1a3214cbcb (patch)
treee28c5add700b9f3d12eabe1361889545785b29d4 /lib
parent8e1bb8745bafe36f273ce4a095c3576c38ceb8b4 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib')
-rw-r--r--lib/api/internal/mail_room.rb4
-rw-r--r--lib/gitlab/database.rb5
-rw-r--r--lib/gitlab/database/load_balancing/configuration.rb59
-rw-r--r--lib/gitlab/database/load_balancing/load_balancer.rb8
-rw-r--r--lib/gitlab/database/query_analyzers/gitlab_schemas_metrics.rb8
-rw-r--r--lib/gitlab/metrics/samplers/database_sampler.rb2
6 files changed, 17 insertions, 69 deletions
diff --git a/lib/api/internal/mail_room.rb b/lib/api/internal/mail_room.rb
index 238a83670d6..1e5e8c4c4e2 100644
--- a/lib/api/internal/mail_room.rb
+++ b/lib/api/internal/mail_room.rb
@@ -12,6 +12,10 @@ module API
class MailRoom < ::API::Base
feature_category :service_desk
+ format :json
+ content_type :txt, 'text/plain'
+ default_format :txt
+
before do
authenticate_gitlab_mailroom_request!
end
diff --git a/lib/gitlab/database.rb b/lib/gitlab/database.rb
index 909dfc4f92d..87ff2a53ac3 100644
--- a/lib/gitlab/database.rb
+++ b/lib/gitlab/database.rb
@@ -223,8 +223,11 @@ module Gitlab
def self.db_config_for_connection(connection)
return unless connection
+ # For a ConnectionProxy we want to avoid ambiguous db_config as it may
+ # sometimes default to replica so we always return the primary config
+ # instead.
if connection.is_a?(::Gitlab::Database::LoadBalancing::ConnectionProxy)
- return connection.load_balancer.configuration.primary_db_config
+ return connection.load_balancer.configuration.db_config
end
# During application init we might receive `NullPool`
diff --git a/lib/gitlab/database/load_balancing/configuration.rb b/lib/gitlab/database/load_balancing/configuration.rb
index 0ddc745ebae..59b08fac7e9 100644
--- a/lib/gitlab/database/load_balancing/configuration.rb
+++ b/lib/gitlab/database/load_balancing/configuration.rb
@@ -41,8 +41,6 @@ module Gitlab
end
end
- config.reuse_primary_connection!
-
config
end
@@ -61,44 +59,17 @@ module Gitlab
disconnect_timeout: 120,
use_tcp: false
}
-
- # Temporary model for GITLAB_LOAD_BALANCING_REUSE_PRIMARY_
- # To be removed with FF
- @primary_model = nil
end
def db_config_name
@model.connection_db_config.name.to_sym
end
- # With connection re-use the primary connection can be overwritten
- # to be used from different model
- def primary_connection_specification_name
- primary_model_or_model_if_enabled.connection_specification_name
- end
-
- def primary_model_or_model_if_enabled
- if use_dedicated_connection?
- @model
- else
- @primary_model || @model
- end
- end
-
- def use_dedicated_connection?
- return true unless @primary_model # We can only use dedicated connection, if re-use of connections is disabled
- return false unless ::Gitlab::SafeRequestStore.active?
-
- ::Gitlab::SafeRequestStore.fetch(:force_no_sharing_primary_model) do
- ::Feature::FlipperFeature.table_exists? && ::Feature.enabled?(:force_no_sharing_primary_model)
- end
- end
-
- def primary_db_config
- primary_model_or_model_if_enabled.connection_db_config
+ def connection_specification_name
+ @model.connection_specification_name
end
- def replica_db_config
+ def db_config
@model.connection_db_config
end
@@ -131,30 +102,6 @@ module Gitlab
service_discovery[:record].present?
end
-
- # TODO: This is temporary code to allow re-use of primary connection
- # if the two connections are pointing to the same host. This is needed
- # to properly support transaction visibility.
- #
- # This behavior is required to support [Phase 3](https://gitlab.com/groups/gitlab-org/-/epics/6160#progress).
- # This method is meant to be removed as soon as it is finished.
- #
- # The remapping is done as-is:
- # export GITLAB_LOAD_BALANCING_REUSE_PRIMARY_<name-of-connection>=<new-name-of-connection>
- #
- # Ex.:
- # export GITLAB_LOAD_BALANCING_REUSE_PRIMARY_ci=main
- #
- def reuse_primary_connection!
- new_connection = ENV["GITLAB_LOAD_BALANCING_REUSE_PRIMARY_#{db_config_name}"]
- return unless new_connection.present?
-
- @primary_model = Gitlab::Database.database_base_models[new_connection.to_sym]
-
- unless @primary_model
- raise "Invalid value for 'GITLAB_LOAD_BALANCING_REUSE_PRIMARY_#{db_config_name}=#{new_connection}'"
- end
- end
end
end
end
diff --git a/lib/gitlab/database/load_balancing/load_balancer.rb b/lib/gitlab/database/load_balancing/load_balancer.rb
index 191ebe18b8a..d369376a6c4 100644
--- a/lib/gitlab/database/load_balancing/load_balancer.rb
+++ b/lib/gitlab/database/load_balancing/load_balancer.rb
@@ -232,14 +232,14 @@ module Gitlab
# host - An optional host name to use instead of the default one.
# port - An optional port to connect to.
def create_replica_connection_pool(pool_size, host = nil, port = nil)
- db_config = @configuration.replica_db_config
+ db_config = @configuration.db_config
env_config = db_config.configuration_hash.dup
env_config[:pool] = pool_size
env_config[:host] = host if host
env_config[:port] = port if port
- replica_db_config = ActiveRecord::DatabaseConfigurations::HashConfig.new(
+ db_config = ActiveRecord::DatabaseConfigurations::HashConfig.new(
db_config.env_name,
db_config.name + REPLICA_SUFFIX,
env_config
@@ -249,7 +249,7 @@ module Gitlab
# as it will rewrite ActiveRecord::Base.connection
ActiveRecord::ConnectionAdapters::ConnectionHandler
.new
- .establish_connection(replica_db_config)
+ .establish_connection(db_config)
end
# ActiveRecord::ConnectionAdapters::ConnectionHandler handles fetching,
@@ -258,7 +258,7 @@ module Gitlab
# rubocop:disable Database/MultipleDatabases
def pool
ActiveRecord::Base.connection_handler.retrieve_connection_pool(
- @configuration.primary_connection_specification_name,
+ @configuration.connection_specification_name,
role: ActiveRecord::Base.writing_role,
shard: ActiveRecord::Base.default_shard
) || raise(::ActiveRecord::ConnectionNotEstablished)
diff --git a/lib/gitlab/database/query_analyzers/gitlab_schemas_metrics.rb b/lib/gitlab/database/query_analyzers/gitlab_schemas_metrics.rb
index 391375d472f..06e2b114c91 100644
--- a/lib/gitlab/database/query_analyzers/gitlab_schemas_metrics.rb
+++ b/lib/gitlab/database/query_analyzers/gitlab_schemas_metrics.rb
@@ -27,15 +27,9 @@ module Gitlab
# to reduce amount of labels sort schemas used
gitlab_schemas = gitlab_schemas.to_a.sort.join(",")
- # Temporary feature to observe relation of `gitlab_schemas` to `db_config_name`
- # depending on primary model
- ci_dedicated_primary_connection = ::Ci::ApplicationRecord.connection_class? &&
- ::Ci::ApplicationRecord.load_balancer.configuration.use_dedicated_connection?
-
schemas_metrics.increment({
gitlab_schemas: gitlab_schemas,
- db_config_name: db_config_name,
- ci_dedicated_primary_connection: ci_dedicated_primary_connection
+ db_config_name: db_config_name
})
end
diff --git a/lib/gitlab/metrics/samplers/database_sampler.rb b/lib/gitlab/metrics/samplers/database_sampler.rb
index 965d85e20e5..86372973c82 100644
--- a/lib/gitlab/metrics/samplers/database_sampler.rb
+++ b/lib/gitlab/metrics/samplers/database_sampler.rb
@@ -72,7 +72,7 @@ module Gitlab
{
host: host.host,
port: host.port,
- class: load_balancer.configuration.primary_connection_specification_name,
+ class: load_balancer.configuration.connection_specification_name,
db_config_name: Gitlab::Database.db_config_name(host.connection)
}
end