sendmmsg cleanup #18589

Rationalize usage of sendmmsg(2). Skip packets which failed to send and track failures.
This commit is contained in:
Jeff Biseda
2021-07-16 14:36:49 -07:00
committed by GitHub
parent 2ec81f627d
commit ae5ad5cf9b
4 changed files with 267 additions and 156 deletions

View File

@ -63,7 +63,7 @@ use {
},
solana_streamer::{
packet,
sendmmsg::multicast,
sendmmsg::{multi_target_send, SendPktsError},
streamer::{PacketReceiver, PacketSender},
},
solana_vote_program::vote_state::MAX_LOCKOUT_HISTORY,
@ -1239,27 +1239,17 @@ impl ClusterInfo {
} else {
peers.iter().map(|peer| &peer.tvu).collect()
};
let mut dests = &dests[..];
let data = &packet.data[..packet.meta.size];
while !dests.is_empty() {
match multicast(s, data, dests) {
Ok(n) => dests = &dests[n..],
Err(err) => {
inc_new_counter_error!("cluster_info-retransmit-send_to_error", dests.len(), 1);
error!("retransmit multicast: {:?}", err);
break;
}
}
}
let mut errs = 0;
for dest in dests {
if let Err(err) = s.send_to(data, dest) {
error!("retransmit send: {}, {:?}", dest, err);
errs += 1;
}
}
if errs != 0 {
inc_new_counter_error!("cluster_info-retransmit-error", errs, 1);
if let Err(SendPktsError::IoError(ioerr, num_failed)) = multi_target_send(s, data, &dests) {
inc_new_counter_info!("cluster_info-retransmit-packets", dests.len(), 1);
inc_new_counter_error!("cluster_info-retransmit-error", num_failed, 1);
error!(
"retransmit_to multi_target_send error: {:?}, {}/{} packets failed",
ioerr,
num_failed,
dests.len(),
);
}
}