Fix too many args in Tvu::new (#2114)
* Reduce args in Tvu::new under to 8 Now pass in sockets through a the crate::tvu::Sockets struct Move ClusterInfo.keypair to pub(crate) in order to remove redundant signing keypair parameter * remove commented code
This commit is contained in:
parent
3408ce89a7
commit
b1b190b80d
|
@ -63,7 +63,7 @@ pub struct ClusterInfo {
|
||||||
/// The network
|
/// The network
|
||||||
pub gossip: CrdsGossip,
|
pub gossip: CrdsGossip,
|
||||||
/// set the keypair that will be used to sign crds values generated. It is unset only in tests.
|
/// set the keypair that will be used to sign crds values generated. It is unset only in tests.
|
||||||
keypair: Arc<Keypair>,
|
pub(crate) keypair: Arc<Keypair>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize)]
|
#[derive(Debug, Deserialize, Serialize)]
|
||||||
|
|
|
@ -13,7 +13,7 @@ use crate::rpc_pubsub::PubSubService;
|
||||||
use crate::service::Service;
|
use crate::service::Service;
|
||||||
use crate::tpu::{Tpu, TpuReturnType};
|
use crate::tpu::{Tpu, TpuReturnType};
|
||||||
use crate::tpu_forwarder::TpuForwarder;
|
use crate::tpu_forwarder::TpuForwarder;
|
||||||
use crate::tvu::{Tvu, TvuReturnType};
|
use crate::tvu::{Sockets, Tvu, TvuReturnType};
|
||||||
use crate::window::{new_window, SharedWindow};
|
use crate::window::{new_window, SharedWindow};
|
||||||
use log::Level;
|
use log::Level;
|
||||||
use solana_sdk::hash::Hash;
|
use solana_sdk::hash::Hash;
|
||||||
|
@ -271,26 +271,33 @@ impl Fullnode {
|
||||||
|
|
||||||
let node_role = if scheduled_leader != keypair.pubkey() {
|
let node_role = if scheduled_leader != keypair.pubkey() {
|
||||||
// Start in validator mode.
|
// Start in validator mode.
|
||||||
|
let sockets = Sockets {
|
||||||
|
repair: node
|
||||||
|
.sockets
|
||||||
|
.repair
|
||||||
|
.try_clone()
|
||||||
|
.expect("Failed to clone repair socket"),
|
||||||
|
retransmit: node
|
||||||
|
.sockets
|
||||||
|
.retransmit
|
||||||
|
.try_clone()
|
||||||
|
.expect("Failed to clone retransmit socket"),
|
||||||
|
fetch: node
|
||||||
|
.sockets
|
||||||
|
.tvu
|
||||||
|
.iter()
|
||||||
|
.map(|s| s.try_clone().expect("Failed to clone TVU Sockets"))
|
||||||
|
.collect(),
|
||||||
|
};
|
||||||
|
|
||||||
let tvu = Tvu::new(
|
let tvu = Tvu::new(
|
||||||
keypair.clone(),
|
// keypair.clone(),
|
||||||
vote_account_keypair.clone(),
|
vote_account_keypair.clone(),
|
||||||
&bank,
|
&bank,
|
||||||
entry_height,
|
entry_height,
|
||||||
*last_entry_id,
|
*last_entry_id,
|
||||||
cluster_info.clone(),
|
cluster_info.clone(),
|
||||||
node.sockets
|
sockets,
|
||||||
.tvu
|
|
||||||
.iter()
|
|
||||||
.map(|s| s.try_clone().expect("Failed to clone TVU sockets"))
|
|
||||||
.collect(),
|
|
||||||
node.sockets
|
|
||||||
.repair
|
|
||||||
.try_clone()
|
|
||||||
.expect("Failed to clone repair socket"),
|
|
||||||
node.sockets
|
|
||||||
.retransmit
|
|
||||||
.try_clone()
|
|
||||||
.expect("Failed to clone retransmit socket"),
|
|
||||||
Some(ledger_path),
|
Some(ledger_path),
|
||||||
db_ledger.clone(),
|
db_ledger.clone(),
|
||||||
);
|
);
|
||||||
|
@ -432,23 +439,29 @@ impl Fullnode {
|
||||||
self.validator_to_leader(tick_height, entry_height, last_entry_id);
|
self.validator_to_leader(tick_height, entry_height, last_entry_id);
|
||||||
Ok(())
|
Ok(())
|
||||||
} else {
|
} else {
|
||||||
|
let sockets = Sockets {
|
||||||
|
repair: self
|
||||||
|
.repair_socket
|
||||||
|
.try_clone()
|
||||||
|
.expect("Failed to clone repair socket"),
|
||||||
|
retransmit: self
|
||||||
|
.retransmit_socket
|
||||||
|
.try_clone()
|
||||||
|
.expect("Failed to clone retransmit socket"),
|
||||||
|
fetch: self
|
||||||
|
.tvu_sockets
|
||||||
|
.iter()
|
||||||
|
.map(|s| s.try_clone().expect("Failed to clone TVU Sockets"))
|
||||||
|
.collect(),
|
||||||
|
};
|
||||||
|
|
||||||
let tvu = Tvu::new(
|
let tvu = Tvu::new(
|
||||||
self.keypair.clone(),
|
|
||||||
self.vote_account_keypair.clone(),
|
self.vote_account_keypair.clone(),
|
||||||
&self.bank,
|
&self.bank,
|
||||||
entry_height,
|
entry_height,
|
||||||
last_entry_id,
|
last_entry_id,
|
||||||
self.cluster_info.clone(),
|
self.cluster_info.clone(),
|
||||||
self.tvu_sockets
|
sockets,
|
||||||
.iter()
|
|
||||||
.map(|s| s.try_clone().expect("Failed to clone TVU sockets"))
|
|
||||||
.collect(),
|
|
||||||
self.repair_socket
|
|
||||||
.try_clone()
|
|
||||||
.expect("Failed to clone repair socket"),
|
|
||||||
self.retransmit_socket
|
|
||||||
.try_clone()
|
|
||||||
.expect("Failed to clone retransmit socket"),
|
|
||||||
Some(&self.ledger_path),
|
Some(&self.ledger_path),
|
||||||
self.db_ledger.clone(),
|
self.db_ledger.clone(),
|
||||||
);
|
);
|
||||||
|
|
46
src/tvu.rs
46
src/tvu.rs
|
@ -44,35 +44,46 @@ pub struct Tvu {
|
||||||
exit: Arc<AtomicBool>,
|
exit: Arc<AtomicBool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct Sockets {
|
||||||
|
pub fetch: Vec<UdpSocket>,
|
||||||
|
pub repair: UdpSocket,
|
||||||
|
pub retransmit: UdpSocket,
|
||||||
|
}
|
||||||
|
|
||||||
impl Tvu {
|
impl Tvu {
|
||||||
/// This service receives messages from a leader in the network and processes the transactions
|
/// This service receives messages from a leader in the network and processes the transactions
|
||||||
/// on the bank state.
|
/// on the bank state.
|
||||||
/// # Arguments
|
/// # Arguments
|
||||||
/// * `bank` - The bank state.
|
|
||||||
/// * `keypair` - Node's key pair for signing
|
|
||||||
/// * `vote_account_keypair` - Vote key pair
|
/// * `vote_account_keypair` - Vote key pair
|
||||||
|
/// * `bank` - The bank state.
|
||||||
/// * `entry_height` - Initial ledger height
|
/// * `entry_height` - Initial ledger height
|
||||||
|
/// * `last_entry_id` - Hash of the last entry
|
||||||
/// * `cluster_info` - The cluster_info state.
|
/// * `cluster_info` - The cluster_info state.
|
||||||
/// * `window` - The window state.
|
/// * `sockets` - My fetch, repair, and restransmit sockets
|
||||||
/// * `fetch_sockets` - my fetch sockets
|
|
||||||
/// * `repair_socket` - my repair socket
|
|
||||||
/// * `retransmit_socket` - my retransmit socket
|
|
||||||
/// * `ledger_path` - path to the ledger file
|
/// * `ledger_path` - path to the ledger file
|
||||||
#[allow(clippy::too_many_arguments)]
|
/// * `db_ledger` - the ledger itself
|
||||||
pub fn new(
|
pub fn new(
|
||||||
keypair: Arc<Keypair>,
|
|
||||||
vote_account_keypair: Arc<Keypair>,
|
vote_account_keypair: Arc<Keypair>,
|
||||||
bank: &Arc<Bank>,
|
bank: &Arc<Bank>,
|
||||||
entry_height: u64,
|
entry_height: u64,
|
||||||
last_entry_id: Hash,
|
last_entry_id: Hash,
|
||||||
cluster_info: Arc<RwLock<ClusterInfo>>,
|
cluster_info: Arc<RwLock<ClusterInfo>>,
|
||||||
fetch_sockets: Vec<UdpSocket>,
|
sockets: Sockets,
|
||||||
repair_socket: UdpSocket,
|
|
||||||
retransmit_socket: UdpSocket,
|
|
||||||
ledger_path: Option<&str>,
|
ledger_path: Option<&str>,
|
||||||
db_ledger: Arc<RwLock<DbLedger>>,
|
db_ledger: Arc<RwLock<DbLedger>>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let exit = Arc::new(AtomicBool::new(false));
|
let exit = Arc::new(AtomicBool::new(false));
|
||||||
|
let keypair: Arc<Keypair> = cluster_info
|
||||||
|
.read()
|
||||||
|
.expect("Unable to read from cluster_info during Tvu creation")
|
||||||
|
.keypair
|
||||||
|
.clone();
|
||||||
|
|
||||||
|
let Sockets {
|
||||||
|
repair: repair_socket,
|
||||||
|
fetch: fetch_sockets,
|
||||||
|
retransmit: retransmit_socket,
|
||||||
|
} = sockets;
|
||||||
|
|
||||||
let repair_socket = Arc::new(repair_socket);
|
let repair_socket = Arc::new(repair_socket);
|
||||||
let mut blob_sockets: Vec<Arc<UdpSocket>> =
|
let mut blob_sockets: Vec<Arc<UdpSocket>> =
|
||||||
|
@ -179,7 +190,7 @@ pub mod tests {
|
||||||
use crate::packet::SharedBlob;
|
use crate::packet::SharedBlob;
|
||||||
use crate::service::Service;
|
use crate::service::Service;
|
||||||
use crate::streamer;
|
use crate::streamer;
|
||||||
use crate::tvu::Tvu;
|
use crate::tvu::{Sockets, Tvu};
|
||||||
use crate::window::{self, SharedWindow};
|
use crate::window::{self, SharedWindow};
|
||||||
use bincode::serialize;
|
use bincode::serialize;
|
||||||
use rocksdb::{Options, DB};
|
use rocksdb::{Options, DB};
|
||||||
|
@ -270,15 +281,18 @@ pub mod tests {
|
||||||
let db_ledger =
|
let db_ledger =
|
||||||
DbLedger::open(&db_ledger_path).expect("Expected to successfully open ledger");
|
DbLedger::open(&db_ledger_path).expect("Expected to successfully open ledger");
|
||||||
let tvu = Tvu::new(
|
let tvu = Tvu::new(
|
||||||
Arc::new(target1_keypair),
|
|
||||||
vote_account_keypair,
|
vote_account_keypair,
|
||||||
&bank,
|
&bank,
|
||||||
0,
|
0,
|
||||||
cur_hash,
|
cur_hash,
|
||||||
cref1,
|
cref1,
|
||||||
target1.sockets.tvu,
|
{
|
||||||
target1.sockets.repair,
|
Sockets {
|
||||||
target1.sockets.retransmit,
|
repair: target1.sockets.repair,
|
||||||
|
retransmit: target1.sockets.retransmit,
|
||||||
|
fetch: target1.sockets.tvu,
|
||||||
|
}
|
||||||
|
},
|
||||||
None,
|
None,
|
||||||
Arc::new(RwLock::new(db_ledger)),
|
Arc::new(RwLock::new(db_ledger)),
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue