stop ClusterSingletonProxy when self member removed, #22117
This commit is contained in:
parent
8fd5b7e53e
commit
eb8ebd09bd
2 changed files with 14 additions and 4 deletions
|
|
@ -222,8 +222,13 @@ final class ClusterSingletonProxy(singletonManagerPath: String, settings: Cluste
|
|||
def receive = {
|
||||
// cluster logic
|
||||
case state: CurrentClusterState ⇒ handleInitial(state)
|
||||
case MemberUp(m) ⇒ add(m)
|
||||
case mEvent: MemberEvent if mEvent.isInstanceOf[MemberExited] || mEvent.isInstanceOf[MemberRemoved] ⇒ remove(mEvent.member)
|
||||
case MemberUp(m) ⇒ add(m)
|
||||
case MemberExited(m) ⇒ remove(m)
|
||||
case MemberRemoved(m, _) ⇒
|
||||
if (m.uniqueAddress == cluster.selfUniqueAddress)
|
||||
context.stop(self)
|
||||
else
|
||||
remove(m)
|
||||
case _: MemberEvent ⇒ // do nothing
|
||||
|
||||
// singleton identification logic
|
||||
|
|
|
|||
|
|
@ -89,12 +89,14 @@ class ClusterSingletonManagerLeaveSpec extends MultiNodeSpec(ClusterSingletonMan
|
|||
name = "echo")
|
||||
}
|
||||
|
||||
val echoProxyTerminatedProbe = TestProbe()
|
||||
|
||||
lazy val echoProxy: ActorRef = {
|
||||
system.actorOf(
|
||||
echoProxyTerminatedProbe.watch(system.actorOf(
|
||||
ClusterSingletonProxy.props(
|
||||
singletonManagerPath = "/user/echo",
|
||||
settings = ClusterSingletonProxySettings(system)),
|
||||
name = "echoProxy")
|
||||
name = "echoProxy"))
|
||||
}
|
||||
|
||||
"Leaving ClusterSingletonManager" must {
|
||||
|
|
@ -136,6 +138,7 @@ class ClusterSingletonManagerLeaveSpec extends MultiNodeSpec(ClusterSingletonMan
|
|||
// CoordinatedShutdown makes sure that singleton actors are
|
||||
// stopped before Cluster shutdown
|
||||
expectMsg("MemberRemoved")
|
||||
echoProxyTerminatedProbe.expectTerminated(echoProxy, 10.seconds)
|
||||
}
|
||||
enterBarrier("first-stopped")
|
||||
|
||||
|
|
@ -163,6 +166,7 @@ class ClusterSingletonManagerLeaveSpec extends MultiNodeSpec(ClusterSingletonMan
|
|||
expectMsg(15.seconds, "stop")
|
||||
expectMsg("postStop")
|
||||
expectMsg("MemberRemoved")
|
||||
echoProxyTerminatedProbe.expectTerminated(echoProxy, 10.seconds)
|
||||
}
|
||||
enterBarrier("second-stopped")
|
||||
|
||||
|
|
@ -177,6 +181,7 @@ class ClusterSingletonManagerLeaveSpec extends MultiNodeSpec(ClusterSingletonMan
|
|||
expectMsg(5.seconds, "stop")
|
||||
expectMsg("postStop")
|
||||
expectMsg("MemberRemoved")
|
||||
echoProxyTerminatedProbe.expectTerminated(echoProxy, 10.seconds)
|
||||
}
|
||||
enterBarrier("third-stopped")
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue