From 354975dbd7879e6135dc1e60c819fd23ea1c3784 Mon Sep 17 00:00:00 2001 From: sakridge Date: Fri, 21 Jan 2022 08:22:50 -0800 Subject: [PATCH] Handle already discarded packets in discard_excess_packets (#22594) (cherry picked from commit 38b02bbcc0381d898a864b99a3a48af04bad20e9) --- core/src/sigverify_stage.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/core/src/sigverify_stage.rs b/core/src/sigverify_stage.rs index d45adefb877c55..04e228b671681e 100644 --- a/core/src/sigverify_stage.rs +++ b/core/src/sigverify_stage.rs @@ -194,6 +194,7 @@ impl SigVerifyStage { .iter_mut() .rev() .flat_map(|batch| batch.packets.iter_mut().rev()) + .filter(|packet| !packet.meta.discard()) .map(|packet| (packet.meta.addr, packet)) .into_group_map(); // Allocate max_packets evenly across addresses. @@ -369,12 +370,15 @@ mod tests { solana_logger::setup(); let mut batch = PacketBatch::default(); batch.packets.resize(10, Packet::default()); - batch.packets[3].meta.addr = [1u16; 8]; + batch.packets[3].meta.addr = std::net::IpAddr::from([1u16; 8]); + batch.packets[3].meta.set_discard(true); + batch.packets[4].meta.addr = std::net::IpAddr::from([2u16; 8]); let mut batches = vec![batch]; let max = 3; SigVerifyStage::discard_excess_packets(&mut batches, max); assert_eq!(count_non_discard(&batches), max); - assert!(!batches[0].packets[0].meta.discard); - assert!(!batches[0].packets[3].meta.discard); + assert!(!batches[0].packets[0].meta.discard()); + assert!(batches[0].packets[3].meta.discard()); + assert!(!batches[0].packets[4].meta.discard()); } }