Class: Seahorse::Client::NetHttp::ConnectionPool Private

Inherits:
Object
  • Object
show all
Defined in:
lib/seahorse/client/net_http/connection_pool.rb

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Defined Under Namespace

Classes: ExtendedSession

Constant Summary collapse

OPTIONS =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

{
  http_proxy: nil,
  http_open_timeout: 15,
  http_read_timeout: 60,
  http_idle_timeout: 5,
  http_continue_timeout: 1,
  http_wire_trace: false,
  logger: nil,
  ssl_verify_peer: true,
  ssl_ca_bundle: nil,
  ssl_ca_directory: nil,
  ssl_ca_store: nil,
}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ ConnectionPool

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of ConnectionPool.



44
45
46
47
48
49
50
51
52
53
54
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 44

def initialize(options = {})
  OPTIONS.each_pair do |opt_name, default_value|
    value = options[opt_name].nil? ? default_value : options[opt_name]
    instance_variable_set("@#{opt_name}", value)
  end
  @pool_mutex = Mutex.new
  @pool = Hash.new do |pool, endpoint|
    pool[endpoint] = []
    pool[endpoint]
  end
end

Instance Attribute Details

#http_continue_timeoutFloat? (readonly)

Returns the current value of http_continue_timeout.

Returns:

  • (Float, nil)

    the current value of http_continue_timeout



24
25
26
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 24

def http_continue_timeout
  @http_continue_timeout
end

#http_idle_timeoutInteger, Float (readonly)

Returns the current value of http_idle_timeout.

Returns:

  • (Integer, Float)

    the current value of http_idle_timeout



24
25
26
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 24

def http_idle_timeout
  @http_idle_timeout
end

#http_open_timeoutInteger, Float (readonly)

Returns the current value of http_open_timeout.

Returns:

  • (Integer, Float)

    the current value of http_open_timeout



24
25
26
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 24

def http_open_timeout
  @http_open_timeout
end

#http_proxyURI::HTTP? (readonly)

Returns the configured proxy.

Returns:

  • (URI::HTTP, nil)

    the current value of http_proxy



24
25
26
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 24

def http_proxy
  @http_proxy
end

#http_read_timeoutInteger, Float (readonly)

Returns the current value of http_read_timeout.

Returns:

  • (Integer, Float)

    the current value of http_read_timeout



24
25
26
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 24

def http_read_timeout
  @http_read_timeout
end

#http_wire_traceBoolean (readonly) Also known as: http_wire_trace?

Returns the current value of http_wire_trace.

Returns:

  • (Boolean)

    the current value of http_wire_trace



24
25
26
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 24

def http_wire_trace
  @http_wire_trace
end

#loggerLogger? (readonly)

Returns the current value of logger.

Returns:

  • (Logger, nil)

    the current value of logger



24
25
26
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 24

def logger
  @logger
end

#ssl_ca_bundleString? (readonly)

Returns the current value of ssl_ca_bundle.

Returns:

  • (String, nil)

    the current value of ssl_ca_bundle



24
25
26
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 24

def ssl_ca_bundle
  @ssl_ca_bundle
end

#ssl_ca_directoryString? (readonly)

Returns the current value of ssl_ca_directory.

Returns:

  • (String, nil)

    the current value of ssl_ca_directory



24
25
26
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 24

def ssl_ca_directory
  @ssl_ca_directory
end

#ssl_ca_storeString? (readonly)

Returns the current value of ssl_ca_store.

Returns:

  • (String, nil)

    the current value of ssl_ca_store



24
25
26
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 24

def ssl_ca_store
  @ssl_ca_store
end

#ssl_verify_peerBoolean (readonly) Also known as: ssl_verify_peer?

Returns the current value of ssl_verify_peer.

Returns:

  • (Boolean)

    the current value of ssl_verify_peer



24
25
26
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 24

def ssl_verify_peer
  @ssl_verify_peer
end

Class Method Details

.for(options = {}) ⇒ ConnectionPool

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a connection pool constructed from the given options. Calling this method twice with the same options will return the same pool.

Parameters:

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • :http_proxy (URI::HTTP, String)

    A proxy to send requests through. Formatted like ‘proxy.com:123’.

  • :http_open_timeout (Float) — default: 15

    The number of seconds to wait when opening a HTTP session before rasing a ‘Timeout::Error`.

  • :http_read_timeout (Integer) — default: 60

    The default number of seconds to wait for response data. This value can safely be set per-request on the session yeidled by #session_for.

  • :http_idle_timeout (Float) — default: 5

    The number of seconds a connection is allowed to sit idble before it is considered stale. Stale connections are closed and removed from the pool before making a request.

  • :http_continue_timeout (Float) — default: 1

    The number of seconds to wait for a 100-continue response before sending the request body. This option has no effect unless the request has “Expect” header set to “100-continue”. Defaults to ‘nil` which disables this behaviour. This value can safely be set per request on the session yeidled by #session_for.

  • :http_wire_trace (Boolean) — default: false

    When ‘true`, HTTP debug output will be sent to the `:logger`.

  • :logger (Logger)

    Where debug output is sent. Defaults to ‘nil` when `:http_wire_trace` is `false`. Defaults to `Logger.new($stdout)` when `:http_wire_trace` is `true`.

  • :ssl_verify_peer (Boolean) — default: true

    When ‘true`, SSL peer certificates are verified when establishing a connection.

  • :ssl_ca_bundle (String)

    Full path to the SSL certificate authority bundle file that should be used when verifying peer certificates. If you do not pass ‘:ssl_ca_bundle` or `:ssl_ca_directory` the the system default will be used if available.

  • :ssl_ca_directory (String)

    Full path of the directory that contains the unbundled SSL certificate authority files for verifying peer certificates. If you do not pass ‘:ssl_ca_bundle` or `:ssl_ca_directory` the the system default will be used if available.

Returns:



218
219
220
221
222
223
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 218

def for options = {}
  options = pool_options(options)
  @pools_mutex.synchronize do
    @pools[options] ||= new(options)
  end
end

.poolsArray<ConnectionPool>

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a list of of the constructed connection pools.

Returns:

  • (Array<ConnectionPool>)

    Returns a list of of the constructed connection pools.



227
228
229
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 227

def pools
  @pools.values
end

Instance Method Details

#clean!nil

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Removes stale http sessions from the pool (that have exceeded the idle timeout).

Returns:

  • (nil)


134
135
136
137
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 134

def clean!
  @pool_mutex.synchronize { _clean }
  nil
end

#empty!nil

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Closes and removes removes all sessions from the pool. If empty! is called while there are outstanding requests they may get checked back into the pool, leaving the pool in a non-empty state.

Returns:

  • (nil)


144
145
146
147
148
149
150
151
152
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 144

def empty!
  @pool_mutex.synchronize do
    @pool.each_pair do |endpoint,sessions|
      sessions.each(&:finish)
    end
    @pool.clear
  end
  nil
end

#request(endpoint, request) {|net_http_response| ... } ⇒ nil

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Makes an HTTP request, yielding a Net::HTTPResponse object.

pool.request('http://domain', Net::HTTP::Get.new('/')) do |resp|
  puts resp.code # status code
  puts resp.to_h.inspect # dump the headers
  puts resp.body
end

Parameters:

  • endpoint (String)

    The HTTP(S) endpoint to connect to (e.g. ‘domain.com’).

  • request (Net::HTTPRequest)

    The request to make. This can be any request object from Net::HTTP (e.g. Net::HTTP::Get, Net::HTTP::POST, etc).

Yield Parameters:

  • net_http_response (Net::HTTPResponse)

Returns:

  • (nil)


81
82
83
84
85
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 81

def request(endpoint, request, &block)
  session_for(endpoint) do |http|
    yield(http.request(request))
  end
end

#session_for(endpoint) {|session| ... } ⇒ nil

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Parameters:

  • endpoint (URI::HTTP, URI::HTTPS)

    The HTTP(S) endpoint to connect to (e.g. ‘domain.com’).

Yield Parameters:

  • session (Net::HTTPSession)

Returns:

  • (nil)


93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 93

def session_for(endpoint, &block)
  endpoint = remove_path_and_query(endpoint)
  session = nil

  # attempt to recycle an already open session
  @pool_mutex.synchronize do
    _clean
    session = @pool[endpoint].shift
  end

  begin
    session ||= start_session(endpoint)
    session.read_timeout = http_read_timeout
    session.continue_timeout = http_continue_timeout if
      session.respond_to?(:continue_timeout=)
    yield(session)
  rescue
    session.finish if session
    raise
  else
    # No error raised? Good, check the session into the pool.
    @pool_mutex.synchronize { @pool[endpoint] << session }
  end
  nil
end

#sizeInteger

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns the count of sessions currently in the pool, not counting those currently in use.

Returns:

  • (Integer)

    Returns the count of sessions currently in the pool, not counting those currently in use.



121
122
123
124
125
126
127
128
129
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 121

def size
  @pool_mutex.synchronize do
    size = 0
    @pool.each_pair do |endpoint,sessions|
      size += sessions.size
    end
    size
  end
end