Module: Gitlab::Database::LoadBalancing::WalTrackingSender
- Defined in:
- lib/gitlab/database/load_balancing/wal_tracking_sender.rb
Instance Method Summary collapse
- #wal_location_for(load_balancer) ⇒ Object
- #wal_location_source(lb) ⇒ Object
- #wal_location_sources_by_db_name ⇒ Object
- #wal_locations_by_db_name ⇒ Object
Instance Method Details
#wal_location_for(load_balancer) ⇒ Object
17 18 19 20 21 22 23 24 25 26 |
# File 'lib/gitlab/database/load_balancing/wal_tracking_sender.rb', line 17 def wal_location_for(load_balancer) # When only using the primary there's no need for any WAL queries. return if load_balancer.primary_only? if SessionMap.current(load_balancer).use_primary? load_balancer.primary_write_location else load_balancer.host&.database_replica_location || load_balancer.primary_write_location end end |
#wal_location_source(lb) ⇒ Object
38 39 40 41 42 43 44 45 |
# File 'lib/gitlab/database/load_balancing/wal_tracking_sender.rb', line 38 def wal_location_source(lb) if ::Gitlab::Database::LoadBalancing.primary?(lb.name) || ::Gitlab::Database::LoadBalancing::SessionMap.current(lb).use_primary? ::Gitlab::Database::LoadBalancing::ROLE_PRIMARY else ::Gitlab::Database::LoadBalancing::ROLE_REPLICA end end |
#wal_location_sources_by_db_name ⇒ Object
28 29 30 31 32 33 34 35 36 |
# File 'lib/gitlab/database/load_balancing/wal_tracking_sender.rb', line 28 def wal_location_sources_by_db_name {}.tap do |locations| ::Gitlab::Database::LoadBalancing.each_load_balancer do |lb| if (location = wal_location_source(lb)) locations[lb.name] = location end end end end |
#wal_locations_by_db_name ⇒ Object
7 8 9 10 11 12 13 14 15 |
# File 'lib/gitlab/database/load_balancing/wal_tracking_sender.rb', line 7 def wal_locations_by_db_name {}.tap do |locations| ::Gitlab::Database::LoadBalancing.each_load_balancer do |lb| if (location = wal_location_for(lb)) locations[lb.name] = location end end end end |