class ActiveRecord::ConnectionAdapters::ConnectionPool::Reaper
Active Record Connection Pool Reaper¶ ↑
Every frequency
seconds, the reaper will call reap
and flush
on pool
. A reaper instantiated with a zero frequency will never reap the connection pool.
Configure the frequency by setting reaping_frequency
in your database YAML file (default 60 seconds).
Attributes
frequency[R]
pool[R]
Public Class Methods
new(pool, frequency)
click to toggle source
# File lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb, line 19 def initialize(pool, frequency) @pool = pool @frequency = frequency end
Private Class Methods
spawn_thread(frequency)
click to toggle source
# File lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb, line 40 def spawn_thread(frequency) Thread.new(frequency) do |t| # Advise multi-threaded app servers to ignore this thread for # the purposes of fork safety warnings Thread.current.thread_variable_set(:fork_safe, true) Thread.current.name = "AR Pool Reaper" running = true while running sleep t @mutex.synchronize do @pools[frequency].select! do |pool| pool.weakref_alive? && !pool.discarded? end @pools[frequency].each do |p| p.reap p.flush rescue WeakRef::RefError end if @pools[frequency].empty? @pools.delete(frequency) @threads.delete(frequency) running = false end end end end end
Public Instance Methods
run()
click to toggle source
# File lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb, line 71 def run return unless frequency && frequency > 0 self.class.register_pool(pool, frequency) end