Remove poll_gossip_for_leader()
This commit is contained in:
parent
12f3fd75e8
commit
e18673953c
|
@ -52,7 +52,7 @@ impl GossipService {
|
|||
pub fn discover(
|
||||
entry_point_info: &NodeInfo,
|
||||
num_nodes: usize,
|
||||
) -> Result<(Option<NodeInfo>, Vec<NodeInfo>), &'static str> {
|
||||
) -> std::io::Result<(Option<NodeInfo>, Vec<NodeInfo>)> {
|
||||
let exit = Arc::new(AtomicBool::new(false));
|
||||
let (gossip_service, spy_ref) = make_spy_node(entry_point_info, &exit);
|
||||
let id = spy_ref.read().unwrap().keypair.pubkey();
|
||||
|
@ -97,10 +97,13 @@ pub fn discover(
|
|||
"discover failed...\n{}",
|
||||
spy_ref.read().unwrap().node_info_trace()
|
||||
);
|
||||
Err("Failed to converge")
|
||||
Err(std::io::Error::new(
|
||||
std::io::ErrorKind::Other,
|
||||
"Failed to converge",
|
||||
))
|
||||
}
|
||||
|
||||
pub fn make_spy_node(
|
||||
fn make_spy_node(
|
||||
entry_point: &NodeInfo,
|
||||
exit: &Arc<AtomicBool>,
|
||||
) -> (GossipService, Arc<RwLock<ClusterInfo>>) {
|
||||
|
|
|
@ -11,7 +11,7 @@ use crate::rpc_request::{RpcClient, RpcRequest, RpcRequestHandler};
|
|||
use crate::service::Service;
|
||||
use crate::storage_stage::{get_segment_from_entry, ENTRIES_PER_SEGMENT};
|
||||
use crate::streamer::BlobReceiver;
|
||||
use crate::thin_client::{poll_gossip_for_leader, retry_get_balance, ThinClient};
|
||||
use crate::thin_client::{retry_get_balance, ThinClient};
|
||||
use crate::window_service::WindowService;
|
||||
use rand::thread_rng;
|
||||
use rand::Rng;
|
||||
|
@ -111,7 +111,7 @@ impl Replicator {
|
|||
node: Node,
|
||||
leader_info: &NodeInfo,
|
||||
keypair: &Arc<Keypair>,
|
||||
timeout: Option<Duration>,
|
||||
_timeout: Option<Duration>,
|
||||
) -> Result<Self> {
|
||||
let exit = Arc::new(AtomicBool::new(false));
|
||||
|
||||
|
@ -148,13 +148,8 @@ impl Replicator {
|
|||
&exit,
|
||||
);
|
||||
|
||||
info!("polling for leader");
|
||||
|
||||
let leader = poll_gossip_for_leader(
|
||||
leader_info.gossip,
|
||||
timeout.unwrap_or_else(|| Duration::new(30, 0)),
|
||||
)?;
|
||||
info!("Got leader: {:?}", leader);
|
||||
info!("Looking for leader at {:?}", leader_info);
|
||||
crate::gossip_service::discover(&leader_info, 1)?;
|
||||
|
||||
let (storage_blockhash, storage_entry_height) =
|
||||
Self::poll_for_blockhash_and_entry_height(&cluster_info)?;
|
||||
|
@ -210,7 +205,7 @@ impl Replicator {
|
|||
cluster_info_w.insert_info(node_info);
|
||||
}
|
||||
|
||||
let mut client = mk_client(&leader);
|
||||
let mut client = mk_client(leader_info);
|
||||
|
||||
Self::get_airdrop_lamports(&mut client, &keypair, &leader_info);
|
||||
info!("Done downloading ledger at {}", ledger_path);
|
||||
|
|
|
@ -3,13 +3,10 @@
|
|||
//! messages to the network directly. The binary encoding of its messages are
|
||||
//! unstable and may change in future releases.
|
||||
|
||||
use crate::cluster_info::{ClusterInfoError, NodeInfo};
|
||||
use crate::cluster_info::NodeInfo;
|
||||
use crate::fullnode::{Fullnode, FullnodeConfig};
|
||||
use crate::gossip_service::make_spy_node;
|
||||
use crate::packet::PACKET_DATA_SIZE;
|
||||
use crate::result::{Error, Result};
|
||||
use crate::rpc_request::{RpcClient, RpcRequest, RpcRequestHandler};
|
||||
use crate::service::Service;
|
||||
use bincode::serialize_into;
|
||||
use bs58;
|
||||
use serde_json;
|
||||
|
@ -25,7 +22,6 @@ use solana_sdk::transaction::Transaction;
|
|||
use std;
|
||||
use std::io;
|
||||
use std::net::{SocketAddr, UdpSocket};
|
||||
use std::sync::atomic::{AtomicBool, Ordering};
|
||||
use std::sync::Arc;
|
||||
use std::thread::sleep;
|
||||
use std::time::Duration;
|
||||
|
@ -390,38 +386,6 @@ impl Drop for ThinClient {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn poll_gossip_for_leader(gossip_addr: SocketAddr, timeout: Duration) -> Result<NodeInfo> {
|
||||
let exit = Arc::new(AtomicBool::new(false));
|
||||
let entry_point = NodeInfo::new_entry_point(&gossip_addr);
|
||||
let (gossip_service, cluster_info) = make_spy_node(&entry_point, &exit);
|
||||
|
||||
let now = Instant::now();
|
||||
let result = loop {
|
||||
sleep(Duration::from_millis(100));
|
||||
trace!("polling {:?} for leader", gossip_addr);
|
||||
|
||||
if let Some(leader) = cluster_info.read().unwrap().get_gossip_top_leader() {
|
||||
if log_enabled!(log::Level::Trace) {
|
||||
trace!("{}", cluster_info.read().unwrap().node_info_trace());
|
||||
}
|
||||
break Ok(leader.clone());
|
||||
}
|
||||
|
||||
if log_enabled!(log::Level::Trace) {
|
||||
trace!("{}", cluster_info.read().unwrap().node_info_trace());
|
||||
}
|
||||
|
||||
if now.elapsed() > timeout {
|
||||
break Err(Error::ClusterInfoError(ClusterInfoError::NoLeader));
|
||||
}
|
||||
};
|
||||
|
||||
exit.store(true, Ordering::Relaxed);
|
||||
gossip_service.join()?;
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
pub fn retry_get_balance(
|
||||
client: &mut ThinClient,
|
||||
bob_pubkey: &Pubkey,
|
||||
|
@ -479,6 +443,7 @@ pub fn new_fullnode() -> (Fullnode, NodeInfo, Keypair, String) {
|
|||
mod tests {
|
||||
use super::*;
|
||||
use crate::client::mk_client;
|
||||
use crate::gossip_service::discover;
|
||||
use bincode::{deserialize, serialize};
|
||||
use solana_sdk::system_instruction::SystemInstruction;
|
||||
use solana_vote_api::vote_state::VoteState;
|
||||
|
@ -490,11 +455,7 @@ mod tests {
|
|||
solana_logger::setup();
|
||||
let (server, leader_data, alice, ledger_path) = new_fullnode();
|
||||
let bob_pubkey = Keypair::new().pubkey();
|
||||
|
||||
info!(
|
||||
"found leader: {:?}",
|
||||
poll_gossip_for_leader(leader_data.gossip, Duration::from_secs(5)).unwrap()
|
||||
);
|
||||
discover(&leader_data, 1).unwrap();
|
||||
|
||||
let mut client = mk_client(&leader_data);
|
||||
|
||||
|
@ -525,10 +486,7 @@ mod tests {
|
|||
solana_logger::setup();
|
||||
let (server, leader_data, alice, ledger_path) = new_fullnode();
|
||||
let bob_pubkey = Keypair::new().pubkey();
|
||||
info!(
|
||||
"found leader: {:?}",
|
||||
poll_gossip_for_leader(leader_data.gossip, Duration::from_secs(5)).unwrap()
|
||||
);
|
||||
discover(&leader_data, 1).unwrap();
|
||||
|
||||
let mut client = mk_client(&leader_data);
|
||||
|
||||
|
@ -559,10 +517,7 @@ mod tests {
|
|||
fn test_register_vote_account() {
|
||||
solana_logger::setup();
|
||||
let (server, leader_data, alice, ledger_path) = new_fullnode();
|
||||
info!(
|
||||
"found leader: {:?}",
|
||||
poll_gossip_for_leader(leader_data.gossip, Duration::from_secs(5)).unwrap()
|
||||
);
|
||||
discover(&leader_data, 1).unwrap();
|
||||
|
||||
let mut client = mk_client(&leader_data);
|
||||
|
||||
|
@ -628,11 +583,7 @@ mod tests {
|
|||
solana_logger::setup();
|
||||
let (server, leader_data, alice, ledger_path) = new_fullnode();
|
||||
let bob_keypair = Keypair::new();
|
||||
|
||||
info!(
|
||||
"found leader: {:?}",
|
||||
poll_gossip_for_leader(leader_data.gossip, Duration::from_secs(5)).unwrap()
|
||||
);
|
||||
discover(&leader_data, 1).unwrap();
|
||||
|
||||
let mut client = mk_client(&leader_data);
|
||||
let blockhash = client.get_recent_blockhash();
|
||||
|
|
|
@ -61,11 +61,8 @@ fn test_replicator_startup_basic() {
|
|||
&fullnode_config,
|
||||
);
|
||||
|
||||
debug!(
|
||||
"leader: {:?}",
|
||||
solana::thin_client::poll_gossip_for_leader(leader_info.gossip, Duration::from_secs(5))
|
||||
.unwrap()
|
||||
);
|
||||
debug!("Looking for leader on gossip...");
|
||||
solana::gossip_service::discover(&leader_info, 1).unwrap();
|
||||
|
||||
let validator_keypair = Arc::new(Keypair::new());
|
||||
let voting_keypair = Keypair::new();
|
||||
|
|
Loading…
Reference in New Issue