From c72cafed3b3b1f5b76667159281b451cec5c4cbe 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 (backport #22594) --- core/src/sigverify_stage.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/src/sigverify_stage.rs b/core/src/sigverify_stage.rs index a8e447d81b102d..1c144699db7deb 100644 --- a/core/src/sigverify_stage.rs +++ b/core/src/sigverify_stage.rs @@ -201,6 +201,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. @@ -391,12 +392,15 @@ mod tests { let mut batch = PacketBatch::default(); batch.packets.resize(10, Packet::default()); 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[3].meta.discard()); + assert!(!batches[0].packets[4].meta.discard()); } fn gen_batches(use_same_tx: bool) -> Vec { let len = 4096;