未验证 提交 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) ...@@ -26,17 +26,24 @@ def uncached(&block)
end end
def self.run def self.run
ActiveRecord::Base.connection_handler.connection_pool_list. pools = []
reject { |p| p.query_cache_enabled }.each { |p| p.enable_query_cache! }
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 end
def self.complete(pools) def self.complete(pools)
pools.each { |pool| pool.disable_query_cache! } 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? pool.release_connection if pool.active_connection? && !pool.connection.transaction_open?
end end
end end
end
def self.install_executor_hooks(executor = ActiveSupport::Executor) def self.install_executor_hooks(executor = ActiveSupport::Executor)
executor.register_hook(self) executor.register_hook(self)
......
...@@ -55,6 +55,22 @@ def test_exceptional_middleware_clears_and_disables_cache_on_error ...@@ -55,6 +55,22 @@ def test_exceptional_middleware_clears_and_disables_cache_on_error
assert_cache :off assert_cache :off
end 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 def test_query_cache_across_threads
with_temporary_connection_pool do with_temporary_connection_pool do
begin begin
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册