Skip to content

Commit 31ec588

Browse files
handle ignored errors + misc code improvements (sigp#113)
* handle ignored errors * minor fix * move to static strings where possible * move to static strings where possible * Handle final action edge cases Co-authored-by: Age Manning <[email protected]>
1 parent 1839cbf commit 31ec588

File tree

13 files changed

+194
-105
lines changed

13 files changed

+194
-105
lines changed

examples/custom_executor.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Demonstrates how to run a basic Discovery v5 Service with a custom tokio executor.
22
//!
3-
//! Discv5 requires a Tokio executor with all features. A custom exuector can be passed via the
3+
//! Discv5 requires a Tokio executor with all features. A custom executor can be passed via the
44
//! configuration parameters. If none is passed, it will use the current runtime that build the
55
//! `Discv5` struct.
66
//!

src/config.rs

+21-21
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use crate::{
44
///! A set of configuration parameters to tune the discovery protocol.
55
use std::time::Duration;
66

7-
/// Configuration parameters that define the performance of the gossipsub network.
7+
/// Configuration parameters that define the performance of the discovery network.
88
#[derive(Clone)]
99
pub struct Discv5Config {
1010
/// Whether to enable the incoming packet filter. Default: false.
@@ -315,25 +315,25 @@ impl Discv5ConfigBuilder {
315315

316316
impl std::fmt::Debug for Discv5Config {
317317
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
318-
let mut builder = f.debug_struct("Discv5Config");
319-
let _ = builder.field("filter_enabled", &self.enable_packet_filter);
320-
let _ = builder.field("request_timeout", &self.request_timeout);
321-
let _ = builder.field("vote_duration", &self.vote_duration);
322-
let _ = builder.field("query_timeout", &self.query_timeout);
323-
let _ = builder.field("query_peer_timeout", &self.query_peer_timeout);
324-
let _ = builder.field("request_retries", &self.request_retries);
325-
let _ = builder.field("session_timeout", &self.session_timeout);
326-
let _ = builder.field("session_cache_capacity", &self.session_cache_capacity);
327-
let _ = builder.field("enr_update", &self.enr_update);
328-
let _ = builder.field("query_parallelism", &self.query_parallelism);
329-
let _ = builder.field("report_discovered_peers", &self.report_discovered_peers);
330-
let _ = builder.field("ip_limit", &self.ip_limit);
331-
let _ = builder.field("filter_max_nodes_per_ip", &self.filter_max_nodes_per_ip);
332-
let _ = builder.field("filter_max_bans_per_ip", &self.filter_max_bans_per_ip);
333-
let _ = builder.field("ip_limit", &self.ip_limit);
334-
let _ = builder.field("incoming_bucket_limit", &self.incoming_bucket_limit);
335-
let _ = builder.field("ping_interval", &self.ping_interval);
336-
let _ = builder.field("ban_duration", &self.ban_duration);
337-
builder.finish()
318+
f.debug_struct("Discv5Config")
319+
.field("filter_enabled", &self.enable_packet_filter)
320+
.field("request_timeout", &self.request_timeout)
321+
.field("vote_duration", &self.vote_duration)
322+
.field("query_timeout", &self.query_timeout)
323+
.field("query_peer_timeout", &self.query_peer_timeout)
324+
.field("request_retries", &self.request_retries)
325+
.field("session_timeout", &self.session_timeout)
326+
.field("session_cache_capacity", &self.session_cache_capacity)
327+
.field("enr_update", &self.enr_update)
328+
.field("query_parallelism", &self.query_parallelism)
329+
.field("report_discovered_peers", &self.report_discovered_peers)
330+
.field("ip_limit", &self.ip_limit)
331+
.field("filter_max_nodes_per_ip", &self.filter_max_nodes_per_ip)
332+
.field("filter_max_bans_per_ip", &self.filter_max_bans_per_ip)
333+
.field("ip_limit", &self.ip_limit)
334+
.field("incoming_bucket_limit", &self.incoming_bucket_limit)
335+
.field("ping_interval", &self.ping_interval)
336+
.field("ban_duration", &self.ban_duration)
337+
.finish()
338338
}
339339
}

src/discv5.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -444,9 +444,9 @@ impl Discv5 {
444444
// The multiaddr must support the udp protocol and be of an appropriate key type.
445445
// The conversion logic is contained in the `TryFrom<MultiAddr>` implementation of a
446446
// `NodeContact`.
447-
let multiaddr: Multiaddr = multiaddr.try_into().map_err(|_| {
448-
RequestError::InvalidMultiaddr("Could not convert to multiaddr".into())
449-
})?;
447+
let multiaddr: Multiaddr = multiaddr
448+
.try_into()
449+
.map_err(|_| RequestError::InvalidMultiaddr("Could not convert to multiaddr"))?;
450450
let node_contact: NodeContact = NodeContact::try_from(multiaddr)
451451
.map_err(|e| RequestError::InvalidMultiaddr(e.into()))?;
452452

src/error.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -100,15 +100,15 @@ pub enum RequestError {
100100
/// The channel to the underlying threads failed.
101101
ChannelFailed(String),
102102
/// An invalid ENR was provided.
103-
InvalidEnr(String),
103+
InvalidEnr(&'static str),
104104
/// The remote's ENR is invalid.
105105
InvalidRemoteEnr,
106106
/// The remote returned and invalid packet.
107107
InvalidRemotePacket,
108108
/// Failed attempting to encrypt the request.
109109
EncryptionFailed(String),
110110
/// The multiaddr provided is invalid.
111-
InvalidMultiaddr(String),
111+
InvalidMultiaddr(&'static str),
112112
/// Failure generating random numbers during request.
113113
EntropyFailure(&'static str),
114114
}

src/handler/crypto/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ fn generate_signing_nonce(
179179
let mut data = ID_SIGNATURE_TEXT.as_bytes().to_vec();
180180
data.extend_from_slice(challenge_data.as_ref());
181181
data.extend_from_slice(ephem_pubkey);
182-
data.extend_from_slice(&dst_id.raw().to_vec());
182+
data.extend_from_slice(dst_id.raw().as_ref());
183183
data
184184
}
185185

src/handler/mod.rs

+71-34
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,9 @@ impl Handler {
323323
let id = request.id.clone();
324324
if let Err(request_error) = self.send_request(contact, *request).await {
325325
// If the sending failed report to the application
326-
let _ = self.service_send.send(HandlerOut::RequestFailed(id, request_error)).await;
326+
if let Err(e) = self.service_send.send(HandlerOut::RequestFailed(id, request_error)).await {
327+
warn!("Failed to inform that request failed {}", e)
328+
}
327329
}
328330
}
329331
HandlerIn::Response(dst, response) => self.send_response(dst, *response).await,
@@ -450,9 +452,7 @@ impl Handler {
450452
contact: NodeContact,
451453
request: Request,
452454
) -> Result<(), RequestError> {
453-
let node_address = contact
454-
.node_address()
455-
.map_err(|e| RequestError::InvalidEnr(e.into()))?;
455+
let node_address = contact.node_address().map_err(RequestError::InvalidEnr)?;
456456

457457
if node_address.socket_addr == self.listen_socket {
458458
debug!("Filtered request to self");
@@ -718,7 +718,9 @@ impl Handler {
718718
};
719719

720720
session.awaiting_enr = Some(id);
721-
let _ = self.send_request(contact, request).await;
721+
if let Err(e) = self.send_request(contact, request).await {
722+
warn!("Failed to send Enr request {}", e)
723+
}
722724
}
723725
}
724726
self.new_session(node_address, session);
@@ -772,10 +774,13 @@ impl Handler {
772774
// Notify the application
773775
// The session established here are from WHOAREYOU packets that we sent.
774776
// This occurs when a node established a connection with us.
775-
let _ = self
777+
if let Err(e) = self
776778
.service_send
777779
.send(HandlerOut::Established(enr, ConnectionDirection::Incoming))
778-
.await;
780+
.await
781+
{
782+
warn!("Failed to inform of established session {}", e)
783+
}
779784
self.new_session(node_address.clone(), session);
780785
self.handle_message(
781786
node_address,
@@ -834,7 +839,9 @@ impl Handler {
834839
entry.remove();
835840
}
836841
trace!("Sending next awaiting message. Node: {}", request.0);
837-
let _ = self.send_request(request.0, request.1).await;
842+
if let Err(e) = self.send_request(request.0, request.1).await {
843+
warn!("Failed to send next awaiting request {}", e)
844+
}
838845
}
839846
}
840847
}
@@ -877,10 +884,13 @@ impl Handler {
877884
// Update the cache time and remove expired entries.
878885
if self.active_challenges.peek(&node_address).is_none() {
879886
let whoareyou_ref = WhoAreYouRef(node_address, message_nonce);
880-
let _ = self
887+
if let Err(e) = self
881888
.service_send
882889
.send(HandlerOut::WhoAreYou(whoareyou_ref))
883-
.await;
890+
.await
891+
{
892+
warn!("Failed to send WhoAreYou to the service {}", e)
893+
}
884894
} else {
885895
trace!("WHOAREYOU packet already sent: {}", node_address);
886896
}
@@ -894,10 +904,13 @@ impl Handler {
894904
match message {
895905
Message::Request(request) => {
896906
// report the request to the application
897-
let _ = self
907+
if let Err(e) = self
898908
.service_send
899909
.send(HandlerOut::Request(node_address, Box::new(request)))
900-
.await;
910+
.await
911+
{
912+
warn!("Failed to report request to application {}", e)
913+
}
901914
}
902915
Message::Response(response) => {
903916
// Sessions could be awaiting an ENR response. Check if this response matches
@@ -914,13 +927,16 @@ impl Handler {
914927
// This can occur when we try to dial a node without an
915928
// ENR. In this case we have attempted to establish the
916929
// connection, so this is an outgoing connection.
917-
let _ = self
930+
if let Err(e) = self
918931
.service_send
919932
.send(HandlerOut::Established(
920933
enr,
921934
ConnectionDirection::Outgoing,
922935
))
923-
.await;
936+
.await
937+
{
938+
warn!("Failed to inform established outgoing connection {}", e)
939+
}
924940
return;
925941
}
926942
}
@@ -943,10 +959,16 @@ impl Handler {
943959
trace!("Requesting a WHOAREYOU packet to be sent.");
944960
// spawn a WHOAREYOU event to check for highest known ENR
945961
let whoareyou_ref = WhoAreYouRef(node_address, message_nonce);
946-
let _ = self
962+
if let Err(e) = self
947963
.service_send
948964
.send(HandlerOut::WhoAreYou(whoareyou_ref))
949-
.await;
965+
.await
966+
{
967+
warn!(
968+
"Spawn a WHOAREYOU event to check for highest known ENR failed {}",
969+
e
970+
)
971+
}
950972
}
951973
}
952974

@@ -979,10 +1001,13 @@ impl Handler {
9791001
// add back the request and send the response
9801002
self.active_requests
9811003
.insert(node_address.clone(), request_call);
982-
let _ = self
1004+
if let Err(e) = self
9831005
.service_send
9841006
.send(HandlerOut::Response(node_address, Box::new(response)))
985-
.await;
1007+
.await
1008+
{
1009+
warn!("Failed to inform of response {}", e)
1010+
}
9861011
return;
9871012
}
9881013
} else {
@@ -991,10 +1016,13 @@ impl Handler {
9911016
// add back the request and send the response
9921017
self.active_requests
9931018
.insert(node_address.clone(), request_call);
994-
let _ = self
1019+
if let Err(e) = self
9951020
.service_send
9961021
.send(HandlerOut::Response(node_address, Box::new(response)))
997-
.await;
1022+
.await
1023+
{
1024+
warn!("Failed to inform of response {}", e)
1025+
}
9981026
return;
9991027
}
10001028
}
@@ -1004,13 +1032,16 @@ impl Handler {
10041032
self.remove_expected_response(node_address.socket_addr);
10051033

10061034
// The request matches report the response
1007-
let _ = self
1035+
if let Err(e) = self
10081036
.service_send
10091037
.send(HandlerOut::Response(
10101038
node_address.clone(),
10111039
Box::new(response),
10121040
))
1013-
.await;
1041+
.await
1042+
{
1043+
warn!("Failed to inform of response {}", e)
1044+
}
10141045
self.send_next_request(node_address).await;
10151046
} else {
10161047
// This is likely a late response and we have already failed the request. These get
@@ -1050,10 +1081,13 @@ impl Handler {
10501081
// The Request has expired, remove the session.
10511082
// Fail the current request
10521083
let request_id = request_call.request.id;
1053-
let _ = self
1084+
if let Err(e) = self
10541085
.service_send
10551086
.send(HandlerOut::RequestFailed(request_id, error.clone()))
1056-
.await;
1087+
.await
1088+
{
1089+
warn!("Failed to inform request failure {}", e)
1090+
}
10571091

10581092
let node_address = request_call
10591093
.contact
@@ -1076,15 +1110,16 @@ impl Handler {
10761110
.active_sessions
10771111
.store(self.sessions.len(), Ordering::Relaxed);
10781112
}
1079-
for request in self
1080-
.pending_requests
1081-
.remove(node_address)
1082-
.unwrap_or_else(Vec::new)
1083-
{
1084-
let _ = self
1085-
.service_send
1086-
.send(HandlerOut::RequestFailed(request.1.id, error.clone()))
1087-
.await;
1113+
if let Some(to_remove) = self.pending_requests.remove(node_address) {
1114+
for request in to_remove {
1115+
if let Err(e) = self
1116+
.service_send
1117+
.send(HandlerOut::RequestFailed(request.1.id, error.clone()))
1118+
.await
1119+
{
1120+
warn!("Failed to inform request failure {}", e)
1121+
}
1122+
}
10881123
}
10891124
}
10901125

@@ -1094,7 +1129,9 @@ impl Handler {
10941129
node_address,
10951130
packet,
10961131
};
1097-
let _ = self.socket.send.send(outbound_packet).await;
1132+
if let Err(e) = self.socket.send.send(outbound_packet).await {
1133+
warn!("Failed to send outbound packet {}", e)
1134+
}
10981135
}
10991136

11001137
/// Check if any banned nodes have served their time and unban them.

0 commit comments

Comments
 (0)