Added a failsafe mechanism, that will restart all swarm connections if network is stale.
This commit is contained in:
+6
-2
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user