4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/active_record/connection_adapters/maria_db_cluster_pool_adapter.rb', line 4
def maria_db_cluster_pool_connection(config)
pool_weights = {}
config = config.with_indifferent_access
default_config = {:pool_weight => 1}.merge(config.merge(:adapter => config[:pool_adapter])).with_indifferent_access
default_config.delete(:server_pool)
default_config.delete(:pool_adapter)
pool_connections = []
config[:server_pool].each do |server_config|
server_config = default_config.merge(server_config).with_indifferent_access
server_config[:pool_weight] = server_config[:pool_weight].to_i
begin
establish_adapter(server_config[:adapter])
conn = send("#{server_config[:adapter]}_connection".to_sym, server_config)
pool_connections << conn
pool_weights[conn] = server_config[:pool_weight]
rescue Exception => e
if logger
logger.error("Error connecting to read connection #{server_config.inspect}")
logger.error(e)
end
end
end if config[:server_pool]
@maria_db_cluster_pool_classes ||= {}
klass = @maria_db_cluster_pool_classes[pool_connections[0].class]
unless klass.present?
klass = ActiveRecord::ConnectionAdapters::MariaDbClusterPoolAdapter.adapter_class(pool_connections[0])
@maria_db_cluster_pool_classes[pool_connections[0].class] = klass
end
return klass.new(pool_connections[0], logger, pool_connections, pool_weights)
end
|