2018-05-14 17:36:19 -06:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								//! The `tpu` module implements the Transaction Processing Unit, a
							 | 
						
					
						
							
								
									
										
										
										
											2019-01-08 09:21:39 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								//! multi-stage transaction processing pipeline in software.
							 | 
						
					
						
							
								
									
										
										
										
											2018-05-14 17:36:19 -06:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2019-11-20 16:43:10 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								use crate::{
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    banking_stage::BankingStage,
							 | 
						
					
						
							
								
									
										
										
										
											2020-03-19 23:35:01 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    broadcast_stage::{BroadcastStage, BroadcastStageType, RetransmitSlotsReceiver},
							 | 
						
					
						
							
								
									
										
										
										
											2019-11-20 16:43:10 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    cluster_info::ClusterInfo,
							 | 
						
					
						
							
								
									
										
										
										
											2020-07-09 23:52:54 -06:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    cluster_info_vote_listener::{ClusterInfoVoteListener, VerifiedVoteSender, VoteTracker},
							 | 
						
					
						
							
								
									
										
										
										
											2019-11-20 16:43:10 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    fetch_stage::FetchStage,
							 | 
						
					
						
							
								
									
										
										
										
											2020-09-28 20:43:05 -06:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    optimistically_confirmed_bank_tracker::BankNotificationSender,
							 | 
						
					
						
							
								
									
										
										
										
											2019-11-20 16:43:10 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    poh_recorder::{PohRecorder, WorkingBankEntry},
							 | 
						
					
						
							
								
									
										
										
										
											2020-05-17 22:01:08 +01:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    rpc_subscriptions::RpcSubscriptions,
							 | 
						
					
						
							
								
									
										
										
										
											2019-11-20 16:43:10 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    sigverify::TransactionSigVerifier,
							 | 
						
					
						
							
								
									
										
										
										
											2020-05-08 10:00:23 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    sigverify_stage::SigVerifyStage,
							 | 
						
					
						
							
								
									
										
										
										
											2019-11-20 16:43:10 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								};
							 | 
						
					
						
							
								
									
										
										
										
											2019-06-26 18:42:27 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								use crossbeam_channel::unbounded;
							 | 
						
					
						
							
								
									
										
										
										
											2020-08-07 11:21:35 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								use solana_ledger::{blockstore::Blockstore, blockstore_processor::TransactionStatusSender};
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								use solana_runtime::{
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    bank_forks::BankForks,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    vote_sender_types::{ReplayVoteReceiver, ReplayVoteSender},
							 | 
						
					
						
							
								
									
										
										
										
											2020-07-29 23:17:40 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								};
							 | 
						
					
						
							
								
									
										
										
										
											2019-11-20 16:43:10 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								use std::{
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    net::UdpSocket,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    sync::{
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        atomic::AtomicBool,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        mpsc::{channel, Receiver},
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        Arc, Mutex, RwLock,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    },
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    thread,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								};
							 | 
						
					
						
							
								
									
										
										
										
											2018-09-14 00:17:40 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2021-02-27 01:55:13 +00:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								pub const DEFAULT_TPU_COALESCE_MS: u64 = 5;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2019-03-04 20:08:21 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								pub struct Tpu {
							 | 
						
					
						
							
								
									
										
										
										
											2019-02-16 18:03:55 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    fetch_stage: FetchStage,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    sigverify_stage: SigVerifyStage,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    banking_stage: BankingStage,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    cluster_info_vote_listener: ClusterInfoVoteListener,
							 | 
						
					
						
							
								
									
										
										
										
											2019-03-01 20:43:30 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    broadcast_stage: BroadcastStage,
							 | 
						
					
						
							
								
									
										
										
										
											2019-01-26 13:58:08 +05:30
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								}
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2018-05-14 17:36:19 -06:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								impl Tpu {
							 | 
						
					
						
							
								
									
										
										
										
											2019-03-09 02:47:41 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    #[allow(clippy::too_many_arguments)]
							 | 
						
					
						
							
								
									
										
										
										
											2019-03-03 16:44:06 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    pub fn new(
							 | 
						
					
						
							
								
									
										
										
										
											2020-04-21 12:54:45 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        cluster_info: &Arc<ClusterInfo>,
							 | 
						
					
						
							
								
									
										
										
										
											2019-02-26 10:48:18 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        poh_recorder: &Arc<Mutex<PohRecorder>>,
							 | 
						
					
						
							
								
									
										
										
										
											2019-09-18 12:16:22 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        entry_receiver: Receiver<WorkingBankEntry>,
							 | 
						
					
						
							
								
									
										
										
										
											2020-03-19 23:35:01 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        retransmit_slots_receiver: RetransmitSlotsReceiver,
							 | 
						
					
						
							
								
									
										
										
										
											2019-01-26 13:58:08 +05:30
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        transactions_sockets: Vec<UdpSocket>,
							 | 
						
					
						
							
								
									
										
										
										
											2019-07-30 14:50:02 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        tpu_forwards_sockets: Vec<UdpSocket>,
							 | 
						
					
						
							
								
									
										
										
										
											2019-12-16 17:11:18 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        broadcast_sockets: Vec<UdpSocket>,
							 | 
						
					
						
							
								
									
										
										
										
											2020-05-17 22:01:08 +01:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        subscriptions: &Arc<RpcSubscriptions>,
							 | 
						
					
						
							
								
									
										
										
										
											2019-11-20 16:43:10 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        transaction_status_sender: Option<TransactionStatusSender>,
							 | 
						
					
						
							
								
									
										
										
										
											2020-01-13 14:13:52 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        blockstore: &Arc<Blockstore>,
							 | 
						
					
						
							
								
									
										
										
										
											2019-06-19 00:13:19 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        broadcast_type: &BroadcastStageType,
							 | 
						
					
						
							
								
									
										
										
										
											2019-03-04 16:33:14 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        exit: &Arc<AtomicBool>,
							 | 
						
					
						
							
								
									
										
										
										
											2019-11-18 18:05:02 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        shred_version: u16,
							 | 
						
					
						
							
								
									
										
										
										
											2020-03-09 22:03:09 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        vote_tracker: Arc<VoteTracker>,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        bank_forks: Arc<RwLock<BankForks>>,
							 | 
						
					
						
							
								
									
										
										
										
											2020-07-09 23:52:54 -06:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        verified_vote_sender: VerifiedVoteSender,
							 | 
						
					
						
							
								
									
										
										
										
											2020-08-07 11:21:35 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        replay_vote_receiver: ReplayVoteReceiver,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        replay_vote_sender: ReplayVoteSender,
							 | 
						
					
						
							
								
									
										
										
										
											2020-09-28 20:43:05 -06:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        bank_notification_sender: Option<BankNotificationSender>,
							 | 
						
					
						
							
								
									
										
										
										
											2021-02-27 01:55:13 +00:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        tpu_coalesce_ms: u64,
							 | 
						
					
						
							
								
									
										
										
										
											2019-03-03 16:44:06 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    ) -> Self {
							 | 
						
					
						
							
								
									
										
										
										
											2019-02-01 05:21:29 +05:30
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        let (packet_sender, packet_receiver) = channel();
							 | 
						
					
						
							
								
									
										
										
										
											2019-03-08 14:59:11 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        let fetch_stage = FetchStage::new_with_sender(
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            transactions_sockets,
							 | 
						
					
						
							
								
									
										
										
										
											2019-07-30 14:50:02 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            tpu_forwards_sockets,
							 | 
						
					
						
							
								
									
										
										
										
											2019-03-08 14:59:11 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            &exit,
							 | 
						
					
						
							
								
									
										
										
										
											2019-04-09 12:57:12 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            &packet_sender,
							 | 
						
					
						
							
								
									
										
										
										
											2019-04-22 19:49:32 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            &poh_recorder,
							 | 
						
					
						
							
								
									
										
										
										
											2021-02-27 00:34:56 +00:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            // At 1024 packets per `Packet`, each packet about MTU size ~1k, this is roughly
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            // 20GB
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            Some(20_000),
							 | 
						
					
						
							
								
									
										
										
										
											2021-02-27 01:55:13 +00:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            tpu_coalesce_ms,
							 | 
						
					
						
							
								
									
										
										
										
											2019-03-08 14:59:11 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        );
							 | 
						
					
						
							
								
									
										
										
										
											2019-06-26 18:42:27 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        let (verified_sender, verified_receiver) = unbounded();
							 | 
						
					
						
							
								
									
										
										
										
											2018-05-14 17:36:19 -06:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2020-05-08 10:00:23 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        let sigverify_stage = {
							 | 
						
					
						
							
								
									
										
										
										
											2019-10-28 16:07:51 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            let verifier = TransactionSigVerifier::default();
							 | 
						
					
						
							
								
									
										
										
										
											2019-12-19 23:27:54 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            SigVerifyStage::new(packet_receiver, verified_sender, verifier)
							 | 
						
					
						
							
								
									
										
										
										
											2019-10-28 16:07:51 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        };
							 | 
						
					
						
							
								
									
										
										
										
											2019-04-09 12:57:12 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2020-07-09 23:52:54 -06:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        let (verified_vote_packets_sender, verified_vote_packets_receiver) = unbounded();
							 | 
						
					
						
							
								
									
										
										
										
											2019-04-09 12:57:12 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        let cluster_info_vote_listener = ClusterInfoVoteListener::new(
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            &exit,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            cluster_info.clone(),
							 | 
						
					
						
							
								
									
										
										
										
											2020-07-09 23:52:54 -06:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            verified_vote_packets_sender,
							 | 
						
					
						
							
								
									
										
										
										
											2019-04-09 22:06:32 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            &poh_recorder,
							 | 
						
					
						
							
								
									
										
										
										
											2020-03-09 22:03:09 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            vote_tracker,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            bank_forks,
							 | 
						
					
						
							
								
									
										
										
										
											2020-05-17 22:01:08 +01:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            subscriptions.clone(),
							 | 
						
					
						
							
								
									
										
										
										
											2020-07-09 23:52:54 -06:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            verified_vote_sender,
							 | 
						
					
						
							
								
									
										
										
										
											2020-08-07 11:21:35 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            replay_vote_receiver,
							 | 
						
					
						
							
								
									
										
										
										
											2020-07-28 02:33:27 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            blockstore.clone(),
							 | 
						
					
						
							
								
									
										
										
										
											2020-09-28 20:43:05 -06:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            bank_notification_sender,
							 | 
						
					
						
							
								
									
										
										
										
											2019-04-09 12:57:12 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        );
							 | 
						
					
						
							
								
									
										
										
										
											2018-05-14 17:36:19 -06:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2019-04-17 21:07:45 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        let banking_stage = BankingStage::new(
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            &cluster_info,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            poh_recorder,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            verified_receiver,
							 | 
						
					
						
							
								
									
										
										
										
											2020-07-09 23:52:54 -06:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            verified_vote_packets_receiver,
							 | 
						
					
						
							
								
									
										
										
										
											2019-11-20 16:43:10 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            transaction_status_sender,
							 | 
						
					
						
							
								
									
										
										
										
											2020-08-07 11:21:35 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            replay_vote_sender,
							 | 
						
					
						
							
								
									
										
										
										
											2019-04-17 21:07:45 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        );
							 | 
						
					
						
							
								
									
										
										
										
											2019-01-26 13:58:08 +05:30
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2019-06-19 00:13:19 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        let broadcast_stage = broadcast_type.new_broadcast_stage(
							 | 
						
					
						
							
								
									
										
										
										
											2019-12-16 17:11:18 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            broadcast_sockets,
							 | 
						
					
						
							
								
									
										
										
										
											2019-03-03 16:44:06 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            cluster_info.clone(),
							 | 
						
					
						
							
								
									
										
										
										
											2019-01-26 13:58:08 +05:30
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            entry_receiver,
							 | 
						
					
						
							
								
									
										
										
										
											2020-03-19 23:35:01 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            retransmit_slots_receiver,
							 | 
						
					
						
							
								
									
										
										
										
											2019-03-04 19:53:50 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            &exit,
							 | 
						
					
						
							
								
									
										
										
										
											2020-01-13 14:13:52 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            blockstore,
							 | 
						
					
						
							
								
									
										
										
										
											2019-11-18 18:05:02 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            shred_version,
							 | 
						
					
						
							
								
									
										
										
										
											2018-10-18 22:57:48 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        );
							 | 
						
					
						
							
								
									
										
										
										
											2018-05-14 17:36:19 -06:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2019-03-04 20:08:21 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        Self {
							 | 
						
					
						
							
								
									
										
										
										
											2018-07-03 22:14:08 -06:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            fetch_stage,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            sigverify_stage,
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            banking_stage,
							 | 
						
					
						
							
								
									
										
										
										
											2019-02-01 05:21:29 +05:30
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            cluster_info_vote_listener,
							 | 
						
					
						
							
								
									
										
										
										
											2019-03-01 20:43:30 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								            broadcast_stage,
							 | 
						
					
						
							
								
									
										
										
										
											2019-03-03 16:44:06 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        }
							 | 
						
					
						
							
								
									
										
										
										
											2019-01-26 13:58:08 +05:30
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    }
							 | 
						
					
						
							
								
									
										
										
										
											2018-07-03 22:14:08 -06:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2019-11-13 11:12:09 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    pub fn join(self) -> thread::Result<()> {
							 | 
						
					
						
							
								
									
										
										
										
											2021-01-24 04:42:09 +00:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        let results = vec![
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            self.fetch_stage.join(),
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            self.sigverify_stage.join(),
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            self.cluster_info_vote_listener.join(),
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            self.banking_stage.join(),
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        ];
							 | 
						
					
						
							
								
									
										
										
										
											2019-03-04 20:08:21 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        let broadcast_result = self.broadcast_stage.join();
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        for result in results {
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            result?;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        }
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        let _ = broadcast_result?;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        Ok(())
							 | 
						
					
						
							
								
									
										
										
										
											2018-05-14 17:36:19 -06:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    }
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								}
							 |