Timeout the connection pool monitor on ruby 1.8 only

This commit is contained in:
Jeremy Kemper
2008-11-08 00:24:36 -05:00
parent 7c73518ef7
commit dd77733f2f
2 changed files with 18 additions and 7 deletions

View File

@@ -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

View File

@@ -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)