Class: Aerospike::Node
- Inherits:
-
Object
- Object
- Aerospike::Node
- Defined in:
- lib/aerospike/node.rb,
lib/aerospike/node/rebalance.rb,
lib/aerospike/node/generation.rb,
lib/aerospike/node/verify/name.rb,
lib/aerospike/node/refresh/info.rb,
lib/aerospike/node/refresh/peers.rb,
lib/aerospike/node/refresh/racks.rb,
lib/aerospike/node/refresh/reset.rb,
lib/aerospike/node/refresh/failed.rb,
lib/aerospike/node/refresh/friends.rb,
lib/aerospike/node/refresh/partitions.rb,
lib/aerospike/node/verify/cluster_name.rb,
lib/aerospike/node/verify/peers_generation.rb,
lib/aerospike/node/verify/partition_generation.rb,
lib/aerospike/node/verify/rebalance_generation.rb
Defined Under Namespace
Modules: Refresh, Verify Classes: Generation, Rebalance
Constant Summary collapse
- PARTITIONS =
4096- FULL_HEALTH =
100
Instance Attribute Summary collapse
-
#cluster ⇒ Object
readonly
Returns the value of attribute cluster.
-
#cluster_name ⇒ Object
readonly
Returns the value of attribute cluster_name.
-
#failures ⇒ Object
readonly
Returns the value of attribute failures.
-
#features ⇒ Object
readonly
Returns the value of attribute features.
-
#host ⇒ Object
readonly
Returns the value of attribute host.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#partition_generation ⇒ Object
readonly
Returns the value of attribute partition_generation.
-
#peers_count ⇒ Object
readonly
Returns the value of attribute peers_count.
-
#peers_generation ⇒ Object
readonly
Returns the value of attribute peers_generation.
-
#rebalance_generation ⇒ Object
readonly
Returns the value of attribute rebalance_generation.
-
#reference_count ⇒ Object
readonly
Returns the value of attribute reference_count.
-
#responded ⇒ Object
readonly
Returns the value of attribute responded.
Instance Method Summary collapse
- #==(other) ⇒ Object (also: #eql?)
-
#active! ⇒ Object
Sets node as active.
-
#active? ⇒ Boolean
Checks if the node is active.
- #aliases ⇒ Object
-
#close ⇒ Object
Marks node as inactice and closes all cached connections.
-
#decrease_health ⇒ Object
Decrease node Health as a result of bad connection or communication.
- #failed! ⇒ Object
- #failed?(threshold = 1) ⇒ Boolean
-
#get_connection(timeout) ⇒ Object
Get a connection to the node.
-
#get_host ⇒ Object
Retrieves host for the node.
- #has_peers? ⇒ Boolean
- #has_rack(ns, rack_id) ⇒ Object
- #hash ⇒ Object
-
#inactive! ⇒ Object
Sets node as inactive.
- #increase_reference_count! ⇒ Object
-
#initialize(cluster, nv) ⇒ Node
constructor
Initialize server node with connection parameters.
- #inspect ⇒ Object
-
#put_connection(conn) ⇒ Object
Put back a connection to the cache.
- #referenced? ⇒ Boolean
-
#refresh_info(peers) ⇒ Object
Convenience wrappers for applying refresh operations to a node.
- #refresh_partitions(peers) ⇒ Object
- #refresh_peers(peers) ⇒ Object
- #refresh_racks ⇒ Object
- #refresh_reset ⇒ Object
- #reset_failures! ⇒ Object
- #reset_reference_count! ⇒ Object
- #reset_responded! ⇒ Object
- #responded! ⇒ Object
- #responded? ⇒ Boolean
-
#restore_health ⇒ Object
Mark the node as healthy.
- #supports_feature?(feature) ⇒ Boolean
-
#tend_connection ⇒ Object
Separate connection for refreshing.
-
#unhealthy? ⇒ Boolean
Check if the node is unhealthy.
- #update_racks(parser) ⇒ Object
Constructor Details
#initialize(cluster, nv) ⇒ Node
Initialize server node with connection parameters.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/aerospike/node.rb', line 31 def initialize(cluster, nv) @cluster = cluster @name = nv.name @aliases = Atomic.new(nv.aliases) @host = nv.host @features = nv.features @cluster_name = nv.cluster_name # TODO: Re-use connection from node validator @tend_connection = nil # Assign host to first IP alias because the server identifies nodes # by IP address (not hostname). @host = nv.aliases[0] @health = Atomic.new(FULL_HEALTH) @peers_count = Atomic.new(0) @peers_generation = ::Aerospike::Node::Generation.new @partition_generation = ::Aerospike::Node::Generation.new @rebalance_generation = ::Aerospike::Node::Rebalance.new @reference_count = Atomic.new(0) @responded = Atomic.new(false) @active = Atomic.new(true) @failures = Atomic.new(0) @replica_index = Atomic.new(0) @racks = Atomic.new(nil) @connections = ::Aerospike::ConnectionPool.new(cluster, host) end |
Instance Attribute Details
#cluster ⇒ Object (readonly)
Returns the value of attribute cluster.
25 26 27 |
# File 'lib/aerospike/node.rb', line 25 def cluster @cluster end |
#cluster_name ⇒ Object (readonly)
Returns the value of attribute cluster_name.
25 26 27 |
# File 'lib/aerospike/node.rb', line 25 def cluster_name @cluster_name end |
#failures ⇒ Object (readonly)
Returns the value of attribute failures.
25 26 27 |
# File 'lib/aerospike/node.rb', line 25 def failures @failures end |
#features ⇒ Object (readonly)
Returns the value of attribute features.
25 26 27 |
# File 'lib/aerospike/node.rb', line 25 def features @features end |
#host ⇒ Object (readonly)
Returns the value of attribute host.
25 26 27 |
# File 'lib/aerospike/node.rb', line 25 def host @host end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
25 26 27 |
# File 'lib/aerospike/node.rb', line 25 def name @name end |
#partition_generation ⇒ Object (readonly)
Returns the value of attribute partition_generation.
25 26 27 |
# File 'lib/aerospike/node.rb', line 25 def partition_generation @partition_generation end |
#peers_count ⇒ Object (readonly)
Returns the value of attribute peers_count.
25 26 27 |
# File 'lib/aerospike/node.rb', line 25 def peers_count @peers_count end |
#peers_generation ⇒ Object (readonly)
Returns the value of attribute peers_generation.
25 26 27 |
# File 'lib/aerospike/node.rb', line 25 def peers_generation @peers_generation end |
#rebalance_generation ⇒ Object (readonly)
Returns the value of attribute rebalance_generation.
25 26 27 |
# File 'lib/aerospike/node.rb', line 25 def rebalance_generation @rebalance_generation end |
#reference_count ⇒ Object (readonly)
Returns the value of attribute reference_count.
25 26 27 |
# File 'lib/aerospike/node.rb', line 25 def reference_count @reference_count end |
#responded ⇒ Object (readonly)
Returns the value of attribute responded.
25 26 27 |
# File 'lib/aerospike/node.rb', line 25 def responded @responded end |
Instance Method Details
#==(other) ⇒ Object Also known as: eql?
190 191 192 |
# File 'lib/aerospike/node.rb', line 190 def ==(other) other && other.is_a?(Node) && (@name == other.name) end |
#active! ⇒ Object
Sets node as active
122 123 124 |
# File 'lib/aerospike/node.rb', line 122 def active! @active.update { |_| true } end |
#active? ⇒ Boolean
Checks if the node is active
132 133 134 |
# File 'lib/aerospike/node.rb', line 132 def active? @active.value end |
#aliases ⇒ Object
176 177 178 |
# File 'lib/aerospike/node.rb', line 176 def aliases @aliases.value end |
#close ⇒ Object
Marks node as inactice and closes all cached connections
181 182 183 184 |
# File 'lib/aerospike/node.rb', line 181 def close inactive! close_connections end |
#decrease_health ⇒ Object
Decrease node Health as a result of bad connection or communication
107 108 109 |
# File 'lib/aerospike/node.rb', line 107 def decrease_health @health.update { |v| v - 1 } end |
#failed! ⇒ Object
168 169 170 |
# File 'lib/aerospike/node.rb', line 168 def failed! @failures.update { |v| v + 1 } end |
#failed?(threshold = 1) ⇒ Boolean
164 165 166 |
# File 'lib/aerospike/node.rb', line 164 def failed?(threshold = 1) @failures.value >= threshold end |
#get_connection(timeout) ⇒ Object
Get a connection to the node. If no cached connection is not available, a new connection will be created
74 75 76 77 78 79 80 81 82 |
# File 'lib/aerospike/node.rb', line 74 def get_connection(timeout) loop do conn = @connections.poll if conn.connected? conn.timeout = timeout.to_f return conn end end end |
#get_host ⇒ Object
Retrieves host for the node
117 118 119 |
# File 'lib/aerospike/node.rb', line 117 def get_host @host end |
#has_peers? ⇒ Boolean
160 161 162 |
# File 'lib/aerospike/node.rb', line 160 def has_peers? @peers_count.value > 0 end |
#has_rack(ns, rack_id) ⇒ Object
66 67 68 69 70 |
# File 'lib/aerospike/node.rb', line 66 def has_rack(ns, rack_id) racks = @racks.value return false if !racks racks[ns] == rack_id end |
#hash ⇒ Object
195 196 197 |
# File 'lib/aerospike/node.rb', line 195 def hash @name.hash end |
#inactive! ⇒ Object
Sets node as inactive
127 128 129 |
# File 'lib/aerospike/node.rb', line 127 def inactive! @active.update { |_| false } end |
#increase_reference_count! ⇒ Object
136 137 138 |
# File 'lib/aerospike/node.rb', line 136 def increase_reference_count! @reference_count.update { |v| v + 1 } end |
#inspect ⇒ Object
199 200 201 |
# File 'lib/aerospike/node.rb', line 199 def inspect "#<Aerospike::Node: @name=#{@name}, @host=#{@host}>" end |
#put_connection(conn) ⇒ Object
Put back a connection to the cache. If cache is full, the connection will be closed and discarded
86 87 88 89 |
# File 'lib/aerospike/node.rb', line 86 def put_connection(conn) conn.close if !active? @connections.offer(conn) end |
#referenced? ⇒ Boolean
144 145 146 |
# File 'lib/aerospike/node.rb', line 144 def referenced? @reference_count.value > 0 end |
#refresh_info(peers) ⇒ Object
Convenience wrappers for applying refresh operations to a node
207 208 209 |
# File 'lib/aerospike/node.rb', line 207 def refresh_info(peers) Node::Refresh::Info.(self, peers) end |
#refresh_partitions(peers) ⇒ Object
211 212 213 |
# File 'lib/aerospike/node.rb', line 211 def refresh_partitions(peers) Node::Refresh::Partitions.(self, peers) end |
#refresh_peers(peers) ⇒ Object
219 220 221 |
# File 'lib/aerospike/node.rb', line 219 def refresh_peers(peers) Node::Refresh::Peers.(self, peers) end |
#refresh_racks ⇒ Object
215 216 217 |
# File 'lib/aerospike/node.rb', line 215 def refresh_racks() Node::Refresh::Racks.(self) end |
#refresh_reset ⇒ Object
223 224 225 |
# File 'lib/aerospike/node.rb', line 223 def refresh_reset Node::Refresh::Reset.(self) end |
#reset_failures! ⇒ Object
172 173 174 |
# File 'lib/aerospike/node.rb', line 172 def reset_failures! @failures.value = 0 end |
#reset_reference_count! ⇒ Object
140 141 142 |
# File 'lib/aerospike/node.rb', line 140 def reset_reference_count! @reference_count.value = 0 end |
#reset_responded! ⇒ Object
156 157 158 |
# File 'lib/aerospike/node.rb', line 156 def reset_responded! @responded.value = false end |
#responded! ⇒ Object
148 149 150 |
# File 'lib/aerospike/node.rb', line 148 def responded! @responded.value = true end |
#responded? ⇒ Boolean
152 153 154 |
# File 'lib/aerospike/node.rb', line 152 def responded? @responded.value == true end |
#restore_health ⇒ Object
Mark the node as healthy
100 101 102 103 104 |
# File 'lib/aerospike/node.rb', line 100 def restore_health # There can be cases where health is full, but active is false. # Once a node has been marked inactive, it stays inactive. @health.value = FULL_HEALTH end |
#supports_feature?(feature) ⇒ Boolean
186 187 188 |
# File 'lib/aerospike/node.rb', line 186 def supports_feature?(feature) @features.include?(feature.to_s) end |
#tend_connection ⇒ Object
Separate connection for refreshing
92 93 94 95 96 97 |
# File 'lib/aerospike/node.rb', line 92 def tend_connection if @tend_connection.nil? || @tend_connection.closed? @tend_connection = Cluster::CreateConnection.(cluster, host) end @tend_connection end |
#unhealthy? ⇒ Boolean
Check if the node is unhealthy
112 113 114 |
# File 'lib/aerospike/node.rb', line 112 def unhealthy? @health.value <= 0 end |
#update_racks(parser) ⇒ Object
61 62 63 64 |
# File 'lib/aerospike/node.rb', line 61 def update_racks(parser) new_racks = parser.update_racks @racks.value = new_racks if new_racks end |