Class: Gitlab::Database::LoadBalancing::Setup
- Inherits:
-
Object
- Object
- Gitlab::Database::LoadBalancing::Setup
- Defined in:
- lib/gitlab/database/load_balancing/setup.rb
Overview
Class for setting up load balancing of a specific model.
Instance Attribute Summary collapse
-
#configuration ⇒ Object
readonly
Returns the value of attribute configuration.
-
#model ⇒ Object
readonly
Returns the value of attribute model.
Instance Method Summary collapse
- #configure_connection ⇒ Object
-
#initialize(model, start_service_discovery: false) ⇒ Setup
constructor
A new instance of Setup.
- #load_balancer ⇒ Object
- #setup ⇒ Object
- #setup_connection_proxy ⇒ Object
- #setup_service_discovery ⇒ Object
Constructor Details
#initialize(model, start_service_discovery: false) ⇒ Setup
Returns a new instance of Setup.
10 11 12 13 14 |
# File 'lib/gitlab/database/load_balancing/setup.rb', line 10 def initialize(model, start_service_discovery: false) @model = model @configuration = Configuration.for_model(model) @start_service_discovery = start_service_discovery end |
Instance Attribute Details
#configuration ⇒ Object (readonly)
Returns the value of attribute configuration.
8 9 10 |
# File 'lib/gitlab/database/load_balancing/setup.rb', line 8 def configuration @configuration end |
#model ⇒ Object (readonly)
Returns the value of attribute model.
8 9 10 |
# File 'lib/gitlab/database/load_balancing/setup.rb', line 8 def model @model end |
Instance Method Details
#configure_connection ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/gitlab/database/load_balancing/setup.rb', line 28 def configure_connection db_config_object = @model.connection_db_config hash = db_config_object.configuration_hash.merge( prepared_statements: false, pool: Gitlab::Database.default_pool_size ) hash_config = ActiveRecord::DatabaseConfigurations::HashConfig.new( db_config_object.env_name, db_config_object.name, hash ) @model.establish_connection(hash_config) end |
#load_balancer ⇒ Object
65 66 67 |
# File 'lib/gitlab/database/load_balancing/setup.rb', line 65 def load_balancer @load_balancer ||= LoadBalancer.new(configuration) end |
#setup ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/gitlab/database/load_balancing/setup.rb', line 16 def setup configure_connection setup_connection_proxy setup_service_discovery ::Gitlab::Database::LoadBalancing::Logger.debug( event: :setup, model: model.name, start_service_discovery: @start_service_discovery ) end |
#setup_connection_proxy ⇒ Object
45 46 47 48 49 50 51 |
# File 'lib/gitlab/database/load_balancing/setup.rb', line 45 def setup_connection_proxy # We just use a simple `class_attribute` here so we don't need to # inject any modules and/or expose unnecessary methods. setup_class_attribute(:load_balancer, load_balancer) setup_class_attribute(:connection, ConnectionProxy.new(load_balancer)) setup_class_attribute(:sticking, Sticking.new(load_balancer)) end |
#setup_service_discovery ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/gitlab/database/load_balancing/setup.rb', line 53 def setup_service_discovery return unless configuration.service_discovery_enabled? sv = ServiceDiscovery.new(load_balancer, **configuration.service_discovery) load_balancer.service_discovery = sv sv.perform_service_discovery sv.start if @start_service_discovery end |