Beispiel #1
0
        /// <summary>
        /// Assert that the cluster has elected the correct leader
        /// out of all nodes in the cluster. First
        /// member in the cluster ring is expected leader.
        ///
        /// Note that this can only be used for a cluster with all members
        /// in Up status, i.e. use `awaitMembersUp` before using this method.
        /// The reason for that is that the cluster leader is preferably a
        /// member with status Up or Leaving and that information can't
        /// be determined from the `RoleName`.
        /// </summary>
        public void AssertLeaderIn(ImmutableList <RoleName> nodesInCluster)
        {
            if (!nodesInCluster.Contains(Myself))
            {
                return;
            }

            _assertions.AssertTrue(nodesInCluster.Count != 0, "nodesInCluster must not be empty");
            var expectedLeader = RoleOfLeader(nodesInCluster);
            var leader         = ClusterView.Leader;
            var isLeader       = leader == ClusterView.SelfAddress;

            _assertions.AssertTrue(isLeader == IsNode(expectedLeader), "expected leader {0}, got leader {1}, members{2}", expectedLeader, leader, ClusterView.Members);
            _assertions.AssertTrue(ClusterView.Status == MemberStatus.Up ||
                                   ClusterView.Status == MemberStatus.Leaving,
                                   "Expected cluster view status Up or Leaving but got {0}", ClusterView.Status);
        }