Delete cluster_info::get_gossip_top_leader()
This commit is contained in:
parent
8f0aa956a3
commit
5b386ec30a
|
@ -40,7 +40,7 @@ fn main() {
|
||||||
} = cfg;
|
} = cfg;
|
||||||
|
|
||||||
let cluster_entrypoint = ContactInfo::new_entry_point(&network);
|
let cluster_entrypoint = ContactInfo::new_entry_point(&network);
|
||||||
let (_leader, nodes) = discover(&cluster_entrypoint, num_nodes).unwrap_or_else(|err| {
|
let nodes = discover(&cluster_entrypoint, num_nodes).unwrap_or_else(|err| {
|
||||||
eprintln!("Failed to discover {} nodes: {:?}", num_nodes, err);
|
eprintln!("Failed to discover {} nodes: {:?}", num_nodes, err);
|
||||||
exit(1);
|
exit(1);
|
||||||
});
|
});
|
||||||
|
|
|
@ -222,17 +222,11 @@ impl ClusterInfo {
|
||||||
}
|
}
|
||||||
pub fn node_info_trace(&self) -> String {
|
pub fn node_info_trace(&self) -> String {
|
||||||
let leader_id = self.leader_id();
|
let leader_id = self.leader_id();
|
||||||
let gossip_top_leader = self.get_gossip_top_leader();
|
|
||||||
let nodes: Vec<_> = self
|
let nodes: Vec<_> = self
|
||||||
.rpc_peers()
|
.rpc_peers()
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|node| {
|
.map(|node| {
|
||||||
let mut annotation = String::new();
|
let mut annotation = String::new();
|
||||||
if let Some(top_leader) = gossip_top_leader {
|
|
||||||
if node.id == top_leader.id {
|
|
||||||
annotation.push_str(" [gossip top leader]");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if node.id == leader_id {
|
if node.id == leader_id {
|
||||||
annotation.push_str(" [leader]");
|
annotation.push_str(" [leader]");
|
||||||
}
|
}
|
||||||
|
@ -837,36 +831,6 @@ impl ClusterInfo {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_gossip_top_leader(&self) -> Option<&NodeInfo> {
|
|
||||||
let mut table = HashMap::new();
|
|
||||||
let def = Pubkey::default();
|
|
||||||
let cur = self
|
|
||||||
.gossip
|
|
||||||
.crds
|
|
||||||
.table
|
|
||||||
.values()
|
|
||||||
.filter_map(|x| x.value.leader_id())
|
|
||||||
.filter(|x| x.leader_id != def);
|
|
||||||
for v in cur {
|
|
||||||
let cnt = table.entry(&v.leader_id).or_insert(0);
|
|
||||||
*cnt += 1;
|
|
||||||
trace!("leader {} {}", v.leader_id, *cnt);
|
|
||||||
}
|
|
||||||
let mut sorted: Vec<(&Pubkey, usize)> = table.into_iter().collect();
|
|
||||||
for x in &sorted {
|
|
||||||
trace!("{}: sorted leaders {} votes: {}", self.gossip.id, x.0, x.1);
|
|
||||||
}
|
|
||||||
sorted.sort_by_key(|a| a.1);
|
|
||||||
let top_leader = sorted.last().map(|a| *a.0);
|
|
||||||
|
|
||||||
top_leader
|
|
||||||
.and_then(|x| {
|
|
||||||
let leader_label = CrdsValueLabel::ContactInfo(x);
|
|
||||||
self.gossip.crds.lookup(&leader_label)
|
|
||||||
})
|
|
||||||
.and_then(|x| x.contact_info())
|
|
||||||
}
|
|
||||||
|
|
||||||
/// randomly pick a node and ask them for updates asynchronously
|
/// randomly pick a node and ask them for updates asynchronously
|
||||||
pub fn gossip(
|
pub fn gossip(
|
||||||
obj: Arc<RwLock<Self>>,
|
obj: Arc<RwLock<Self>>,
|
||||||
|
|
|
@ -22,7 +22,7 @@ pub fn spend_and_verify_all_nodes(
|
||||||
funding_keypair: &Keypair,
|
funding_keypair: &Keypair,
|
||||||
nodes: usize,
|
nodes: usize,
|
||||||
) {
|
) {
|
||||||
let (_leader_id, cluster_nodes) = discover(&entry_point_info, nodes).unwrap();
|
let cluster_nodes = discover(&entry_point_info, nodes).unwrap();
|
||||||
assert!(cluster_nodes.len() >= nodes);
|
assert!(cluster_nodes.len() >= nodes);
|
||||||
for ingress_node in &cluster_nodes {
|
for ingress_node in &cluster_nodes {
|
||||||
let random_keypair = Keypair::new();
|
let random_keypair = Keypair::new();
|
||||||
|
@ -49,7 +49,7 @@ pub fn spend_and_verify_all_nodes(
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn fullnode_exit(entry_point_info: &ContactInfo, nodes: usize) {
|
pub fn fullnode_exit(entry_point_info: &ContactInfo, nodes: usize) {
|
||||||
let (_leader_id, cluster_nodes) = discover(&entry_point_info, nodes).unwrap();
|
let cluster_nodes = discover(&entry_point_info, nodes).unwrap();
|
||||||
assert!(cluster_nodes.len() >= nodes);
|
assert!(cluster_nodes.len() >= nodes);
|
||||||
for node in &cluster_nodes {
|
for node in &cluster_nodes {
|
||||||
let mut client = mk_client(&node);
|
let mut client = mk_client(&node);
|
||||||
|
@ -101,7 +101,7 @@ pub fn kill_entry_and_spend_and_verify_rest(
|
||||||
nodes: usize,
|
nodes: usize,
|
||||||
) {
|
) {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
let (_leader_id, cluster_nodes) = discover(&entry_point_info, nodes).unwrap();
|
let cluster_nodes = discover(&entry_point_info, nodes).unwrap();
|
||||||
assert!(cluster_nodes.len() >= nodes);
|
assert!(cluster_nodes.len() >= nodes);
|
||||||
let mut client = mk_client(&entry_point_info);
|
let mut client = mk_client(&entry_point_info);
|
||||||
info!("sleeping for an epoch");
|
info!("sleeping for an epoch");
|
||||||
|
|
|
@ -49,10 +49,7 @@ impl GossipService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn discover(
|
pub fn discover(entry_point_info: &NodeInfo, num_nodes: usize) -> std::io::Result<Vec<NodeInfo>> {
|
||||||
entry_point_info: &NodeInfo,
|
|
||||||
num_nodes: usize,
|
|
||||||
) -> std::io::Result<(Option<NodeInfo>, Vec<NodeInfo>)> {
|
|
||||||
let exit = Arc::new(AtomicBool::new(false));
|
let exit = Arc::new(AtomicBool::new(false));
|
||||||
let (gossip_service, spy_ref) = make_spy_node(entry_point_info, &exit);
|
let (gossip_service, spy_ref) = make_spy_node(entry_point_info, &exit);
|
||||||
let id = spy_ref.read().unwrap().keypair.pubkey();
|
let id = spy_ref.read().unwrap().keypair.pubkey();
|
||||||
|
@ -74,10 +71,9 @@ pub fn discover(
|
||||||
spy_ref.read().unwrap().node_info_trace()
|
spy_ref.read().unwrap().node_info_trace()
|
||||||
);
|
);
|
||||||
|
|
||||||
let leader = spy_ref.read().unwrap().get_gossip_top_leader().cloned();
|
|
||||||
exit.store(true, Ordering::Relaxed);
|
exit.store(true, Ordering::Relaxed);
|
||||||
gossip_service.join().unwrap();
|
gossip_service.join().unwrap();
|
||||||
return Ok((leader, rpc_peers));
|
return Ok(rpc_peers);
|
||||||
}
|
}
|
||||||
if i % 20 == 0 {
|
if i % 20 == 0 {
|
||||||
info!(
|
info!(
|
||||||
|
|
Loading…
Reference in New Issue