Skip to content

Commit 7e84cdd

Browse files
committed
fixed problem with MNTK false negatives
1 parent 0b95af5 commit 7e84cdd

File tree

2 files changed

+20
-19
lines changed

2 files changed

+20
-19
lines changed

src/core/Akka.Cluster.Tests.MultiNode/SplitBrainResolverDowningSpec.cs

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using Akka.Configuration;
1313
using Akka.Remote.TestKit;
1414
using Akka.Remote.Transport;
15+
using FluentAssertions;
1516

1617
namespace Akka.Cluster.Tests.MultiNode
1718
{
@@ -81,6 +82,13 @@ private void A_Cluster_must_detect_network_partition_and_down_minor_part_of_the_
8182

8283
EnterBarrier("before-split");
8384

85+
var downed = false;
86+
87+
RunOn(() =>
88+
{
89+
Cluster.RegisterOnMemberRemoved(() => downed = true);
90+
}, minority);
91+
8492
RunOn(() =>
8593
{
8694
foreach (var a in majority)
@@ -92,26 +100,15 @@ private void A_Cluster_must_detect_network_partition_and_down_minor_part_of_the_
92100

93101
RunOn(() =>
94102
{
95-
foreach (var role in minority)
96-
{
97-
MarkNodeAsUnavailable(GetAddress(role));
98-
}
99-
100103
// side with majority of the nodes must stay up
101104
AwaitMembersUp(majority.Length, canNotBePartOfMemberRing: minority.Select(GetAddress).ToImmutableHashSet());
102105
AssertLeader(majority);
103106
}, majority);
104-
107+
105108
RunOn(() =>
106109
{
107-
foreach (var role in majority)
108-
{
109-
MarkNodeAsUnavailable(GetAddress(role));
110-
}
111-
112-
// side with majority of the nodes must stay up
113-
AwaitMembersUp(majority.Length, canNotBePartOfMemberRing: minority.Select(GetAddress).ToImmutableHashSet());
114-
AssertLeader(majority);
110+
// side with majority of the nodes must stay up, minority must go down
111+
AwaitAssert(() => downed.Should().BeTrue("cluster node on-removed hook has been triggered"));
115112
}, minority);
116113

117114
EnterBarrier("after-2");

src/core/Akka.Cluster/SplitBrainResolver.cs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public IEnumerable<Member> Apply(NetworkPartitionContext context)
111111
? context.Remaining
112112
: context.Unreachable;
113113
}
114-
public override string ToString() => $"StaticQuorum(quorumSize: {QuorumSize}, role: {Role})";
114+
public override string ToString() => $"StaticQuorum(quorumSize: {QuorumSize}, role: '{Role}')";
115115
}
116116

117117
internal sealed class KeepMajority : ISplitBrainStrategy
@@ -148,7 +148,7 @@ private ImmutableSortedSet<Member> MembersWithRole(ImmutableSortedSet<Member> me
148148
? members
149149
: members.Where(m => m.HasRole(Role)).ToImmutableSortedSet();
150150

151-
public override string ToString() => $"KeepMajority(role: {Role})";
151+
public override string ToString() => $"KeepMajority(role: '{Role}')";
152152
}
153153

154154
internal sealed class KeepOldest : ISplitBrainStrategy
@@ -190,7 +190,7 @@ private ImmutableSortedSet<Member> MembersWithRole(ImmutableSortedSet<Member> me
190190
? members
191191
: members.Where(m => m.HasRole(Role)).ToImmutableSortedSet();
192192

193-
public override string ToString() => $"KeepOldest(downIfAlone: {DownIfAlone}, role: {Role})";
193+
public override string ToString() => $"KeepOldest(downIfAlone: {DownIfAlone}, role: '{Role})'";
194194
}
195195

196196
internal sealed class KeepReferee : ISplitBrainStrategy
@@ -307,21 +307,25 @@ protected override void OnReceive(object message)
307307
return;
308308
case StabilityReached _:
309309
HandleStabilityReached();
310-
311310
return;
312311
}
313312
}
314313

315314
private void HandleStabilityReached()
316315
{
316+
if (Log.IsInfoEnabled)
317+
{
318+
Log.Info("A network partition detected - unreachable nodes: [{0}], remaining: [{1}]", string.Join(", ", _unreachable.Select(m => m.Address)), string.Join(", ", _reachable.Select(m => m.Address)));
319+
}
320+
317321
var context = new NetworkPartitionContext(_unreachable, _reachable);
318322
var nodesToDown = _strategy.Apply(context).ToImmutableArray();
319323

320324
if (nodesToDown.Length > 0)
321325
{
322326
if (Log.IsInfoEnabled)
323327
{
324-
Log.Info("A network partition has been detected. {0} decided to down following nodes: [{0}]", _strategy, string.Join(", ", nodesToDown));
328+
Log.Info("A network partition has been detected. {0} decided to down following nodes: [{1}]", _strategy, string.Join(", ", nodesToDown));
325329
}
326330

327331
foreach (var member in nodesToDown)

0 commit comments

Comments
 (0)