Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fix checkin method, add a couple more tests

  • Loading branch information...
commit 3ce64d4f1608330072e1959a10f9b84205baebfa 1 parent fe575dd
@nicksieger nicksieger authored
View
2  activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
@@ -237,7 +237,7 @@ def checkout
def checkin(conn)
@connection_mutex.synchronize do
- @checked_out -= conn
+ @checked_out.delete conn
@queue.signal
end
end
View
38 activerecord/test/cases/threaded_connections_test.rb
@@ -44,7 +44,6 @@ def test_threaded_connections
class PooledConnectionsTest < ActiveRecord::TestCase
def setup
@connection = ActiveRecord::Base.remove_connection
- @connections = []
@allow_concurrency = ActiveRecord::Base.allow_concurrency
ActiveRecord::Base.allow_concurrency = true
end
@@ -55,8 +54,9 @@ def teardown
ActiveRecord::Base.establish_connection(@connection)
end
- def gather_connections
+ def checkout_connections
ActiveRecord::Base.establish_connection(@connection.merge({:pool => 2, :wait_timeout => 0.3}))
+ @connections = []
@timed_out = 0
4.times do
@@ -70,10 +70,40 @@ def gather_connections
end
end
- def test_threaded_connections
- gather_connections
+ def test_pooled_connection_checkout
+ checkout_connections
assert_equal @connections.length, 2
assert_equal @timed_out, 2
end
+
+ def checkout_checkin_connections(pool_size, threads)
+ ActiveRecord::Base.establish_connection(@connection.merge({:pool => pool_size, :wait_timeout => 0.5}))
+ @connection_count = 0
+ @timed_out = 0
+ threads.times do
+ Thread.new do
+ begin
+ conn = ActiveRecord::Base.connection_pool.checkout
+ sleep 0.1
+ ActiveRecord::Base.connection_pool.checkin conn
+ @connection_count += 1
+ rescue ActiveRecord::ConnectionTimeoutError
+ @timed_out += 1
+ end
+ end.join
+ end
+ end
+
+ def test_pooled_connection_checkin_one
+ checkout_checkin_connections 1, 2
+ assert_equal 2, @connection_count
+ assert_equal 0, @timed_out
+ end
+
+ def test_pooled_connection_checkin_two
+ checkout_checkin_connections 2, 3
+ assert_equal 3, @connection_count
+ assert_equal 0, @timed_out
+ end
end
end
Please sign in to comment.
Something went wrong with that request. Please try again.