pekko/akka-cluster/src/multi-jvm/scala/akka/cluster/InitialMembersOfNewDcSpec.scala
Christopher Batey a3e52078df Enable header plugin for the MultiJVM configuration (#24974)
Seems when did the changes for 2018 it intro introduced a space in all
after, hence so many changes.
2018-04-25 00:03:55 +09:00

109 lines
3.1 KiB
Scala

/**
* Copyright (C) 2017-2018 Lightbend Inc. <https://www.lightbend.com>
*/
package akka.cluster
import akka.remote.testkit._
import akka.testkit.ImplicitSender
import com.typesafe.config.ConfigFactory
import scala.concurrent.duration._
object InitialMembersOfNewDcSpec extends MultiNodeConfig {
commonConfig(ConfigFactory.parseString(
s"""
akka.actor.provider = cluster
akka.actor.warn-about-java-serializer-usage = off
akka.coordinated-shutdown.terminate-actor-system = off
akka.cluster {
jmx.enabled = off
debug.verbose-gossip-logging = on
}
akka.cluster.multi-data-center {
#cross-data-center-gossip-probability = 0.5
}
akka.loglevel = INFO
akka.log-dead-letters = off
akka.log-dead-letters-during-shutdown = off
akka.loggers = ["akka.testkit.TestEventListener"]
"""))
val one = role("one")
val two = role("two")
val three = role("three")
val four = role("four")
val five = role("five")
nodeConfig(one, two, three) {
ConfigFactory.parseString("akka.cluster.multi-data-center.self-data-center = DC1")
}
nodeConfig(four, five) {
ConfigFactory.parseString("akka.cluster.multi-data-center.self-data-center = DC2")
}
}
class InitialMembersOfNewDcSpecMultiJvmNode1 extends InitialMembersOfNewDcSpec
class InitialMembersOfNewDcSpecMultiJvmNode2 extends InitialMembersOfNewDcSpec
class InitialMembersOfNewDcSpecMultiJvmNode3 extends InitialMembersOfNewDcSpec
class InitialMembersOfNewDcSpecMultiJvmNode4 extends InitialMembersOfNewDcSpec
class InitialMembersOfNewDcSpecMultiJvmNode5 extends InitialMembersOfNewDcSpec
abstract class InitialMembersOfNewDcSpec extends MultiNodeSpec(InitialMembersOfNewDcSpec) with STMultiNodeSpec with ImplicitSender {
import InitialMembersOfNewDcSpec._
def initialParticipants = roles.size
val cluster = Cluster(system)
"Joining a new DC" must {
"join node one" in {
runOn(one) {
cluster.join(node(one).address)
}
enterBarrier("node one up")
}
"see all dc1 nodes join" in {
runOn(two, three) {
cluster.join(node(one).address)
}
}
"see all dc1 nodes see each other as up" in {
runOn(two, three) {
within(20.seconds) {
awaitAssert({
cluster.state.members.filter(_.status == MemberStatus.Up) should have size 3
})
}
}
enterBarrier("dc1 fully up")
}
"join first member of new dc" in {
enterBarrier("Node 4 about to join")
val startTime = System.nanoTime()
runOn(four) {
log.info("Joining cluster")
cluster.join(node(one).address)
}
// Check how long it takes for all other nodes to see every node as up
runOn(one, two, three, four) {
within(20.seconds) {
awaitAssert({
cluster.state.members.filter(_.status == MemberStatus.Up) should have size 4
})
}
val totalTime = System.nanoTime() - startTime
log.info("Can see new node (and all others as up): {}ms", totalTime.nanos.toMillis)
}
enterBarrier("node 4 joined dc and all nodes know it is up")
}
}
}