Simplified reverse in lease majority (#30155)

This commit is contained in:
Renato Cavalcanti 2021-04-09 14:02:35 +02:00 committed by GitHub
parent 0a226eb3ea
commit dcb73c0200
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 11 additions and 15 deletions

View file

@ -0,0 +1,3 @@
# #30155 simplified reverse logic in lease majority
ProblemFilters.exclude[IncompatibleMethTypeProblem]("akka.cluster.sbr.SplitBrainResolverBase.waitingForLease")
ProblemFilters.exclude[IncompatibleMethTypeProblem]("akka.cluster.sbr.DowningStrategy.reverseDecision")

View file

@ -317,17 +317,10 @@ import akka.coordination.lease.scaladsl.Lease
unreachableMembers.forall(m => m.status == MemberStatus.Down || m.status == MemberStatus.Exiting)
}
def reverseDecision(decision: Decision): Decision = {
def reverseDecision(decision: AcquireLeaseDecision): Decision = {
decision match {
case DownUnreachable => DownReachable
case AcquireLeaseAndDownUnreachable(_) => DownReachable
case DownReachable => DownUnreachable
case DownAll => DownAll
case DownIndirectlyConnected => ReverseDownIndirectlyConnected
case AcquireLeaseAndDownIndirectlyConnected(_) => ReverseDownIndirectlyConnected
case ReverseDownIndirectlyConnected => DownIndirectlyConnected
case DownSelfQuarantinedByRemote =>
throw new IllegalArgumentException("Not expected to ever try to reverse DownSelfQuarantinedByRemote")
}
}

View file

@ -378,7 +378,7 @@ import akka.remote.artery.ThisActorSystemQuarantinedEvent
.pipeTo(self))
}
def waitingForLease(decision: Decision): Receive = {
def waitingForLease(decision: AcquireLeaseDecision): Receive = {
case AcquireLease =>
acquireLease() // reply message is LeaseResult

View file

@ -846,7 +846,7 @@ class SplitBrainResolverSpec
val decision1 = strategy1.decide()
decision1 should ===(AcquireLeaseAndDownUnreachable(Duration.Zero))
strategy1.nodesToDown(decision1) should ===(side2Nodes)
val reverseDecision1 = strategy1.reverseDecision(decision1)
val reverseDecision1 = strategy1.reverseDecision(decision1.asInstanceOf[AcquireLeaseDecision])
reverseDecision1 should ===(DownReachable)
strategy1.nodesToDown(reverseDecision1) should ===(side1Nodes)
@ -854,7 +854,7 @@ class SplitBrainResolverSpec
val decision2 = strategy2.decide()
decision2 should ===(AcquireLeaseAndDownUnreachable(acquireLeaseDelayForMinority))
strategy2.nodesToDown(decision2) should ===(side1Nodes)
val reverseDecision2 = strategy2.reverseDecision(decision2)
val reverseDecision2 = strategy2.reverseDecision(decision2.asInstanceOf[AcquireLeaseDecision])
reverseDecision2 should ===(DownReachable)
strategy2.nodesToDown(reverseDecision2) should ===(side2Nodes)
}
@ -888,7 +888,7 @@ class SplitBrainResolverSpec
val decision1 = strategy1.decide()
decision1 should ===(AcquireLeaseAndDownIndirectlyConnected(Duration.Zero))
strategy1.nodesToDown(decision1) should ===(Set(memberA.uniqueAddress, memberB.uniqueAddress))
val reverseDecision1 = strategy1.reverseDecision(decision1)
val reverseDecision1 = strategy1.reverseDecision(decision1.asInstanceOf[AcquireLeaseDecision])
reverseDecision1 should ===(ReverseDownIndirectlyConnected)
strategy1.nodesToDown(reverseDecision1) should ===(side1Nodes)
}
@ -908,7 +908,7 @@ class SplitBrainResolverSpec
val decision1 = strategy1.decide()
decision1 should ===(AcquireLeaseAndDownIndirectlyConnected(Duration.Zero))
strategy1.nodesToDown(decision1) should ===(Set(memberB, memberC, memberD, memberE).map(_.uniqueAddress))
val reverseDecision1 = strategy1.reverseDecision(decision1)
val reverseDecision1 = strategy1.reverseDecision(decision1.asInstanceOf[AcquireLeaseDecision])
reverseDecision1 should ===(ReverseDownIndirectlyConnected)
strategy1.nodesToDown(reverseDecision1) should ===(side1Nodes)
@ -921,7 +921,7 @@ class SplitBrainResolverSpec
val decision2 = strategy2.decide()
decision2 should ===(AcquireLeaseAndDownUnreachable(acquireLeaseDelayForMinority))
strategy2.nodesToDown(decision2) should ===(side1Nodes)
val reverseDecision2 = strategy2.reverseDecision(decision2)
val reverseDecision2 = strategy2.reverseDecision(decision2.asInstanceOf[AcquireLeaseDecision])
reverseDecision2 should ===(DownReachable)
strategy2.nodesToDown(reverseDecision2) should ===(side2Nodes)
@ -932,7 +932,7 @@ class SplitBrainResolverSpec
val decision3 = strategy3.decide()
decision3 should ===(AcquireLeaseAndDownIndirectlyConnected(Duration.Zero))
strategy3.nodesToDown(decision3) should ===(side1Nodes)
val reverseDecision3 = strategy3.reverseDecision(decision3)
val reverseDecision3 = strategy3.reverseDecision(decision3.asInstanceOf[AcquireLeaseDecision])
reverseDecision3 should ===(ReverseDownIndirectlyConnected)
strategy3.nodesToDown(reverseDecision3) should ===(Set(memberB, memberC, memberD, memberE).map(_.uniqueAddress))