module Aerospike::Node::Refresh::Peers
Public Class Methods
call(node, peers)
click to toggle source
# File lib/aerospike/node/refresh/peers.rb, line 25 def call(node, peers) return unless should_refresh?(node) ::Aerospike.logger.debug("Update peers for node #{node.name}") cluster = node.cluster collection = ::Aerospike::Peers::Fetch.(cluster, node.tend_connection) peers.peers = collection.peers node.peers_count.value = peers.peers.size peers_validated = true peers.peers.each do |peer| next if ::Aerospike::Cluster::FindNode.(cluster, peers, peer.node_name) node_validated = false peer.hosts.each do |host| begin nv = NodeValidator.new(cluster, host, cluster.connection_timeout, cluster.cluster_name, cluster.tls_options) if nv.name != peer.node_name ::Aerospike.logger.warn("Peer node #{peer.node_name} is different than actual node #{nv.name} for host #{host}"); # Must look for new node name in the unlikely event that node names do not agree. # Node already exists. Do not even try to connect to hosts. if Cluster::FindNode.(cluster, peers, nv.name) node_validated = true break; end end new_node = cluster.create_node(nv) peers.nodes[nv.name] = new_node node_validated = true break; rescue ::Aerospike::Exceptions::Aerospike => e Aerospike.logger.warn("Add node #{host} failed: #{e.inspect}") end peers_validated = false unless node_validated end end # Only set new peers generation if all referenced peers are added to # the cluster. node.peers_generation.update(collection.generation) if peers_validated peers.refresh_count += 1 rescue ::Aerospike::Exceptions::Aerospike => e Refresh::Failed.(node, e) end
should_refresh?(node)
click to toggle source
# File lib/aerospike/node/refresh/peers.rb, line 76 def should_refresh?(node) node.failures.value == 0 && node.active? end