Exemple #1
0
        /// <summary>
        /// The strategy named keep-majority will down the unreachable nodes if the
        /// current node is in the majority part based on the last known membership information.
        /// Otherwise down the reachable nodes, i.e. the own part. If the parts are of equal size
        /// the part containing the node with the lowest address is kept.
        /// </summary>
        public IEnumerable <Member> GetVictims(CurrentClusterState clusterState)
        {
            var members            = clusterState.GetMembers(Role);
            var unreachableMembers = clusterState.GetUnreachableMembers(Role);
            var availableMembers   = clusterState.GetAvailableMembers(Role);

            int unreachableCount = unreachableMembers.Count;
            int availableCount   = availableMembers.Count;

            if (availableCount == unreachableCount)
            {
                var oldest = clusterState.GetMembers(Role).SortByAge().FirstOrDefault();
                if (oldest != null && availableMembers.Contains(oldest))
                {
                    return(clusterState.GetUnreachableMembers());
                }
                else
                {
                    return(clusterState.GetMembers());
                }
            }

            return(availableCount < unreachableCount
                   //too few available, down our partition (entire members)
                ? clusterState.GetMembers()
                   //enough available, down unreachable
                : clusterState.GetUnreachableMembers());;
        }
Exemple #2
0
        public IEnumerable <Member> GetVictims(CurrentClusterState clusterState)
        {
            var members        = clusterState.GetMembers(Role);
            var unreachable    = clusterState.GetUnreachableMembers(Role);
            int availableCount = members.Count - unreachable.Count;

            return(availableCount < QuorumSize
                   //too few available, down our partition
                ? clusterState.GetMembers()
                   //enough available, down unreachable
                : clusterState.GetUnreachableMembers());
        }
Exemple #3
0
        public IEnumerable <Member> GetVictims(CurrentClusterState clusterState)
        {
            bool haveReferee = clusterState.HasAvailableMember(Address);

            return(!haveReferee || clusterState.GetAvailableMembers().Count < DownAllIfLessThanNodes
                ? clusterState.GetMembers()
                : clusterState.GetUnreachableMembers());
        }