Create UDP socket once per process_loop for forwarding transactions

This commit is contained in:
Pankaj Garg
2019-03-06 20:01:21 +00:00
committed by Grimes
parent 0a4f909566
commit 283bb84134

View File

@ -74,10 +74,10 @@ impl BankingStage {
} }
fn forward_unprocessed_packets( fn forward_unprocessed_packets(
socket: &std::net::UdpSocket,
tpu: &std::net::SocketAddr, tpu: &std::net::SocketAddr,
unprocessed_packets: UnprocessedPackets, unprocessed_packets: UnprocessedPackets,
) -> std::io::Result<()> { ) -> std::io::Result<()> {
let socket = UdpSocket::bind("0.0.0.0:0")?;
for (packets, start_index) in unprocessed_packets { for (packets, start_index) in unprocessed_packets {
let packets = packets.read().unwrap(); let packets = packets.read().unwrap();
for packet in packets.packets.iter().skip(start_index) { for packet in packets.packets.iter().skip(start_index) {
@ -92,12 +92,13 @@ impl BankingStage {
poh_recorder: &Arc<Mutex<PohRecorder>>, poh_recorder: &Arc<Mutex<PohRecorder>>,
cluster_info: &Arc<RwLock<ClusterInfo>>, cluster_info: &Arc<RwLock<ClusterInfo>>,
) { ) {
let socket = UdpSocket::bind("0.0.0.0:0").unwrap();
loop { loop {
match Self::process_packets(&verified_receiver, &poh_recorder) { match Self::process_packets(&verified_receiver, &poh_recorder) {
Err(Error::RecvTimeoutError(RecvTimeoutError::Timeout)) => (), Err(Error::RecvTimeoutError(RecvTimeoutError::Timeout)) => (),
Ok(unprocessed_packets) => { Ok(unprocessed_packets) => {
if let Some(leader) = cluster_info.read().unwrap().leader_data() { if let Some(leader) = cluster_info.read().unwrap().leader_data() {
let _ = Self::forward_unprocessed_packets(&leader.tpu, unprocessed_packets); let _ = Self::forward_unprocessed_packets(&socket, &leader.tpu, unprocessed_packets);
} }
} }
Err(err) => { Err(err) => {