Clean up sc-network (#9761)

* Clean up sc-network

- Avoid using clone() for the Copy type `PeerId`.
- Use `find_map` for `filter_map` and `next`.
- Use `Self`.

* More on Copy types

* Cargo +nightly fmt --all

* More ..

* fmt

* Revert vec![default_notif_handshake_message]
This commit is contained in:
Liu-Cheng Xu
2021-09-14 02:11:29 +08:00
committed by GitHub
parent 0472a43855
commit 2562f8c65e
37 changed files with 475 additions and 526 deletions
+42 -56
View File
@@ -41,7 +41,7 @@ use libp2p::{
},
Multiaddr, PeerId,
};
use log::{debug, error, log, trace, warn, Level};
use log::{debug, error, info, log, trace, warn, Level};
use message::{
generic::{Message as GenericMessage, Roles},
BlockAnnounce, Message,
@@ -130,7 +130,7 @@ struct Metrics {
impl Metrics {
fn register(r: &Registry) -> Result<Self, PrometheusError> {
Ok(Metrics {
Ok(Self {
peers: {
let g = Gauge::new("sync_peers", "Number of peers we sync with")?;
register(g, r)?
@@ -249,11 +249,7 @@ impl ProtocolConfig {
impl Default for ProtocolConfig {
fn default() -> ProtocolConfig {
ProtocolConfig {
roles: Roles::FULL,
max_parallel_downloads: 5,
sync_mode: config::SyncMode::Full,
}
Self { roles: Roles::FULL, max_parallel_downloads: 5, sync_mode: config::SyncMode::Full }
}
}
@@ -277,12 +273,7 @@ impl<B: BlockT> BlockAnnouncesHandshake<B> {
best_hash: B::Hash,
genesis_hash: B::Hash,
) -> Self {
BlockAnnouncesHandshake {
genesis_hash,
roles: protocol_config.roles,
best_number,
best_hash,
}
Self { genesis_hash, roles: protocol_config.roles, best_number, best_hash }
}
}
@@ -311,7 +302,7 @@ impl<B: BlockT> Protocol<B> {
let boot_node_ids = {
let mut list = HashSet::new();
for node in &network_config.boot_nodes {
list.insert(node.peer_id.clone());
list.insert(node.peer_id);
}
list.shrink_to_fit();
list
@@ -320,14 +311,14 @@ impl<B: BlockT> Protocol<B> {
let important_peers = {
let mut imp_p = HashSet::new();
for reserved in &network_config.default_peers_set.reserved_nodes {
imp_p.insert(reserved.peer_id.clone());
imp_p.insert(reserved.peer_id);
}
for reserved in network_config
.extra_sets
.iter()
.flat_map(|s| s.set_config.reserved_nodes.iter())
{
imp_p.insert(reserved.peer_id.clone());
imp_p.insert(reserved.peer_id);
}
imp_p.shrink_to_fit();
imp_p
@@ -341,14 +332,14 @@ impl<B: BlockT> Protocol<B> {
let mut default_sets_reserved = HashSet::new();
for reserved in network_config.default_peers_set.reserved_nodes.iter() {
default_sets_reserved.insert(reserved.peer_id.clone());
known_addresses.push((reserved.peer_id.clone(), reserved.multiaddr.clone()));
default_sets_reserved.insert(reserved.peer_id);
known_addresses.push((reserved.peer_id, reserved.multiaddr.clone()));
}
let mut bootnodes = Vec::with_capacity(network_config.boot_nodes.len());
for bootnode in network_config.boot_nodes.iter() {
bootnodes.push(bootnode.peer_id.clone());
known_addresses.push((bootnode.peer_id.clone(), bootnode.multiaddr.clone()));
bootnodes.push(bootnode.peer_id);
known_addresses.push((bootnode.peer_id, bootnode.multiaddr.clone()));
}
// Set number 0 is used for block announces.
@@ -364,8 +355,8 @@ impl<B: BlockT> Protocol<B> {
for set_cfg in &network_config.extra_sets {
let mut reserved_nodes = HashSet::new();
for reserved in set_cfg.set_config.reserved_nodes.iter() {
reserved_nodes.insert(reserved.peer_id.clone());
known_addresses.push((reserved.peer_id.clone(), reserved.multiaddr.clone()));
reserved_nodes.insert(reserved.peer_id);
known_addresses.push((reserved.peer_id, reserved.multiaddr.clone()));
}
let reserved_only =
@@ -427,7 +418,7 @@ impl<B: BlockT> Protocol<B> {
network_config.default_peers_set.out_peers as usize,
);
let protocol = Protocol {
let protocol = Self {
tick_timeout: Box::pin(interval(TICK_TIMEOUT)),
pending_messages: VecDeque::new(),
config,
@@ -481,7 +472,7 @@ impl<B: BlockT> Protocol<B> {
sc_peerset::SetId::from(position + NUM_HARDCODED_PEERSETS),
);
} else {
log::warn!(target: "sub-libp2p", "disconnect_peer() with invalid protocol name")
warn!(target: "sub-libp2p", "disconnect_peer() with invalid protocol name")
}
}
@@ -769,7 +760,7 @@ impl<B: BlockT> Protocol<B> {
trace!(target: "sync", "New peer {} {:?}", who, status);
if self.peers.contains_key(&who) {
log::error!(target: "sync", "Called on_sync_peer_connected with already connected peer {}", who);
error!(target: "sync", "Called on_sync_peer_connected with already connected peer {}", who);
debug_assert!(false);
return Err(())
}
@@ -781,7 +772,7 @@ impl<B: BlockT> Protocol<B> {
"Peer is on different chain (our genesis: {} theirs: {})",
self.genesis_hash, status.genesis_hash
);
self.peerset_handle.report_peer(who.clone(), rep::GENESIS_MISMATCH);
self.peerset_handle.report_peer(who, rep::GENESIS_MISMATCH);
self.behaviour.disconnect_peer(&who, HARDCODED_PEERSETS_SYNC);
if self.boot_node_ids.contains(&who) {
@@ -801,7 +792,7 @@ impl<B: BlockT> Protocol<B> {
// we're not interested in light peers
if status.roles.is_light() {
debug!(target: "sync", "Peer {} is unable to serve light requests", who);
self.peerset_handle.report_peer(who.clone(), rep::BAD_ROLE);
self.peerset_handle.report_peer(who, rep::BAD_ROLE);
self.behaviour.disconnect_peer(&who, HARDCODED_PEERSETS_SYNC);
return Err(())
}
@@ -814,7 +805,7 @@ impl<B: BlockT> Protocol<B> {
.saturated_into::<u64>();
if blocks_difference > LIGHT_MAXIMAL_BLOCKS_DIFFERENCE {
debug!(target: "sync", "Peer {} is far behind us and will unable to serve light requests", who);
self.peerset_handle.report_peer(who.clone(), rep::PEER_BEHIND_US_LIGHT);
self.peerset_handle.report_peer(who, rep::PEER_BEHIND_US_LIGHT);
self.behaviour.disconnect_peer(&who, HARDCODED_PEERSETS_SYNC);
return Err(())
}
@@ -833,7 +824,7 @@ impl<B: BlockT> Protocol<B> {
};
let req = if peer.info.roles.is_full() {
match self.sync.new_peer(who.clone(), peer.info.best_hash, peer.info.best_number) {
match self.sync.new_peer(who, peer.info.best_hash, peer.info.best_number) {
Ok(req) => req,
Err(sync::BadPeer(id, repu)) => {
self.behaviour.disconnect_peer(&id, HARDCODED_PEERSETS_SYNC);
@@ -847,12 +838,12 @@ impl<B: BlockT> Protocol<B> {
debug!(target: "sync", "Connected {}", who);
self.peers.insert(who.clone(), peer);
self.peers.insert(who, peer);
self.pending_messages
.push_back(CustomMessageOutcome::PeerNewBest(who.clone(), status.best_number));
.push_back(CustomMessageOutcome::PeerNewBest(who, status.best_number));
if let Some(req) = req {
let event = self.prepare_block_request(who.clone(), req);
let event = self.prepare_block_request(who, req);
self.pending_messages.push_back(event);
}
@@ -1101,7 +1092,7 @@ impl<B: BlockT> Protocol<B> {
) {
self.sync.on_justification_import(hash, number, success);
if !success {
log::info!("💔 Invalid justification provided by {} for #{}", who, hash);
info!("💔 Invalid justification provided by {} for #{}", who, hash);
self.behaviour.disconnect_peer(&who, HARDCODED_PEERSETS_SYNC);
self.peerset_handle
.report_peer(who, sc_peerset::ReputationChange::new_fatal("Invalid justification"));
@@ -1141,7 +1132,7 @@ impl<B: BlockT> Protocol<B> {
peer,
);
} else {
log::error!(
error!(
target: "sub-libp2p",
"remove_set_reserved_peer with unknown protocol: {}",
protocol
@@ -1155,7 +1146,7 @@ impl<B: BlockT> Protocol<B> {
self.peerset_handle
.add_reserved_peer(sc_peerset::SetId::from(index + NUM_HARDCODED_PEERSETS), peer);
} else {
log::error!(
error!(
target: "sub-libp2p",
"add_set_reserved_peer with unknown protocol: {}",
protocol
@@ -1178,7 +1169,7 @@ impl<B: BlockT> Protocol<B> {
self.peerset_handle
.add_to_peers_set(sc_peerset::SetId::from(index + NUM_HARDCODED_PEERSETS), peer);
} else {
log::error!(
error!(
target: "sub-libp2p",
"add_to_peers_set with unknown protocol: {}",
protocol
@@ -1194,7 +1185,7 @@ impl<B: BlockT> Protocol<B> {
peer,
);
} else {
log::error!(
error!(
target: "sub-libp2p",
"remove_from_peers_set with unknown protocol: {}",
protocol
@@ -1426,8 +1417,7 @@ impl<B: BlockT> NetworkBehaviour for Protocol<B> {
id,
e
);
self.peerset_handle
.report_peer(id.clone(), rep::BAD_MESSAGE);
self.peerset_handle.report_peer(*id, rep::BAD_MESSAGE);
self.behaviour
.disconnect_peer(id, HARDCODED_PEERSETS_SYNC);
continue
@@ -1447,18 +1437,17 @@ impl<B: BlockT> NetworkBehaviour for Protocol<B> {
id,
e
);
self.peerset_handle
.report_peer(id.clone(), rep::BAD_MESSAGE);
self.peerset_handle.report_peer(*id, rep::BAD_MESSAGE);
self.behaviour
.disconnect_peer(id, HARDCODED_PEERSETS_SYNC);
continue
},
};
finished_state_requests.push((id.clone(), protobuf_response));
finished_state_requests.push((*id, protobuf_response));
},
PeerRequest::WarpProof => {
finished_warp_sync_requests.push((id.clone(), resp));
finished_warp_sync_requests.push((*id, resp));
},
}
},
@@ -1468,18 +1457,18 @@ impl<B: BlockT> NetworkBehaviour for Protocol<B> {
match e {
RequestFailure::Network(OutboundFailure::Timeout) => {
self.peerset_handle.report_peer(id.clone(), rep::TIMEOUT);
self.peerset_handle.report_peer(*id, rep::TIMEOUT);
self.behaviour.disconnect_peer(id, HARDCODED_PEERSETS_SYNC);
},
RequestFailure::Network(OutboundFailure::UnsupportedProtocols) => {
self.peerset_handle.report_peer(id.clone(), rep::BAD_PROTOCOL);
self.peerset_handle.report_peer(*id, rep::BAD_PROTOCOL);
self.behaviour.disconnect_peer(id, HARDCODED_PEERSETS_SYNC);
},
RequestFailure::Network(OutboundFailure::DialFailure) => {
self.behaviour.disconnect_peer(id, HARDCODED_PEERSETS_SYNC);
},
RequestFailure::Refused => {
self.peerset_handle.report_peer(id.clone(), rep::REFUSED);
self.peerset_handle.report_peer(*id, rep::REFUSED);
self.behaviour.disconnect_peer(id, HARDCODED_PEERSETS_SYNC);
},
RequestFailure::Network(OutboundFailure::ConnectionClosed) |
@@ -1603,7 +1592,7 @@ impl<B: BlockT> NetworkBehaviour for Protocol<B> {
genesis_hash: handshake.genesis_hash,
};
if self.on_sync_peer_connected(peer_id.clone(), handshake).is_ok() {
if self.on_sync_peer_connected(peer_id, handshake).is_ok() {
CustomMessageOutcome::SyncConnected(peer_id)
} else {
CustomMessageOutcome::None
@@ -1624,10 +1613,7 @@ impl<B: BlockT> NetworkBehaviour for Protocol<B> {
&mut &received_handshake[..],
) {
Ok(handshake) => {
if self
.on_sync_peer_connected(peer_id.clone(), handshake)
.is_ok()
{
if self.on_sync_peer_connected(peer_id, handshake).is_ok() {
CustomMessageOutcome::SyncConnected(peer_id)
} else {
CustomMessageOutcome::None
@@ -1679,7 +1665,7 @@ impl<B: BlockT> NetworkBehaviour for Protocol<B> {
},
(Err(err), _) => {
debug!(target: "sync", "Failed to parse remote handshake: {}", err);
self.bad_handshake_substreams.insert((peer_id.clone(), set_id));
self.bad_handshake_substreams.insert((peer_id, set_id));
self.behaviour.disconnect_peer(&peer_id, set_id);
self.peerset_handle.report_peer(peer_id, rep::BAD_MESSAGE);
CustomMessageOutcome::None
@@ -1690,7 +1676,7 @@ impl<B: BlockT> NetworkBehaviour for Protocol<B> {
NotificationsOut::CustomProtocolReplaced { peer_id, notifications_sink, set_id } =>
if set_id == HARDCODED_PEERSETS_SYNC {
CustomMessageOutcome::None
} else if self.bad_handshake_substreams.contains(&(peer_id.clone(), set_id)) {
} else if self.bad_handshake_substreams.contains(&(peer_id, set_id)) {
CustomMessageOutcome::None
} else {
CustomMessageOutcome::NotificationStreamReplaced {
@@ -1704,7 +1690,7 @@ impl<B: BlockT> NetworkBehaviour for Protocol<B> {
NotificationsOut::CustomProtocolClosed { peer_id, set_id } => {
// Set number 0 is hardcoded the default set of peers we sync from.
if set_id == HARDCODED_PEERSETS_SYNC {
if self.on_sync_peer_disconnected(peer_id.clone()).is_ok() {
if self.on_sync_peer_disconnected(peer_id).is_ok() {
CustomMessageOutcome::SyncDisconnected(peer_id)
} else {
log::trace!(
@@ -1714,7 +1700,7 @@ impl<B: BlockT> NetworkBehaviour for Protocol<B> {
);
CustomMessageOutcome::None
}
} else if self.bad_handshake_substreams.remove(&(peer_id.clone(), set_id)) {
} else if self.bad_handshake_substreams.remove(&(peer_id, set_id)) {
// The substream that has just been closed had been opened with a bad
// handshake. The outer layers have never received an opening event about this
// substream, and consequently shouldn't receive a closing event either.
@@ -1753,7 +1739,7 @@ impl<B: BlockT> NetworkBehaviour for Protocol<B> {
);
CustomMessageOutcome::None
},
_ if self.bad_handshake_substreams.contains(&(peer_id.clone(), set_id)) =>
_ if self.bad_handshake_substreams.contains(&(peer_id, set_id)) =>
CustomMessageOutcome::None,
_ => {
let protocol_name = self.notification_protocols