Class: Seahorse::Client::NetHttp::ConnectionPool Private
- Inherits:
-
Object
- Object
- Seahorse::Client::NetHttp::ConnectionPool
- 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, ssl_timeout: nil }
Class Method Summary collapse
-
.for(options = {}) ⇒ ConnectionPool
private
Returns a connection pool constructed from the given options.
-
.pools ⇒ Array<ConnectionPool>
private
Returns a list of the constructed connection pools.
Instance Method Summary collapse
-
#clean! ⇒ nil
private
Removes stale http sessions from the pool (that have exceeded the idle timeout).
-
#empty! ⇒ nil
private
Closes and removes all sessions from the pool.
-
#initialize(options = {}) ⇒ ConnectionPool
constructor
private
A new instance of ConnectionPool.
-
#request(endpoint, request) {|net_http_response| ... } ⇒ nil
private
Makes an HTTP request, yielding a Net::HTTPResponse object.
- #session_for(endpoint) {|session| ... } ⇒ nil private
-
#size ⇒ Integer
private
Returns the count of sessions currently in the pool, not counting those currently in use.
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.
41 42 43 44 45 46 47 48 |
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 41 def initialize( = {}) OPTIONS.each_pair do |opt_name, default_value| value = [opt_name].nil? ? default_value : [opt_name] instance_variable_set("@#{opt_name}", value) end @pool_mutex = Mutex.new @pool = {} 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.
213 214 215 216 217 218 |
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 213 def for = {} = () @pools_mutex.synchronize do @pools[] ||= new() end end |
.pools ⇒ Array<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 the constructed connection pools.
222 223 224 225 226 |
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 222 def pools @pools_mutex.synchronize do @pools.values end 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).
129 130 131 132 |
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 129 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 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.
139 140 141 142 143 144 145 |
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 139 def empty! @pool_mutex.synchronize do @pool.values.flatten.map(&:finish) @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(URI.parse('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
75 76 77 78 79 |
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 75 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.
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 87 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 if @pool.key?(endpoint) session = @pool[endpoint].shift end 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 do @pool[endpoint] = [] unless @pool.key?(endpoint) @pool[endpoint] << session end end nil end |
#size ⇒ Integer
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.
120 121 122 123 124 |
# File 'lib/seahorse/client/net_http/connection_pool.rb', line 120 def size @pool_mutex.synchronize do @pool.values.flatten.size end end |