From 87a0e38e3624f1cbf6dfeae5221ba985c3c8cd8a Mon Sep 17 00:00:00 2001 From: Christien Rioux Date: Thu, 25 Jul 2024 21:10:12 -0400 Subject: [PATCH] reduce frequency of interface resets on ios --- scripts/ios_build.sh | 3 +++ scripts/macos_build.sh | 4 ++++ veilid-core/src/network_manager/native/mod.rs | 1 + .../src/network_manager/native/network_udp.rs | 2 +- veilid-core/src/network_manager/send_data.rs | 2 ++ veilid-core/src/routing_table/bucket_entry.rs | 4 ++-- .../src/routing_table/tasks/bootstrap.rs | 2 +- .../src/rpc_processor/coders/node_info.rs | 2 ++ veilid-core/src/rpc_processor/mod.rs | 22 +++++++++---------- .../src/rpc_processor/operation_waiter.rs | 5 ++++- veilid-server/src/main.rs | 9 ++++++++ veilid-tools/src/network_interfaces/mod.rs | 10 +++++++-- veilid-tools/src/tools.rs | 5 +++-- 13 files changed, 51 insertions(+), 20 deletions(-) diff --git a/scripts/ios_build.sh b/scripts/ios_build.sh index 8214a38d..d77db97f 100755 --- a/scripts/ios_build.sh +++ b/scripts/ios_build.sh @@ -27,6 +27,9 @@ else LIPO_OUT_NAME="lipo-ios" fi +set -euxo pipefail + +LIPOS="" for arch in $ARCHS do if [ "$arch" == "arm64" ]; then diff --git a/scripts/macos_build.sh b/scripts/macos_build.sh index 61703127..7ff597f3 100755 --- a/scripts/macos_build.sh +++ b/scripts/macos_build.sh @@ -1,4 +1,5 @@ #!/bin/bash + SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" pushd $SCRIPTDIR >/dev/null @@ -23,6 +24,9 @@ ARCHS=${ARCHS:=arm64} LIPO_OUT_NAME="lipo-darwin" +set -euxo pipefail + +LIPOS="" for arch in $ARCHS do if [ "$arch" == "arm64" ]; then diff --git a/veilid-core/src/network_manager/native/mod.rs b/veilid-core/src/network_manager/native/mod.rs index 44d6dcf4..6df4b164 100644 --- a/veilid-core/src/network_manager/native/mod.rs +++ b/veilid-core/src/network_manager/native/mod.rs @@ -351,6 +351,7 @@ impl Network { }) .collect(); addrs.sort(); + addrs.dedup(); addrs } diff --git a/veilid-core/src/network_manager/native/network_udp.rs b/veilid-core/src/network_manager/native/network_udp.rs index a6fb9267..089bd687 100644 --- a/veilid-core/src/network_manager/native/network_udp.rs +++ b/veilid-core/src/network_manager/native/network_udp.rs @@ -112,7 +112,7 @@ impl Network { #[instrument(level = "trace", skip_all)] async fn create_udp_protocol_handler(&self, addr: SocketAddr) -> EyreResult { - log_net!("create_udp_protocol_handler on {:?}", &addr); + log_net!(debug "create_udp_protocol_handler on {:?}", &addr); // Create a reusable socket let Some(socket) = new_bound_default_udp_socket(addr)? else { diff --git a/veilid-core/src/network_manager/send_data.rs b/veilid-core/src/network_manager/send_data.rs index 722610a4..20c64e18 100644 --- a/veilid-core/src/network_manager/send_data.rs +++ b/veilid-core/src/network_manager/send_data.rs @@ -116,6 +116,7 @@ impl NetworkManager { log_network_result!(debug "Reverse connection failed to {}, falling back to inbound relay via {}", target_node_ref, relay_nr); network_result_try!(this.try_possibly_relayed_contact_method(NodeContactMethod::InboundRelay(relay_nr), destination_node_ref, data).await?) } else { + log_network_result!(debug "Reverse connection successful to {} via {}", target_node_ref, relay_nr); network_result_try!(nres) } } @@ -128,6 +129,7 @@ impl NetworkManager { log_network_result!(debug "Hole punch failed to {}, falling back to inbound relay via {}", target_node_ref, relay_nr); network_result_try!(this.try_possibly_relayed_contact_method(NodeContactMethod::InboundRelay(relay_nr), destination_node_ref, data).await?) } else { + log_network_result!(debug "Hole punch successful to {} via {}", target_node_ref, relay_nr); network_result_try!(nres) } } diff --git a/veilid-core/src/routing_table/bucket_entry.rs b/veilid-core/src/routing_table/bucket_entry.rs index 7dbc6464..2e591c6f 100644 --- a/veilid-core/src/routing_table/bucket_entry.rs +++ b/veilid-core/src/routing_table/bucket_entry.rs @@ -599,13 +599,13 @@ impl BucketEntryInner { return; } self.envelope_support.push(envelope_version); - self.envelope_support.dedup(); self.envelope_support.sort(); + self.envelope_support.dedup(); } pub fn set_envelope_support(&mut self, mut envelope_support: Vec) { - envelope_support.dedup(); envelope_support.sort(); + envelope_support.dedup(); self.envelope_support = envelope_support; } diff --git a/veilid-core/src/routing_table/tasks/bootstrap.rs b/veilid-core/src/routing_table/tasks/bootstrap.rs index a195a890..85537830 100644 --- a/veilid-core/src/routing_table/tasks/bootstrap.rs +++ b/veilid-core/src/routing_table/tasks/bootstrap.rs @@ -60,8 +60,8 @@ impl RoutingTable { }; envelope_support.push(es); } - envelope_support.dedup(); envelope_support.sort(); + envelope_support.dedup(); // Node Id let mut node_ids = TypedKeyGroup::new(); diff --git a/veilid-core/src/rpc_processor/coders/node_info.rs b/veilid-core/src/rpc_processor/coders/node_info.rs index a2ad79b8..b9a94707 100644 --- a/veilid-core/src/rpc_processor/coders/node_info.rs +++ b/veilid-core/src/rpc_processor/coders/node_info.rs @@ -93,6 +93,7 @@ pub fn decode_node_info(reader: &veilid_capnp::node_info::Reader) -> Result Result Result { let inner = self.inner.lock(); let Some(waiting_op) = inner.waiting_op_table.get(&op_id) else { - return Err(RPCError::ignore("Missing operation id getting op context")); + return Err(RPCError::ignore(format!( + "Missing operation id getting op context: id={}", + op_id + ))); }; Ok(waiting_op.context.clone()) } diff --git a/veilid-server/src/main.rs b/veilid-server/src/main.rs index 67ae422f..f2755c0c 100644 --- a/veilid-server/src/main.rs +++ b/veilid-server/src/main.rs @@ -153,6 +153,10 @@ pub struct CmdlineArgs { #[cfg(feature = "rt-tokio")] #[arg(long)] console: bool, + + /// change ingore_log_targets + #[arg(long)] + ignore_log_targets: Option>, } #[instrument(level = "trace", skip_all, err)] @@ -308,6 +312,11 @@ fn main() -> EyreResult<()> { settingsrw.logging.console.enabled = true; } + if let Some(ignore_log_targets) = args.ignore_log_targets { + println!("Changing ignored log targets: {:?}", ignore_log_targets); + settingsrw.logging.terminal.ignore_log_targets = ignore_log_targets + } + drop(settingsrw); // Set specific config settings diff --git a/veilid-tools/src/network_interfaces/mod.rs b/veilid-tools/src/network_interfaces/mod.rs index cf38e5fb..957f1968 100644 --- a/veilid-tools/src/network_interfaces/mod.rs +++ b/veilid-tools/src/network_interfaces/mod.rs @@ -427,9 +427,15 @@ impl NetworkInterfaces { } // Sort one more time to get the best interface addresses overall - intf_addrs.sort(); + let mut addresses = intf_addrs + .iter() + .map(|x| x.if_addr().ip()) + .collect::>(); + + addresses.sort(); + addresses.dedup(); // Now export just the addresses - inner.interface_address_cache = intf_addrs.iter().map(|x| x.if_addr().ip()).collect() + inner.interface_address_cache = addresses; } } diff --git a/veilid-tools/src/tools.rs b/veilid-tools/src/tools.rs index b9a1da4c..492782b4 100644 --- a/veilid-tools/src/tools.rs +++ b/veilid-tools/src/tools.rs @@ -321,11 +321,12 @@ pub fn listen_address_to_socket_addrs(listen_address: &str) -> Result { +/// Dedup, but doesn't require a sorted vec, and keeps the element order +pub trait RemoveDuplicates { fn remove_duplicates(&mut self); } -impl Dedup for Vec { +impl RemoveDuplicates for Vec { fn remove_duplicates(&mut self) { let mut already_seen = Vec::new(); self.retain(|item| match already_seen.contains(item) {