module Aerospike::Node::Refresh::Friends

Refresh peers/friends based on old service protocol

Public Class Methods

call(node, peers, info_map) click to toggle source
# File lib/aerospike/node/refresh/friends.rb, line 26
def call(node, peers, info_map)
  friend_string = info_map['services']
  cluster = node.cluster

  Aerospike.logger.debug("Refreshing friends for node #{node.name}: services=#{friend_string}")

  if friend_string.to_s.empty?
    node.peers_count.value = 0
    return
  end

  friend_names = friend_string.split(';')
  node.peers_count.value = friend_names.size

  friend_names.each do |friend|
    hostname, port = friend.split(':')
    host = Host.new(hostname, port.to_i)
    found_node = cluster.find_alias(host)

    if found_node
      found_node.increase_reference_count!
      Aerospike.logger.debug("Found existing node #{found_node.name} for host #{host}: Increased ref count to #{found_node.reference_count.value}")
    else
      unless peers.hosts.include?(host)
        prepare(cluster, peers, host)
      end
    end
  end
end
prepare(cluster, peers, host) click to toggle source
# File lib/aerospike/node/refresh/friends.rb, line 56
def prepare(cluster, peers, host)
  Aerospike.logger.debug("Preparing to add new node for host #{host}")
  nv = NodeValidator.new(
    cluster,
    host,
    cluster.connection_timeout,
    cluster.cluster_name,
    cluster.tls_options
  )

  node = peers.find_node_by_name(nv.name)

  unless node.nil?
    Aerospike.logger.debug("Found existing node #{node.name} among peers for host #{host}")
    peers.hosts << host
    node.aliases << host
    return true
  end

  node = cluster.find_node_by_name(nv.name)

  unless node.nil?
    Aerospike.logger.debug("Found existing node #{node.name} in cluster for host #{host}")
    peers.hosts << host
    node.aliases << host
    # Only increase reference count if found in cluster
    node.increase_reference_count!
    cluster.add_alias(host, node)
    return true
  end

  Aerospike.logger.debug("No existing node found - creating new node #{nv.name} for host #{host}")
  node = cluster.create_node(nv)
  peers.hosts << host
  peers.nodes[nv.name] = node
  true
rescue ::Aerospike::Exceptions::Aerospike => e
  ::Aerospike.logger.warn("Add node for host #{host} failed: #{e}")
  false
end