Joining member should not be leader, see #3021
* Prefer members with status Up or Leaving, and as fallback use Joining, Exiting, Down * Minor scaladoc fixes
This commit is contained in:
parent
5b844ec1e6
commit
d72d48301a
8 changed files with 79 additions and 20 deletions
|
|
@ -183,6 +183,13 @@ trait MultiNodeClusterSpec extends Suite with STMultiNodeSpec { self: MultiNodeS
|
|||
expectedAddresses.sorted.zipWithIndex.foreach { case (a, i) ⇒ members(i).address must be(a) }
|
||||
}
|
||||
|
||||
/**
|
||||
* 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`.
|
||||
*/
|
||||
def assertLeader(nodesInCluster: RoleName*): Unit =
|
||||
if (nodesInCluster.contains(myself)) assertLeaderIn(nodesInCluster.to[immutable.Seq])
|
||||
|
||||
|
|
@ -190,6 +197,12 @@ trait MultiNodeClusterSpec extends Suite with STMultiNodeSpec { self: MultiNodeS
|
|||
* 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`.
|
||||
*/
|
||||
def assertLeaderIn(nodesInCluster: immutable.Seq[RoleName]): Unit =
|
||||
if (nodesInCluster.contains(myself)) {
|
||||
|
|
@ -228,13 +241,21 @@ trait MultiNodeClusterSpec extends Suite with STMultiNodeSpec { self: MultiNodeS
|
|||
def awaitSeenSameState(addresses: Address*): Unit =
|
||||
awaitCond((addresses.toSet -- clusterView.seenBy).isEmpty)
|
||||
|
||||
/**
|
||||
* Leader according to the address ordering of the roles.
|
||||
* 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`.
|
||||
*/
|
||||
def roleOfLeader(nodesInCluster: immutable.Seq[RoleName] = roles): RoleName = {
|
||||
nodesInCluster.length must not be (0)
|
||||
nodesInCluster.sorted.head
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort the roles in the order used by the cluster.
|
||||
* Sort the roles in the address order used by the cluster node ring.
|
||||
*/
|
||||
implicit val clusterOrdering: Ordering[RoleName] = new Ordering[RoleName] {
|
||||
import Member.addressOrdering
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue