mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Improve documentation and add test
This commit is contained in:
parent
3360742396
commit
6116d7bc05
2 changed files with 12 additions and 7 deletions
|
@ -80,11 +80,8 @@ module ActiveRecord
|
|||
# * private methods that require being called in a +synchronize+ blocks
|
||||
# are now explicitly documented
|
||||
class ConnectionPool
|
||||
# Threadsafe, fair, LIFO queue. Meant to be used by ConnectionPool
|
||||
# with which it shares a Monitor. But could be a generic Queue.
|
||||
#
|
||||
# The Queue in stdlib's 'thread' could replace this class except
|
||||
# stdlib's doesn't support waiting with a timeout.
|
||||
# Threadsafe, fair, FIFO queue. Meant to be used by ConnectionPool
|
||||
# with which it shares a Monitor.
|
||||
class Queue
|
||||
def initialize(lock = Monitor.new)
|
||||
@lock = lock
|
||||
|
@ -111,7 +108,7 @@ module ActiveRecord
|
|||
# Add +element+ to the queue. Never blocks.
|
||||
def add(element)
|
||||
synchronize do
|
||||
@queue.unshift element
|
||||
@queue.push element
|
||||
@cond.signal
|
||||
end
|
||||
end
|
||||
|
@ -173,7 +170,7 @@ module ActiveRecord
|
|||
|
||||
# Removes and returns the head of the queue if possible, or +nil+.
|
||||
def remove
|
||||
@queue.shift
|
||||
@queue.pop
|
||||
end
|
||||
|
||||
# Remove and return the head the queue if the number of
|
||||
|
|
|
@ -203,6 +203,14 @@ module ActiveRecord
|
|||
end.join
|
||||
end
|
||||
|
||||
def test_checkout_order_is_fifo
|
||||
conn1 = @pool.checkout
|
||||
conn2 = @pool.checkout
|
||||
@pool.checkin conn1
|
||||
@pool.checkin conn2
|
||||
assert_equal [conn2, conn1], 2.times.map { @pool.checkout }
|
||||
end
|
||||
|
||||
# The connection pool is "fair" if threads waiting for
|
||||
# connections receive them in the order in which they began
|
||||
# waiting. This ensures that we don't timeout one HTTP request
|
||||
|
|
Loading…
Reference in a new issue