Sha256: 5996eae7079c0f60e3b3e80de47179c484911f719f4c5b07b7566737a2e7436d

Contents?: true

Size: 1.61 KB

Versions: 62

Compression:

Stored size: 1.61 KB

Contents

class Gem::Net::HTTP::Persistent::Pool < Bundler::ConnectionPool # :nodoc:

  attr_reader :available # :nodoc:
  attr_reader :key # :nodoc:

  def initialize(options = {}, &block)
    super

    @available = Gem::Net::HTTP::Persistent::TimedStackMulti.new(@size, &block)
    @key = "current-#{@available.object_id}"
  end

  def checkin net_http_args
    if net_http_args.is_a?(Hash) && net_http_args.size == 1 && net_http_args[:force]
      # Bundler::ConnectionPool 2.4+ calls `checkin(force: true)` after fork.
      # When this happens, we should remove all connections from Thread.current
      if stacks = Thread.current[@key]
        stacks.each do |http_args, connections|
          connections.each do |conn|
            @available.push conn, connection_args: http_args
          end
          connections.clear
        end
      end
    else
      stack = Thread.current[@key][net_http_args] ||= []

      raise Bundler::ConnectionPool::Error, 'no connections are checked out' if
        stack.empty?

      conn = stack.pop

      if stack.empty?
        @available.push conn, connection_args: net_http_args

        Thread.current[@key].delete(net_http_args)
        Thread.current[@key] = nil if Thread.current[@key].empty?
      end
    end
    nil
  end

  def checkout net_http_args
    stacks = Thread.current[@key] ||= {}
    stack  = stacks[net_http_args] ||= []

    if stack.empty? then
      conn = @available.pop connection_args: net_http_args
    else
      conn = stack.last
    end

    stack.push conn

    conn
  end

  def shutdown
    Thread.current[@key] = nil
    super
  end
end

require_relative 'timed_stack_multi'

Version data entries

62 entries across 62 versions & 4 rubygems

Version Path
rubygems-update-3.6.6 bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
bundler-2.6.6 lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
rubygems-update-3.6.5 bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
bundler-2.6.5 lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
rubygems-update-3.6.4 bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
bundler-2.6.4 lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
trusty-cms-7.0.9.1 vendor/bundle/ruby/3.3.0/gems/bundler-2.5.21/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
rubygems-update-3.6.3 bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
bundler-2.6.3 lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
minato_ruby_api_client-0.2.2 vendor/bundle/ruby/3.2.0/gems/bundler-2.5.5/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
rubygems-update-3.6.2 bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
bundler-2.6.2 lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
rubygems-update-3.6.1 bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
bundler-2.6.1 lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
rubygems-update-3.6.0 bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
bundler-2.6.0 lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
rubygems-update-3.5.23 bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
bundler-2.5.23 lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
rubygems-update-3.5.22 bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
bundler-2.5.22 lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb