class ActiveRecord::ConnectionAdapters::ConnectionPool::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.rb, line 301
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.rb, line 322
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)
    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.rb, line 352
def run
  return unless frequency && frequency > 0
  self.class.register_pool(pool, frequency)
end