提交 ba1544d7 编写于 作者: J Jon Leighton

One hash is enough

We don't need separate @class_to_pool and @connection_pool hashes.
上级 4a274ed1
...@@ -496,40 +496,38 @@ def checkout_and_verify(c) ...@@ -496,40 +496,38 @@ def checkout_and_verify(c)
# ActiveRecord::Base.connection_handler. Active Record models use this to # ActiveRecord::Base.connection_handler. Active Record models use this to
# determine that connection pool that they should use. # determine that connection pool that they should use.
class ConnectionHandler class ConnectionHandler
def initialize(pools = Hash.new { |h,k| h[k] = {} }) def initialize
@connection_pools = pools @class_to_pool = Hash.new { |h,k| h[k] = {} }
@class_to_pool = Hash.new { |h,k| h[k] = {} }
end end
def connection_pools def connection_pools
@connection_pools[Process.pid] class_to_pool.values.compact
end end
def establish_connection(klass, spec) def establish_connection(klass, spec)
class_to_pool[klass] = class_to_pool[klass] = ConnectionAdapters::ConnectionPool.new(spec)
connection_pools[spec] = ConnectionAdapters::ConnectionPool.new(spec)
end end
# Returns true if there are any active connections among the connection # Returns true if there are any active connections among the connection
# pools that the ConnectionHandler is managing. # pools that the ConnectionHandler is managing.
def active_connections? def active_connections?
connection_pools.values.any? { |pool| pool.active_connection? } connection_pools.any?(&:active_connection?)
end end
# Returns any connections in use by the current thread back to the pool, # Returns any connections in use by the current thread back to the pool,
# and also returns connections to the pool cached by threads that are no # and also returns connections to the pool cached by threads that are no
# longer alive. # longer alive.
def clear_active_connections! def clear_active_connections!
connection_pools.each_value {|pool| pool.release_connection } connection_pools.each(&:release_connection)
end end
# Clears the cache which maps classes. # Clears the cache which maps classes.
def clear_reloadable_connections! def clear_reloadable_connections!
connection_pools.each_value {|pool| pool.clear_reloadable_connections! } connection_pools.each(&:clear_reloadable_connections!)
end end
def clear_all_connections! def clear_all_connections!
connection_pools.each_value {|pool| pool.disconnect! } connection_pools.each(&:disconnect!)
end end
# Locate the connection of the nearest super class. This can be an # Locate the connection of the nearest super class. This can be an
...@@ -553,13 +551,11 @@ def connected?(klass) ...@@ -553,13 +551,11 @@ def connected?(klass)
# can be used as an argument for establish_connection, for easily # can be used as an argument for establish_connection, for easily
# re-establishing the connection. # re-establishing the connection.
def remove_connection(klass) def remove_connection(klass)
pool = class_to_pool.delete(klass) if pool = class_to_pool.delete(klass)
return nil unless pool pool.automatic_reconnect = false
pool.disconnect!
connection_pools.delete pool.spec pool.spec.config
pool.automatic_reconnect = false end
pool.disconnect!
pool.spec.config
end end
def retrieve_connection_pool(klass) def retrieve_connection_pool(klass)
......
...@@ -879,7 +879,7 @@ def teardown_fixtures ...@@ -879,7 +879,7 @@ def teardown_fixtures
end end
def enlist_fixture_connections def enlist_fixture_connections
ActiveRecord::Base.connection_handler.connection_pools.values.map(&:connection) ActiveRecord::Base.connection_handler.connection_pools.map(&:connection)
end end
private private
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册