diff --git a/src/drone.rs b/src/drone.rs index e3b8477089..5fa7ccdb18 100644 --- a/src/drone.rs +++ b/src/drone.rs @@ -285,14 +285,15 @@ mod tests { let leader_data = leader.data.clone(); let ledger_path = tmp_ledger_path("send_airdrop"); - let server = Fullnode::new_leader( + let server = Fullnode::new_with_bank( leader_keypair, bank, 0, &[], leader, + None, exit.clone(), - &ledger_path, + Some(&ledger_path), false, ); //TODO: this seems unstable diff --git a/src/fullnode.rs b/src/fullnode.rs index abe7b2f3dc..3a04765213 100644 --- a/src/fullnode.rs +++ b/src/fullnode.rs @@ -77,70 +77,79 @@ impl Fullnode { local_gossip_addr, node.data.contact_info.ncp ); let exit = Arc::new(AtomicBool::new(false)); - Self::new_with_bank( + let local_requests_addr = node.sockets.requests.local_addr().unwrap(); + let requests_addr = node.data.contact_info.rpu; + let leader_info = leader_addr.map(|x| NodeInfo::new_entry_point(x)); + let server = Self::new_with_bank( keypair, bank, entry_height, &ledger_tail, node, + leader_info, exit, - ledger_path, + Some(ledger_path), sigverify_disabled, - leader_addr, - ) + ); + + match leader_addr { + Some(leader_addr) => { + info!( + "validator ready... local request address: {} (advertising {}) connected to: {}", + local_requests_addr, requests_addr, leader_addr + ); + } + None => { + info!( + "leader ready... local request address: {} (advertising {})", + local_requests_addr, requests_addr + ); + } + } + + server } - fn new_with_bank( + pub fn new_with_bank( keypair: Keypair, bank: Bank, entry_height: u64, ledger_tail: &[Entry], mut node: TestNode, + leader_info: Option, exit: Arc, - ledger_path: &str, + ledger_path: Option<&str>, sigverify_disabled: bool, - leader_addr: Option, ) -> Self { - let local_requests_addr = node.sockets.requests.local_addr().unwrap(); - let requests_addr = node.data.contact_info.rpu; - match leader_addr { - Some(leader_addr) => { - let network_entry_point = NodeInfo::new_entry_point(leader_addr); - let server = Self::new_validator( - keypair, - bank, - entry_height, - &ledger_tail, - node, - &network_entry_point, - exit.clone(), - Some(ledger_path), - sigverify_disabled, - ); - info!( - "validator ready... local request address: {} (advertising {}) connected to: {}", - local_requests_addr, requests_addr, leader_addr - ); - server - } - None => { - node.data.leader_id = node.data.id; - - let server = Self::new_leader( + match leader_info { + Some(leader_info) => { + // Start in validator mode. + Self::new_validator( keypair, bank, entry_height, &ledger_tail, node, + &leader_info, exit.clone(), ledger_path, sigverify_disabled, - ); - info!( - "leader ready... local request address: {} (advertising {})", - local_requests_addr, requests_addr - ); - server + ) + } + None => { + // Start in leader mode. + node.data.leader_id = node.data.id; + + Self::new_leader( + keypair, + bank, + entry_height, + &ledger_tail, + node, + exit.clone(), + ledger_path.expect("ledger path"), + sigverify_disabled, + ) } } } @@ -193,7 +202,7 @@ impl Fullnode { /// | | `------------` /// `---------------------` /// ``` - pub fn new_leader( + fn new_leader( keypair: Keypair, bank: Bank, entry_height: u64, @@ -299,7 +308,7 @@ impl Fullnode { /// `--------` | | `------------` /// `-------------------------------` /// ``` - pub fn new_validator( + fn new_validator( keypair: Keypair, bank: Bank, entry_height: u64, @@ -409,7 +418,7 @@ mod tests { let bank = Bank::new(&alice); let exit = Arc::new(AtomicBool::new(false)); let entry = tn.data.clone(); - let v = Fullnode::new_validator(keypair, bank, 0, &[], tn, &entry, exit, None, false); + let v = Fullnode::new_with_bank(keypair, bank, 0, &[], tn, Some(entry), exit, None, false); v.exit(); v.join().unwrap(); } @@ -423,7 +432,7 @@ mod tests { let bank = Bank::new(&alice); let exit = Arc::new(AtomicBool::new(false)); let entry = tn.data.clone(); - Fullnode::new_validator(keypair, bank, 0, &[], tn, &entry, exit, None, false) + Fullnode::new_with_bank(keypair, bank, 0, &[], tn, Some(entry), exit, None, false) }) .collect(); //each validator can exit in parallel to speed many sequential calls to `join` diff --git a/src/thin_client.rs b/src/thin_client.rs index 646666ab86..6cf2e24948 100755 --- a/src/thin_client.rs +++ b/src/thin_client.rs @@ -400,14 +400,15 @@ mod tests { let exit = Arc::new(AtomicBool::new(false)); let ledger_path = tmp_ledger("thin_client", &alice); - let server = Fullnode::new_leader( + let server = Fullnode::new_with_bank( leader_keypair, bank, 0, &[], leader, + None, exit.clone(), - &ledger_path, + Some(&ledger_path), false, ); sleep(Duration::from_millis(900)); @@ -447,14 +448,15 @@ mod tests { let leader_data = leader.data.clone(); let ledger_path = tmp_ledger("bad_sig", &alice); - let server = Fullnode::new_leader( + let server = Fullnode::new_with_bank( leader_keypair, bank, 0, &[], leader, + None, exit.clone(), - &ledger_path, + Some(&ledger_path), false, ); //TODO: remove this sleep, or add a retry so CI is stable @@ -506,14 +508,15 @@ mod tests { let leader_data = leader.data.clone(); let ledger_path = tmp_ledger("client_check_signature", &alice); - let server = Fullnode::new_leader( + let server = Fullnode::new_with_bank( leader_keypair, bank, 0, &[], leader, + None, exit.clone(), - &ledger_path, + Some(&ledger_path), false, ); sleep(Duration::from_millis(300));