Fix Retransmit slamming the leader with its own blobs (#3938)

This commit is contained in:
Sagar Dhawan
2019-04-22 18:41:01 -07:00
committed by GitHub
parent 69e67d06a7
commit 43f7cd8149
6 changed files with 79 additions and 41 deletions

View File

@ -646,6 +646,7 @@ impl ClusterInfo {
obj: &Arc<RwLock<Self>>,
peers: &[ContactInfo],
blob: &SharedBlob,
slot_leader_id: Option<Pubkey>,
s: &UdpSocket,
forwarded: bool,
) -> Result<()> {
@ -661,6 +662,7 @@ impl ClusterInfo {
trace!("retransmit orders {}", orders.len());
let errs: Vec<_> = orders
.par_iter()
.filter(|v| v.id != slot_leader_id.unwrap_or_default())
.map(|v| {
debug!(
"{}: retransmit blob {} to {} {}",
@ -686,19 +688,6 @@ impl ClusterInfo {
Ok(())
}
/// retransmit messages from the leader to layer 1 nodes
/// # Remarks
/// We need to avoid having obj locked while doing any io, such as the `send_to`
pub fn retransmit(
obj: &Arc<RwLock<Self>>,
blob: &SharedBlob,
s: &UdpSocket,
forwarded: bool,
) -> Result<()> {
let peers = obj.read().unwrap().retransmit_peers();
ClusterInfo::retransmit_to(obj, &peers, blob, s, forwarded)
}
fn send_orders(
id: &Pubkey,
s: &UdpSocket,