Module: Aerospike::Cluster::FindNodesToRemove

Defined in:
lib/aerospike/cluster/find_nodes_to_remove.rb

Overview

Calculates which nodes that should be removed from the cluster

Class Method Summary collapse

Class Method Details

.call(cluster, refresh_count) ⇒ Object

[View source]

25
26
27
28
29
30
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
60
61
62
# File 'lib/aerospike/cluster/find_nodes_to_remove.rb', line 25

def call(cluster, refresh_count)
  node_list = cluster.nodes

  remove_list = []

  node_list.each do |node|
    unless node.active?
      # Inactive nodes must be removed.
      remove_list << node
      next
    end

    if refresh_count.zero? && node.failed?(5) # 5 or more failures counts as failed
      # All node info requests failed and this node had 5 consecutive failures.
      # Remove node.  If no nodes are left, seeds will be tried in next cluster
      # tend iteration.
      remove_list << node
      next
    end

    if node_list.size > 1 && refresh_count >= 1 && !node.referenced?
      # Node is not referenced by other nodes.
      # Check if node responded to info request.
      if node.failed?
        remove_list << node
      else
        # Node is alive, but not referenced by other nodes.  Check if mapped.
        unless cluster.find_node_in_partition_map(node)
          # Node doesn't have any partitions mapped to it.
          # There is no point in keeping it in the cluster.
          remove_list << node
        end
      end
    end
  end

  remove_list
end