示例#1
0
            public void IsNoOpp()
            {
                var ranges1 = master.Join(endPoint);
                var ranges2 = master.Join(endPoint);

                Assert.Equal(ranges1, ranges2);
            }
示例#2
0
            public void AddingNewNodeResultInAllSegmentsHavingSingleBackupCopy()
            {
                var ranges = master.Join(endPoint);

                master.CaughtUp(endPoint, ReplicationType.Ownership, ranges.Select(x => x.Index).ToArray());
                Assert.True(master.Segments.All(x => x.PendingBackups.Count == 1));
            }
示例#3
0
            public NewEndpointJoiningMasterWithTwoNodes()
            {
                master.Join(endPoint);
                var ranges = master.Join(anotherNodeInTheMaster);

                master.CaughtUp(anotherNodeInTheMaster, ReplicationType.Ownership, ranges.Select(x => x.Index).ToArray());
                master.Join(newEndpoint);
            }
示例#4
0
            public void WillRaiseTopologyChangedEvent()
            {
                var ranges = master.Join(endPoint);

                bool wasCalled = false;

                master.TopologyChanged += () => wasCalled = true;
                master.CaughtUp(endPoint, ReplicationType.Ownership, ranges.First().Index);
                Assert.True(wasCalled);
            }
            public void WillRemoveThePendingMoveFromTheSegment()
            {
                var ranges = master.Join(endPoint);

                var range = ranges.First();

                Assert.NotNull(range.InProcessOfMovingToEndpoint);

                master.GaveUp(endPoint, ReplicationType.Ownership, range.Index);

                Assert.Null(range.InProcessOfMovingToEndpoint);
            }
示例#6
0
            public OnMasterWithTwoNodes()
            {
                master   = new DistributedHashTableMaster();
                endPoint = NodeEndpoint.ForTest(9);

                var existingEndpoint = NodeEndpoint.ForTest(3);
                var ranges           = master.Join(existingEndpoint);

                master.CaughtUp(existingEndpoint, ReplicationType.Ownership, ranges.Select(x => x.Index).ToArray());
                var anotherPoint = NodeEndpoint.ForTest(10);

                ranges = master.Join(anotherPoint);
                master.CaughtUp(anotherPoint, ReplicationType.Ownership, ranges.Select(x => x.Index).ToArray());
            }
 public OnGaveUp()
 {
     master = new DistributedHashTableMaster();
     master.CaughtUp(NodeEndpoint.ForTest(9),
                     ReplicationType.Ownership,
                     master.Join(NodeEndpoint.ForTest(9)).Select(x => x.Index).ToArray());
     endPoint = NodeEndpoint.ForTest(5);
 }
示例#8
0
 public OnGaveUp()
 {
     master = new DistributedHashTableMaster();
     master.CaughtUp(NodeEndpoint.ForTest(9),
                     ReplicationType.Ownership,
                     master.Join(NodeEndpoint.ForTest(9)).Select(x => x.Index).ToArray());
     endPoint = NodeEndpoint.ForTest(5);
 }
示例#9
0
            public void AddingNewNodeResultInAllSegmentsHavingAtLeastTwoBackupCopy()
            {
                var yetAnotherEndPoint = NodeEndpoint.ForTest(7);
                var ranges             = master.Join(yetAnotherEndPoint);

                master.CaughtUp(yetAnotherEndPoint, ReplicationType.Ownership, ranges.Select(x => x.Index).ToArray());
                Assert.True(master.Segments.All(x => x.PendingBackups.Count >= 2));
            }
示例#10
0
            public OnMasterWithOneExistingNode()
            {
                master = new DistributedHashTableMaster();
                endPoint = NodeEndpoint.ForTest(9);

                var existingEndpoint = NodeEndpoint.ForTest(3);
                var ranges = master.Join(existingEndpoint);
                master.CaughtUp(existingEndpoint, ReplicationType.Ownership, ranges.Select(x => x.Index).ToArray());
            }
        private void HandleJoin(MasterMessageUnion wrapper,
                                MessageStreamWriter <MasterMessageUnion> writer)
        {
            var endpoint = wrapper.JoinRequest.EndpointJoining;
            var segments = master.Join(new NodeEndpoint
            {
                Async = new Uri(endpoint.Async),
                Sync  = new Uri(endpoint.Sync)
            });
            var joinResponse = new JoinResponseMessage.Builder
            {
                SegmentsList = { segments.Select(x => x.GetSegment()) }
            };

            writer.Write(new MasterMessageUnion.Builder
            {
                Type         = MasterMessageType.JoinResult,
                JoinResponse = joinResponse.Build()
            }.Build());
        }
示例#12
0
 public NewEndpointJoiningNonEmptyMaster()
 {
     master.Join(endPoint);
     master.Join(newEndpoint);
 }
示例#13
0
            public void AllSegmentsAreDirectlyAllocatedToEndpoint()
            {
                master.Join(endPoint);

                Assert.True(master.Segments.All(x => x.AssignedEndpoint == endPoint));
            }
示例#14
0
 public NewEndpointJoiningMasterWhenAnotherJoinIsInTheProcessOfJoining()
 {
     master.Join(endPoint);
     master.Join(anotherNodeInTheProcessOfJoining);
     master.Join(newEndpoint);
 }
示例#15
0
            public void AddingNewNodeResultInAllSegmentsHavingNoBackupCopies()
            {
                master.Join(endPoint);

                Assert.True(master.Segments.All(x => x.PendingBackups.Count == 0));
            }