From bb9fad1d0bd139350d865650beddaff74bba9a26 Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Thu, 30 Aug 2012 16:54:55 +0200 Subject: [PATCH] Add missing CurrentClusterState case to tests, see #2456 * The only reason I can think of why the MemberExited event isn't received in MembershipChangeListenerExitingSpec is that CurrentClusterState isn't handled. Might be something else but this was wrong anyway. --- .../multi-jvm/scala/akka/cluster/LeaderLeavingSpec.scala | 8 +++++++- .../cluster/MembershipChangeListenerExitingSpec.scala | 4 ++++ .../cluster/MembershipChangeListenerLeavingSpec.scala | 4 ++++ .../scala/akka/cluster/NodeLeavingAndExitingSpec.scala | 6 ++++++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderLeavingSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderLeavingSpec.scala index b509341ee6..15e308cafb 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderLeavingSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderLeavingSpec.scala @@ -11,6 +11,7 @@ import akka.testkit._ import scala.concurrent.util.duration._ import akka.actor.Props import akka.actor.Actor +import akka.cluster.MemberStatus._ object LeaderLeavingMultiJvmSpec extends MultiNodeConfig { val first = role("first") @@ -62,7 +63,7 @@ abstract class LeaderLeavingSpec awaitCond(!cluster.isRunning) // verify that the LEADER is REMOVED - awaitCond(clusterView.status == MemberStatus.Removed) + awaitCond(clusterView.status == Removed) } else { @@ -71,6 +72,11 @@ abstract class LeaderLeavingSpec cluster.subscribe(system.actorOf(Props(new Actor { def receive = { + case state: CurrentClusterState ⇒ + if (state.members.exists(m ⇒ m.address == oldLeaderAddress && m.status == Leaving)) + leavingLatch.countDown() + if (state.members.exists(m ⇒ m.address == oldLeaderAddress && m.status == Exiting)) + exitingLatch.countDown() case MemberLeft(m) if m.address == oldLeaderAddress ⇒ leavingLatch.countDown() case MemberExited(m) if m.address == oldLeaderAddress ⇒ exitingLatch.countDown() case _ ⇒ // ignore diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerExitingSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerExitingSpec.scala index e82977e579..f0407e94d5 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerExitingSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerExitingSpec.scala @@ -12,6 +12,7 @@ import akka.testkit._ import scala.concurrent.util.duration._ import akka.actor.Props import akka.actor.Actor +import akka.cluster.MemberStatus._ object MembershipChangeListenerExitingMultiJvmSpec extends MultiNodeConfig { val first = role("first") @@ -57,6 +58,9 @@ abstract class MembershipChangeListenerExitingSpec val exitingLatch = TestLatch() cluster.subscribe(system.actorOf(Props(new Actor { def receive = { + case state: CurrentClusterState ⇒ + if (state.members.exists(m ⇒ m.address == address(second) && m.status == Exiting)) + exitingLatch.countDown() case MemberExited(m) if m.address == address(second) ⇒ exitingLatch.countDown() case _ ⇒ // ignore diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerLeavingSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerLeavingSpec.scala index afc11fa493..ab93e9c319 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerLeavingSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/MembershipChangeListenerLeavingSpec.scala @@ -12,6 +12,7 @@ import akka.testkit._ import akka.actor.Address import akka.actor.Props import akka.actor.Actor +import akka.cluster.MemberStatus._ object MembershipChangeListenerLeavingMultiJvmSpec extends MultiNodeConfig { val first = role("first") @@ -55,6 +56,9 @@ abstract class MembershipChangeListenerLeavingSpec val latch = TestLatch() cluster.subscribe(system.actorOf(Props(new Actor { def receive = { + case state: CurrentClusterState ⇒ + if (state.members.exists(m ⇒ m.address == address(second) && m.status == Leaving)) + latch.countDown() case MemberLeft(m) if m.address == address(second) ⇒ latch.countDown() case _ ⇒ // ignore diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeLeavingAndExitingSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeLeavingAndExitingSpec.scala index 5073e17aa1..529866c433 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeLeavingAndExitingSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/NodeLeavingAndExitingSpec.scala @@ -11,6 +11,7 @@ import akka.testkit._ import scala.concurrent.util.duration._ import akka.actor.Props import akka.actor.Actor +import akka.cluster.MemberStatus._ object NodeLeavingAndExitingMultiJvmSpec extends MultiNodeConfig { val first = role("first") @@ -48,6 +49,11 @@ abstract class NodeLeavingAndExitingSpec val exitingLatch = TestLatch() cluster.subscribe(system.actorOf(Props(new Actor { def receive = { + case state: CurrentClusterState ⇒ + if (state.members.exists(m ⇒ m.address == secondAddess && m.status == Leaving)) + leavingLatch.countDown() + if (state.members.exists(m ⇒ m.address == secondAddess && m.status == Exiting)) + exitingLatch.countDown() case MemberLeft(m) if m.address == secondAddess ⇒ leavingLatch.countDown() case MemberExited(m) if m.address == secondAddess ⇒ exitingLatch.countDown()