ActiveRecord::ConnectionAdapters::ConnectionPool::Queue (original) (raw)

Active Record Connection Pool Queue

Threadsafe, fair, LIFO queue. Meant to be used by ConnectionPool with which it shares a Monitor.

Methods

A

C

D

N

P

Class Public methods

Source: show | on GitHub

def initialize(lock = Monitor.new) @lock = lock @cond = @lock.new_cond @num_waiting = 0 @queue = [] end

Instance Public methods

Add element to the queue. Never blocks.

Source: show | on GitHub

def add(element) synchronize do @queue.push element @cond.signal end end

Test if any threads are currently waiting on the queue.

Source: show | on GitHub

def any_waiting? synchronize do @num_waiting > 0 end end

Remove all elements from the queue.

Source: show | on GitHub

def clear synchronize do @queue.clear end end

If element is in the queue, remove and return it, or nil.

Source: show | on GitHub

def delete(element) synchronize do @queue.delete(element) end end

Returns the number of threads currently waiting on this queue.

Source: show | on GitHub

def num_waiting synchronize do @num_waiting end end

Remove the head of the queue.

If timeout is not given, remove and return the head of the queue if the number of available elements is strictly greater than the number of threads currently waiting (that is, don’t jump ahead in line). Otherwise, return nil.

If timeout is given, block if there is no element available, waiting up to timeout seconds for an element to become available.

Raises:

becomes available within timeout seconds,

Source: show | on GitHub

def poll(timeout = nil) synchronize { internal_poll(timeout) } end