Exemple #1
0
        public void ShouldParseConfig()
        {
            var config   = ConfigurationFactory.ParseString(@"
                akka.cluster.split-brain-resolver.static-quorum.role = ""test""
                akka.cluster.split-brain-resolver.static-quorum.quorum-size = 3");
            var strategy = new StaticQuorumDowningStrategy(config);

            strategy.Role.Should().Be("test");
            strategy.QuorumSize.Should().Be(3);
        }
Exemple #2
0
        public void ShouldNotDownPartitionsWithEnoughMembers()
        {
            var members = TestUtils.CreateMembers(MemberStatus.Up).Take(3).ToImmutableSortedSet();

            var clusterState =
                new CurrentClusterState()
                .Copy(members);

            var strategy = new StaticQuorumDowningStrategy(quorumSize: 3);
            var victims  = strategy.GetVictims(clusterState);

            victims.Count().Should().Be(0, "Partitions with quorum size or greater should not be marked for downing");
        }
Exemple #3
0
        public void ShouldDownPartitionsWithTooFewAvailableMembers()
        {
            var members            = TestUtils.CreateMembers(MemberStatus.Up).Take(3).ToImmutableSortedSet();
            var unreachableMembers = members.Take(1).ToImmutableHashSet();

            var clusterState =
                new CurrentClusterState()
                .Copy(members, unreachableMembers);

            var strategy = new StaticQuorumDowningStrategy(quorumSize: 3);
            var victims  = strategy.GetVictims(clusterState);

            victims.ToImmutableHashSet().SetEquals(members)
            .Should().BeTrue("Partitions with fewer available members than the quorum size should be marked for downing");
        }
Exemple #4
0
        public void ShouldDownUnreachablesWhenEnoughAvailableMembers()
        {
            var members            = TestUtils.CreateMembers(MemberStatus.Up).Take(5).ToImmutableSortedSet();
            var unreachableMembers = members.Take(2).ToImmutableHashSet();

            var clusterState =
                new CurrentClusterState()
                .Copy(members: members, unreachable: unreachableMembers);

            var strategy = new StaticQuorumDowningStrategy(quorumSize: 3);
            var victims  = strategy.GetVictims(clusterState).ToList();

            victims.ToImmutableHashSet().SetEquals(unreachableMembers)
            .Should().BeTrue("Partitions with available members >= quorum size should down unreachable members");
        }
Exemple #5
0
        public void ShouldNotDownPartitionsWithEnoughMembersInRole()
        {
            string roleName = "SomeRole";
            var    roles = new string[] { roleName }.ToImmutableHashSet();

            var membersInRole = TestUtils.CreateMembers(MemberStatus.Up, roles).Take(3).ToList();
            var members       =
                TestUtils.CreateMembers(MemberStatus.Up)
                .Take(2)
                .Concat(membersInRole)
                .ToImmutableSortedSet();

            var clusterState = new CurrentClusterState().Copy(members);

            var strategy = new StaticQuorumDowningStrategy(quorumSize: 3, role: roleName);
            var victims  = strategy.GetVictims(clusterState);

            victims.Count().Should().Be(0, "Partitions with fewer than the quorum size should be marked for downing");
        }