instance method
retrieve_connection_pool
Ruby on Rails 5.0.7.2
Signature
retrieve_connection_pool(spec_name)
Retrieving the connection pool happens a lot so we cache it in @class_to_pool. This makes retrieving the connection pool O(1) once the process is warm. When a connection is established or removed, we invalidate the cache.
Ideally we would use #fetch here, as class_to_pool may sometimes be nil. However, benchmarking (gist.github.com/jonleighton/3552829) showed that #fetch is significantly slower than #[]. So in the nil case, no caching will take place, but that’s ok since the nil case is not the common one that we wish to optimise for.
Parameters
-
spec_namereq
Source
# File activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb, line 916
def retrieve_connection_pool(spec_name)
owner_to_pool.fetch(spec_name) do
if ancestor_pool = pool_from_any_process_for(spec_name)
# A connection was established in an ancestor process that must have
# subsequently forked. We can't reuse the connection, but we can copy
# the specification and establish a new connection with it.
establish_connection(ancestor_pool.spec).tap do |pool|
pool.schema_cache = ancestor_pool.schema_cache if ancestor_pool.schema_cache
end
else
owner_to_pool[spec_name] = nil
end
end
end
Defined in activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb line 916
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActiveRecord::ConnectionAdapters::ConnectionHandler