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); }
public void WhenItemIsRemovedWillResultInRemovalRequestOnNextReplicationPage() { var result = replication.ReplicateNextPage(NodeEndpoint.ForTest(1), ReplicationType.Ownership, 0); Assert.Equal(1, result.PutRequests.Length); node.Storage.Remove(node.GetTopologyVersion(), new ExtendedRemoveRequest { Key = "test", SpecificVersion = putResult.Version, Segment = 0, }); result = replication.ReplicateNextPage(NodeEndpoint.ForTest(1), ReplicationType.Ownership, 0); Assert.Equal(1, result.RemoveRequests.Length); }