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
|
|
@ -223,7 +223,12 @@ final class ClusterSingletonProxy(singletonManagerPath: String, settings: Cluste
|
||||||
// cluster logic
|
// cluster logic
|
||||||
case state: CurrentClusterState ⇒ handleInitial(state)
|
case state: CurrentClusterState ⇒ handleInitial(state)
|
||||||
case MemberUp(m) ⇒ add(m)
|
case MemberUp(m) ⇒ add(m)
|
||||||
case mEvent: MemberEvent if mEvent.isInstanceOf[MemberExited] || mEvent.isInstanceOf[MemberRemoved] ⇒ remove(mEvent.member)
|
case MemberExited(m) ⇒ remove(m)
|
||||||
|
case MemberRemoved(m, _) ⇒
|
||||||
|
if (m.uniqueAddress == cluster.selfUniqueAddress)
|
||||||
|
context.stop(self)
|
||||||
|
else
|
||||||
|
remove(m)
|
||||||
case _: MemberEvent ⇒ // do nothing
|
case _: MemberEvent ⇒ // do nothing
|
||||||
|
|
||||||
// singleton identification logic
|
// singleton identification logic
|
||||||
|
|
|
||||||
|
|
@ -89,12 +89,14 @@ class ClusterSingletonManagerLeaveSpec extends MultiNodeSpec(ClusterSingletonMan
|
||||||
name = "echo")
|
name = "echo")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val echoProxyTerminatedProbe = TestProbe()
|
||||||
|
|
||||||
lazy val echoProxy: ActorRef = {
|
lazy val echoProxy: ActorRef = {
|
||||||
system.actorOf(
|
echoProxyTerminatedProbe.watch(system.actorOf(
|
||||||
ClusterSingletonProxy.props(
|
ClusterSingletonProxy.props(
|
||||||
singletonManagerPath = "/user/echo",
|
singletonManagerPath = "/user/echo",
|
||||||
settings = ClusterSingletonProxySettings(system)),
|
settings = ClusterSingletonProxySettings(system)),
|
||||||
name = "echoProxy")
|
name = "echoProxy"))
|
||||||
}
|
}
|
||||||
|
|
||||||
"Leaving ClusterSingletonManager" must {
|
"Leaving ClusterSingletonManager" must {
|
||||||
|
|
@ -136,6 +138,7 @@ class ClusterSingletonManagerLeaveSpec extends MultiNodeSpec(ClusterSingletonMan
|
||||||
// CoordinatedShutdown makes sure that singleton actors are
|
// CoordinatedShutdown makes sure that singleton actors are
|
||||||
// stopped before Cluster shutdown
|
// stopped before Cluster shutdown
|
||||||
expectMsg("MemberRemoved")
|
expectMsg("MemberRemoved")
|
||||||
|
echoProxyTerminatedProbe.expectTerminated(echoProxy, 10.seconds)
|
||||||
}
|
}
|
||||||
enterBarrier("first-stopped")
|
enterBarrier("first-stopped")
|
||||||
|
|
||||||
|
|
@ -163,6 +166,7 @@ class ClusterSingletonManagerLeaveSpec extends MultiNodeSpec(ClusterSingletonMan
|
||||||
expectMsg(15.seconds, "stop")
|
expectMsg(15.seconds, "stop")
|
||||||
expectMsg("postStop")
|
expectMsg("postStop")
|
||||||
expectMsg("MemberRemoved")
|
expectMsg("MemberRemoved")
|
||||||
|
echoProxyTerminatedProbe.expectTerminated(echoProxy, 10.seconds)
|
||||||
}
|
}
|
||||||
enterBarrier("second-stopped")
|
enterBarrier("second-stopped")
|
||||||
|
|
||||||
|
|
@ -177,6 +181,7 @@ class ClusterSingletonManagerLeaveSpec extends MultiNodeSpec(ClusterSingletonMan
|
||||||
expectMsg(5.seconds, "stop")
|
expectMsg(5.seconds, "stop")
|
||||||
expectMsg("postStop")
|
expectMsg("postStop")
|
||||||
expectMsg("MemberRemoved")
|
expectMsg("MemberRemoved")
|
||||||
|
echoProxyTerminatedProbe.expectTerminated(echoProxy, 10.seconds)
|
||||||
}
|
}
|
||||||
enterBarrier("third-stopped")
|
enterBarrier("third-stopped")
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue