public void ShouldDownAllMembersWhenNotEnoughNodes() { string refereeAddress = "akka.tcp://system@localhost:33333"; var referee = TestUtils.CreateMember(MemberStatus.Up, Address.Parse(refereeAddress)); var members = TestUtils.CreateMembers(MemberStatus.Up) .Take(4) .Concat(new List <Member> { referee }) .ToImmutableSortedSet(); var unreachable = members.Where(m => m != referee) .Take(2) .ToImmutableHashSet(); var state = new CurrentClusterState().Copy(members, unreachable); var strategy = new KeepRefereeDowningStrategy(refereeAddress, downAllIfLessThanNodes: 4); var victims = strategy.GetVictims(state); victims.ToImmutableHashSet().SetEquals(members) .Should().BeTrue("We have 3 available members, which is less than downAllIfLessThanNodes 4, so down all members"); }
public void ShouldDownMembersInPartitionsWithoutReferee() { string refereeAddress = "akka.tcp://system@localhost:33333"; var referee = TestUtils.CreateMember(MemberStatus.Up, Address.Parse(refereeAddress)); var members = TestUtils.CreateMembers(MemberStatus.Up) .Take(4) .Concat(new List <Member> { referee }) .ToImmutableSortedSet(); var unreachable = members.Where(m => m != referee) .Take(2) .Concat(new List <Member> { referee }) .ToImmutableHashSet(); var state = new CurrentClusterState().Copy(members, unreachable); var strategy = new KeepRefereeDowningStrategy(refereeAddress, downAllIfLessThanNodes: 0); var victims = strategy.GetVictims(state); victims.ToImmutableHashSet().SetEquals(members) .Should().BeTrue("When we don't have the referee, we down all members"); }
public void ShouldParseConfig() { var address = Address.Parse("akka.tcp://system@hostname:1234"); var config = ConfigurationFactory.ParseString(string.Format(@" akka.cluster.split-brain-resolver.keep-referee.address = ""{0}"" akka.cluster.split-brain-resolver.keep-referee.down-all-if-less-than-nodes = 10", address.ToString())); var strategy = new KeepRefereeDowningStrategy(config); strategy.Address.Should().Be(address); strategy.DownAllIfLessThanNodes.Should().Be(10); }
protected override IDowningStrategy GetDowningStrategy() { var config = System.Settings.Config; var requestedStrategy = config.GetString("akka.cluster.split-brain-resolver.active-strategy"); IDowningStrategy strategy = null; switch (requestedStrategy) { case "static-quorum": strategy = new StaticQuorumDowningStrategy(config); break; case "keep-referee": strategy = new KeepRefereeDowningStrategy(config); break; case "keep-majority": strategy = new KeepMajorityDowningStrategy(config); break; case "keep-oldest": strategy = new KeepOldestDowningStrategy(config); break; case "off": strategy = new NoopDowningStrategy(); break; default: throw new NotSupportedException($"Unknown downing strategy requested"); } return(strategy); }