From 90eef10d5c6b0f33ea67e791e39547e6ae33ee77 Mon Sep 17 00:00:00 2001
From: Pierre Krieger <pierre.krieger1708@gmail.com>
Date: Fri, 1 Mar 2019 11:40:57 +0100
Subject: [PATCH] Address review in #1884 (#1906)

---
 substrate/core/network-libp2p/src/lib.rs      | 10 +++++-----
 .../core/network-libp2p/src/service_task.rs   | 20 ++++++++++++-------
 2 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/substrate/core/network-libp2p/src/lib.rs b/substrate/core/network-libp2p/src/lib.rs
index 8986afe100e..695de936271 100644
--- a/substrate/core/network-libp2p/src/lib.rs
+++ b/substrate/core/network-libp2p/src/lib.rs
@@ -118,12 +118,12 @@ pub enum NetworkStatePeerEndpoint {
 impl From<ConnectedPoint> for NetworkStatePeerEndpoint {
 	fn from(endpoint: ConnectedPoint) -> Self {
 		match endpoint {
-			ConnectedPoint::Dialer { ref address } =>
-				NetworkStatePeerEndpoint::Dialing(address.clone()),
-			ConnectedPoint::Listener { ref listen_addr, ref send_back_addr } =>
+			ConnectedPoint::Dialer { address } =>
+				NetworkStatePeerEndpoint::Dialing(address),
+			ConnectedPoint::Listener { listen_addr, send_back_addr } =>
 				NetworkStatePeerEndpoint::Listening {
-					listen_addr: listen_addr.clone(),
-					send_back_addr: send_back_addr.clone()
+					listen_addr: listen_addr,
+					send_back_addr: send_back_addr
 				}
 		}
 	}
diff --git a/substrate/core/network-libp2p/src/service_task.rs b/substrate/core/network-libp2p/src/service_task.rs
index 8c385878dcb..78d58793434 100644
--- a/substrate/core/network-libp2p/src/service_task.rs
+++ b/substrate/core/network-libp2p/src/service_task.rs
@@ -25,7 +25,7 @@ use futures::{prelude::*, Stream};
 use libp2p::{multiaddr::Protocol, Multiaddr, PeerId, build_multiaddr};
 use libp2p::core::{Swarm, nodes::Substream, transport::boxed::Boxed, muxing::StreamMuxerBox};
 use libp2p::core::nodes::ConnectedPoint;
-use log::{debug, info, warn};
+use log::{debug, error, info, warn};
 use std::collections::hash_map::Entry;
 use std::fs;
 use std::io::{Error as IoError, ErrorKind as IoErrorKind};
@@ -477,9 +477,12 @@ where TMessage: CustomMessage + Send + 'static {
 					// have any open custom protocol slot. Therefore it is not necessarily in the
 					// list.
 					if let Some(id) = self.index_by_id.get(&peer_id) {
-						self.nodes_info.get_mut(id)
-							.expect("index_by_id and nodes_info are always kept in sync; QED")
-							.client_version = Some(info.agent_version);
+						if let Some(n) = self.nodes_info.get_mut(id) {
+							n.client_version = Some(info.agent_version);
+						} else {
+							error!(target: "sub-libp2p",
+								"State inconsistency between index_by_id and nodes_info");
+						}
 					}
 				}
 				Ok(Async::Ready(Some(BehaviourOut::PingSuccess { peer_id, ping_time }))) => {
@@ -487,9 +490,12 @@ where TMessage: CustomMessage + Send + 'static {
 					// have any open custom protocol slot. Therefore it is not necessarily in the
 					// list.
 					if let Some(id) = self.index_by_id.get(&peer_id) {
-						self.nodes_info.get_mut(id)
-							.expect("index_by_id and nodes_info are always kept in sync; QED")
-							.latest_ping = Some(ping_time);
+						if let Some(n) = self.nodes_info.get_mut(id) {
+							n.latest_ping = Some(ping_time);
+						} else {
+							error!(target: "sub-libp2p",
+								"State inconsistency between index_by_id and nodes_info");
+						}
 					}
 				}
 				Ok(Async::NotReady) => break Ok(Async::NotReady),
-- 
GitLab