Class: ActionSubscriber::Middleware::ActiveRecord::ConnectionManagement
- Inherits:
-
Object
- Object
- ActionSubscriber::Middleware::ActiveRecord::ConnectionManagement
- Defined in:
- lib/action_subscriber/middleware/active_record/connection_management.rb
Constant Summary collapse
- START_MUTEX =
::Mutex.new
Class Method Summary collapse
Instance Method Summary collapse
-
#call(env) ⇒ Object
redefines so it only gets called once.
-
#initialize(app) ⇒ ConnectionManagement
constructor
A new instance of ConnectionManagement.
Constructor Details
#initialize(app) ⇒ ConnectionManagement
Returns a new instance of ConnectionManagement.
36 37 38 |
# File 'lib/action_subscriber/middleware/active_record/connection_management.rb', line 36 def initialize(app) @app = app end |
Class Method Details
.start_timed_task! ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# 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 ⇒ Object
28 29 30 31 32 33 34 |
# 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 |
Instance Method Details
#call(env) ⇒ Object
redefines so it only gets called once
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/action_subscriber/middleware/active_record/connection_management.rb', line 41 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 |