From dcb73c0200c55119385e87f98029fe473f8e2265 Mon Sep 17 00:00:00 2001 From: Renato Cavalcanti Date: Fri, 9 Apr 2021 14:02:35 +0200 Subject: [PATCH] Simplified reverse in lease majority (#30155) --- ...mplified-reverse-logic-in-lease-majority.excludes | 3 +++ .../scala/akka/cluster/sbr/DowningStrategy.scala | 9 +-------- .../scala/akka/cluster/sbr/SplitBrainResolver.scala | 2 +- .../akka/cluster/sbr/SplitBrainResolverSpec.scala | 12 ++++++------ 4 files changed, 11 insertions(+), 15 deletions(-) create mode 100644 akka-cluster/src/main/mima-filters/2.6.13.backwards.excludes/simplified-reverse-logic-in-lease-majority.excludes diff --git a/akka-cluster/src/main/mima-filters/2.6.13.backwards.excludes/simplified-reverse-logic-in-lease-majority.excludes b/akka-cluster/src/main/mima-filters/2.6.13.backwards.excludes/simplified-reverse-logic-in-lease-majority.excludes new file mode 100644 index 0000000000..4ae2944c87 --- /dev/null +++ b/akka-cluster/src/main/mima-filters/2.6.13.backwards.excludes/simplified-reverse-logic-in-lease-majority.excludes @@ -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") \ No newline at end of file diff --git a/akka-cluster/src/main/scala/akka/cluster/sbr/DowningStrategy.scala b/akka-cluster/src/main/scala/akka/cluster/sbr/DowningStrategy.scala index 2e66f0d637..cc5f57e7bb 100644 --- a/akka-cluster/src/main/scala/akka/cluster/sbr/DowningStrategy.scala +++ b/akka-cluster/src/main/scala/akka/cluster/sbr/DowningStrategy.scala @@ -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") } } diff --git a/akka-cluster/src/main/scala/akka/cluster/sbr/SplitBrainResolver.scala b/akka-cluster/src/main/scala/akka/cluster/sbr/SplitBrainResolver.scala index f7a42c5023..f4a6fd78f0 100644 --- a/akka-cluster/src/main/scala/akka/cluster/sbr/SplitBrainResolver.scala +++ b/akka-cluster/src/main/scala/akka/cluster/sbr/SplitBrainResolver.scala @@ -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 diff --git a/akka-cluster/src/test/scala/akka/cluster/sbr/SplitBrainResolverSpec.scala b/akka-cluster/src/test/scala/akka/cluster/sbr/SplitBrainResolverSpec.scala index 9d4af88a50..faf26c87e1 100644 --- a/akka-cluster/src/test/scala/akka/cluster/sbr/SplitBrainResolverSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/sbr/SplitBrainResolverSpec.scala @@ -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))