Sha256: 077c69327e08775b7899c7a94a0b07469a32b42439d8f9ff7f75bce2fc58e92e

Contents?: true

Size: 1.58 KB

Versions: 8

Compression:

Stored size: 1.58 KB

Contents

require "concurrent"
require "thread"

module Protobuf
  module ActiveRecord
    module Middleware
      class ConnectionManagementAsync
        START_MUTEX = ::Mutex.new

        def self.start_timed_task!
          if timed_task_started.false?
            START_MUTEX.synchronize do
              return if timed_task_started.true?

              args = {
                :execution_interval => ::Protobuf::ActiveRecord.config.connection_reaping_interval,
                :timeout_interval => ::Protobuf::ActiveRecord.config.connection_reaping_timeout_interval
              }
              timed_task = ::Concurrent::TimerTask.new(args) do
                ::ActiveRecord::Base.clear_active_connections!
              end

              timed_task.execute
              timed_task_started.make_true
            end
          end
        end

        def self.timed_task_started
          if @timed_task_started.nil?
            @timed_task_started = ::Concurrent::AtomicBoolean.new(false)
          end

          @timed_task_started
        end

        def initialize(app)
          @app = app
        end

        # rubocop:disable Lint/DuplicateMethods
        # rubocop:disable Lint/NestedMethodDefinition
        def call(env)
          def call(env)
            ::ActiveRecord::Base.connection_pool.with_connection do
              @app.call(env)
            end
          end

          self.class.start_timed_task!
          call(env)
        end
        # rubocop:enable Lint/NestedMethodDefinition
        # rubocop:enable Lint/DuplicateMethods

        timed_task_started
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
protobuf-activerecord-6.1.0 lib/protobuf/active_record/middleware/connection_management_async.rb
protobuf-activerecord-6.0.0 lib/protobuf/active_record/middleware/connection_management_async.rb
protobuf-activerecord-5.2.0 lib/protobuf/active_record/middleware/connection_management_async.rb
protobuf-activerecord-5.1.0 lib/protobuf/active_record/middleware/connection_management_async.rb
protobuf-activerecord-5.0.0 lib/protobuf/active_record/middleware/connection_management_async.rb
protobuf-activerecord-5.1.0.beta lib/protobuf/active_record/middleware/connection_management_async.rb
protobuf-activerecord-5.0.0.beta lib/protobuf/active_record/middleware/connection_management_async.rb
protobuf-activerecord-3.6.1 lib/protobuf/active_record/middleware/connection_management_async.rb