Improve MultiNodeSpec ifNode syntax. #2126
This commit is contained in:
parent
b862ec97f5
commit
977194ff8e
4 changed files with 13 additions and 16 deletions
|
|
@ -148,7 +148,7 @@ abstract class LargeClusterSpec
|
||||||
runOn(runOnRoles: _*) {
|
runOn(runOnRoles: _*) {
|
||||||
systems.size must be(nodesPerDatacenter) // make sure it is initialized
|
systems.size must be(nodesPerDatacenter) // make sure it is initialized
|
||||||
|
|
||||||
val clusterNodes = ifNode(from)(joiningClusterNodes)(systems.map(Cluster(_)).toSet)
|
val clusterNodes = if(isNode(from)) joiningClusterNodes else systems.map(Cluster(_)).toSet
|
||||||
val startGossipCounts = Map.empty[Cluster, Long] ++
|
val startGossipCounts = Map.empty[Cluster, Long] ++
|
||||||
clusterNodes.map(c ⇒ (c -> c.readView.latestStats.receivedGossipCount))
|
clusterNodes.map(c ⇒ (c -> c.readView.latestStats.receivedGossipCount))
|
||||||
def gossipCount(c: Cluster): Long = {
|
def gossipCount(c: Cluster): Long = {
|
||||||
|
|
@ -260,7 +260,7 @@ abstract class LargeClusterSpec
|
||||||
if (bulk.nonEmpty) {
|
if (bulk.nonEmpty) {
|
||||||
val totalNodes = nodesPerDatacenter * 4 + bulk.size
|
val totalNodes = nodesPerDatacenter * 4 + bulk.size
|
||||||
within(expectedMaxDuration(totalNodes)) {
|
within(expectedMaxDuration(totalNodes)) {
|
||||||
val joiningClusters = ifNode(fifthDatacenter)(bulk.map(Cluster(_)).toSet)(Set.empty)
|
val joiningClusters = if(isNode(fifthDatacenter)) bulk.map(Cluster(_)).toSet else Set.empty[Cluster]
|
||||||
join(joiningClusters, from = fifthDatacenter, to = firstDatacenter, totalNodes,
|
join(joiningClusters, from = fifthDatacenter, to = firstDatacenter, totalNodes,
|
||||||
runOnRoles = firstDatacenter, secondDatacenter, thirdDatacenter, fourthDatacenter, fifthDatacenter)
|
runOnRoles = firstDatacenter, secondDatacenter, thirdDatacenter, fourthDatacenter, fifthDatacenter)
|
||||||
enterBarrier("fifth-datacenter-joined-" + bulk.size)
|
enterBarrier("fifth-datacenter-joined-" + bulk.size)
|
||||||
|
|
@ -270,7 +270,7 @@ abstract class LargeClusterSpec
|
||||||
for (i ← 0 until oneByOne.size) {
|
for (i ← 0 until oneByOne.size) {
|
||||||
val totalNodes = nodesPerDatacenter * 4 + bulk.size + i + 1
|
val totalNodes = nodesPerDatacenter * 4 + bulk.size + i + 1
|
||||||
within(expectedMaxDuration(totalNodes)) {
|
within(expectedMaxDuration(totalNodes)) {
|
||||||
val joiningClusters = ifNode(fifthDatacenter)(Set(Cluster(oneByOne(i))))(Set.empty)
|
val joiningClusters = if(isNode(fifthDatacenter)) Set(Cluster(oneByOne(i))) else Set.empty[Cluster]
|
||||||
join(joiningClusters, from = fifthDatacenter, to = firstDatacenter, totalNodes,
|
join(joiningClusters, from = fifthDatacenter, to = firstDatacenter, totalNodes,
|
||||||
runOnRoles = firstDatacenter, secondDatacenter, thirdDatacenter, fourthDatacenter, fifthDatacenter)
|
runOnRoles = firstDatacenter, secondDatacenter, thirdDatacenter, fourthDatacenter, fifthDatacenter)
|
||||||
enterBarrier("fifth-datacenter-joined-" + (bulk.size + i))
|
enterBarrier("fifth-datacenter-joined-" + (bulk.size + i))
|
||||||
|
|
|
||||||
|
|
@ -210,7 +210,7 @@ trait MultiNodeClusterSpec extends Suite with STMultiNodeSpec { self: MultiNodeS
|
||||||
val expectedLeader = roleOfLeader(nodesInCluster)
|
val expectedLeader = roleOfLeader(nodesInCluster)
|
||||||
val leader = clusterView.leader
|
val leader = clusterView.leader
|
||||||
val isLeader = leader == Some(clusterView.selfAddress)
|
val isLeader = leader == Some(clusterView.selfAddress)
|
||||||
assert(isLeader == ifNode(expectedLeader)(true)(false),
|
assert(isLeader == isNode(expectedLeader),
|
||||||
"expectedLeader [%s], got leader [%s], members [%s]".format(expectedLeader, leader, clusterView.members))
|
"expectedLeader [%s], got leader [%s], members [%s]".format(expectedLeader, leader, clusterView.members))
|
||||||
clusterView.status must (be(MemberStatus.Up) or be(MemberStatus.Leaving))
|
clusterView.status must (be(MemberStatus.Up) or be(MemberStatus.Leaving))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,10 @@ abstract class MultiNodeConfig {
|
||||||
/**
|
/**
|
||||||
* Register a config override for a specific participant.
|
* Register a config override for a specific participant.
|
||||||
*/
|
*/
|
||||||
def nodeConfig(role: RoleName, config: Config): Unit = _nodeConf += role -> config
|
def nodeConfig(roles: RoleName*)(configs: Config*): Unit = {
|
||||||
|
val c = configs.reduceLeft(_ withFallback _)
|
||||||
|
_nodeConf ++= roles map { _ -> c }
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Include for verbose debug logging
|
* Include for verbose debug logging
|
||||||
|
|
@ -318,18 +321,15 @@ abstract class MultiNodeSpec(val myself: RoleName, _system: ActorSystem, _roles:
|
||||||
* to the `roleMap`).
|
* to the `roleMap`).
|
||||||
*/
|
*/
|
||||||
def runOn(nodes: RoleName*)(thunk: ⇒ Unit): Unit = {
|
def runOn(nodes: RoleName*)(thunk: ⇒ Unit): Unit = {
|
||||||
if (nodes exists (_ == myself)) {
|
if (isNode(nodes: _*)) {
|
||||||
thunk
|
thunk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute the `yes` block of code only on the given nodes (names according
|
* Verify that the running node matches one of the given nodes
|
||||||
* to the `roleMap`) else execute the `no` block of code.
|
|
||||||
*/
|
*/
|
||||||
def ifNode[T](nodes: RoleName*)(yes: ⇒ T)(no: ⇒ T): T = {
|
def isNode(nodes: RoleName*): Boolean = nodes contains myself
|
||||||
if (nodes exists (_ == myself)) yes else no
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enter the named barriers in the order given. Use the remaining duration from
|
* Enter the named barriers in the order given. Use the remaining duration from
|
||||||
|
|
|
||||||
|
|
@ -89,11 +89,8 @@ class TestConductorSpec extends MultiNodeSpec(TestConductorMultiJvmSpec) with ST
|
||||||
}
|
}
|
||||||
|
|
||||||
val (min, max) =
|
val (min, max) =
|
||||||
ifNode(master) {
|
if(isNode(master))(0 seconds, 500 millis)
|
||||||
(0 seconds, 500 millis)
|
else (0.6 seconds, 2 seconds)
|
||||||
} {
|
|
||||||
(0.6 seconds, 2 seconds)
|
|
||||||
}
|
|
||||||
|
|
||||||
within(min, max) {
|
within(min, max) {
|
||||||
expectMsg(500 millis, 10)
|
expectMsg(500 millis, 10)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue