diff options
Diffstat (limited to 'lib/gitlab/database/load_balancing/sidekiq_client_middleware.rb')
-rw-r--r-- | lib/gitlab/database/load_balancing/sidekiq_client_middleware.rb | 27 |
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 |