Class: ActiveRecord::ConnectionAdapters::ConnectionPool::Reaper

Inherits:
Object
  • Object
show all
Defined in:
activerecord/lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb

Overview

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).

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(pool, frequency) ⇒ Reaper

Returns a new instance of Reaper.


18
19
20
21
# File 'activerecord/lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb', line 18

def initialize(pool, frequency)
  @pool      = pool
  @frequency = frequency
end

Instance Attribute Details

#frequencyObject (readonly)

Returns the value of attribute frequency.


16
17
18
# File 'activerecord/lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb', line 16

def frequency
  @frequency
end

#poolObject (readonly)

Returns the value of attribute pool.


16
17
18
# File 'activerecord/lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb', line 16

def pool
  @pool
end

Class Method Details

.register_pool(pool, frequency) ⇒ Object

:nodoc:


28
29
30
31
32
33
34
35
36
# File 'activerecord/lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb', line 28

def register_pool(pool, frequency) # :nodoc:
  @mutex.synchronize do
    unless @threads[frequency]&.alive?
      @threads[frequency] = spawn_thread(frequency)
    end
    @pools[frequency] ||= []
    @pools[frequency] << WeakRef.new(pool)
  end
end

Instance Method Details

#runObject


69
70
71
72
# File 'activerecord/lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb', line 69

def run
  return unless frequency && frequency > 0
  self.class.register_pool(pool, frequency)
end