add CoordinatedShutdown, #21537
* CoordinatedShutdown that can run tasks for configured phases in order (DAG) * coordinate handover/shutdown of singleton with cluster exiting/shutdown * phase config obj with depends-on list * integrate graceful leaving of sharding in coordinated shutdown * add timeout and recover * add some missing artery ports to tests * leave via CoordinatedShutdown.run * optionally exit-jvm in last phase * run via jvm shutdown hook * send ExitingConfirmed to leader before shutdown of Exiting to not have to wait for failure detector to mark it as unreachable before removing * the unreachable signal is still kept as a safe guard if message is lost or leader dies * PhaseClusterExiting vs MemberExited in ClusterSingletonManager * terminate ActorSystem when cluster shutdown (via Down) * add more predefined and custom phases * reference documentation * migration guide * problem when the leader order was sys2, sys1, sys3, then sys3 could not perform it's duties and move Leving sys1 to Exiting because it was observing sys1 as unreachable * exclude Leaving with exitingConfirmed from convergence condidtion
This commit is contained in:
parent
4a9c753710
commit
84ade6fdc3
69 changed files with 1778 additions and 339 deletions
|
|
@ -43,9 +43,9 @@ class ClusterMessageSerializerSpec extends AkkaSpec(
|
|||
|
||||
"be serializable" in {
|
||||
val address = Address("akka.tcp", "system", "some.host.org", 4711)
|
||||
val uniqueAddress = UniqueAddress(address, 17)
|
||||
val uniqueAddress = UniqueAddress(address, 17L)
|
||||
val address2 = Address("akka.tcp", "system", "other.host.org", 4711)
|
||||
val uniqueAddress2 = UniqueAddress(address2, 18)
|
||||
val uniqueAddress2 = UniqueAddress(address2, 18L)
|
||||
checkSerialization(InternalClusterAction.Join(uniqueAddress, Set("foo", "bar")))
|
||||
checkSerialization(ClusterUserAction.Leave(address))
|
||||
checkSerialization(ClusterUserAction.Down(address))
|
||||
|
|
@ -54,6 +54,7 @@ class ClusterMessageSerializerSpec extends AkkaSpec(
|
|||
checkSerialization(InternalClusterAction.InitJoinNack(address))
|
||||
checkSerialization(ClusterHeartbeatSender.Heartbeat(address))
|
||||
checkSerialization(ClusterHeartbeatSender.HeartbeatRsp(uniqueAddress))
|
||||
checkSerialization(InternalClusterAction.ExitingConfirmed(uniqueAddress))
|
||||
|
||||
val node1 = VectorClock.Node("node1")
|
||||
val node2 = VectorClock.Node("node2")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue