Added a failsafe mechanism, that will restart all swarm connections if network is stale.

pull/99/head v0.4.31
Revertron 3 years ago
parent fcb920e0de
commit 5afd9906b3

@ -45,4 +45,5 @@ pub const LOG_REFRESH_DELAY_SEC: u64 = 60;
pub const POLL_TIMEOUT: Option<Duration> = Some(Duration::from_millis(250));
pub const MAX_PACKET_SIZE: usize = 1 * 1024 * 1024; // 1 Mb
pub const MAX_READ_BLOCK_TIME: u128 = 500;
pub const MAX_IDLE_SECONDS: u64 = 180;
pub const MAX_NODES: usize = 15;

@ -67,6 +67,7 @@ impl Network {
let mut last_events_time = Instant::now();
loop {
if peers.get_peers_count() == 0 && bootstrap_timer.elapsed().as_secs() > 60 {
warn!("Restarting swarm connections...");
// Starting peer connections to bootstrap nodes
peers.connect_peers(&peers_addrs, &poll.registry(), &mut unique_token, yggdrasil_only);
bootstrap_timer = Instant::now();
@ -135,6 +136,9 @@ impl Network {
}
if !events.is_empty() {
last_events_time = Instant::now();
} else if last_events_time.elapsed().as_secs() > MAX_IDLE_SECONDS {
warn!("Something is wrong with swarm connections, closing all.");
peers.close_all_peers(poll.registry());
}
if ui_timer.elapsed().as_millis() > UI_REFRESH_DELAY_MS {
@ -400,7 +404,7 @@ fn handle_message(context: Arc<Mutex<Context>>, message: Message, peers: &mut Pe
let peer = peers.get_mut_peer(token).unwrap();
peer.set_public(public);
peer.set_active(true);
debug!(">> v{} on {}", &app_version, peer.get_addr().ip());
debug!("Incoming v{} on {}", &app_version, peer.get_addr().ip());
let app_version = context.lock().unwrap().app_version.clone();
State::message(Message::shake(&app_version, &origin, version, true, my_height))
} else {
@ -416,7 +420,7 @@ fn handle_message(context: Arc<Mutex<Context>>, message: Message, peers: &mut Pe
if ok {
let nodes = peers.get_peers_active_count();
let peer = peers.get_mut_peer(token).unwrap();
debug!("<< v{} on {}", &app_version, peer.get_addr().ip());
debug!("Outgoing v{} on {}", &app_version, peer.get_addr().ip());
peer.set_height(height);
peer.set_active(true);
peer.reset_reconnects();

@ -92,6 +92,14 @@ impl Peers {
}
}
pub fn close_all_peers(&mut self, registry: &Registry) {
let tokens: Vec<Token> = self.peers.keys().into_iter().cloned().collect();
for token in tokens.iter() {
self.close_peer(registry, token);
}
self.peers.clear();
}
pub fn add_peers_from_exchange(&mut self, peers: Vec<String>) {
let peers: HashSet<String> = peers
.iter()

Loading…
Cancel
Save