Example #1
0
        protected internal void RefreshPartitions(Peers peers)
        {
            // Do not refresh partitions when node connection has already failed during this cluster tend iteration.
            // Also, avoid "split cluster" case where this node thinks it's a 1-node cluster.
            // Unchecked, such a node can dominate the partition map and cause all other
            // nodes to be dropped.
            if (failures > 0 || !active || (peersCount == 0 && peers.refreshCount > 1))
            {
                return;
            }

            try
            {
                if (Log.DebugEnabled())
                {
                    Log.Debug("Update partition map for node " + this);
                }
                PartitionParser parser = new PartitionParser(tendConnection, this, cluster.partitionMap, Node.PARTITIONS);

                if (parser.IsPartitionMapCopied)
                {
                    cluster.partitionMap = parser.PartitionMap;
                }
                partitionGeneration = parser.Generation;
            }
            catch (Exception e)
            {
                RefreshFailed(e);
            }
        }
        protected internal int UpdatePartitions(Connection conn, Node node)
        {
            PartitionParser parser = new PartitionParser(conn, node, partitionMap, Node.PARTITIONS, requestProleReplicas);

            if (parser.IsPartitionMapCopied)
            {
                partitionMap = parser.PartitionMap;
            }
            return(parser.Generation);
        }
Example #3
0
        protected internal int UpdatePartitions(Connection conn, Node node)
        {
            PartitionParser parser = new PartitionParser(conn, node, partitionMap, Node.PARTITIONS, requestProleReplicas);

            if (parser.IsPartitionMapCopied)
            {
                partitionMap = parser.PartitionMap;
            }
            return parser.Generation;
        }