Check for default leader and use cmp::max for a bit nicer code (#779)
This commit is contained in:
parent
7f4844f426
commit
0b47404ba6
27
src/crdt.rs
27
src/crdt.rs
|
@ -328,7 +328,14 @@ impl Crdt {
|
||||||
&self.table[&self.me]
|
&self.table[&self.me]
|
||||||
}
|
}
|
||||||
pub fn leader_data(&self) -> Option<&NodeInfo> {
|
pub fn leader_data(&self) -> Option<&NodeInfo> {
|
||||||
self.table.get(&(self.table[&self.me].leader_id))
|
let leader_id = self.table[&self.me].leader_id;
|
||||||
|
|
||||||
|
// leader_id can be 0s from network entry point
|
||||||
|
if leader_id == PublicKey::default() {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.table.get(&leader_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_leader(&mut self, key: PublicKey) -> () {
|
pub fn set_leader(&mut self, key: PublicKey) -> () {
|
||||||
|
@ -1817,6 +1824,7 @@ mod tests {
|
||||||
crdt.purge(now + GOSSIP_PURGE_MILLIS + 1);
|
crdt.purge(now + GOSSIP_PURGE_MILLIS + 1);
|
||||||
assert_eq!(len as usize - 1, crdt.table.len());
|
assert_eq!(len as usize - 1, crdt.table.len());
|
||||||
assert_eq!(crdt.my_data().leader_id, PublicKey::default());
|
assert_eq!(crdt.my_data().leader_id, PublicKey::default());
|
||||||
|
assert!(crdt.leader_data().is_none());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// test window requests respond with the right blob, and do not overrun
|
/// test window requests respond with the right blob, and do not overrun
|
||||||
|
@ -1956,4 +1964,21 @@ mod tests {
|
||||||
let bad_address_multicast = "224.254.0.0:1234".parse().unwrap();
|
let bad_address_multicast = "224.254.0.0:1234".parse().unwrap();
|
||||||
assert!(!Crdt::is_valid_address(bad_address_multicast));
|
assert!(!Crdt::is_valid_address(bad_address_multicast));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_default_leader() {
|
||||||
|
logger::setup();
|
||||||
|
let node_info = NodeInfo::new(
|
||||||
|
KeyPair::new().pubkey(),
|
||||||
|
"127.0.0.1:1234".parse().unwrap(),
|
||||||
|
"127.0.0.1:1235".parse().unwrap(),
|
||||||
|
"127.0.0.1:1236".parse().unwrap(),
|
||||||
|
"127.0.0.1:1237".parse().unwrap(),
|
||||||
|
"127.0.0.1:1238".parse().unwrap(),
|
||||||
|
);
|
||||||
|
let mut crdt = Crdt::new(node_info).unwrap();
|
||||||
|
let network_entry_point = NodeInfo::new_entry_point("127.0.0.1:1239".parse().unwrap());
|
||||||
|
crdt.insert(&network_entry_point);
|
||||||
|
assert!(crdt.leader_data().is_none());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ use solana::signature::{KeyPair, KeyPairUtil, PublicKey};
|
||||||
use solana::streamer::default_window;
|
use solana::streamer::default_window;
|
||||||
use solana::thin_client::ThinClient;
|
use solana::thin_client::ThinClient;
|
||||||
use solana::timing::duration_as_s;
|
use solana::timing::duration_as_s;
|
||||||
|
use std::cmp::max;
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::net::UdpSocket;
|
use std::net::UdpSocket;
|
||||||
|
@ -503,9 +504,7 @@ fn test_multi_node_dynamic_network() {
|
||||||
);
|
);
|
||||||
let bal = getbal.unwrap_or(0);
|
let bal = getbal.unwrap_or(0);
|
||||||
let distance = (leader_balance - bal) / 500;
|
let distance = (leader_balance - bal) / 500;
|
||||||
if distance > max_distance {
|
max_distance = max(distance, max_distance);
|
||||||
max_distance = distance;
|
|
||||||
}
|
|
||||||
total_distance += distance;
|
total_distance += distance;
|
||||||
if let Some(bal) = getbal {
|
if let Some(bal) = getbal {
|
||||||
if bal == leader_balance {
|
if bal == leader_balance {
|
||||||
|
|
Loading…
Reference in New Issue