diff options
author | Eileen M. Uchitelle <eileencodes@users.noreply.github.com> | 2018-11-21 07:59:13 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-21 07:59:13 -0500 |
commit | 536a190ab3690810a3b342b897f2585c4971229d (patch) | |
tree | aa98e732b180d412c0c0d64e070af8cbe69c66d3 | |
parent | 50d1e00625091bf7f4c84afbdabb9006402a94ea (diff) | |
parent | aec635dc2fa90a9c286527bf997b3b927f2379d2 (diff) | |
download | rails-536a190ab3690810a3b342b897f2585c4971229d.tar.gz rails-536a190ab3690810a3b342b897f2585c4971229d.tar.bz2 rails-536a190ab3690810a3b342b897f2585c4971229d.zip |
Merge pull request #34491 from rails/fix-query-cache-on-multiple-connections
Fix query cache for multiple connections
-rw-r--r-- | activerecord/lib/active_record/query_cache.rb | 15 | ||||
-rw-r--r-- | activerecord/test/cases/query_cache_test.rb | 16 |
2 files changed, 27 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/query_cache.rb b/activerecord/lib/active_record/query_cache.rb index 28194c7c46..43a21e629e 100644 --- a/activerecord/lib/active_record/query_cache.rb +++ b/activerecord/lib/active_record/query_cache.rb @@ -26,15 +26,22 @@ module ActiveRecord 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| - pool.release_connection if pool.active_connection? && !pool.connection.transaction_open? + 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 diff --git a/activerecord/test/cases/query_cache_test.rb b/activerecord/test/cases/query_cache_test.rb index 565190c476..02ead8d914 100644 --- a/activerecord/test/cases/query_cache_test.rb +++ b/activerecord/test/cases/query_cache_test.rb @@ -55,6 +55,22 @@ class QueryCacheTest < ActiveRecord::TestCase 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 |