未验证 提交 536a190a 编写于 作者: E Eileen M. Uchitelle 提交者: GitHub

Merge pull request #34491 from rails/fix-query-cache-on-multiple-connections

Fix query cache for multiple connections
......@@ -26,17 +26,24 @@ def uncached(&block)
end
def self.run
ActiveRecord::Base.connection_handler.connection_pool_list.
reject { |p| p.query_cache_enabled }.each { |p| p.enable_query_cache! }
pools = []
ActiveRecord::Base.connection_handlers.each do |key, handler|
pools << handler.connection_pool_list.reject { |p| p.query_cache_enabled }.each { |p| p.enable_query_cache! }
end
pools.flatten
end
def self.complete(pools)
pools.each { |pool| pool.disable_query_cache! }
ActiveRecord::Base.connection_handler.connection_pool_list.each do |pool|
ActiveRecord::Base.connection_handlers.each do |_, handler|
handler.connection_pool_list.each do |pool|
pool.release_connection if pool.active_connection? && !pool.connection.transaction_open?
end
end
end
def self.install_executor_hooks(executor = ActiveSupport::Executor)
executor.register_hook(self)
......
......@@ -55,6 +55,22 @@ def test_exceptional_middleware_clears_and_disables_cache_on_error
assert_cache :off
end
def test_query_cache_is_applied_to_connections_in_all_handlers
ActiveRecord::Base.connected_to(role: :reading) do
ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations["arunit"])
end
mw = middleware { |env|
ro_conn = ActiveRecord::Base.connection_handlers[:reading].connection_pool_list.first.connection
assert_predicate ActiveRecord::Base.connection, :query_cache_enabled
assert_predicate ro_conn, :query_cache_enabled
}
mw.call({})
ensure
ActiveRecord::Base.connection_handlers = { writing: ActiveRecord::Base.default_connection_handler }
end
def test_query_cache_across_threads
with_temporary_connection_pool do
begin
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册