From a805bcc784cd7149af665ac42535181967fe6d04 Mon Sep 17 00:00:00 2001 From: chevdor Date: Mon, 23 Jul 2018 12:31:13 +0200 Subject: [PATCH 1/2] Reset peers.json if the content is not loadable Fix #404 --- substrate/network-libp2p/src/network_state.rs | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/substrate/network-libp2p/src/network_state.rs b/substrate/network-libp2p/src/network_state.rs index 789482554d12d..25e983813ffe8 100644 --- a/substrate/network-libp2p/src/network_state.rs +++ b/substrate/network-libp2p/src/network_state.rs @@ -34,6 +34,7 @@ use std::fs; use std::io::{Error as IoError, ErrorKind as IoErrorKind, Read, Write}; use std::path::Path; use std::sync::atomic; +use std::{thread, time}; use std::time::{Duration, Instant}; // File where the peers are stored. @@ -179,9 +180,29 @@ impl NetworkState { file {:?}", path); PeersStorage::Json(peerstore) } else { - warn!(target: "sub-libp2p", "Failed to open peer storage {:?} \ - ; peers won't be saved", path); - PeersStorage::Memory(MemoryPeerstore::empty()) + warn!(target: "sub-libp2p", "Failed to open peer storage {:?}\ + ; peers file will be reset", path); + fs::remove_file(&path).expect("Failed deleting peers.json"); + + // we check for about 1s if the file was really deleted and move on + for _x in 0..200 { + if !Path::new(&path).exists() { + break; + } else { + debug!("Waiting for effective deletion of invalid/outdate \ + peers.json"); + thread::sleep(time::Duration::from_millis(5)); + } + } + + if let Ok(peerstore) = JsonPeerstore::new(path.clone()) { + debug!("peers.json reset"); + PeersStorage::Json(peerstore) + } else { + warn!(target: "sub-libp2p", "Failed to reset peer storage\ + {:?}; peers change will not be saved", path); + PeersStorage::Memory(MemoryPeerstore::empty()) + } } } else { debug!(target: "sub-libp2p", "No peers file configured ; peers \ @@ -559,7 +580,7 @@ impl NetworkState { /// You must pass an `UnboundedSender` which will be used by the `send` /// method. Actually sending the data is not covered by this code. /// - /// The various methods of the `NetworkState` that close a connection do + /// The various methods of the `NetworkState` that close a connection do /// so by dropping this sender. pub fn custom_proto( &self, @@ -826,7 +847,7 @@ fn parse_and_add_to_peerstore(addr_str: &str, peerstore: &PeersStorage) .peer_or_create(&peer_id) .add_addr(addr, Duration::from_secs(100000 * 365 * 24 * 3600)), } - + Ok(peer_id) } From 3dc3838d7e65420b166d27c189df9ee0cb434c07 Mon Sep 17 00:00:00 2001 From: Gav Wood Date: Wed, 25 Jul 2018 10:27:38 +0200 Subject: [PATCH 2/2] Whitespace --- substrate/network-libp2p/src/network_state.rs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/substrate/network-libp2p/src/network_state.rs b/substrate/network-libp2p/src/network_state.rs index 082f7ba9d3d07..c490d25a60dca 100644 --- a/substrate/network-libp2p/src/network_state.rs +++ b/substrate/network-libp2p/src/network_state.rs @@ -176,12 +176,10 @@ impl NetworkState { let node_store = if let Some(ref path) = config.net_config_path { let path = Path::new(path).join(NODES_FILE); if let Ok(node_store) = JsonPeerstore::new(path.clone()) { - debug!(target: "sub-libp2p", "Initialized peer store for JSON \ - file {:?}", path); + debug!(target: "sub-libp2p", "Initialized peer store for JSON file {:?}", path); NodeStore::Json(node_store) } else { - warn!(target: "sub-libp2p", "Failed to open peer storage {:?}\ - ; peers file will be reset", path); + warn!(target: "sub-libp2p", "Failed to open peer storage {:?}; peers file will be reset", path); fs::remove_file(&path).expect("Failed deleting peers.json"); // we check for about 1s if the file was really deleted and move on @@ -189,8 +187,7 @@ impl NetworkState { if !Path::new(&path).exists() { break; } else { - debug!("Waiting for effective deletion of invalid/outdate \ - peers.json"); + debug!("Waiting for effective deletion of invalid/outdate peers.json"); thread::sleep(time::Duration::from_millis(5)); } } @@ -199,14 +196,15 @@ impl NetworkState { debug!("peers.json reset"); NodeStore::Json(peerstore) } else { - warn!(target: "sub-libp2p", "Failed to reset peer storage\ - {:?}; peers change will not be saved", path); + warn!(target: "sub-libp2p", + "Failed to reset peer storage {:?}; peers change will not be saved", + path + ); NodeStore::Memory(MemoryPeerstore::empty()) } } } else { - debug!(target: "sub-libp2p", "No peers file configured ; peers \ - won't be saved"); + debug!(target: "sub-libp2p", "No peers file configured ; peers won't be saved"); NodeStore::Memory(MemoryPeerstore::empty()) };