private static Node GetRackNode(Cluster cluster, Partitions partitions, Partition partition, uint sequence) { Node[][] replicas = partitions.replicas; Node fallback = null; for (int i = 0; i < replicas.Length; i++) { uint index = sequence % (uint)replicas.Length; Node node = replicas[index][partition.partitionId]; if (node != null && node.Active) { if (node.HasRack(partition.ns, cluster.rackId)) { return(node); } if (fallback == null) { fallback = node; } } sequence++; } if (fallback != null) { return(fallback); } Node[] nodeArray = cluster.Nodes; throw new AerospikeException.InvalidNode(nodeArray.Length, partition); }
private Node GetRackNode(Cluster cluster) { Node[][] replicas = partitions.replicas; Node fallback = null; bool retry = (sequence > 0); for (int i = 1; i <= replicas.Length; i++) { uint index = sequence % (uint)replicas.Length; Node node = replicas[index][partitionId]; if (node != null && node.Active) { // If fallback exists, do not retry on node where command failed, // even if fallback is not on the same rack. if (retry && fallback != null && i == replicas.Length) { return(fallback); } if (node.HasRack(ns, cluster.rackId)) { return(node); } if (fallback == null) { fallback = node; } } sequence++; } if (fallback != null) { return(fallback); } Node[] nodeArray = cluster.Nodes; throw new AerospikeException.InvalidNode(nodeArray.Length, this); }