Skip to content

Commit

Permalink
Timeout the connection pool monitor on ruby 1.8 only
Browse files Browse the repository at this point in the history
  • Loading branch information
jeremy committed Nov 8, 2008
1 parent 7c73518 commit dd77733
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 7 deletions.
Expand Up @@ -65,15 +65,23 @@ class ConnectionPool
# 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
Expand Down Expand Up @@ -187,7 +195,7 @@ def checkout
# 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
Expand Down
11 changes: 7 additions & 4 deletions activerecord/test/cases/pooled_connections_test.rb
Expand Up @@ -28,10 +28,13 @@ def checkout_connections
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)
Expand Down

0 comments on commit dd77733

Please sign in to comment.