Esempio n. 1
0
        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");
        }
Esempio n. 2
0
        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");
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }