public void MemberOrdering_must_work_with_sorted_set() { var address1 = new Address("akka.tcp", "sys1", "host1", 9001); var address2 = address1.WithPort(9002); var address3 = address1.WithPort(9003); ImmutableSortedSet .Create(TestMember.Create(address1, MemberStatus.Joining)) .Remove(TestMember.Create(address1, MemberStatus.Up)) .Should().BeEmpty(); ImmutableSortedSet .Create(TestMember.Create(address1, MemberStatus.Exiting)) .Remove(TestMember.Create(address1, MemberStatus.Removed)) .Should().BeEmpty(); ImmutableSortedSet .Create(TestMember.Create(address1, MemberStatus.Up)) .Remove(TestMember.Create(address1, MemberStatus.Exiting)) .Should().BeEmpty(); ImmutableSortedSet .Create( TestMember.Create(address2, MemberStatus.Up), TestMember.Create(address3, MemberStatus.Joining), TestMember.Create(address1, MemberStatus.Exiting)) .Remove( TestMember.Create(address1, MemberStatus.Removed)) .Should().BeEquivalentTo( TestMember.Create(address2, MemberStatus.Up), TestMember.Create(address3, MemberStatus.Joining)); }
public void A_gossip_must_find_two_oldest_as_targets_for_Exiting_change() { Member a1 = TestMember.Create(new Address("akka.tcp", "sys", "a4", 2552), MemberStatus.Up, ImmutableHashSet <string> .Empty, upNumber: 1); Member a2 = TestMember.Create(new Address("akka.tcp", "sys", "a3", 2552), MemberStatus.Up, ImmutableHashSet <string> .Empty, upNumber: 2); Member a3 = TestMember.Create(new Address("akka.tcp", "sys", "a2", 2552), MemberStatus.Up, ImmutableHashSet <string> .Empty, upNumber: 3); Member a4 = TestMember.Create(new Address("akka.tcp", "sys", "a1", 2552), MemberStatus.Up, ImmutableHashSet <string> .Empty, upNumber: 4); var a1Exiting = a1.Copy(MemberStatus.Leaving).Copy(MemberStatus.Exiting); var gossip = new Gossip(ImmutableSortedSet.Create(a1Exiting, a2, a3, a4)); var r = ClusterCoreDaemon.GossipTargetsForExitingMembers(gossip, new Member[] { a1Exiting }); r.Should().BeEquivalentTo(new[] { a1Exiting, a2 }); }
public void MemberOrdering_must_order_members_by_host_and_port() { var members = new SortedSet <Member> { TestMember.Create(Address.Parse("akka://sys@darkstar:1112"), MemberStatus.Up), TestMember.Create(Address.Parse("akka://sys@darkstar:1113"), MemberStatus.Joining), TestMember.Create(Address.Parse("akka://sys@darkstar:1111"), MemberStatus.Up), };; var seq = members.ToList(); seq.Count.Should().Be(3); seq[0].Should().Be(TestMember.Create(Address.Parse("akka://sys@darkstar:1111"), MemberStatus.Up)); seq[1].Should().Be(TestMember.Create(Address.Parse("akka://sys@darkstar:1112"), MemberStatus.Up)); seq[2].Should().Be(TestMember.Create(Address.Parse("akka://sys@darkstar:1113"), MemberStatus.Joining)); }
public void MemberOrdering_must_be_sorted_by_address_correctly() { // sorting should be done on host and port, only var m1 = TestMember.Create(new Address("akka.tcp", "sys1", "host1", 9000), MemberStatus.Up); var m2 = TestMember.Create(new Address("akka.tcp", "sys1", "host1", 10000), MemberStatus.Up); var m3 = TestMember.Create(new Address("cluster", "sys2", "host2", 8000), MemberStatus.Up); var m4 = TestMember.Create(new Address("cluster", "sys2", "host2", 9000), MemberStatus.Up); var m5 = TestMember.Create(new Address("cluster", "sys1", "host2", 10000), MemberStatus.Up); var expected = new List <Member> { m1, m2, m3, m4, m5 }; var shuffled = expected.Shuffle().ToImmutableList(); new SortedSet <Member>(shuffled).Should().BeEquivalentTo(expected); shuffled.Sort().Should().BeEquivalentTo(expected); }
public void MemberOrdering_must_have_stable_equals_and_hash_code() { var address = new Address("akka.tcp", "sys1", "host1", 9000); var m1 = TestMember.Create(address, MemberStatus.Joining); var m11 = Member.Create(new UniqueAddress(address, -3), ImmutableHashSet.Create <string>()); var m2 = m1.Copy(status: MemberStatus.Up); var m22 = m11.Copy(status: MemberStatus.Up); var m3 = TestMember.Create(address.WithPort(10000), MemberStatus.Up); Assert.Equal(m1, m2); Assert.Equal(m1.GetHashCode(), m2.GetHashCode()); Assert.NotEqual(m3, m2); Assert.NotEqual(m3, m1); Assert.Equal(m11, m22); Assert.NotEqual(m1, m11); Assert.NotEqual(m2, m22); }
public void MemberOrdering_must_order_members_by_host_and_port() { var sortedSet = new SortedSet <Member> { TestMember.Create(Address.Parse("akka://sys@darkstar:1112"), MemberStatus.Up), TestMember.Create(Address.Parse("akka://sys@darkstar:1113"), MemberStatus.Joining), TestMember.Create(Address.Parse("akka://sys@darkstar:1111"), MemberStatus.Up), };; var expected = new List <Member> { TestMember.Create(Address.Parse("akka://sys@darkstar:1111"), MemberStatus.Up), TestMember.Create(Address.Parse("akka://sys@darkstar:1112"), MemberStatus.Up), TestMember.Create(Address.Parse("akka://sys@darkstar:1113"), MemberStatus.Joining), }; Assert.Equal(expected, sortedSet.ToList()); }
public void MemberOrdering_must_consistent_ordering_and_equals() { var address1 = new Address("akka.tcp", "sys1", "host1", 9001); var address2 = address1.WithPort(9002); var x = TestMember.Create(address1, MemberStatus.Exiting); var y = TestMember.Create(address1, MemberStatus.Removed); var z = TestMember.Create(address2, MemberStatus.Up); Member.Ordering.Compare(x, y).Should().Be(0); Member.Ordering.Compare(x, z).Should().Be(Member.Ordering.Compare(y, z)); //different uid var a = TestMember.Create(address1, MemberStatus.Joining); var b = Member.Create(new UniqueAddress(address1, -3), ImmutableHashSet <string> .Empty, AppVersion.Zero); Member.Ordering.Compare(a, b).Should().Be(1); Member.Ordering.Compare(b, a).Should().Be(-1); }
public void LeaderOrdering_must_order_members_with_status_joining_exiting_down_last() { var address = new Address("akka.tcp", "sys1", "host1", 5000); var m1 = TestMember.Create(address, MemberStatus.Joining); var m2 = TestMember.Create(address.WithPort(7000), MemberStatus.Joining); var m3 = TestMember.Create(address.WithPort(3000), MemberStatus.Exiting); var m4 = TestMember.Create(address.WithPort(6000), MemberStatus.Exiting); var m5 = TestMember.Create(address.WithPort(2000), MemberStatus.Down); var m6 = TestMember.Create(address.WithPort(4000), MemberStatus.Down); var m7 = TestMember.Create(address.WithPort(8000), MemberStatus.Up); var m8 = TestMember.Create(address.WithPort(9000), MemberStatus.Up); var expected = new List <Member> { m7, m8, m1, m2, m3, m4, m5, m6 }; var shuffled = expected.Shuffle().ToImmutableList(); shuffled.Sort(Member.LeaderStatusOrdering).Should().BeEquivalentTo(expected); }
public void MemberOrdering_must_consistent_ordering_and_equals() { var address1 = new Address("akka.tcp", "sys1", "host1", 9001); var address2 = address1.WithPort(9002); var x = TestMember.Create(address1, MemberStatus.Exiting); var y = TestMember.Create(address1, MemberStatus.Removed); var z = TestMember.Create(address2, MemberStatus.Up); Assert.Equal(0, Member.Ordering.Compare(x, y)); Assert.Equal(Member.Ordering.Compare(y, z), Member.Ordering.Compare(x, z)); //different uid var a = TestMember.Create(address1, MemberStatus.Joining); var b = Member.Create(new UniqueAddress(address1, -3), ImmutableHashSet.Create <string>()); Assert.Equal(1, Member.Ordering.Compare(a, b)); Assert.Equal(-1, Member.Ordering.Compare(b, a)); }
public void MemberOrdering_must_be_sorted_by_address_correctly() { var m1 = TestMember.Create(new Address("akka.tcp", "sys1", "host1", 9000), MemberStatus.Up); var m2 = TestMember.Create(new Address("akka.tcp", "sys1", "host1", 10000), MemberStatus.Up); var m3 = TestMember.Create(new Address("cluster", "sys2", "host2", 8000), MemberStatus.Up); var m4 = TestMember.Create(new Address("cluster", "sys2", "host2", 9000), MemberStatus.Up); var m5 = TestMember.Create(new Address("cluster", "sys1", "host2", 10000), MemberStatus.Up); var expected = new List <Member> { m1, m2, m3, m4, m5 }; var shuffled = expected.Shuffle(); Assert.Equal(expected, new SortedSet <Member>(shuffled)); shuffled.Sort(); Assert.Equal(expected, shuffled); }
public void A_gossip_must_find_two_oldest_per_role_as_targets_for_Exiting_change() { Member a1 = TestMember.Create(new Address("akka.tcp", "sys", "a4", 2552), MemberStatus.Up, ImmutableHashSet <string> .Empty, upNumber: 1); Member a2 = TestMember.Create(new Address("akka.tcp", "sys", "a3", 2552), MemberStatus.Up, ImmutableHashSet <string> .Empty, upNumber: 2); Member a3 = TestMember.Create(new Address("akka.tcp", "sys", "a2", 2552), MemberStatus.Up, ImmutableHashSet <string> .Empty, upNumber: 3); Member a4 = TestMember.Create(new Address("akka.tcp", "sys", "a1", 2552), MemberStatus.Up, ImmutableHashSet <string> .Empty, upNumber: 4); Member a5 = TestMember.Create(new Address("akka.tcp", "sys", "a5", 2552), MemberStatus.Exiting, ImmutableHashSet <string> .Empty.Add("role1").Add("role2"), upNumber: 5); Member a6 = TestMember.Create(new Address("akka.tcp", "sys", "a6", 2552), MemberStatus.Exiting, ImmutableHashSet <string> .Empty.Add("role1").Add("role3"), upNumber: 6); Member a7 = TestMember.Create(new Address("akka.tcp", "sys", "a7", 2552), MemberStatus.Exiting, ImmutableHashSet <string> .Empty.Add("role1"), upNumber: 7); Member a8 = TestMember.Create(new Address("akka.tcp", "sys", "a8", 2552), MemberStatus.Exiting, ImmutableHashSet <string> .Empty.Add("role1"), upNumber: 8); Member a9 = TestMember.Create(new Address("akka.tcp", "sys", "a9", 2552), MemberStatus.Exiting, ImmutableHashSet <string> .Empty.Add("role2"), upNumber: 9); IEnumerable <Member> theExiting = new Member[] { a5, a6 }; var gossip = new Gossip(ImmutableSortedSet.Create(a1, a2, a3, a4, a5, a6, a7, a8, a9)); var r = ClusterCoreDaemon.GossipTargetsForExitingMembers(gossip, theExiting); r.Should().BeEquivalentTo(new[] { a1, a2, a5, a6, a9 }); }
public void LeaderOrderingMustOrderMembersWithStatusJoiningExitingDownLast() { var address = new Address("akka.tcp", "sys1", "host1", 5000); var m1 = TestMember.Create(address, MemberStatus.Joining); var m2 = TestMember.Create(address.Copy(port: 7000), MemberStatus.Joining); var m3 = TestMember.Create(address.Copy(port: 3000), MemberStatus.Exiting); var m4 = TestMember.Create(address.Copy(port: 6000), MemberStatus.Exiting); var m5 = TestMember.Create(address.Copy(port: 2000), MemberStatus.Down); var m6 = TestMember.Create(address.Copy(port: 4000), MemberStatus.Down); var m7 = TestMember.Create(address.Copy(port: 8000), MemberStatus.Up); var m8 = TestMember.Create(address.Copy(port: 9000), MemberStatus.Up); var expected = new List <Member> { m7, m8, m1, m2, m3, m4, m5, m6 }; var shuffled = expected.Shuffle(); shuffled.Sort(Member.LeaderStatusOrdering); Assert.Equal(expected, shuffled); }
public void MemberOrdering_must_work_with_sorted_set() { var address1 = new Address("akka.tcp", "sys1", "host1", 9001); var address2 = address1.WithPort(9002); var address3 = address1.WithPort(9003); var set = new SortedSet <Member> { TestMember.Create(address1, MemberStatus.Joining) }; set.Remove(TestMember.Create(address1, MemberStatus.Up)); Assert.Equal(new SortedSet <Member>(), set); set = new SortedSet <Member> { TestMember.Create(address1, MemberStatus.Exiting) }; set.Remove(TestMember.Create(address1, MemberStatus.Removed)); Assert.Equal(new SortedSet <Member>(), set); set = new SortedSet <Member> { TestMember.Create(address1, MemberStatus.Up) }; set.Remove(TestMember.Create(address1, MemberStatus.Exiting)); Assert.Equal(new SortedSet <Member>(), set); set = new SortedSet <Member> { TestMember.Create(address2, MemberStatus.Up), TestMember.Create(address3, MemberStatus.Joining), TestMember.Create(address3, MemberStatus.Exiting) }; set.Remove(TestMember.Create(address1, MemberStatus.Removed)); Assert.Equal(new SortedSet <Member> { TestMember.Create(address2, MemberStatus.Up), TestMember.Create(address3, MemberStatus.Joining) }, set); }
public void MemberOrdering_must_have_stable_equals_and_hash_code() { var address = new Address("akka.tcp", "sys1", "host1", 9000); var m1 = TestMember.Create(address, MemberStatus.Joining); var m11 = Member.Create(new UniqueAddress(address, -3), ImmutableHashSet <string> .Empty, AppVersion.Zero); var m2 = m1.Copy(status: MemberStatus.Up); var m22 = m11.Copy(status: MemberStatus.Up); var m3 = TestMember.Create(address.WithPort(10000), MemberStatus.Up); m1.Should().Be(m2); m1.GetHashCode().Should().Be(m2.GetHashCode()); m3.Should().NotBe(m2); m3.Should().NotBe(m1); m11.Should().Be(m22); m11.GetHashCode().Should().Be(m22.GetHashCode()); // different uid m1.Should().NotBe(m11); m2.Should().NotBe(m22); }
public void MemberOrdering_must_work_pick_member_with_legal_transition() { var address1 = new Address("akka.tcp", "sys1", "host1", 9001); var address2 = address1.WithPort(9002); var address3 = address1.WithPort(9003); var s1 = ImmutableSortedSet .Create(TestMember.Create(address1, MemberStatus.Joining)) .Add(TestMember.Create(address2, MemberStatus.Up, ImmutableHashSet <string> .Empty, upNumber: 1)); var s2 = ImmutableSortedSet.Create(TestMember.Create(address1, MemberStatus.Up, ImmutableHashSet <string> .Empty, upNumber: 2)); var s3 = ImmutableSortedSet .Create(TestMember.Create(address1, MemberStatus.Up)) .Add(TestMember.Create(address2, MemberStatus.Up)); var u1 = Member.PickNextTransition(s2, s1); u1.Should().BeEquivalentTo(s3); u1.Single(x => x.Address.Equals(address1)).Status.Should().Be(MemberStatus.Up); var s4 = ImmutableSortedSet .Create(TestMember.Create(address1, MemberStatus.Up)) .Add(TestMember.Create(address2, MemberStatus.Up)) .Add(TestMember.Create(address3, MemberStatus.Joining)); var s5 = ImmutableSortedSet .Create(TestMember.Create(address1, MemberStatus.Up)) .Add(TestMember.Create(address2, MemberStatus.Up)) .Add(TestMember.Create(address3, MemberStatus.Up)); var u2 = Member.PickNextTransition(s4, s1); u2.Should().BeEquivalentTo(s5); u2.Single(x => x.Address.Equals(address1)).Status.Should().Be(MemberStatus.Up); }