class ActionSubscriber::Middleware::ActiveRecord::ConnectionManagement

Constants

START_MUTEX

Public Class Methods

new(app) click to toggle source
# File lib/action_subscriber/middleware/active_record/connection_management.rb, line 36
def initialize(app)
  @app = app
end
start_timed_task!() click to toggle source
# File lib/action_subscriber/middleware/active_record/connection_management.rb, line 10
def self.start_timed_task!
  if timed_task_started.false?
    START_MUTEX.synchronize do
      return if timed_task_started.true?

      timed_task = ::Concurrent::TimerTask.new(
        :execution_interval => ::ActionSubscriber.config.connection_reaping_interval,
        :timeout_interval => ::ActionSubscriber.config.connection_reaping_timeout_interval) do

        ::ActiveRecord::Base.clear_active_connections!
        end

      timed_task.execute
      timed_task_started.make_true
    end
  end
end
timed_task_started() click to toggle source
# File lib/action_subscriber/middleware/active_record/connection_management.rb, line 28
def self.timed_task_started
  if @timed_task_started.nil?
    @timed_task_started = ::Concurrent::AtomicBoolean.new(false)
  end

  @timed_task_started
end

Public Instance Methods

call(env) click to toggle source
# File lib/action_subscriber/middleware/active_record/connection_management.rb, line 40
def call(env)
  def call(env) # redefines so it only gets called once
    ::ActiveRecord::Base.connection_pool.with_connection do
      @app.call(env)
    end
  end

  self.class.start_timed_task!
  call(env)
end