示例#1
0
        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);
        }