sendmmsg cleanup #18589
Rationalize usage of sendmmsg(2). Skip packets which failed to send and track failures.
This commit is contained in:
@ -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(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user