From 0861ccaf063dab496c92b8be21ee79b566f8fb56 Mon Sep 17 00:00:00 2001 From: Thomas Eizinger Date: Sat, 14 Dec 2024 05:03:53 +1100 Subject: [PATCH] chore(connlib): improve logging on missing flow (#7508) Normally, there always be exactly on pending flow per resource. It appears though that it can sometimes happen that we first request a flow for a resource but by the time it is authorised, we've already cleared its local state. Regardless, this isn't a concerning error and not worth logging on WARN (which happens one layer up). --- rust/connlib/tunnel/src/client.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/rust/connlib/tunnel/src/client.rs b/rust/connlib/tunnel/src/client.rs index baaf66615..13e815414 100644 --- a/rust/connlib/tunnel/src/client.rs +++ b/rust/connlib/tunnel/src/client.rs @@ -685,7 +685,7 @@ impl ClientState { self.drain_node_events(); } - #[tracing::instrument(level = "debug", skip_all, fields(%gateway_id))] + #[tracing::instrument(level = "debug", skip_all, fields(%resource_id))] #[expect(clippy::too_many_arguments)] pub fn handle_flow_created( &mut self, @@ -698,18 +698,18 @@ impl ClientState { gateway_ice: IceCredentials, now: Instant, ) -> anyhow::Result> { - tracing::trace!("Updating resource routing table"); + tracing::debug!(%gateway_id, "New flow authorized for resource"); let resource = self .resources_by_id .get(&resource_id) .context("Unknown resource")?; - let buffered_packets = self - .pending_flows - .remove(&resource_id) - .context("No pending flow for resource")? - .packets; + let Some(pending_flow) = self.pending_flows.remove(&resource_id) else { + tracing::debug!("No pending flow"); + + return Ok(Ok(())); + }; if let Some(old_gateway_id) = self.resources_gateways.insert(resource_id, gateway_id) { if self.peers.get(&old_gateway_id).is_some() { @@ -742,6 +742,8 @@ impl ClientState { self.peers.insert(GatewayOnClient::new(gateway_id), &[]); }; + let buffered_packets = pending_flow.packets; + match resource { Resource::Cidr(_) | Resource::Internet(_) => { self.peers.add_ips_with_resource(