Fine grained events, see #2202
* Defined the domain events in ClusterEvent.scala file * Produce events from diff and publish publish to event bus from separate actor, ClusterDomainEventPublisher * Adjustments of tests
This commit is contained in:
parent
6389e1097b
commit
20a038fdfd
15 changed files with 458 additions and 214 deletions
|
|
@ -18,6 +18,7 @@ import java.util.concurrent.TimeUnit
|
|||
import akka.remote.testconductor.RoleName
|
||||
import akka.actor.Props
|
||||
import akka.actor.Actor
|
||||
import akka.cluster.MemberStatus._
|
||||
|
||||
object LargeClusterMultiJvmSpec extends MultiNodeConfig {
|
||||
// each jvm simulates a datacenter with many nodes
|
||||
|
|
@ -147,15 +148,20 @@ abstract class LargeClusterSpec
|
|||
val latch = TestLatch(clusterNodes.size)
|
||||
clusterNodes foreach { c ⇒
|
||||
c.subscribe(system.actorOf(Props(new Actor {
|
||||
var upCount = 0
|
||||
def receive = {
|
||||
case MembersChanged(members) ⇒
|
||||
if (!latch.isOpen && members.size == totalNodes && members.forall(_.status == MemberStatus.Up)) {
|
||||
case state: CurrentClusterState ⇒
|
||||
upCount = state.members.count(_.status == Up)
|
||||
case MemberUp(_) if !latch.isOpen ⇒
|
||||
upCount += 1
|
||||
if (upCount == totalNodes) {
|
||||
log.debug("All [{}] nodes Up in [{}], it took [{}], received [{}] gossip messages",
|
||||
totalNodes, c.selfAddress, tookMillis, gossipCount(c))
|
||||
latch.countDown()
|
||||
}
|
||||
case _ ⇒ // ignore
|
||||
}
|
||||
})), classOf[MembersChanged])
|
||||
})), classOf[MemberEvent])
|
||||
}
|
||||
|
||||
runOn(from) {
|
||||
|
|
@ -276,18 +282,20 @@ abstract class LargeClusterSpec
|
|||
val latch = TestLatch(nodesPerDatacenter)
|
||||
systems foreach { sys ⇒
|
||||
Cluster(sys).subscribe(sys.actorOf(Props(new Actor {
|
||||
var gotExpectedLiveNodes = false
|
||||
var gotExpectedUnreachableNodes = false
|
||||
var gotUnreachable = Set.empty[Member]
|
||||
def receive = {
|
||||
case MembersChanged(members) if !latch.isOpen ⇒
|
||||
gotExpectedLiveNodes = members.size == liveNodes
|
||||
case state: CurrentClusterState ⇒
|
||||
gotUnreachable = state.unreachable
|
||||
checkDone()
|
||||
case UnreachableMembersChanged(unreachable) if !latch.isOpen ⇒
|
||||
gotExpectedUnreachableNodes = unreachable.size == unreachableNodes
|
||||
case MemberUnreachable(m) if !latch.isOpen ⇒
|
||||
gotUnreachable = gotUnreachable + m
|
||||
checkDone()
|
||||
case MemberDowned(m) if !latch.isOpen ⇒
|
||||
gotUnreachable = gotUnreachable + m
|
||||
checkDone()
|
||||
case _ ⇒ // not interesting
|
||||
}
|
||||
def checkDone(): Unit = if (gotExpectedLiveNodes && gotExpectedUnreachableNodes) {
|
||||
def checkDone(): Unit = if (gotUnreachable.size == unreachableNodes) {
|
||||
log.info("Detected [{}] unreachable nodes in [{}], it took [{}], received [{}] gossip messages",
|
||||
unreachableNodes, Cluster(sys).selfAddress, tookMillis, gossipCount(Cluster(sys)))
|
||||
latch.countDown()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue