Skip to content
This repository was archived by the owner on Jan 22, 2025. It is now read-only.

Commit e344c84

Browse files
authored
Do not use UdpTpuConnection to forward votes (#26082)
* Do not use UdpTpuConnection to forward votes * fix tests
1 parent a906924 commit e344c84

File tree

1 file changed

+22
-10
lines changed

1 file changed

+22
-10
lines changed

core/src/banking_stage.rs

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,14 @@ use {
1212
tracer_packet_stats::TracerPacketStats,
1313
unprocessed_packet_batches::{self, *},
1414
},
15+
core::iter::repeat,
1516
crossbeam_channel::{
1617
Receiver as CrossbeamReceiver, RecvTimeoutError, Sender as CrossbeamSender,
1718
},
1819
histogram::Histogram,
1920
itertools::Itertools,
2021
min_max_heap::MinMaxHeap,
21-
solana_client::{
22-
connection_cache::ConnectionCache, tpu_connection::TpuConnection,
23-
udp_client::UdpTpuConnection,
24-
},
22+
solana_client::{connection_cache::ConnectionCache, tpu_connection::TpuConnection},
2523
solana_entry::entry::hash_transactions,
2624
solana_gossip::{cluster_info::ClusterInfo, contact_info::ContactInfo},
2725
solana_ledger::blockstore_processor::TransactionStatusSender,
@@ -59,14 +57,15 @@ use {
5957
},
6058
transport::TransportError,
6159
},
60+
solana_streamer::sendmmsg::batch_send,
6261
solana_transaction_status::token_balances::{
6362
collect_token_balances, TransactionTokenBalancesSet,
6463
},
6564
std::{
6665
cmp,
6766
collections::HashMap,
6867
env,
69-
net::SocketAddr,
68+
net::{SocketAddr, UdpSocket},
7069
rc::Rc,
7170
sync::{
7271
atomic::{AtomicU64, AtomicUsize, Ordering},
@@ -539,6 +538,7 @@ impl BankingStage {
539538
forward_option: &ForwardOption,
540539
cluster_info: &ClusterInfo,
541540
poh_recorder: &Arc<Mutex<PohRecorder>>,
541+
socket: &UdpSocket,
542542
filter_forwarding_results: &FilterForwardingResults,
543543
data_budget: &DataBudget,
544544
banking_stage_stats: &BankingStageStats,
@@ -600,21 +600,22 @@ impl BankingStage {
600600

601601
let mut measure = Measure::start("banking_stage-forward-us");
602602

603-
let conn = if let ForwardOption::ForwardTpuVote = forward_option {
604-
// The vote must be forwarded using only UDP. Let's get the UDP connection.
603+
let res = if let ForwardOption::ForwardTpuVote = forward_option {
604+
// The vote must be forwarded using only UDP.
605605
banking_stage_stats
606606
.forwarded_vote_count
607607
.fetch_add(packet_vec_len, Ordering::Relaxed);
608-
Arc::new(UdpTpuConnection::new_from_addr(addr).into())
608+
let pkts: Vec<_> = packet_vec.into_iter().zip(repeat(addr)).collect();
609+
batch_send(socket, &pkts).map_err(|err| err.into())
609610
} else {
610611
// All other transactions can be forwarded using QUIC, get_connection() will use
611612
// system wide setting to pick the correct connection object.
612613
banking_stage_stats
613614
.forwarded_transaction_count
614615
.fetch_add(packet_vec_len, Ordering::Relaxed);
615-
connection_cache.get_connection(&addr)
616+
let conn = connection_cache.get_connection(&addr);
617+
conn.send_wire_transaction_batch_async(packet_vec)
616618
};
617-
let res = conn.send_wire_transaction_batch_async(packet_vec);
618619

619620
measure.stop();
620621
inc_new_counter_info!(
@@ -903,6 +904,7 @@ impl BankingStage {
903904
#[allow(clippy::too_many_arguments)]
904905
fn process_buffered_packets(
905906
my_pubkey: &Pubkey,
907+
socket: &UdpSocket,
906908
poh_recorder: &Arc<Mutex<PohRecorder>>,
907909
cluster_info: &ClusterInfo,
908910
buffered_packet_batches: &mut UnprocessedPacketBatches,
@@ -988,6 +990,7 @@ impl BankingStage {
988990
cluster_info,
989991
buffered_packet_batches,
990992
poh_recorder,
993+
socket,
991994
false,
992995
data_budget,
993996
slot_metrics_tracker,
@@ -1009,6 +1012,7 @@ impl BankingStage {
10091012
cluster_info,
10101013
buffered_packet_batches,
10111014
poh_recorder,
1015+
socket,
10121016
true,
10131017
data_budget,
10141018
slot_metrics_tracker,
@@ -1032,6 +1036,7 @@ impl BankingStage {
10321036
cluster_info: &ClusterInfo,
10331037
buffered_packet_batches: &mut UnprocessedPacketBatches,
10341038
poh_recorder: &Arc<Mutex<PohRecorder>>,
1039+
socket: &UdpSocket,
10351040
hold: bool,
10361041
data_budget: &DataBudget,
10371042
slot_metrics_tracker: &mut LeaderSlotMetricsTracker,
@@ -1055,6 +1060,7 @@ impl BankingStage {
10551060
forward_option,
10561061
cluster_info,
10571062
poh_recorder,
1063+
socket,
10581064
&filter_forwarding_result,
10591065
data_budget,
10601066
banking_stage_stats,
@@ -1105,6 +1111,7 @@ impl BankingStage {
11051111
connection_cache: Arc<ConnectionCache>,
11061112
) {
11071113
let recorder = poh_recorder.lock().unwrap().recorder();
1114+
let socket = UdpSocket::bind("0.0.0.0:0").unwrap();
11081115
let mut buffered_packet_batches = UnprocessedPacketBatches::with_capacity(batch_limit);
11091116
let mut banking_stage_stats = BankingStageStats::new(id);
11101117
let mut tracer_packet_stats = TracerPacketStats::new(id);
@@ -1121,6 +1128,7 @@ impl BankingStage {
11211128
let (_, process_buffered_packets_time) = measure!(
11221129
Self::process_buffered_packets(
11231130
&my_pubkey,
1131+
&socket,
11241132
poh_recorder,
11251133
cluster_info,
11261134
&mut buffered_packet_batches,
@@ -4160,6 +4168,7 @@ mod tests {
41604168
];
41614169

41624170
let connection_cache = ConnectionCache::default();
4171+
let socket = UdpSocket::bind("0.0.0.0:0").unwrap();
41634172
for (name, data_budget, expected_num_forwarded) in test_cases {
41644173
let mut unprocessed_packet_batches: UnprocessedPacketBatches =
41654174
UnprocessedPacketBatches::from_iter(
@@ -4172,6 +4181,7 @@ mod tests {
41724181
&cluster_info,
41734182
&mut unprocessed_packet_batches,
41744183
&poh_recorder,
4184+
&socket,
41754185
true,
41764186
&data_budget,
41774187
&mut LeaderSlotMetricsTracker::new(0),
@@ -4277,13 +4287,15 @@ mod tests {
42774287
),
42784288
];
42794289

4290+
let socket = UdpSocket::bind("0.0.0.0:0").unwrap();
42804291
for (name, forward_option, hold, expected_ids, expected_num_unprocessed) in test_cases {
42814292
let stats = BankingStageStats::default();
42824293
BankingStage::handle_forwarding(
42834294
&forward_option,
42844295
&cluster_info,
42854296
&mut unprocessed_packet_batches,
42864297
&poh_recorder,
4298+
&socket,
42874299
hold,
42884300
&DataBudget::default(),
42894301
&mut LeaderSlotMetricsTracker::new(0),

0 commit comments

Comments
 (0)