Rename Packets to PacketBatch (#21794)
This commit is contained in:
@@ -47,8 +47,8 @@ use {
|
||||
solana_perf::{
|
||||
data_budget::DataBudget,
|
||||
packet::{
|
||||
limited_deserialize, to_packets_with_destination, Packet, Packets, PacketsRecycler,
|
||||
PACKET_DATA_SIZE,
|
||||
limited_deserialize, to_packet_batch_with_destination, Packet, PacketBatch,
|
||||
PacketBatchRecycler, PACKET_DATA_SIZE,
|
||||
},
|
||||
},
|
||||
solana_rayon_threadlimit::get_thread_count,
|
||||
@@ -67,7 +67,7 @@ use {
|
||||
packet,
|
||||
sendmmsg::{multi_target_send, SendPktsError},
|
||||
socket::SocketAddrSpace,
|
||||
streamer::{PacketReceiver, PacketSender},
|
||||
streamer::{PacketBatchReceiver, PacketBatchSender},
|
||||
},
|
||||
solana_vote_program::{
|
||||
vote_state::MAX_LOCKOUT_HISTORY, vote_transaction::parse_vote_transaction,
|
||||
@@ -1588,9 +1588,9 @@ impl ClusterInfo {
|
||||
&self,
|
||||
thread_pool: &ThreadPool,
|
||||
gossip_validators: Option<&HashSet<Pubkey>>,
|
||||
recycler: &PacketsRecycler,
|
||||
recycler: &PacketBatchRecycler,
|
||||
stakes: &HashMap<Pubkey, u64>,
|
||||
sender: &PacketSender,
|
||||
sender: &PacketBatchSender,
|
||||
generate_pull_requests: bool,
|
||||
) -> Result<(), GossipError> {
|
||||
let reqs = self.generate_new_gossip_requests(
|
||||
@@ -1600,11 +1600,11 @@ impl ClusterInfo {
|
||||
generate_pull_requests,
|
||||
);
|
||||
if !reqs.is_empty() {
|
||||
let packets = to_packets_with_destination(recycler.clone(), &reqs);
|
||||
let packet_batch = to_packet_batch_with_destination(recycler.clone(), &reqs);
|
||||
self.stats
|
||||
.packets_sent_gossip_requests_count
|
||||
.add_relaxed(packets.packets.len() as u64);
|
||||
sender.send(packets)?;
|
||||
.add_relaxed(packet_batch.packets.len() as u64);
|
||||
sender.send(packet_batch)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@@ -1699,7 +1699,7 @@ impl ClusterInfo {
|
||||
pub fn gossip(
|
||||
self: Arc<Self>,
|
||||
bank_forks: Option<Arc<RwLock<BankForks>>>,
|
||||
sender: PacketSender,
|
||||
sender: PacketBatchSender,
|
||||
gossip_validators: Option<HashSet<Pubkey>>,
|
||||
exit: Arc<AtomicBool>,
|
||||
) -> JoinHandle<()> {
|
||||
@@ -1715,7 +1715,7 @@ impl ClusterInfo {
|
||||
let mut last_contact_info_trace = timestamp();
|
||||
let mut last_contact_info_save = timestamp();
|
||||
let mut entrypoints_processed = false;
|
||||
let recycler = PacketsRecycler::default();
|
||||
let recycler = PacketBatchRecycler::default();
|
||||
let crds_data = vec![
|
||||
CrdsData::Version(Version::new(self.id())),
|
||||
CrdsData::NodeInstance(
|
||||
@@ -1840,9 +1840,9 @@ impl ClusterInfo {
|
||||
// from address, crds filter, caller contact info
|
||||
requests: Vec<(SocketAddr, CrdsFilter, CrdsValue)>,
|
||||
thread_pool: &ThreadPool,
|
||||
recycler: &PacketsRecycler,
|
||||
recycler: &PacketBatchRecycler,
|
||||
stakes: &HashMap<Pubkey, u64>,
|
||||
response_sender: &PacketSender,
|
||||
response_sender: &PacketBatchSender,
|
||||
) {
|
||||
let _st = ScopedTimer::from(&self.stats.handle_batch_pull_requests_time);
|
||||
if requests.is_empty() {
|
||||
@@ -1904,7 +1904,7 @@ impl ClusterInfo {
|
||||
&'a self,
|
||||
now: Instant,
|
||||
mut rng: &'a mut R,
|
||||
packets: &'a mut Packets,
|
||||
packet_batch: &'a mut PacketBatch,
|
||||
) -> impl FnMut(&PullData) -> bool + 'a
|
||||
where
|
||||
R: Rng + CryptoRng,
|
||||
@@ -1917,7 +1917,7 @@ impl ClusterInfo {
|
||||
if let Some(ping) = ping {
|
||||
let ping = Protocol::PingMessage(ping);
|
||||
match Packet::from_data(Some(&node.1), ping) {
|
||||
Ok(packet) => packets.packets.push(packet),
|
||||
Ok(packet) => packet_batch.packets.push(packet),
|
||||
Err(err) => error!("failed to write ping packet: {:?}", err),
|
||||
};
|
||||
}
|
||||
@@ -1944,10 +1944,10 @@ impl ClusterInfo {
|
||||
fn handle_pull_requests(
|
||||
&self,
|
||||
thread_pool: &ThreadPool,
|
||||
recycler: &PacketsRecycler,
|
||||
recycler: &PacketBatchRecycler,
|
||||
requests: Vec<PullData>,
|
||||
stakes: &HashMap<Pubkey, u64>,
|
||||
) -> Packets {
|
||||
) -> PacketBatch {
|
||||
const DEFAULT_EPOCH_DURATION_MS: u64 = DEFAULT_SLOTS_PER_EPOCH * DEFAULT_MS_PER_SLOT;
|
||||
let mut time = Measure::start("handle_pull_requests");
|
||||
let callers = crds_value::filter_current(requests.iter().map(|r| &r.caller));
|
||||
@@ -1958,12 +1958,12 @@ impl ClusterInfo {
|
||||
}
|
||||
let output_size_limit =
|
||||
self.update_data_budget(stakes.len()) / PULL_RESPONSE_MIN_SERIALIZED_SIZE;
|
||||
let mut packets =
|
||||
Packets::new_unpinned_with_recycler(recycler.clone(), 64, "handle_pull_requests");
|
||||
let mut packet_batch =
|
||||
PacketBatch::new_unpinned_with_recycler(recycler.clone(), 64, "handle_pull_requests");
|
||||
let (caller_and_filters, addrs): (Vec<_>, Vec<_>) = {
|
||||
let mut rng = rand::thread_rng();
|
||||
let check_pull_request =
|
||||
self.check_pull_request(Instant::now(), &mut rng, &mut packets);
|
||||
self.check_pull_request(Instant::now(), &mut rng, &mut packet_batch);
|
||||
requests
|
||||
.into_iter()
|
||||
.filter(check_pull_request)
|
||||
@@ -2009,7 +2009,7 @@ impl ClusterInfo {
|
||||
})
|
||||
.unzip();
|
||||
if responses.is_empty() {
|
||||
return packets;
|
||||
return packet_batch;
|
||||
}
|
||||
let mut rng = rand::thread_rng();
|
||||
let shuffle = WeightedShuffle::new(&mut rng, &scores).unwrap();
|
||||
@@ -2023,7 +2023,7 @@ impl ClusterInfo {
|
||||
Ok(packet) => {
|
||||
if self.outbound_budget.take(packet.meta.size) {
|
||||
total_bytes += packet.meta.size;
|
||||
packets.packets.push(packet);
|
||||
packet_batch.packets.push(packet);
|
||||
sent += 1;
|
||||
} else {
|
||||
inc_new_counter_info!("gossip_pull_request-no_budget", 1);
|
||||
@@ -2043,7 +2043,7 @@ impl ClusterInfo {
|
||||
responses.len(),
|
||||
total_bytes
|
||||
);
|
||||
packets
|
||||
packet_batch
|
||||
}
|
||||
|
||||
fn handle_batch_pull_responses(
|
||||
@@ -2164,8 +2164,8 @@ impl ClusterInfo {
|
||||
fn handle_batch_ping_messages<I>(
|
||||
&self,
|
||||
pings: I,
|
||||
recycler: &PacketsRecycler,
|
||||
response_sender: &PacketSender,
|
||||
recycler: &PacketBatchRecycler,
|
||||
response_sender: &PacketBatchSender,
|
||||
) where
|
||||
I: IntoIterator<Item = (SocketAddr, Ping)>,
|
||||
{
|
||||
@@ -2175,7 +2175,11 @@ impl ClusterInfo {
|
||||
}
|
||||
}
|
||||
|
||||
fn handle_ping_messages<I>(&self, pings: I, recycler: &PacketsRecycler) -> Option<Packets>
|
||||
fn handle_ping_messages<I>(
|
||||
&self,
|
||||
pings: I,
|
||||
recycler: &PacketBatchRecycler,
|
||||
) -> Option<PacketBatch>
|
||||
where
|
||||
I: IntoIterator<Item = (SocketAddr, Ping)>,
|
||||
{
|
||||
@@ -2197,9 +2201,12 @@ impl ClusterInfo {
|
||||
if packets.is_empty() {
|
||||
None
|
||||
} else {
|
||||
let packets =
|
||||
Packets::new_unpinned_with_recycler_data(recycler, "handle_ping_messages", packets);
|
||||
Some(packets)
|
||||
let packet_batch = PacketBatch::new_unpinned_with_recycler_data(
|
||||
recycler,
|
||||
"handle_ping_messages",
|
||||
packets,
|
||||
);
|
||||
Some(packet_batch)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2222,9 +2229,9 @@ impl ClusterInfo {
|
||||
&self,
|
||||
messages: Vec<(Pubkey, Vec<CrdsValue>)>,
|
||||
thread_pool: &ThreadPool,
|
||||
recycler: &PacketsRecycler,
|
||||
recycler: &PacketBatchRecycler,
|
||||
stakes: &HashMap<Pubkey, u64>,
|
||||
response_sender: &PacketSender,
|
||||
response_sender: &PacketBatchSender,
|
||||
) {
|
||||
let _st = ScopedTimer::from(&self.stats.handle_batch_push_messages_time);
|
||||
if messages.is_empty() {
|
||||
@@ -2301,17 +2308,17 @@ impl ClusterInfo {
|
||||
if prune_messages.is_empty() {
|
||||
return;
|
||||
}
|
||||
let mut packets = to_packets_with_destination(recycler.clone(), &prune_messages);
|
||||
let num_prune_packets = packets.packets.len();
|
||||
let mut packet_batch = to_packet_batch_with_destination(recycler.clone(), &prune_messages);
|
||||
let num_prune_packets = packet_batch.packets.len();
|
||||
self.stats
|
||||
.push_response_count
|
||||
.add_relaxed(packets.packets.len() as u64);
|
||||
.add_relaxed(packet_batch.packets.len() as u64);
|
||||
let new_push_requests = self.new_push_requests(stakes);
|
||||
inc_new_counter_debug!("cluster_info-push_message-pushes", new_push_requests.len());
|
||||
for (address, request) in new_push_requests {
|
||||
if ContactInfo::is_valid_address(&address, &self.socket_addr_space) {
|
||||
match Packet::from_data(Some(&address), &request) {
|
||||
Ok(packet) => packets.packets.push(packet),
|
||||
Ok(packet) => packet_batch.packets.push(packet),
|
||||
Err(err) => error!("failed to write push-request packet: {:?}", err),
|
||||
}
|
||||
} else {
|
||||
@@ -2323,8 +2330,8 @@ impl ClusterInfo {
|
||||
.add_relaxed(num_prune_packets as u64);
|
||||
self.stats
|
||||
.packets_sent_push_messages_count
|
||||
.add_relaxed((packets.packets.len() - num_prune_packets) as u64);
|
||||
let _ = response_sender.send(packets);
|
||||
.add_relaxed((packet_batch.packets.len() - num_prune_packets) as u64);
|
||||
let _ = response_sender.send(packet_batch);
|
||||
}
|
||||
|
||||
fn require_stake_for_gossip(&self, stakes: &HashMap<Pubkey, u64>) -> bool {
|
||||
@@ -2342,8 +2349,8 @@ impl ClusterInfo {
|
||||
&self,
|
||||
packets: VecDeque<(/*from:*/ SocketAddr, Protocol)>,
|
||||
thread_pool: &ThreadPool,
|
||||
recycler: &PacketsRecycler,
|
||||
response_sender: &PacketSender,
|
||||
recycler: &PacketBatchRecycler,
|
||||
response_sender: &PacketBatchSender,
|
||||
stakes: &HashMap<Pubkey, u64>,
|
||||
_feature_set: Option<&FeatureSet>,
|
||||
epoch_duration: Duration,
|
||||
@@ -2460,15 +2467,15 @@ impl ClusterInfo {
|
||||
// handling of requests/messages.
|
||||
fn run_socket_consume(
|
||||
&self,
|
||||
receiver: &PacketReceiver,
|
||||
receiver: &PacketBatchReceiver,
|
||||
sender: &Sender<Vec<(/*from:*/ SocketAddr, Protocol)>>,
|
||||
thread_pool: &ThreadPool,
|
||||
) -> Result<(), GossipError> {
|
||||
const RECV_TIMEOUT: Duration = Duration::from_secs(1);
|
||||
let packets: Vec<_> = receiver.recv_timeout(RECV_TIMEOUT)?.packets.into();
|
||||
let mut packets = VecDeque::from(packets);
|
||||
for payload in receiver.try_iter() {
|
||||
packets.extend(payload.packets.iter().cloned());
|
||||
for packet_batch in receiver.try_iter() {
|
||||
packets.extend(packet_batch.packets.iter().cloned());
|
||||
let excess_count = packets.len().saturating_sub(MAX_GOSSIP_TRAFFIC);
|
||||
if excess_count > 0 {
|
||||
packets.drain(0..excess_count);
|
||||
@@ -2500,10 +2507,10 @@ impl ClusterInfo {
|
||||
/// Process messages from the network
|
||||
fn run_listen(
|
||||
&self,
|
||||
recycler: &PacketsRecycler,
|
||||
recycler: &PacketBatchRecycler,
|
||||
bank_forks: Option<&RwLock<BankForks>>,
|
||||
receiver: &Receiver<Vec<(/*from:*/ SocketAddr, Protocol)>>,
|
||||
response_sender: &PacketSender,
|
||||
response_sender: &PacketBatchSender,
|
||||
thread_pool: &ThreadPool,
|
||||
last_print: &mut Instant,
|
||||
should_check_duplicate_instance: bool,
|
||||
@@ -2551,7 +2558,7 @@ impl ClusterInfo {
|
||||
|
||||
pub(crate) fn start_socket_consume_thread(
|
||||
self: Arc<Self>,
|
||||
receiver: PacketReceiver,
|
||||
receiver: PacketBatchReceiver,
|
||||
sender: Sender<Vec<(/*from:*/ SocketAddr, Protocol)>>,
|
||||
exit: Arc<AtomicBool>,
|
||||
) -> JoinHandle<()> {
|
||||
@@ -2581,12 +2588,12 @@ impl ClusterInfo {
|
||||
self: Arc<Self>,
|
||||
bank_forks: Option<Arc<RwLock<BankForks>>>,
|
||||
requests_receiver: Receiver<Vec<(/*from:*/ SocketAddr, Protocol)>>,
|
||||
response_sender: PacketSender,
|
||||
response_sender: PacketBatchSender,
|
||||
should_check_duplicate_instance: bool,
|
||||
exit: Arc<AtomicBool>,
|
||||
) -> JoinHandle<()> {
|
||||
let mut last_print = Instant::now();
|
||||
let recycler = PacketsRecycler::default();
|
||||
let recycler = PacketBatchRecycler::default();
|
||||
let thread_pool = ThreadPoolBuilder::new()
|
||||
.num_threads(get_thread_count().min(8))
|
||||
.thread_name(|i| format!("sol-gossip-work-{}", i))
|
||||
@@ -2955,9 +2962,9 @@ pub fn push_messages_to_peer(
|
||||
let reqs: Vec<_> = ClusterInfo::split_gossip_messages(PUSH_MESSAGE_MAX_PAYLOAD_SIZE, messages)
|
||||
.map(move |payload| (peer_gossip, Protocol::PushMessage(self_id, payload)))
|
||||
.collect();
|
||||
let packets = to_packets_with_destination(PacketsRecycler::default(), &reqs);
|
||||
let packet_batch = to_packet_batch_with_destination(PacketBatchRecycler::default(), &reqs);
|
||||
let sock = UdpSocket::bind("0.0.0.0:0").unwrap();
|
||||
packet::send_to(&packets, &sock, socket_addr_space)?;
|
||||
packet::send_to(&packet_batch, &sock, socket_addr_space)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -3206,7 +3213,7 @@ mod tests {
|
||||
.iter()
|
||||
.map(|ping| Pong::new(ping, &this_node).unwrap())
|
||||
.collect();
|
||||
let recycler = PacketsRecycler::default();
|
||||
let recycler = PacketBatchRecycler::default();
|
||||
let packets = cluster_info
|
||||
.handle_ping_messages(
|
||||
remote_nodes
|
||||
|
Reference in New Issue
Block a user