class Mongoid::Sessions::SessionPool::Queue
Public Class Methods
new(lock=Monitor.new)
click to toggle source
# File lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb, line 7 def initialize(lock=Monitor.new) @lock = lock @cond = @lock.new_cond @num_waiting = 0 @queue = [] end
Public Instance Methods
add(session)
click to toggle source
# File lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb, line 26 def add(session) synchronize do @queue.push session @cond.signal end end
any_waiting?()
click to toggle source
# File lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb, line 14 def any_waiting? synchronize do @num_waiting > 0 end end
count()
click to toggle source
# File lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb, line 49 def count @queue.count end
num_waiting()
click to toggle source
# File lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb, line 20 def num_waiting synchronize do @num_waiting end end
poll(timeout = nil)
click to toggle source
# File lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb, line 39 def poll(timeout = nil) synchronize do if timeout no_wait_poll || wait_poll(timeout) else no_wait_poll end end end
remove()
click to toggle source
# File lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb, line 33 def remove synchronize do @queue.shift end end
Private Instance Methods
any?()
click to toggle source
# File lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb, line 59 def any? !@queue.empty? end
can_remove_no_wait?()
click to toggle source
# File lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb, line 63 def can_remove_no_wait? @queue.size > @num_waiting end
no_wait_poll()
click to toggle source
# File lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb, line 67 def no_wait_poll remove if can_remove_no_wait? end
synchronize(&block)
click to toggle source
# File lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb, line 55 def synchronize(&block) @lock.synchronize(&block) end
wait_poll(timeout)
click to toggle source
# File lib/mongoid_connection_pool/mongoid/sessions/session_pool.rb, line 71 def wait_poll(timeout) @num_waiting += 1 t0 = Time.now elapsed = 0 loop do @cond.wait(timeout - elapsed) return remove if any? elapsed = Time.now - t0 if elapsed >= timeout msg = 'Timed out waiting for database session' raise ConnectionTimeoutError, msg end end ensure @num_waiting -= 1 end