Class: Gitlab::Database::LoadBalancing::Setup

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/database/load_balancing/setup.rb

Overview

Class for setting up load balancing of a specific model.

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#configurationObject (readonly)

Returns the value of attribute configuration.



8
9
10
# File 'lib/gitlab/database/load_balancing/setup.rb', line 8

def configuration
  @configuration
end

#modelObject (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_connectionObject



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_balancerObject



65
66
67
# File 'lib/gitlab/database/load_balancing/setup.rb', line 65

def load_balancer
  @load_balancer ||= LoadBalancer.new(configuration)
end

#setupObject



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_proxyObject



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_discoveryObject



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