From 1ac7345e1ef56c29fa0e09d4c4a4e432f31bd239 Mon Sep 17 00:00:00 2001 From: arkpar Date: Wed, 10 Apr 2019 16:09:12 +0200 Subject: [PATCH 1/2] Apply negative rating on explicit ban --- core/network/src/service.rs | 9 +++++---- core/peerset/src/lib.rs | 5 +++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/core/network/src/service.rs b/core/network/src/service.rs index 597f361d2bf04..fa23ba3bdae7e 100644 --- a/core/network/src/service.rs +++ b/core/network/src/service.rs @@ -487,8 +487,9 @@ fn start_thread( let (close_tx, close_rx) = oneshot::channel(); let service_clone = service.clone(); let mut runtime = RuntimeBuilder::new().name_prefix("libp2p-").build()?; + let peerset_clone = peerset.clone(); let thread = thread::Builder::new().name("network".to_string()).spawn(move || { - let fut = run_thread(protocol_sender, service_clone, network_port) + let fut = run_thread(protocol_sender, service_clone, network_port, peerset_clone) .select(close_rx.then(|_| Ok(()))) .map(|(val, _)| val) .map_err(|(err,_ )| err); @@ -509,6 +510,7 @@ fn run_thread( protocol_sender: Sender>, network_service: Arc>>>, network_port: NetworkPort, + peerset: PeersetHandle, ) -> impl Future { let network_service_2 = network_service.clone(); @@ -532,9 +534,8 @@ fn run_thread( match severity { Severity::Bad(message) => { info!(target: "sync", "Banning {:?} because {:?}", who, message); - warn!(target: "sync", "Banning a node is a deprecated mechanism that \ - should be removed"); - network_service_2.lock().drop_node(&who) + network_service_2.lock().drop_node(&who); + peerset.report_peer(who, i32::min_value()); }, Severity::Useless(message) => { debug!(target: "sync", "Dropping {:?} because {:?}", who, message); diff --git a/core/peerset/src/lib.rs b/core/peerset/src/lib.rs index 98287bf7a6336..c5ec07ef956cc 100644 --- a/core/peerset/src/lib.rs +++ b/core/peerset/src/lib.rs @@ -258,6 +258,7 @@ impl Peerset { self.data.discovered.remove_peer(&peer_id); // notify that connection has been made + trace!(target: "peerset", "Connecting to new reserved peer {}", peer_id); self.message_queue.push_back(Message::Connect(peer_id)); return; }, @@ -267,6 +268,7 @@ impl Peerset { // let's add the peer we disconnected from to the discovered list again self.data.discovered.add_peer(removed.clone(), SlotType::Common); // swap connections + trace!(target: "peerset", "Connecting to new reserved peer {}, dropping {}", added, removed); self.message_queue.push_back(Message::Drop(removed)); self.message_queue.push_back(Message::Connect(added)); } @@ -336,10 +338,12 @@ impl Peerset { while let Some((peer_id, slot_type)) = self.data.discovered.pop_peer(self.data.reserved_only) { match self.data.out_slots.add_peer(peer_id, slot_type) { SlotState::Added(peer_id) => { + trace!(target: "peerset", "Connecting to new peer {}", peer_id); self.message_queue.push_back(Message::Connect(peer_id)); }, SlotState::Swaped { removed, added } => { // insert peer back into discovered list + trace!(target: "peerset", "Connecting to new peer {}, dropping {}", added, removed); self.data.discovered.add_peer(removed.clone(), SlotType::Common); self.message_queue.push_back(Message::Drop(removed)); self.message_queue.push_back(Message::Connect(added)); @@ -428,6 +432,7 @@ impl Peerset { ); // Automatically connect back if reserved. if self.data.in_slots.is_connected_and_reserved(&peer_id) || self.data.out_slots.is_connected_and_reserved(&peer_id) { + trace!(target: "peerset", "Not dropped because reseved"); self.message_queue.push_back(Message::Connect(peer_id)); return; } From c998df48c2533607b83d05b6296b20746168a847 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= Date: Wed, 10 Apr 2019 17:00:07 +0200 Subject: [PATCH 2/2] Update core/network/src/service.rs Co-Authored-By: arkpar --- core/network/src/service.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/core/network/src/service.rs b/core/network/src/service.rs index fa23ba3bdae7e..7244080bf7954 100644 --- a/core/network/src/service.rs +++ b/core/network/src/service.rs @@ -535,6 +535,7 @@ fn run_thread( Severity::Bad(message) => { info!(target: "sync", "Banning {:?} because {:?}", who, message); network_service_2.lock().drop_node(&who); + // temporary: make sure the peer gets dropped from the peerset peerset.report_peer(who, i32::min_value()); }, Severity::Useless(message) => {