fix firewalling/fragmentation issue
This commit is contained in:
parent
88466db03f
commit
b6c39ef042
@ -1077,8 +1077,17 @@ impl NetworkManager {
|
|||||||
|
|
||||||
// Dial info filter comes from the target node ref
|
// Dial info filter comes from the target node ref
|
||||||
let dial_info_filter = target_node_ref.dial_info_filter();
|
let dial_info_filter = target_node_ref.dial_info_filter();
|
||||||
let sequencing = target_node_ref.sequencing();
|
let mut sequencing = target_node_ref.sequencing();
|
||||||
|
|
||||||
|
// If the node has had lost questions or failures to send, prefer sequencing
|
||||||
|
// to improve reliability. The node may be experiencing UDP fragmentation drops
|
||||||
|
// or other firewalling issues and may perform better with TCP.
|
||||||
|
let unreliable = target_node_ref.peer_stats().rpc_stats.failed_to_send > 0 || target_node_ref.peer_stats().rpc_stats.recent_lost_answers > 0;
|
||||||
|
if unreliable && sequencing < Sequencing::PreferOrdered {
|
||||||
|
sequencing = Sequencing::PreferOrdered;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the best contact method with these parameters from the routing domain
|
||||||
let cm = routing_table.get_contact_method(
|
let cm = routing_table.get_contact_method(
|
||||||
routing_domain,
|
routing_domain,
|
||||||
&peer_a,
|
&peer_a,
|
||||||
|
@ -844,6 +844,10 @@ impl RPCProcessor {
|
|||||||
// Record for node if this was not sent via a route
|
// Record for node if this was not sent via a route
|
||||||
if safety_route.is_none() && remote_private_route.is_none() {
|
if safety_route.is_none() && remote_private_route.is_none() {
|
||||||
node_ref.stats_failed_to_send(send_ts, wants_answer);
|
node_ref.stats_failed_to_send(send_ts, wants_answer);
|
||||||
|
|
||||||
|
// Also clear the last_connections for the entry so we make a new connection next time
|
||||||
|
node_ref.clear_last_connections();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -872,6 +876,10 @@ impl RPCProcessor {
|
|||||||
// Record for node if this was not sent via a route
|
// Record for node if this was not sent via a route
|
||||||
if safety_route.is_none() && remote_private_route.is_none() {
|
if safety_route.is_none() && remote_private_route.is_none() {
|
||||||
node_ref.stats_question_lost();
|
node_ref.stats_question_lost();
|
||||||
|
|
||||||
|
// Also clear the last_connections for the entry so we make a new connection next time
|
||||||
|
node_ref.clear_last_connections();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Get route spec store
|
// Get route spec store
|
||||||
|
Loading…
Reference in New Issue
Block a user