patches bug in recv_mmsg when npkts != nrecv
If recv_mmsg receives 2 packets where the first one is filtered out, then it returns npkts == 1: https://github.com/solana-labs/solana/blob/01a096adc/streamer/src/recvmmsg.rs#L104-L115 But then streamer::packet::recv_from will erroneously keep the 1st packet and drop the 2nd one: https://github.com/solana-labs/solana/blob/01a096adc/streamer/src/packet.rs#L34-L49 To avoid this bug, this commit updates recv_mmsg to always return total number of received packets. If socket address cannot be correctly obtained, it is left as the default value which is UNSPECIFIED: https://github.com/solana-labs/solana/blob/01a096adc/sdk/src/packet.rs#L145
This commit is contained in:
@ -2,7 +2,7 @@
|
||||
|
||||
use {
|
||||
solana_streamer::{
|
||||
packet::{Packet, PACKET_DATA_SIZE},
|
||||
packet::{Meta, Packet, PACKET_DATA_SIZE},
|
||||
recvmmsg::*,
|
||||
},
|
||||
std::{net::UdpSocket, time::Instant},
|
||||
@ -44,6 +44,9 @@ pub fn test_recv_mmsg_batch_size() {
|
||||
if recv >= TEST_BATCH_SIZE {
|
||||
break;
|
||||
}
|
||||
packets
|
||||
.iter_mut()
|
||||
.for_each(|pkt| pkt.meta = Meta::default());
|
||||
}
|
||||
elapsed_in_small_batch += now.elapsed().as_nanos();
|
||||
assert_eq!(TEST_BATCH_SIZE, recv);
|
||||
|
Reference in New Issue
Block a user