mirror of
https://github.com/github/rails.git
synced 2026-01-25 14:28:28 -05:00
Timeout the connection pool monitor on ruby 1.8 only
This commit is contained in:
@@ -65,15 +65,23 @@ module ActiveRecord
|
||||
# The default ConnectionPool maximum size is 5.
|
||||
def initialize(spec)
|
||||
@spec = spec
|
||||
|
||||
# The cache of reserved connections mapped to threads
|
||||
@reserved_connections = {}
|
||||
|
||||
# The mutex used to synchronize pool access
|
||||
@connection_mutex = Monitor.new
|
||||
@queue = @connection_mutex.new_cond
|
||||
# default 5 second timeout
|
||||
@timeout = spec.config[:wait_timeout] || 5
|
||||
|
||||
# default 5 second timeout unless on ruby 1.9
|
||||
@timeout =
|
||||
if RUBY_VERSION < '1.9'
|
||||
spec.config[:wait_timeout] || 5
|
||||
end
|
||||
|
||||
# default max pool size to 5
|
||||
@size = (spec.config[:pool] && spec.config[:pool].to_i) || 5
|
||||
|
||||
@connections = []
|
||||
@checked_out = []
|
||||
end
|
||||
@@ -187,7 +195,7 @@ module ActiveRecord
|
||||
# try looting dead threads
|
||||
clear_stale_cached_connections!
|
||||
if @size == @checked_out.size
|
||||
raise ConnectionTimeoutError, "could not obtain a database connection within #{@timeout} seconds. The pool size is currently #{@size}, perhaps you need to increase it?"
|
||||
raise ConnectionTimeoutError, "could not obtain a database connection#{" within #{@timeout} seconds" if @timeout}. The max pool size is currently #{@size}; consider increasing it."
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -28,10 +28,13 @@ class PooledConnectionsTest < ActiveRecord::TestCase
|
||||
end
|
||||
end
|
||||
|
||||
def test_pooled_connection_checkout
|
||||
checkout_connections
|
||||
assert_equal @connections.length, 2
|
||||
assert_equal @timed_out, 2
|
||||
# Will deadlock due to lack of Monitor timeouts in 1.9
|
||||
if RUBY_VERSION < '1.9'
|
||||
def test_pooled_connection_checkout
|
||||
checkout_connections
|
||||
assert_equal @connections.length, 2
|
||||
assert_equal @timed_out, 2
|
||||
end
|
||||
end
|
||||
|
||||
def checkout_checkin_connections(pool_size, threads)
|
||||
|
||||
Reference in New Issue
Block a user