コード例 #1
0
        public void WillRepeatReplicationUntilGetDone()
        {
            replication.Stub(x => x.AssignAllEmptySegments(Arg <NodeEndpoint> .Is.Anything, Arg.Is(ReplicationType.Ownership), Arg <int[]> .Is.Anything))
            .Return(new[] { 0 });
            var request = new ExtendedPutRequest
            {
                Bytes = new byte[] { 1 },
                Key   = "a",
            };

            for (int i = 0; i < 5; i++)
            {
                replication.Stub(x => x.ReplicateNextPage(Arg <NodeEndpoint> .Is.Anything, Arg.Is(ReplicationType.Ownership), Arg <int> .Is.Anything))
                .Repeat.Once()
                .Return(new ReplicationResult
                {
                    PutRequests    = new[] { request, },
                    RemoveRequests = new ExtendedRemoveRequest[0],
                    Done           = false
                });
            }
            replication.Stub(x => x.ReplicateNextPage(Arg <NodeEndpoint> .Is.Anything, Arg.Is(ReplicationType.Ownership), Arg <int> .Is.Anything))
            .Repeat.Once()
            .Return(new ReplicationResult
            {
                PutRequests    = new[] { request, },
                RemoveRequests = new ExtendedRemoveRequest[0],
                Done           = true
            });
            var success = command.Execute();

            Assert.True(success);

            storage.AssertWasCalled(x => x.Put(topologyVersion, request), o => o.Repeat.Times(6));
        }
コード例 #2
0
            public void WhenSendingToOwnerWillSendItToOwnerUri()
            {
                var request = new ExtendedPutRequest();

                node.SendToOwner(0, new[] { request });
                queueManager.Send(endPoint.Async, Arg <MessagePayload> .Is.TypeOf);
            }
コード例 #3
0
        public static PutRequestMessage GetPutRequest(this ExtendedPutRequest x)
        {
            var builder = new PutRequestMessage.Builder
            {
                Bytes                = ByteString.CopyFrom(x.Bytes),
                IsReadOnly           = x.IsReadOnly,
                IsReplicationRequest = x.IsReplicationRequest,
                Key = x.Key,
                OptimisticConcurrency = x.OptimisticConcurrency,
                Segment = x.Segment,
                Tag     = x.Tag,
            };

            if (x.ExpiresAt != null)
            {
                builder.ExpiresAtAsDouble = x.ExpiresAt.Value.ToOADate();
            }
            if (x.ReplicationTimeStamp != null)
            {
                builder.ReplicationTimeStampAsDouble = x.ReplicationTimeStamp.Value.ToOADate();
            }
            if (x.ReplicationVersion != null)
            {
                builder.ReplicationVersion = GetVersion(x.ReplicationVersion);
            }
            return(builder.Build());
        }
コード例 #4
0
            public void WhenSendingToOtherBackupsFromBackupNode()
            {
                var request = new ExtendedPutRequest();

                node.SendToAllOtherBackups(1, new[] { request });
                queueManager.Send(endPoint.Async, Arg <MessagePayload> .Is.TypeOf);
                queueManager.Send(backup2.Async, Arg <MessagePayload> .Is.TypeOf);
            }
コード例 #5
0
            public void WillReplicateToOtherSystems()
            {
                node.Stub(x => x.IsSegmentOwned(0)).Return(true);
                var request = new ExtendedPutRequest
                {
                    Key     = "test",
                    Bytes   = new byte[] { 1, 2, 4 },
                    Segment = 0,
                };

                distributedHashTableStorage.Put(topologyVersion, request);
                node.AssertWasCalled(x => x.SendToAllOtherBackups(0, request));
            }
コード例 #6
0
            public void WillReplicateToOwnerWhenFailedOverToAnotherNode()
            {
                node.Stub(x => x.IsSegmentOwned(0)).Return(false);
                var request = new ExtendedPutRequest
                {
                    Key     = "test",
                    Bytes   = new byte[] { 1, 2, 4 },
                    Segment = 0,
                };

                distributedHashTableStorage.Put(topologyVersion, request);
                node.AssertWasCalled(x => x.SendToOwner(0, request));
            }
コード例 #7
0
        public void WillPutReturnedItemsIntoStorage()
        {
            replication.Stub(x => x.AssignAllEmptySegments(Arg <NodeEndpoint> .Is.Anything, Arg.Is(ReplicationType.Ownership), Arg <int[]> .Is.Anything))
            .Return(new[] { 0 });
            var request = new ExtendedPutRequest
            {
                Bytes = new byte[] { 1 },
                Key   = "a",
            };

            replication.Stub(x => x.ReplicateNextPage(Arg <NodeEndpoint> .Is.Anything, Arg.Is(ReplicationType.Ownership), Arg <int> .Is.Anything))
            .Return(new ReplicationResult
            {
                PutRequests    = new[] { request, },
                RemoveRequests = new ExtendedRemoveRequest[0],
                Done           = true
            });
            var success = command.Execute();

            Assert.True(success);

            storage.AssertWasCalled(x => x.Put(topologyVersion, request));
        }