aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/core.rb
diff options
context:
space:
mode:
authorEileen Uchitelle <eileencodes@gmail.com>2018-11-20 13:57:25 -0500
committerEileen Uchitelle <eileencodes@gmail.com>2018-11-20 16:02:40 -0500
commit5ce3e022ef136324d288fb493e0938e76a74981a (patch)
tree5f27b53bc3068cc12765d2df7969ec3f3594cd24 /activerecord/lib/active_record/core.rb
parent023a840f5f10c5a611a0618ff8ea9e16cd771f93 (diff)
downloadrails-5ce3e022ef136324d288fb493e0938e76a74981a.tar.gz
rails-5ce3e022ef136324d288fb493e0938e76a74981a.tar.bz2
rails-5ce3e022ef136324d288fb493e0938e76a74981a.zip
Make connection handler per thread instead of per fiber
The connection handler was using the RuntimeRegistry which kind of implies it's a per thread registry. But it's actually per fiber. If you have an application that uses fibers and you're using multiple databases, when you switch the connection handler to swap connections new fibers running on the same thread used to get a different connection id. This PR changes the code to actually use a thread so that we get the same connection. Fixes https://github.com/rails/rails/issues/30047 [Eileen M. Uchitelle, Aaron Patterson, & Arthur Neeves]
Diffstat (limited to 'activerecord/lib/active_record/core.rb')
-rw-r--r--activerecord/lib/active_record/core.rb4
1 files changed, 2 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/core.rb b/activerecord/lib/active_record/core.rb
index 50f3087c51..8f4d292a4b 100644
--- a/activerecord/lib/active_record/core.rb
+++ b/activerecord/lib/active_record/core.rb
@@ -129,11 +129,11 @@ module ActiveRecord
self.filter_attributes = []
def self.connection_handler
- ActiveRecord::RuntimeRegistry.connection_handler || default_connection_handler
+ Thread.current.thread_variable_get("ar_connection_handler") || default_connection_handler
end
def self.connection_handler=(handler)
- ActiveRecord::RuntimeRegistry.connection_handler = handler
+ Thread.current.thread_variable_set("ar_connection_handler", handler)
end
self.default_connection_handler = ConnectionAdapters::ConnectionHandler.new