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.
Instance Method Summary collapse
-
#==(other) ⇒ Boolean
Equality operator based on connection protocol, host and port.
-
#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.
25 26 27 28 29 30 31 32 33 34 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 25 def initialize(arguments={}) @host = arguments[:host] @connection = arguments[:connection] = arguments[:options] || {} @state_mutex = Mutex.new [:resurrect_timeout] ||= DEFAULT_RESURRECT_TIMEOUT @dead = false @failures = 0 end |
Instance Attribute Details
#connection ⇒ Object (readonly)
Returns the value of attribute connection.
19 20 21 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 19 def connection @connection end |
#dead_since ⇒ Object (readonly)
Returns the value of attribute dead_since.
19 20 21 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 19 def dead_since @dead_since end |
#failures ⇒ Object (readonly)
Returns the value of attribute failures.
19 20 21 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 19 def failures @failures end |
#host ⇒ Object (readonly)
Returns the value of attribute host.
19 20 21 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 19 def host @host end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
19 20 21 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 19 def end |
Instance Method Details
#==(other) ⇒ Boolean
Equality operator based on connection protocol, host and port
125 126 127 128 129 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 125 def ==(other) self.host[:protocol] == other.host[:protocol] && \ self.host[:host] == other.host[:host] && \ self.host[:port].to_i == other.host[:port].to_i end |
#alive! ⇒ self
Marks this connection as alive, ie. it is eligible to be returned from the pool by the selector.
82 83 84 85 86 87 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 82 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`.
69 70 71 72 73 74 75 76 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 69 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.
60 61 62 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 60 def dead? @dead || false end |
#full_path(path, params = {}) ⇒ String
Returns the complete endpoint path with serialized parameters.
52 53 54 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 52 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.
40 41 42 43 44 45 46 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 40 def full_url(path, params={}) url = "#{host[:protocol]}://" url += "#{host[:user]}:#{host[:password]}@" if host[:user] url += "#{host[:host]}:#{host[:port]}" url += "#{host[:path]}" if host[:path] url += "/#{full_path(path, params)}" end |
#healthy! ⇒ self
Marks this connection as healthy, ie. a request has been successfully performed with it.
93 94 95 96 97 98 99 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 93 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.
107 108 109 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 107 def resurrect! alive! if resurrectable? end |
#resurrectable? ⇒ Boolean
Returns true if the connection is eligible to be resurrected as alive, false otherwise.
115 116 117 118 119 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 115 def resurrectable? @state_mutex.synchronize { Time.now > @dead_since + ( [:resurrect_timeout] * 2 ** (@failures-1) ) } end |
#to_s ⇒ String
133 134 135 |
# File 'lib/elasticsearch/transport/transport/connections/connection.rb', line 133 def to_s "<#{self.class.name} host: #{host} (#{dead? ? 'dead since ' + dead_since.to_s : 'alive'})>" end |