Class: OpenSearch::Transport::Transport::Connections::Connection
- Inherits:
-
Object
- Object
- OpenSearch::Transport::Transport::Connections::Connection
- Defined in:
- lib/opensearch/transport/transport/connections/connection.rb
Overview
Wraps the connection information and logic.
The Connection instance wraps the host information (hostname, port, attributes, etc), as well as the “session” (a transport client object, such as a HTTP::Faraday instance).
It provides methods to construct and properly encode the URLs and paths for passing them to the transport client object.
It provides methods to handle connection livecycle (dead, alive, healthy).
Constant Summary collapse
- DEFAULT_RESURRECT_TIMEOUT =
60
Instance Attribute Summary collapse
-
#connection ⇒ Object
readonly
Returns the value of attribute connection.
-
#dead_since ⇒ Object
readonly
Returns the value of attribute dead_since.
-
#failures ⇒ Object
readonly
Returns the value of attribute failures.
-
#host ⇒ Object
readonly
Returns the value of attribute host.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
Instance Method Summary collapse
-
#==(other) ⇒ Boolean
Equality operator based on connection protocol, host, port and attributes.
-
#alive! ⇒ self
Marks this connection as alive, ie.
-
#dead! ⇒ self
Marks this connection as dead, incrementing the ‘failures` counter and storing the current time as `dead_since`.
-
#dead? ⇒ Boolean
Returns true when this connection has been marked dead, false otherwise.
-
#full_path(path, params = {}) ⇒ String
Returns the complete endpoint path with serialized parameters.
-
#full_url(path, params = {}) ⇒ String
Returns the complete endpoint URL with host, port, path and serialized parameters.
-
#healthy! ⇒ self
Marks this connection as healthy, ie.
-
#initialize(arguments = {}) ⇒ Connection
constructor
A new instance of Connection.
-
#resurrect! ⇒ self?
Marks this connection as alive, if the required timeout has passed.
-
#resurrectable? ⇒ Boolean
Returns true if the connection is eligible to be resurrected as alive, false otherwise.
- #to_s ⇒ String
Constructor Details
#initialize(arguments = {}) ⇒ Connection
Returns a new instance of Connection.
50 51 52 53 54 55 56 57 58 59 |
# File 'lib/opensearch/transport/transport/connections/connection.rb', line 50 def initialize(arguments={}) @host = arguments[:host].is_a?(Hash) ? Redacted.new(arguments[:host]) : arguments[:host] @connection = arguments[:connection] @options = arguments[:options] || {} @state_mutex = Mutex.new @options[:resurrect_timeout] ||= DEFAULT_RESURRECT_TIMEOUT @dead = false @failures = 0 end |
Instance Attribute Details
#connection ⇒ Object (readonly)
Returns the value of attribute connection.
44 45 46 |
# File 'lib/opensearch/transport/transport/connections/connection.rb', line 44 def connection @connection end |
#dead_since ⇒ Object (readonly)
Returns the value of attribute dead_since.
44 45 46 |
# File 'lib/opensearch/transport/transport/connections/connection.rb', line 44 def dead_since @dead_since end |
#failures ⇒ Object (readonly)
Returns the value of attribute failures.
44 45 46 |
# File 'lib/opensearch/transport/transport/connections/connection.rb', line 44 def failures @failures end |
#host ⇒ Object (readonly)
Returns the value of attribute host.
44 45 46 |
# File 'lib/opensearch/transport/transport/connections/connection.rb', line 44 def host @host end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
44 45 46 |
# File 'lib/opensearch/transport/transport/connections/connection.rb', line 44 def @options end |
Instance Method Details
#==(other) ⇒ Boolean
Equality operator based on connection protocol, host, port and attributes
152 153 154 155 156 157 |
# File 'lib/opensearch/transport/transport/connections/connection.rb', line 152 def ==(other) self.host[:protocol] == other.host[:protocol] && \ self.host[:host] == other.host[:host] && \ self.host[:port].to_i == other.host[:port].to_i && \ self.host[:attributes] == other.host[:attributes] end |
#alive! ⇒ self
Marks this connection as alive, ie. it is eligible to be returned from the pool by the selector.
109 110 111 112 113 114 |
# File 'lib/opensearch/transport/transport/connections/connection.rb', line 109 def alive! @state_mutex.synchronize do @dead = false end self end |
#dead! ⇒ self
Marks this connection as dead, incrementing the ‘failures` counter and storing the current time as `dead_since`.
96 97 98 99 100 101 102 103 |
# File 'lib/opensearch/transport/transport/connections/connection.rb', line 96 def dead! @state_mutex.synchronize do @dead = true @failures += 1 @dead_since = Time.now end self end |
#dead? ⇒ Boolean
Returns true when this connection has been marked dead, false otherwise.
87 88 89 |
# File 'lib/opensearch/transport/transport/connections/connection.rb', line 87 def dead? @dead || false end |
#full_path(path, params = {}) ⇒ String
Returns the complete endpoint path with serialized parameters.
79 80 81 |
# File 'lib/opensearch/transport/transport/connections/connection.rb', line 79 def full_path(path, params={}) path + (params.empty? ? '' : "?#{::Faraday::Utils::ParamsHash[params].to_query}") end |
#full_url(path, params = {}) ⇒ String
Returns the complete endpoint URL with host, port, path and serialized parameters.
65 66 67 68 69 70 71 72 73 |
# File 'lib/opensearch/transport/transport/connections/connection.rb', line 65 def full_url(path, params = {}) url = "#{host[:protocol]}://" url += "#{CGI.escape(host[:user])}:#{CGI.escape(host[:password])}@" if host[:user] url += "#{host[:host]}:#{host[:port]}" url += "#{host[:path]}" if host[:path] full_path = full_path(path, params) url += '/' unless full_path.match?(/^\//) url += full_path end |
#healthy! ⇒ self
Marks this connection as healthy, ie. a request has been successfully performed with it.
120 121 122 123 124 125 126 |
# File 'lib/opensearch/transport/transport/connections/connection.rb', line 120 def healthy! @state_mutex.synchronize do @dead = false @failures = 0 end self end |
#resurrect! ⇒ self?
Marks this connection as alive, if the required timeout has passed.
134 135 136 |
# File 'lib/opensearch/transport/transport/connections/connection.rb', line 134 def resurrect! alive! if resurrectable? end |
#resurrectable? ⇒ Boolean
Returns true if the connection is eligible to be resurrected as alive, false otherwise.
142 143 144 145 146 |
# File 'lib/opensearch/transport/transport/connections/connection.rb', line 142 def resurrectable? @state_mutex.synchronize { Time.now > @dead_since + ( @options[:resurrect_timeout] * 2 ** (@failures-1) ) } end |
#to_s ⇒ String
161 162 163 |
# File 'lib/opensearch/transport/transport/connections/connection.rb', line 161 def to_s "<#{self.class.name} host: #{host} (#{dead? ? 'dead since ' + dead_since.to_s : 'alive'})>" end |