Class: Elasticsearch::Transport::Transport::Connections::Connection
- Inherits:
-
Object
- Object
- Elasticsearch::Transport::Transport::Connections::Connection
- Defined in:
- lib/elasticsearch/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.
-
#verified ⇒ Object
Returns the value of attribute verified.
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.
42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 42 def initialize(arguments={}) @host = arguments[:host].is_a?(Hash) ? Redacted.new(arguments[:host]) : arguments[:host] @connection = arguments[:connection] @options = arguments[:options] || {} @verified = false @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.
35 36 37 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 35 def connection @connection end |
#dead_since ⇒ Object (readonly)
Returns the value of attribute dead_since.
35 36 37 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 35 def dead_since @dead_since end |
#failures ⇒ Object (readonly)
Returns the value of attribute failures.
35 36 37 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 35 def failures @failures end |
#host ⇒ Object (readonly)
Returns the value of attribute host.
35 36 37 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 35 def host @host end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
35 36 37 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 35 def @options end |
#verified ⇒ Object
Returns the value of attribute verified.
36 37 38 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 36 def verified @verified end |
Instance Method Details
#==(other) ⇒ Boolean
Equality operator based on connection protocol, host, port and attributes
145 146 147 148 149 150 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 145 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.
102 103 104 105 106 107 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 102 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`.
89 90 91 92 93 94 95 96 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 89 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.
80 81 82 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 80 def dead? @dead || false end |
#full_path(path, params = {}) ⇒ String
Returns the complete endpoint path with serialized parameters.
72 73 74 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 72 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.
58 59 60 61 62 63 64 65 66 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 58 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.
113 114 115 116 117 118 119 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 113 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.
127 128 129 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 127 def resurrect! alive! if resurrectable? end |
#resurrectable? ⇒ Boolean
Returns true if the connection is eligible to be resurrected as alive, false otherwise.
135 136 137 138 139 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 135 def resurrectable? @state_mutex.synchronize { Time.now > @dead_since + ( @options[:resurrect_timeout] * 2 ** (@failures-1) ) } end |
#to_s ⇒ String
154 155 156 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 154 def to_s "<#{self.class.name} host: #{host} (#{dead? ? 'dead since ' + dead_since.to_s : 'alive'})>" end |