diff options
author | Eileen Uchitelle <eileencodes@gmail.com> | 2018-11-20 08:20:15 -0500 |
---|---|---|
committer | Eileen Uchitelle <eileencodes@gmail.com> | 2018-11-20 17:48:48 -0500 |
commit | aec635dc2fa90a9c286527bf997b3b927f2379d2 (patch) | |
tree | 5c331b7c1bd42c47a3918b3e42996e3826cbb6ee /activerecord/lib/active_record | |
parent | 023a840f5f10c5a611a0618ff8ea9e16cd771f93 (diff) | |
download | rails-aec635dc2fa90a9c286527bf997b3b927f2379d2.tar.gz rails-aec635dc2fa90a9c286527bf997b3b927f2379d2.tar.bz2 rails-aec635dc2fa90a9c286527bf997b3b927f2379d2.zip |
Fix query cache for multiple connections
Currently the query cache is only aware of one handler so once we added
multiple databases switching on the handler we broke query cache for
those reading connections.
While #34054 is the proper fix, that fix is not straight forward and I
want to make sure that the query cache isn't just broken for all other
connections not in the main handler.
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r-- | activerecord/lib/active_record/query_cache.rb | 15 |
1 files changed, 11 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 |