Replace type alias with newtype for UnprocesedPacketBatches

This commit is contained in:
Tao Zhu
2022-03-10 21:19:03 -06:00
committed by Tao Zhu
parent a3242b6b86
commit 8590911b0a
3 changed files with 50 additions and 6 deletions

View File

@ -37,7 +37,6 @@ use {
},
solana_streamer::socket::SocketAddrSpace,
std::{
collections::VecDeque,
sync::{atomic::Ordering, Arc, RwLock},
time::{Duration, Instant},
},
@ -80,7 +79,7 @@ fn bench_consume_buffered(bencher: &mut Bencher) {
let len = 4096;
let chunk_size = 1024;
let batches = to_packet_batches(&vec![tx; len], chunk_size);
let mut packet_batches = VecDeque::new();
let mut packet_batches = UnprocessedPacketBatches::new();
for batch in batches {
let batch_len = batch.packets.len();
packet_batches.push_back(DeserializedPacketBatch::new(

View File

@ -58,7 +58,7 @@ use {
},
std::{
cmp,
collections::{HashMap, VecDeque},
collections::HashMap,
env,
net::{SocketAddr, UdpSocket},
sync::{
@ -959,7 +959,7 @@ impl BankingStage {
) {
let recorder = poh_recorder.lock().unwrap().recorder();
let socket = UdpSocket::bind("0.0.0.0:0").unwrap();
let mut buffered_packet_batches = VecDeque::with_capacity(batch_limit);
let mut buffered_packet_batches = UnprocessedPacketBatches::with_capacity(batch_limit);
let mut banking_stage_stats = BankingStageStats::new(id);
let qos_service = QosService::new(cost_model, id);
let mut slot_metrics_tracker = LeaderSlotMetricsTracker::new(id);

View File

@ -1,4 +1,5 @@
use {
retain_mut::RetainMut,
solana_perf::packet::{limited_deserialize, Packet, PacketBatch},
solana_sdk::{
hash::Hash, message::Message, short_vec::decode_shortu16_len, signature::Signature,
@ -10,8 +11,6 @@ use {
},
};
pub type UnprocessedPacketBatches = VecDeque<DeserializedPacketBatch>;
/// hold deserialized messages, as well as computed message_hash and other things needed to create
/// SanitizedTransaction
#[derive(Debug, Default)]
@ -34,6 +33,52 @@ pub struct DeserializedPacketBatch {
pub unprocessed_packets: HashMap<usize, DeserializedPacket>,
}
pub struct UnprocessedPacketBatches(VecDeque<DeserializedPacketBatch>);
impl std::ops::Deref for UnprocessedPacketBatches {
type Target = VecDeque<DeserializedPacketBatch>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl std::ops::DerefMut for UnprocessedPacketBatches {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
impl RetainMut<DeserializedPacketBatch> for UnprocessedPacketBatches {
fn retain_mut<F>(&mut self, f: F)
where
F: FnMut(&mut DeserializedPacketBatch) -> bool,
{
RetainMut::retain_mut(&mut self.0, f);
}
}
impl FromIterator<DeserializedPacketBatch> for UnprocessedPacketBatches {
fn from_iter<I: IntoIterator<Item = DeserializedPacketBatch>>(iter: I) -> Self {
Self(iter.into_iter().collect())
}
}
impl Default for UnprocessedPacketBatches {
fn default() -> Self {
Self::new()
}
}
impl UnprocessedPacketBatches {
pub fn new() -> Self {
UnprocessedPacketBatches(VecDeque::new())
}
pub fn with_capacity(capacity: usize) -> Self {
UnprocessedPacketBatches(VecDeque::with_capacity(capacity))
}
}
impl DeserializedPacketBatch {
pub fn new(packet_batch: PacketBatch, packet_indexes: Vec<usize>, forwarded: bool) -> Self {
let unprocessed_packets = Self::deserialize_packets(&packet_batch, &packet_indexes);