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:
Diffstat (limited to 'lib/gitlab/database/load_balancing/sidekiq_client_middleware.rb')
-rw-r--r--lib/gitlab/database/load_balancing/sidekiq_client_middleware.rb27
1 files changed, 18 insertions, 9 deletions
diff --git a/lib/gitlab/database/load_balancing/sidekiq_client_middleware.rb b/lib/gitlab/database/load_balancing/sidekiq_client_middleware.rb
index 0e36ebbc3ee..518a812b406 100644
--- a/lib/gitlab/database/load_balancing/sidekiq_client_middleware.rb
+++ b/lib/gitlab/database/load_balancing/sidekiq_client_middleware.rb
@@ -4,13 +4,15 @@ module Gitlab
module Database
module LoadBalancing
class SidekiqClientMiddleware
+ include Gitlab::Utils::StrongMemoize
+
def call(worker_class, job, _queue, _redis_pool)
# Mailers can't be constantized
worker_class = worker_class.to_s.safe_constantize
if load_balancing_enabled?(worker_class)
job['worker_data_consistency'] = worker_class.get_data_consistency
- set_data_consistency_location!(job) unless location_already_provided?(job)
+ set_data_consistency_locations!(job) unless job['wal_locations']
else
job['worker_data_consistency'] = ::WorkerAttributes::DEFAULT_DATA_CONSISTENCY
end
@@ -27,16 +29,23 @@ module Gitlab
worker_class.get_data_consistency_feature_flag_enabled?
end
- def set_data_consistency_location!(job)
- if Session.current.use_primary?
- job['database_write_location'] = load_balancer.primary_write_location
- else
- job['database_replica_location'] = load_balancer.host.database_replica_location
- end
+ def set_data_consistency_locations!(job)
+ # Once we add support for multiple databases to our load balancer, we would use something like this:
+ # job['wal_locations'] = Gitlab::Database::DATABASES.transform_values do |connection|
+ # connection.load_balancer.primary_write_location
+ # end
+ #
+ job['wal_locations'] = { Gitlab::Database::MAIN_DATABASE_NAME.to_sym => wal_location } if wal_location
end
- def location_already_provided?(job)
- job['database_replica_location'] || job['database_write_location']
+ def wal_location
+ strong_memoize(:wal_location) do
+ if Session.current.use_primary?
+ load_balancer.primary_write_location
+ else
+ load_balancer.host.database_replica_location
+ end
+ end
end
def load_balancer