don't quarantine back, #21450
* Don't quarantine the other system when receiving the Quarantined message, since that will result cluster member removal and can result in forming two separate clusters (cluster split). * Instead, the downing strategy should act on ThisActorSystemQuarantinedEvent, e.g. use it as a STONITH signal.
This commit is contained in:
parent
acafe80cf1
commit
bf151e9793
2 changed files with 8 additions and 13 deletions
|
|
@ -366,18 +366,11 @@ abstract class SurviveNetworkInstabilitySpec
|
||||||
}
|
}
|
||||||
|
|
||||||
runOn(side2: _*) {
|
runOn(side2: _*) {
|
||||||
if (RARP(system).provider.remoteSettings.Artery.Enabled) {
|
// side2 comes back but stays unreachable
|
||||||
// with artery the other side stays quarantined
|
|
||||||
val expected = (side2 map address).toSet
|
|
||||||
clusterView.members.map(_.address) should ===(expected)
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// with the old remoting side2 comes back but stays unreachable
|
|
||||||
val expected = ((side2 ++ side1) map address).toSet
|
val expected = ((side2 ++ side1) map address).toSet
|
||||||
clusterView.members.map(_.address) should ===(expected)
|
clusterView.members.map(_.address) should ===(expected)
|
||||||
assertUnreachable(side1: _*)
|
assertUnreachable(side1: _*)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
enterBarrier("after-7")
|
enterBarrier("after-7")
|
||||||
assertCanTalk(side1AfterJoin: _*)
|
assertCanTalk(side1AfterJoin: _*)
|
||||||
|
|
|
||||||
|
|
@ -623,10 +623,12 @@ private[remote] class ArteryTransport(_system: ExtendedActorSystem, _provider: R
|
||||||
}
|
}
|
||||||
|
|
||||||
case Quarantined(from, to) if to == localAddress ⇒
|
case Quarantined(from, to) if to == localAddress ⇒
|
||||||
|
// Don't quarantine the other system here, since that will result cluster member removal
|
||||||
|
// and can result in forming two separate clusters (cluster split).
|
||||||
|
// Instead, the downing strategy should act on ThisActorSystemQuarantinedEvent, e.g.
|
||||||
|
// use it as a STONITH signal.
|
||||||
val lifecycleEvent = ThisActorSystemQuarantinedEvent(localAddress.address, from.address)
|
val lifecycleEvent = ThisActorSystemQuarantinedEvent(localAddress.address, from.address)
|
||||||
publishLifecycleEvent(lifecycleEvent)
|
publishLifecycleEvent(lifecycleEvent)
|
||||||
// quarantine the other system from here
|
|
||||||
association(from.address).quarantine(lifecycleEvent.toString, Some(from.uid))
|
|
||||||
|
|
||||||
case _: ActorSystemTerminating ⇒
|
case _: ActorSystemTerminating ⇒
|
||||||
inboundEnvelope.sender match {
|
inboundEnvelope.sender match {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue