Extricate RpcCompletedSlotsService from RetransmitStage
This commit is contained in:
		| @@ -118,7 +118,7 @@ pub struct ReplayStageConfig { | |||||||
|     pub vote_account: Pubkey, |     pub vote_account: Pubkey, | ||||||
|     pub authorized_voter_keypairs: Arc<RwLock<Vec<Arc<Keypair>>>>, |     pub authorized_voter_keypairs: Arc<RwLock<Vec<Arc<Keypair>>>>, | ||||||
|     pub exit: Arc<AtomicBool>, |     pub exit: Arc<AtomicBool>, | ||||||
|     pub subscriptions: Arc<RpcSubscriptions>, |     pub rpc_subscriptions: Arc<RpcSubscriptions>, | ||||||
|     pub leader_schedule_cache: Arc<LeaderScheduleCache>, |     pub leader_schedule_cache: Arc<LeaderScheduleCache>, | ||||||
|     pub latest_root_senders: Vec<Sender<Slot>>, |     pub latest_root_senders: Vec<Sender<Slot>>, | ||||||
|     pub accounts_background_request_sender: AbsRequestSender, |     pub accounts_background_request_sender: AbsRequestSender, | ||||||
| @@ -302,7 +302,7 @@ impl ReplayStage { | |||||||
|             vote_account, |             vote_account, | ||||||
|             authorized_voter_keypairs, |             authorized_voter_keypairs, | ||||||
|             exit, |             exit, | ||||||
|             subscriptions, |             rpc_subscriptions, | ||||||
|             leader_schedule_cache, |             leader_schedule_cache, | ||||||
|             latest_root_senders, |             latest_root_senders, | ||||||
|             accounts_background_request_sender, |             accounts_background_request_sender, | ||||||
| @@ -319,7 +319,7 @@ impl ReplayStage { | |||||||
|         let (lockouts_sender, commitment_service) = AggregateCommitmentService::new( |         let (lockouts_sender, commitment_service) = AggregateCommitmentService::new( | ||||||
|             &exit, |             &exit, | ||||||
|             block_commitment_cache.clone(), |             block_commitment_cache.clone(), | ||||||
|             subscriptions.clone(), |             rpc_subscriptions.clone(), | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
|         #[allow(clippy::cognitive_complexity)] |         #[allow(clippy::cognitive_complexity)] | ||||||
| @@ -363,7 +363,7 @@ impl ReplayStage { | |||||||
|                         &blockstore, |                         &blockstore, | ||||||
|                         &bank_forks, |                         &bank_forks, | ||||||
|                         &leader_schedule_cache, |                         &leader_schedule_cache, | ||||||
|                         &subscriptions, |                         &rpc_subscriptions, | ||||||
|                         &mut progress, |                         &mut progress, | ||||||
|                     ); |                     ); | ||||||
|                     generate_new_bank_forks_time.stop(); |                     generate_new_bank_forks_time.stop(); | ||||||
| @@ -386,7 +386,7 @@ impl ReplayStage { | |||||||
|                         &replay_vote_sender, |                         &replay_vote_sender, | ||||||
|                         &bank_notification_sender, |                         &bank_notification_sender, | ||||||
|                         &rewards_recorder_sender, |                         &rewards_recorder_sender, | ||||||
|                         &subscriptions, |                         &rpc_subscriptions, | ||||||
|                         &mut duplicate_slots_tracker, |                         &mut duplicate_slots_tracker, | ||||||
|                         &gossip_duplicate_confirmed_slots, |                         &gossip_duplicate_confirmed_slots, | ||||||
|                         &mut unfrozen_gossip_verified_vote_hashes, |                         &mut unfrozen_gossip_verified_vote_hashes, | ||||||
| @@ -577,7 +577,7 @@ impl ReplayStage { | |||||||
|                             &lockouts_sender, |                             &lockouts_sender, | ||||||
|                             &accounts_background_request_sender, |                             &accounts_background_request_sender, | ||||||
|                             &latest_root_senders, |                             &latest_root_senders, | ||||||
|                             &subscriptions, |                             &rpc_subscriptions, | ||||||
|                             &block_commitment_cache, |                             &block_commitment_cache, | ||||||
|                             &mut heaviest_subtree_fork_choice, |                             &mut heaviest_subtree_fork_choice, | ||||||
|                             &bank_notification_sender, |                             &bank_notification_sender, | ||||||
| @@ -667,7 +667,7 @@ impl ReplayStage { | |||||||
|                             &bank_forks, |                             &bank_forks, | ||||||
|                             &poh_recorder, |                             &poh_recorder, | ||||||
|                             &leader_schedule_cache, |                             &leader_schedule_cache, | ||||||
|                             &subscriptions, |                             &rpc_subscriptions, | ||||||
|                             &progress, |                             &progress, | ||||||
|                             &retransmit_slots_sender, |                             &retransmit_slots_sender, | ||||||
|                             &mut skipped_slots_info, |                             &mut skipped_slots_info, | ||||||
| @@ -1069,7 +1069,7 @@ impl ReplayStage { | |||||||
|         bank_forks: &Arc<RwLock<BankForks>>, |         bank_forks: &Arc<RwLock<BankForks>>, | ||||||
|         poh_recorder: &Arc<Mutex<PohRecorder>>, |         poh_recorder: &Arc<Mutex<PohRecorder>>, | ||||||
|         leader_schedule_cache: &Arc<LeaderScheduleCache>, |         leader_schedule_cache: &Arc<LeaderScheduleCache>, | ||||||
|         subscriptions: &Arc<RpcSubscriptions>, |         rpc_subscriptions: &Arc<RpcSubscriptions>, | ||||||
|         progress_map: &ProgressMap, |         progress_map: &ProgressMap, | ||||||
|         retransmit_slots_sender: &RetransmitSlotsSender, |         retransmit_slots_sender: &RetransmitSlotsSender, | ||||||
|         skipped_slots_info: &mut SkippedSlotsInfo, |         skipped_slots_info: &mut SkippedSlotsInfo, | ||||||
| @@ -1181,7 +1181,7 @@ impl ReplayStage { | |||||||
|                 poh_slot, |                 poh_slot, | ||||||
|                 root_slot, |                 root_slot, | ||||||
|                 my_pubkey, |                 my_pubkey, | ||||||
|                 subscriptions, |                 rpc_subscriptions, | ||||||
|             ); |             ); | ||||||
|  |  | ||||||
|             let tpu_bank = bank_forks.write().unwrap().insert(tpu_bank); |             let tpu_bank = bank_forks.write().unwrap().insert(tpu_bank); | ||||||
| @@ -1230,7 +1230,7 @@ impl ReplayStage { | |||||||
|         bank: &Bank, |         bank: &Bank, | ||||||
|         root: Slot, |         root: Slot, | ||||||
|         err: &BlockstoreProcessorError, |         err: &BlockstoreProcessorError, | ||||||
|         subscriptions: &Arc<RpcSubscriptions>, |         rpc_subscriptions: &Arc<RpcSubscriptions>, | ||||||
|         duplicate_slots_tracker: &mut DuplicateSlotsTracker, |         duplicate_slots_tracker: &mut DuplicateSlotsTracker, | ||||||
|         gossip_duplicate_confirmed_slots: &GossipDuplicateConfirmedSlots, |         gossip_duplicate_confirmed_slots: &GossipDuplicateConfirmedSlots, | ||||||
|         progress: &mut ProgressMap, |         progress: &mut ProgressMap, | ||||||
| @@ -1264,7 +1264,7 @@ impl ReplayStage { | |||||||
|         blockstore |         blockstore | ||||||
|             .set_dead_slot(slot) |             .set_dead_slot(slot) | ||||||
|             .expect("Failed to mark slot as dead in blockstore"); |             .expect("Failed to mark slot as dead in blockstore"); | ||||||
|         subscriptions.notify_slot_update(SlotUpdate::Dead { |         rpc_subscriptions.notify_slot_update(SlotUpdate::Dead { | ||||||
|             slot, |             slot, | ||||||
|             err: format!("error: {:?}", err), |             err: format!("error: {:?}", err), | ||||||
|             timestamp: timestamp(), |             timestamp: timestamp(), | ||||||
| @@ -1297,7 +1297,7 @@ impl ReplayStage { | |||||||
|         lockouts_sender: &Sender<CommitmentAggregationData>, |         lockouts_sender: &Sender<CommitmentAggregationData>, | ||||||
|         accounts_background_request_sender: &AbsRequestSender, |         accounts_background_request_sender: &AbsRequestSender, | ||||||
|         latest_root_senders: &[Sender<Slot>], |         latest_root_senders: &[Sender<Slot>], | ||||||
|         subscriptions: &Arc<RpcSubscriptions>, |         rpc_subscriptions: &Arc<RpcSubscriptions>, | ||||||
|         block_commitment_cache: &Arc<RwLock<BlockCommitmentCache>>, |         block_commitment_cache: &Arc<RwLock<BlockCommitmentCache>>, | ||||||
|         heaviest_subtree_fork_choice: &mut HeaviestSubtreeForkChoice, |         heaviest_subtree_fork_choice: &mut HeaviestSubtreeForkChoice, | ||||||
|         bank_notification_sender: &Option<BankNotificationSender>, |         bank_notification_sender: &Option<BankNotificationSender>, | ||||||
| @@ -1356,7 +1356,7 @@ impl ReplayStage { | |||||||
|                 has_new_vote_been_rooted, |                 has_new_vote_been_rooted, | ||||||
|                 vote_signatures, |                 vote_signatures, | ||||||
|             ); |             ); | ||||||
|             subscriptions.notify_roots(rooted_slots); |             rpc_subscriptions.notify_roots(rooted_slots); | ||||||
|             if let Some(sender) = bank_notification_sender { |             if let Some(sender) = bank_notification_sender { | ||||||
|                 sender |                 sender | ||||||
|                     .send(BankNotification::Root(root_bank)) |                     .send(BankNotification::Root(root_bank)) | ||||||
| @@ -1643,7 +1643,7 @@ impl ReplayStage { | |||||||
|         replay_vote_sender: &ReplayVoteSender, |         replay_vote_sender: &ReplayVoteSender, | ||||||
|         bank_notification_sender: &Option<BankNotificationSender>, |         bank_notification_sender: &Option<BankNotificationSender>, | ||||||
|         rewards_recorder_sender: &Option<RewardsRecorderSender>, |         rewards_recorder_sender: &Option<RewardsRecorderSender>, | ||||||
|         subscriptions: &Arc<RpcSubscriptions>, |         rpc_subscriptions: &Arc<RpcSubscriptions>, | ||||||
|         duplicate_slots_tracker: &mut DuplicateSlotsTracker, |         duplicate_slots_tracker: &mut DuplicateSlotsTracker, | ||||||
|         gossip_duplicate_confirmed_slots: &GossipDuplicateConfirmedSlots, |         gossip_duplicate_confirmed_slots: &GossipDuplicateConfirmedSlots, | ||||||
|         unfrozen_gossip_verified_vote_hashes: &mut UnfrozenGossipVerifiedVoteHashes, |         unfrozen_gossip_verified_vote_hashes: &mut UnfrozenGossipVerifiedVoteHashes, | ||||||
| @@ -1714,7 +1714,7 @@ impl ReplayStage { | |||||||
|                             &bank, |                             &bank, | ||||||
|                             root_slot, |                             root_slot, | ||||||
|                             &err, |                             &err, | ||||||
|                             subscriptions, |                             rpc_subscriptions, | ||||||
|                             duplicate_slots_tracker, |                             duplicate_slots_tracker, | ||||||
|                             gossip_duplicate_confirmed_slots, |                             gossip_duplicate_confirmed_slots, | ||||||
|                             progress, |                             progress, | ||||||
| @@ -2408,7 +2408,7 @@ impl ReplayStage { | |||||||
|         blockstore: &Blockstore, |         blockstore: &Blockstore, | ||||||
|         bank_forks: &RwLock<BankForks>, |         bank_forks: &RwLock<BankForks>, | ||||||
|         leader_schedule_cache: &Arc<LeaderScheduleCache>, |         leader_schedule_cache: &Arc<LeaderScheduleCache>, | ||||||
|         subscriptions: &Arc<RpcSubscriptions>, |         rpc_subscriptions: &Arc<RpcSubscriptions>, | ||||||
|         progress: &mut ProgressMap, |         progress: &mut ProgressMap, | ||||||
|     ) { |     ) { | ||||||
|         // Find the next slot that chains to the old slot |         // Find the next slot that chains to the old slot | ||||||
| @@ -2453,7 +2453,7 @@ impl ReplayStage { | |||||||
|                     child_slot, |                     child_slot, | ||||||
|                     forks.root(), |                     forks.root(), | ||||||
|                     &leader, |                     &leader, | ||||||
|                     subscriptions, |                     rpc_subscriptions, | ||||||
|                 ); |                 ); | ||||||
|                 let empty: Vec<Pubkey> = vec![]; |                 let empty: Vec<Pubkey> = vec![]; | ||||||
|                 Self::update_fork_propagated_threshold_from_votes( |                 Self::update_fork_propagated_threshold_from_votes( | ||||||
| @@ -2479,9 +2479,9 @@ impl ReplayStage { | |||||||
|         slot: u64, |         slot: u64, | ||||||
|         root_slot: u64, |         root_slot: u64, | ||||||
|         leader: &Pubkey, |         leader: &Pubkey, | ||||||
|         subscriptions: &Arc<RpcSubscriptions>, |         rpc_subscriptions: &Arc<RpcSubscriptions>, | ||||||
|     ) -> Bank { |     ) -> Bank { | ||||||
|         subscriptions.notify_slot(slot, parent.slot(), root_slot); |         rpc_subscriptions.notify_slot(slot, parent.slot(), root_slot); | ||||||
|         Bank::new_from_parent(parent, leader, slot) |         Bank::new_from_parent(parent, leader, slot) | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -3191,7 +3191,7 @@ mod tests { | |||||||
|                 &&VerifyRecyclers::default(), |                 &&VerifyRecyclers::default(), | ||||||
|             ); |             ); | ||||||
|  |  | ||||||
|             let subscriptions = Arc::new(RpcSubscriptions::new( |             let rpc_subscriptions = Arc::new(RpcSubscriptions::new( | ||||||
|                 &exit, |                 &exit, | ||||||
|                 bank_forks.clone(), |                 bank_forks.clone(), | ||||||
|                 block_commitment_cache, |                 block_commitment_cache, | ||||||
| @@ -3203,7 +3203,7 @@ mod tests { | |||||||
|                     &bank0, |                     &bank0, | ||||||
|                     0, |                     0, | ||||||
|                     err, |                     err, | ||||||
|                     &subscriptions, |                     &rpc_subscriptions, | ||||||
|                     &mut DuplicateSlotsTracker::default(), |                     &mut DuplicateSlotsTracker::default(), | ||||||
|                     &GossipDuplicateConfirmedSlots::default(), |                     &GossipDuplicateConfirmedSlots::default(), | ||||||
|                     &mut progress, |                     &mut progress, | ||||||
| @@ -3254,14 +3254,17 @@ mod tests { | |||||||
|  |  | ||||||
|         let exit = Arc::new(AtomicBool::new(false)); |         let exit = Arc::new(AtomicBool::new(false)); | ||||||
|         let block_commitment_cache = Arc::new(RwLock::new(BlockCommitmentCache::default())); |         let block_commitment_cache = Arc::new(RwLock::new(BlockCommitmentCache::default())); | ||||||
|         let subscriptions = Arc::new(RpcSubscriptions::new( |         let rpc_subscriptions = Arc::new(RpcSubscriptions::new( | ||||||
|             &exit, |             &exit, | ||||||
|             bank_forks.clone(), |             bank_forks.clone(), | ||||||
|             block_commitment_cache.clone(), |             block_commitment_cache.clone(), | ||||||
|             OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks), |             OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks), | ||||||
|         )); |         )); | ||||||
|         let (lockouts_sender, _) = |         let (lockouts_sender, _) = AggregateCommitmentService::new( | ||||||
|             AggregateCommitmentService::new(&exit, block_commitment_cache.clone(), subscriptions); |             &exit, | ||||||
|  |             block_commitment_cache.clone(), | ||||||
|  |             rpc_subscriptions, | ||||||
|  |         ); | ||||||
|  |  | ||||||
|         assert!(block_commitment_cache |         assert!(block_commitment_cache | ||||||
|             .read() |             .read() | ||||||
|   | |||||||
| @@ -18,17 +18,11 @@ use solana_gossip::{ | |||||||
|     contact_info::ContactInfo, |     contact_info::ContactInfo, | ||||||
| }; | }; | ||||||
| use solana_ledger::shred::{get_shred_slot_index_type, ShredFetchStats}; | use solana_ledger::shred::{get_shred_slot_index_type, ShredFetchStats}; | ||||||
| use solana_ledger::{ | use solana_ledger::{blockstore::Blockstore, leader_schedule_cache::LeaderScheduleCache}; | ||||||
|     blockstore::{Blockstore, CompletedSlotsReceiver}, |  | ||||||
|     leader_schedule_cache::LeaderScheduleCache, |  | ||||||
| }; |  | ||||||
| use solana_measure::measure::Measure; | use solana_measure::measure::Measure; | ||||||
| use solana_metrics::inc_new_counter_error; | use solana_metrics::inc_new_counter_error; | ||||||
| use solana_perf::packet::{Packet, Packets}; | use solana_perf::packet::{Packet, Packets}; | ||||||
| use solana_rpc::{ | use solana_rpc::{max_slots::MaxSlots, rpc_subscriptions::RpcSubscriptions}; | ||||||
|     max_slots::MaxSlots, rpc_completed_slots_service::RpcCompletedSlotsService, |  | ||||||
|     rpc_subscriptions::RpcSubscriptions, |  | ||||||
| }; |  | ||||||
| use solana_runtime::{bank::Bank, bank_forks::BankForks}; | use solana_runtime::{bank::Bank, bank_forks::BankForks}; | ||||||
| use solana_sdk::{clock::Slot, epoch_schedule::EpochSchedule, pubkey::Pubkey, timing::timestamp}; | use solana_sdk::{clock::Slot, epoch_schedule::EpochSchedule, pubkey::Pubkey, timing::timestamp}; | ||||||
| use solana_streamer::streamer::PacketReceiver; | use solana_streamer::streamer::PacketReceiver; | ||||||
| @@ -602,7 +596,6 @@ impl RetransmitStage { | |||||||
|         repair_socket: Arc<UdpSocket>, |         repair_socket: Arc<UdpSocket>, | ||||||
|         verified_receiver: Receiver<Vec<Packets>>, |         verified_receiver: Receiver<Vec<Packets>>, | ||||||
|         exit: &Arc<AtomicBool>, |         exit: &Arc<AtomicBool>, | ||||||
|         rpc_completed_slots_receiver: CompletedSlotsReceiver, |  | ||||||
|         cluster_slots_update_receiver: ClusterSlotsUpdateReceiver, |         cluster_slots_update_receiver: ClusterSlotsUpdateReceiver, | ||||||
|         epoch_schedule: EpochSchedule, |         epoch_schedule: EpochSchedule, | ||||||
|         cfg: Option<Arc<AtomicBool>>, |         cfg: Option<Arc<AtomicBool>>, | ||||||
| @@ -619,18 +612,16 @@ impl RetransmitStage { | |||||||
|         let (retransmit_sender, retransmit_receiver) = channel(); |         let (retransmit_sender, retransmit_receiver) = channel(); | ||||||
|  |  | ||||||
|         let retransmit_receiver = Arc::new(Mutex::new(retransmit_receiver)); |         let retransmit_receiver = Arc::new(Mutex::new(retransmit_receiver)); | ||||||
|         let t_retransmit = retransmitter( |         let thread_hdls = retransmitter( | ||||||
|             retransmit_sockets, |             retransmit_sockets, | ||||||
|             bank_forks.clone(), |             bank_forks.clone(), | ||||||
|             leader_schedule_cache, |             leader_schedule_cache, | ||||||
|             cluster_info.clone(), |             cluster_info.clone(), | ||||||
|             retransmit_receiver, |             retransmit_receiver, | ||||||
|             max_slots, |             max_slots, | ||||||
|             rpc_subscriptions.clone(), |             rpc_subscriptions, | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
|         let rpc_completed_slots_hdl = |  | ||||||
|             RpcCompletedSlotsService::spawn(rpc_completed_slots_receiver, rpc_subscriptions); |  | ||||||
|         let cluster_slots_service = ClusterSlotsService::new( |         let cluster_slots_service = ClusterSlotsService::new( | ||||||
|             blockstore.clone(), |             blockstore.clone(), | ||||||
|             cluster_slots.clone(), |             cluster_slots.clone(), | ||||||
| @@ -677,11 +668,6 @@ impl RetransmitStage { | |||||||
|             duplicate_slots_sender, |             duplicate_slots_sender, | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
|         let mut thread_hdls = t_retransmit; |  | ||||||
|         if let Some(thread_hdl) = rpc_completed_slots_hdl { |  | ||||||
|             thread_hdls.push(thread_hdl); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         Self { |         Self { | ||||||
|             thread_hdls, |             thread_hdls, | ||||||
|             window_service, |             window_service, | ||||||
| @@ -751,7 +737,7 @@ mod tests { | |||||||
|         let cluster_info = Arc::new(cluster_info); |         let cluster_info = Arc::new(cluster_info); | ||||||
|  |  | ||||||
|         let (retransmit_sender, retransmit_receiver) = channel(); |         let (retransmit_sender, retransmit_receiver) = channel(); | ||||||
|         let t_retransmit = retransmitter( |         let _t_retransmit = retransmitter( | ||||||
|             retransmit_socket, |             retransmit_socket, | ||||||
|             bank_forks, |             bank_forks, | ||||||
|             &leader_schedule_cache, |             &leader_schedule_cache, | ||||||
| @@ -760,7 +746,6 @@ mod tests { | |||||||
|             &Arc::new(MaxSlots::default()), |             &Arc::new(MaxSlots::default()), | ||||||
|             None, |             None, | ||||||
|         ); |         ); | ||||||
|         let _thread_hdls = vec![t_retransmit]; |  | ||||||
|  |  | ||||||
|         let mut shred = Shred::new_from_data(0, 0, 0, None, true, true, 0, 0x20, 0); |         let mut shred = Shred::new_from_data(0, 0, 0, None, true, true, 0, 0x20, 0); | ||||||
|         let mut packet = Packet::default(); |         let mut packet = Packet::default(); | ||||||
|   | |||||||
| @@ -25,8 +25,7 @@ use crate::{ | |||||||
| use crossbeam_channel::unbounded; | use crossbeam_channel::unbounded; | ||||||
| use solana_gossip::cluster_info::ClusterInfo; | use solana_gossip::cluster_info::ClusterInfo; | ||||||
| use solana_ledger::{ | use solana_ledger::{ | ||||||
|     blockstore::{Blockstore, CompletedSlotsReceiver}, |     blockstore::Blockstore, blockstore_processor::TransactionStatusSender, | ||||||
|     blockstore_processor::TransactionStatusSender, |  | ||||||
|     leader_schedule_cache::LeaderScheduleCache, |     leader_schedule_cache::LeaderScheduleCache, | ||||||
| }; | }; | ||||||
| use solana_poh::poh_recorder::PohRecorder; | use solana_poh::poh_recorder::PohRecorder; | ||||||
| @@ -109,12 +108,11 @@ impl Tvu { | |||||||
|         sockets: Sockets, |         sockets: Sockets, | ||||||
|         blockstore: Arc<Blockstore>, |         blockstore: Arc<Blockstore>, | ||||||
|         ledger_signal_receiver: Receiver<bool>, |         ledger_signal_receiver: Receiver<bool>, | ||||||
|         subscriptions: &Arc<RpcSubscriptions>, |         rpc_subscriptions: &Arc<RpcSubscriptions>, | ||||||
|         poh_recorder: &Arc<Mutex<PohRecorder>>, |         poh_recorder: &Arc<Mutex<PohRecorder>>, | ||||||
|         tower: Tower, |         tower: Tower, | ||||||
|         leader_schedule_cache: &Arc<LeaderScheduleCache>, |         leader_schedule_cache: &Arc<LeaderScheduleCache>, | ||||||
|         exit: &Arc<AtomicBool>, |         exit: &Arc<AtomicBool>, | ||||||
|         completed_slots_receiver: CompletedSlotsReceiver, |  | ||||||
|         block_commitment_cache: Arc<RwLock<BlockCommitmentCache>>, |         block_commitment_cache: Arc<RwLock<BlockCommitmentCache>>, | ||||||
|         cfg: Option<Arc<AtomicBool>>, |         cfg: Option<Arc<AtomicBool>>, | ||||||
|         transaction_status_sender: Option<TransactionStatusSender>, |         transaction_status_sender: Option<TransactionStatusSender>, | ||||||
| @@ -179,7 +177,6 @@ impl Tvu { | |||||||
|             repair_socket, |             repair_socket, | ||||||
|             verified_receiver, |             verified_receiver, | ||||||
|             &exit, |             &exit, | ||||||
|             completed_slots_receiver, |  | ||||||
|             cluster_slots_update_receiver, |             cluster_slots_update_receiver, | ||||||
|             *bank_forks.read().unwrap().working_bank().epoch_schedule(), |             *bank_forks.read().unwrap().working_bank().epoch_schedule(), | ||||||
|             cfg, |             cfg, | ||||||
| @@ -190,7 +187,7 @@ impl Tvu { | |||||||
|             tvu_config.repair_validators, |             tvu_config.repair_validators, | ||||||
|             completed_data_sets_sender, |             completed_data_sets_sender, | ||||||
|             max_slots, |             max_slots, | ||||||
|             Some(subscriptions.clone()), |             Some(rpc_subscriptions.clone()), | ||||||
|             duplicate_slots_sender, |             duplicate_slots_sender, | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
| @@ -266,7 +263,7 @@ impl Tvu { | |||||||
|             vote_account: *vote_account, |             vote_account: *vote_account, | ||||||
|             authorized_voter_keypairs, |             authorized_voter_keypairs, | ||||||
|             exit: exit.clone(), |             exit: exit.clone(), | ||||||
|             subscriptions: subscriptions.clone(), |             rpc_subscriptions: rpc_subscriptions.clone(), | ||||||
|             leader_schedule_cache: leader_schedule_cache.clone(), |             leader_schedule_cache: leader_schedule_cache.clone(), | ||||||
|             latest_root_senders: vec![ledger_cleanup_slot_sender], |             latest_root_senders: vec![ledger_cleanup_slot_sender], | ||||||
|             accounts_background_request_sender, |             accounts_background_request_sender, | ||||||
| @@ -381,7 +378,6 @@ pub mod tests { | |||||||
|         let BlockstoreSignals { |         let BlockstoreSignals { | ||||||
|             blockstore, |             blockstore, | ||||||
|             ledger_signal_receiver, |             ledger_signal_receiver, | ||||||
|             completed_slots_receiver, |  | ||||||
|             .. |             .. | ||||||
|         } = Blockstore::open_with_signal(&blockstore_path, None, true) |         } = Blockstore::open_with_signal(&blockstore_path, None, true) | ||||||
|             .expect("Expected to successfully open ledger"); |             .expect("Expected to successfully open ledger"); | ||||||
| @@ -425,7 +421,6 @@ pub mod tests { | |||||||
|             tower, |             tower, | ||||||
|             &leader_schedule_cache, |             &leader_schedule_cache, | ||||||
|             &exit, |             &exit, | ||||||
|             completed_slots_receiver, |  | ||||||
|             block_commitment_cache, |             block_commitment_cache, | ||||||
|             None, |             None, | ||||||
|             None, |             None, | ||||||
|   | |||||||
| @@ -47,6 +47,7 @@ use solana_rpc::{ | |||||||
|         OptimisticallyConfirmedBank, OptimisticallyConfirmedBankTracker, |         OptimisticallyConfirmedBank, OptimisticallyConfirmedBankTracker, | ||||||
|     }, |     }, | ||||||
|     rpc::JsonRpcConfig, |     rpc::JsonRpcConfig, | ||||||
|  |     rpc_completed_slots_service::RpcCompletedSlotsService, | ||||||
|     rpc_pubsub_service::{PubSubConfig, PubSubService}, |     rpc_pubsub_service::{PubSubConfig, PubSubService}, | ||||||
|     rpc_service::JsonRpcService, |     rpc_service::JsonRpcService, | ||||||
|     rpc_subscriptions::RpcSubscriptions, |     rpc_subscriptions::RpcSubscriptions, | ||||||
| @@ -80,7 +81,7 @@ use std::{ | |||||||
|     sync::atomic::{AtomicBool, AtomicU64, Ordering}, |     sync::atomic::{AtomicBool, AtomicU64, Ordering}, | ||||||
|     sync::mpsc::Receiver, |     sync::mpsc::Receiver, | ||||||
|     sync::{Arc, Mutex, RwLock}, |     sync::{Arc, Mutex, RwLock}, | ||||||
|     thread::{sleep, Builder}, |     thread::{sleep, Builder, JoinHandle}, | ||||||
|     time::{Duration, Instant}, |     time::{Duration, Instant}, | ||||||
| }; | }; | ||||||
|  |  | ||||||
| @@ -243,6 +244,7 @@ pub struct Validator { | |||||||
|     validator_exit: Arc<RwLock<Exit>>, |     validator_exit: Arc<RwLock<Exit>>, | ||||||
|     json_rpc_service: Option<JsonRpcService>, |     json_rpc_service: Option<JsonRpcService>, | ||||||
|     pubsub_service: Option<PubSubService>, |     pubsub_service: Option<PubSubService>, | ||||||
|  |     rpc_completed_slots_service: JoinHandle<()>, | ||||||
|     optimistically_confirmed_bank_tracker: Option<OptimisticallyConfirmedBankTracker>, |     optimistically_confirmed_bank_tracker: Option<OptimisticallyConfirmedBankTracker>, | ||||||
|     transaction_status_service: Option<TransactionStatusService>, |     transaction_status_service: Option<TransactionStatusService>, | ||||||
|     rewards_recorder_service: Option<RewardsRecorderService>, |     rewards_recorder_service: Option<RewardsRecorderService>, | ||||||
| @@ -446,7 +448,7 @@ impl Validator { | |||||||
|         let optimistically_confirmed_bank = |         let optimistically_confirmed_bank = | ||||||
|             OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks); |             OptimisticallyConfirmedBank::locked_from_bank_forks_root(&bank_forks); | ||||||
|  |  | ||||||
|         let subscriptions = Arc::new(RpcSubscriptions::new_with_vote_subscription( |         let rpc_subscriptions = Arc::new(RpcSubscriptions::new_with_vote_subscription( | ||||||
|             &exit, |             &exit, | ||||||
|             bank_forks.clone(), |             bank_forks.clone(), | ||||||
|             block_commitment_cache.clone(), |             block_commitment_cache.clone(), | ||||||
| @@ -460,7 +462,7 @@ impl Validator { | |||||||
|         let completed_data_sets_service = CompletedDataSetsService::new( |         let completed_data_sets_service = CompletedDataSetsService::new( | ||||||
|             completed_data_sets_receiver, |             completed_data_sets_receiver, | ||||||
|             blockstore.clone(), |             blockstore.clone(), | ||||||
|             subscriptions.clone(), |             rpc_subscriptions.clone(), | ||||||
|             &exit, |             &exit, | ||||||
|             max_slots.clone(), |             max_slots.clone(), | ||||||
|         ); |         ); | ||||||
| @@ -540,7 +542,7 @@ impl Validator { | |||||||
|                 } else { |                 } else { | ||||||
|                     Some(PubSubService::new( |                     Some(PubSubService::new( | ||||||
|                         config.pubsub_config.clone(), |                         config.pubsub_config.clone(), | ||||||
|                         &subscriptions, |                         &rpc_subscriptions, | ||||||
|                         rpc_pubsub_addr, |                         rpc_pubsub_addr, | ||||||
|                         &exit, |                         &exit, | ||||||
|                     )) |                     )) | ||||||
| @@ -550,7 +552,7 @@ impl Validator { | |||||||
|                     &exit, |                     &exit, | ||||||
|                     bank_forks.clone(), |                     bank_forks.clone(), | ||||||
|                     optimistically_confirmed_bank, |                     optimistically_confirmed_bank, | ||||||
|                     subscriptions.clone(), |                     rpc_subscriptions.clone(), | ||||||
|                 )), |                 )), | ||||||
|                 Some(bank_notification_sender), |                 Some(bank_notification_sender), | ||||||
|             ) |             ) | ||||||
| @@ -660,6 +662,10 @@ impl Validator { | |||||||
|         let (verified_vote_sender, verified_vote_receiver) = unbounded(); |         let (verified_vote_sender, verified_vote_receiver) = unbounded(); | ||||||
|         let (gossip_verified_vote_hash_sender, gossip_verified_vote_hash_receiver) = unbounded(); |         let (gossip_verified_vote_hash_sender, gossip_verified_vote_hash_receiver) = unbounded(); | ||||||
|         let (cluster_confirmed_slot_sender, cluster_confirmed_slot_receiver) = unbounded(); |         let (cluster_confirmed_slot_sender, cluster_confirmed_slot_receiver) = unbounded(); | ||||||
|  |  | ||||||
|  |         let rpc_completed_slots_service = | ||||||
|  |             RpcCompletedSlotsService::spawn(completed_slots_receiver, rpc_subscriptions.clone()); | ||||||
|  |  | ||||||
|         let tvu = Tvu::new( |         let tvu = Tvu::new( | ||||||
|             vote_account, |             vote_account, | ||||||
|             authorized_voter_keypairs, |             authorized_voter_keypairs, | ||||||
| @@ -692,12 +698,11 @@ impl Validator { | |||||||
|             }, |             }, | ||||||
|             blockstore.clone(), |             blockstore.clone(), | ||||||
|             ledger_signal_receiver, |             ledger_signal_receiver, | ||||||
|             &subscriptions, |             &rpc_subscriptions, | ||||||
|             &poh_recorder, |             &poh_recorder, | ||||||
|             tower, |             tower, | ||||||
|             &leader_schedule_cache, |             &leader_schedule_cache, | ||||||
|             &exit, |             &exit, | ||||||
|             completed_slots_receiver, |  | ||||||
|             block_commitment_cache, |             block_commitment_cache, | ||||||
|             config.enable_partition.clone(), |             config.enable_partition.clone(), | ||||||
|             transaction_status_sender.clone(), |             transaction_status_sender.clone(), | ||||||
| @@ -740,7 +745,7 @@ impl Validator { | |||||||
|             node.sockets.tpu, |             node.sockets.tpu, | ||||||
|             node.sockets.tpu_forwards, |             node.sockets.tpu_forwards, | ||||||
|             node.sockets.broadcast, |             node.sockets.broadcast, | ||||||
|             &subscriptions, |             &rpc_subscriptions, | ||||||
|             transaction_status_sender, |             transaction_status_sender, | ||||||
|             &blockstore, |             &blockstore, | ||||||
|             &config.broadcast_stage_type, |             &config.broadcast_stage_type, | ||||||
| @@ -765,6 +770,7 @@ impl Validator { | |||||||
|             serve_repair_service, |             serve_repair_service, | ||||||
|             json_rpc_service, |             json_rpc_service, | ||||||
|             pubsub_service, |             pubsub_service, | ||||||
|  |             rpc_completed_slots_service, | ||||||
|             optimistically_confirmed_bank_tracker, |             optimistically_confirmed_bank_tracker, | ||||||
|             transaction_status_service, |             transaction_status_service, | ||||||
|             rewards_recorder_service, |             rewards_recorder_service, | ||||||
| @@ -828,6 +834,10 @@ impl Validator { | |||||||
|             pubsub_service.join().expect("pubsub_service"); |             pubsub_service.join().expect("pubsub_service"); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         self.rpc_completed_slots_service | ||||||
|  |             .join() | ||||||
|  |             .expect("rpc_completed_slots_service"); | ||||||
|  |  | ||||||
|         if let Some(optimistically_confirmed_bank_tracker) = |         if let Some(optimistically_confirmed_bank_tracker) = | ||||||
|             self.optimistically_confirmed_bank_tracker |             self.optimistically_confirmed_bank_tracker | ||||||
|         { |         { | ||||||
|   | |||||||
| @@ -13,10 +13,8 @@ pub struct RpcCompletedSlotsService; | |||||||
| impl RpcCompletedSlotsService { | impl RpcCompletedSlotsService { | ||||||
|     pub fn spawn( |     pub fn spawn( | ||||||
|         completed_slots_receiver: CompletedSlotsReceiver, |         completed_slots_receiver: CompletedSlotsReceiver, | ||||||
|         rpc_subscriptions: Option<Arc<RpcSubscriptions>>, |         rpc_subscriptions: Arc<RpcSubscriptions>, | ||||||
|     ) -> Option<JoinHandle<()>> { |     ) -> JoinHandle<()> { | ||||||
|         let rpc_subscriptions = rpc_subscriptions?; |  | ||||||
|         Some( |  | ||||||
|         Builder::new() |         Builder::new() | ||||||
|             .name("solana-rpc-completed-slots-service".to_string()) |             .name("solana-rpc-completed-slots-service".to_string()) | ||||||
|             .spawn(move || { |             .spawn(move || { | ||||||
| @@ -29,7 +27,6 @@ impl RpcCompletedSlotsService { | |||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             }) |             }) | ||||||
|                 .unwrap(), |             .unwrap() | ||||||
|         ) |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user