class Net::HTTP::ConnectionPool

@private

def _clean

def _clean
  now = Time.now
  @pool.delete_if do |idle_session|
    if 
      idle_session.last_used_at.nil? or
      now - idle_session.last_used_at > idle_timeout
    then
      idle_session.finish
      true
    end
  end
end

def clean!

the idle timeout).
Removes stale http sessions from the pool (that have exceeded
def clean!
  @pool_mutex.synchronize { _clean }
end

def connection_for host, options = {}, &block

Returns:
  • (Connection) -

Other tags:
    Yieldparam: connection -

Other tags:
    Yield: -

Options Hash: (**options)
  • :proxy_password (String) --
  • :proxy_user (String) --
  • :proxy_port (String) --
  • :proxy_address (String) --
  • :proxy_uri (URI::HTTP, String) -- A URI string or
  • :ssl_ca_path (String) -- Full path of the directory that
  • :ssl_ca_file (String) -- Full path to the SSL certificate
  • :ssl_verify_peer (Boolean) -- If true, ssl
  • :ssl (Boolean) -- If the connection should be made over
  • :port (Integer) -- Which port the connection should use.

Parameters:
  • options (Hash) --
  • host (String) --
def connection_for host, options = {}, &block
  connection = Connection.new(self, host, options)
  yield(connection) if block_given?
  connection
end

def empty!

get checked back into the pool, leaving the pool in a non-empty state.
If empty! is called while there are outstanding requests they may
Closes and removes removes all sessions from the pool.
def empty!
  @pool_mutex.synchronize do
    @pool.each(&:finish)
    @pool = []
  end
end

def initialize options = {}

Options Hash: (**options)
  • :logger (Logger) -- Where debug out
  • :http_wire_trace (Boolean) -- When +true+, HTTP
  • :http_open_timeout (Numeric) -- The number of seconds to
  • :http_idle_timeout (Numeric) -- The number of seconds a

Parameters:
  • options (Hash) --
def initialize options = {}
  @pool = []
  @pool_mutex = Mutex.new
  @open_timeout = options[:http_open_timeout] || 15
  @idle_timeout = options[:http_idle_timeout] || 60
  @log_wire_trace = !!options[:http_wire_trace]
  @logger = options[:logger] || Logger.new($stdout)
end

def request connection, *request_args, &block

Other tags:
    Private: -
def request connection, *request_args, &block
  session = nil
  response = nil
  retried = false
  begin
    session = session_for(connection, retried)
    session.http_session.read_timeout = connection.read_timeout
    response = session.request(*request_args, &block)
  rescue Exception => error
    # close the http session to prevent the connection from being
    # left open and risk the other side sending data
    session.finish if session
    # retry socket errors once on a new session
    if SOCKET_ERRORS.include?(error.class) and !retried
      retried = true
      retry
    end
    raise error
  else
    @pool_mutex.synchronize { @pool << session }
  end
  response
end

def session_for connection, force_new = false

def session_for connection, force_new = false
  session = nil
  unless force_new
    @pool_mutex.synchronize do
      _clean
      session = @pool.find{|idle_session| idle_session.key == connection.key }
      @pool.delete(session) if session
    end
  end
  if session.nil?
    logger = log_wire_trace? ? self.logger : nil 
    session = Session.for(connection, open_timeout, logger)
  end
  session
end

def size

currently in use.
Returns the number of sessions currently in the pool, not counting those
def size
  @pool_mutex.synchronize { @pool.size }  
end