Adjust barriers/checks in LeaderElectionSpec, see #2583

* Previously it didn't check for unreachable, before down
This commit is contained in:
Patrik Nordwall 2012-10-12 13:27:31 +02:00
parent ef695cbb29
commit 91f6c5a94d

View file

@ -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")
} }