private void ReplicateSegment(Segment segment) { while (true) { log.DebugFormat("Starting replication of segment [{0}] from {1}", segment, endpoint.Sync); var result = otherNode.ReplicateNextPage(node.Endpoint, type, segment.Index); log.DebugFormat("Replication of segment [{0}] from {1} got {2} puts & {3} removals", segment, endpoint.Sync, result.PutRequests.Length, result.RemoveRequests.Length); if (result.PutRequests.Length != 0) { node.Storage.Put(node.GetTopologyVersion(), result.PutRequests); } if (result.RemoveRequests.Length != 0) { node.Storage.Remove(node.GetTopologyVersion(), result.RemoveRequests); } if (result.Done) { break; } } node.DoneReplicatingSegments(type, segment.Index); }
private void HandleReplicateNextPage(StorageMessageUnion wrapper, MessageStreamWriter <StorageMessageUnion> writer) { var replicationResult = replication.ReplicateNextPage( wrapper.ReplicateNextPageRequest.ReplicationEndpoint.GetNodeEndpoint(), wrapper.ReplicateNextPageRequest.Type == ReplicationType.Backup ? Internal.ReplicationType.Backup : Internal.ReplicationType.Ownership, wrapper.ReplicateNextPageRequest.Segment ); writer.Write(new StorageMessageUnion.Builder { Type = StorageMessageType.ReplicateNextPageResponse, ReplicateNextPageResponse = new ReplicateNextPageResponseMessage.Builder() { Done = replicationResult.Done, RemoveRequestsList = { replicationResult.RemoveRequests.Select(x => x.GetRemoveRequest()), }, PutRequestsList = { replicationResult.PutRequests.Select(x => x.GetPutRequest()) } }.Build() }.Build()); }
public void WillGiveExistingKeysFromSegment() { var result = replication.ReplicateNextPage(NodeEndpoint.ForTest(1), ReplicationType.Ownership, 0); Assert.Equal(1, result.PutRequests.Length); Assert.Equal(new byte[] { 1 }, result.PutRequests[0].Bytes); }