From 6e918e4a3481dde0923b2abcf3cf6f6a24dbedca Mon Sep 17 00:00:00 2001 From: Justin Starry Date: Thu, 15 Aug 2024 23:50:27 +0000 Subject: [PATCH] feedback --- core/src/next_leader.rs | 18 ++++++++---------- core/src/voting_service.rs | 9 +++++++-- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/core/src/next_leader.rs b/core/src/next_leader.rs index 70261531437917..7e77ecd869e4a1 100644 --- a/core/src/next_leader.rs +++ b/core/src/next_leader.rs @@ -7,31 +7,29 @@ use { }; /// Returns a list of tpu vote sockets for the leaders of the next N fanout -/// slots. Leaders are deduped but the resulting list could have duplicate -/// sockets if two different leaders share the same tpu vote socket. +/// slots. Leaders and sockets are deduped. pub(crate) fn upcoming_leader_tpu_vote_sockets( cluster_info: &ClusterInfo, poh_recorder: &RwLock, - fanout_slots: usize, + fanout_slots: u64, ) -> Vec { let upcoming_leaders = { - let mut upcoming_leaders = Vec::with_capacity(fanout_slots); let poh_recorder = poh_recorder.read().unwrap(); - for n_slots in 1..=fanout_slots { - upcoming_leaders.push(poh_recorder.leader_after_n_slots(n_slots as u64)); - } - upcoming_leaders + (1..=fanout_slots) + .filter_map(|n_slots| poh_recorder.leader_after_n_slots(n_slots)) + .collect_vec() }; upcoming_leaders .into_iter() - .flatten() - .unique() + .dedup() .filter_map(|leader_pubkey| { cluster_info .lookup_contact_info(&leader_pubkey, ContactInfo::tpu_vote)? .ok() }) + // dedup again since leaders could potentially share the same tpu vote socket + .dedup() .collect() } diff --git a/core/src/voting_service.rs b/core/src/voting_service.rs index dc60ec49b5ce37..14443ab9c7947c 100644 --- a/core/src/voting_service.rs +++ b/core/src/voting_service.rs @@ -7,7 +7,10 @@ use { solana_gossip::cluster_info::ClusterInfo, solana_measure::measure::Measure, solana_poh::poh_recorder::PohRecorder, - solana_sdk::{clock::Slot, transaction::Transaction}, + solana_sdk::{ + clock::{Slot, FORWARD_TRANSACTIONS_TO_LEADER_AT_SLOT_OFFSET}, + transaction::Transaction, + }, std::{ sync::{Arc, RwLock}, thread::{self, Builder, JoinHandle}, @@ -79,7 +82,9 @@ impl VotingService { } // Attempt to send our vote transaction to the leaders for the next few slots - const UPCOMING_LEADER_FANOUT_SLOTS: usize = 2; + const UPCOMING_LEADER_FANOUT_SLOTS: u64 = FORWARD_TRANSACTIONS_TO_LEADER_AT_SLOT_OFFSET; + #[cfg(test)] + static_assertions::const_assert_eq!(UPCOMING_LEADER_FANOUT_SLOTS, 2); let upcoming_leader_sockets = upcoming_leader_tpu_vote_sockets( cluster_info, poh_recorder,