def seamless_database_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(:master)
default_config.delete(:read_pool)
default_config.delete(:pool_adapter)
master_config = default_config.merge(config[:master]).with_indifferent_access
establish_adapter(master_config[:adapter])
master_connection = send("#{master_config[:adapter]}_connection".to_sym, master_config)
pool_weights[master_connection] = master_config[:pool_weight].to_i if master_config[:pool_weight].to_i > 0
read_connections = []
config[:read_pool].each do |read_config|
read_config = default_config.merge(read_config).with_indifferent_access
read_config[:pool_weight] = read_config[:pool_weight].to_i
if read_config[:pool_weight] > 0
begin
establish_adapter(read_config[:adapter])
conn = send("#{read_config[:adapter]}_connection".to_sym, read_config)
read_connections << conn
pool_weights[conn] = read_config[:pool_weight]
rescue Exception => e
if logger
logger.error("Error connecting to read connection #{read_config.inspect}")
logger.error(e)
end
end
end
end if config[:read_pool]
klass = ::ActiveRecord::ConnectionAdapters::SeamlessDatabasePoolAdapter.adapter_class(master_connection)
klass.new(nil, logger, master_connection, read_connections, pool_weights, config)
end