Adjust barriers/checks in LeaderElectionSpec, see #2583
* Previously it didn't check for unreachable, before down
This commit is contained in:
parent
ef695cbb29
commit
91f6c5a94d
1 changed files with 17 additions and 5 deletions
|
|
@ -4,10 +4,12 @@
|
||||||
|
|
||||||
package akka.cluster
|
package akka.cluster
|
||||||
|
|
||||||
|
import language.postfixOps
|
||||||
import com.typesafe.config.ConfigFactory
|
import com.typesafe.config.ConfigFactory
|
||||||
import akka.remote.testkit.MultiNodeConfig
|
import akka.remote.testkit.MultiNodeConfig
|
||||||
import akka.remote.testkit.MultiNodeSpec
|
import akka.remote.testkit.MultiNodeSpec
|
||||||
import akka.testkit._
|
import akka.testkit._
|
||||||
|
import scala.concurrent.util.duration._
|
||||||
|
|
||||||
case class LeaderElectionMultiNodeConfig(failureDetectorPuppet: Boolean) extends MultiNodeConfig {
|
case class LeaderElectionMultiNodeConfig(failureDetectorPuppet: Boolean) extends MultiNodeConfig {
|
||||||
val controller = role("controller")
|
val controller = role("controller")
|
||||||
|
|
@ -69,7 +71,7 @@ abstract class LeaderElectionSpec(multiNodeConfig: LeaderElectionMultiNodeConfig
|
||||||
val leaderAddress = address(leader)
|
val leaderAddress = address(leader)
|
||||||
enterBarrier("before-shutdown" + n)
|
enterBarrier("before-shutdown" + n)
|
||||||
testConductor.shutdown(leader, 0)
|
testConductor.shutdown(leader, 0)
|
||||||
enterBarrier("after-shutdown" + n, "after-down" + n, "completed" + n)
|
enterBarrier("after-shutdown" + n, "after-unavailable" + n, "after-down" + n, "completed" + n)
|
||||||
|
|
||||||
case `leader` ⇒
|
case `leader` ⇒
|
||||||
enterBarrier("before-shutdown" + n, "after-shutdown" + n)
|
enterBarrier("before-shutdown" + n, "after-shutdown" + n)
|
||||||
|
|
@ -78,15 +80,25 @@ abstract class LeaderElectionSpec(multiNodeConfig: LeaderElectionMultiNodeConfig
|
||||||
case `aUser` ⇒
|
case `aUser` ⇒
|
||||||
val leaderAddress = address(leader)
|
val leaderAddress = address(leader)
|
||||||
enterBarrier("before-shutdown" + n, "after-shutdown" + n)
|
enterBarrier("before-shutdown" + n, "after-shutdown" + n)
|
||||||
|
|
||||||
|
// detect failure
|
||||||
|
markNodeAsUnavailable(leaderAddress)
|
||||||
|
awaitCond(clusterView.unreachableMembers.exists(m ⇒ m.address == leaderAddress))
|
||||||
|
enterBarrier("after-unavailable" + n)
|
||||||
|
|
||||||
// user marks the shutdown leader as DOWN
|
// user marks the shutdown leader as DOWN
|
||||||
cluster.down(leaderAddress)
|
cluster.down(leaderAddress)
|
||||||
enterBarrier("after-down" + n, "completed" + n)
|
enterBarrier("after-down" + n, "completed" + n)
|
||||||
markNodeAsUnavailable(leaderAddress)
|
|
||||||
|
|
||||||
case _ if remainingRoles.contains(myself) ⇒
|
case _ if remainingRoles.contains(myself) ⇒
|
||||||
// remaining cluster nodes, not shutdown
|
// remaining cluster nodes, not shutdown
|
||||||
enterBarrier("before-shutdown" + n, "after-shutdown" + n, "after-down" + n)
|
val leaderAddress = address(leader)
|
||||||
|
enterBarrier("before-shutdown" + n, "after-shutdown" + n)
|
||||||
|
|
||||||
|
awaitCond(clusterView.unreachableMembers.exists(m ⇒ m.address == leaderAddress))
|
||||||
|
enterBarrier("after-unavailable" + n)
|
||||||
|
|
||||||
|
enterBarrier("after-down" + n)
|
||||||
awaitUpConvergence(currentRoles.size - 1)
|
awaitUpConvergence(currentRoles.size - 1)
|
||||||
val nextExpectedLeader = remainingRoles.head
|
val nextExpectedLeader = remainingRoles.head
|
||||||
clusterView.isLeader must be(myself == nextExpectedLeader)
|
clusterView.isLeader must be(myself == nextExpectedLeader)
|
||||||
|
|
@ -97,12 +109,12 @@ abstract class LeaderElectionSpec(multiNodeConfig: LeaderElectionMultiNodeConfig
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
"be able to 're-elect' a single leader after leader has left" taggedAs LongRunningTest in {
|
"be able to 're-elect' a single leader after leader has left" taggedAs LongRunningTest in within(20 seconds) {
|
||||||
shutdownLeaderAndVerifyNewLeader(alreadyShutdown = 0)
|
shutdownLeaderAndVerifyNewLeader(alreadyShutdown = 0)
|
||||||
enterBarrier("after-2")
|
enterBarrier("after-2")
|
||||||
}
|
}
|
||||||
|
|
||||||
"be able to 're-elect' a single leader after leader has left (again)" taggedAs LongRunningTest in {
|
"be able to 're-elect' a single leader after leader has left (again)" taggedAs LongRunningTest in within(20 seconds) {
|
||||||
shutdownLeaderAndVerifyNewLeader(alreadyShutdown = 1)
|
shutdownLeaderAndVerifyNewLeader(alreadyShutdown = 1)
|
||||||
enterBarrier("after-3")
|
enterBarrier("after-3")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue