From a6e0cd4fbb6b6437ee594c4f255aa27036eefaaa Mon Sep 17 00:00:00 2001 From: Gabi Date: Wed, 15 May 2024 20:42:24 -0300 Subject: [PATCH] chore(connlib): limit resource_update to resource changes (#5005) --- rust/connlib/tunnel/src/client.rs | 8 +++++++- rust/connlib/tunnel/src/lib.rs | 10 +++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/rust/connlib/tunnel/src/client.rs b/rust/connlib/tunnel/src/client.rs index 2ae8eed67..0819a03a5 100644 --- a/rust/connlib/tunnel/src/client.rs +++ b/rust/connlib/tunnel/src/client.rs @@ -856,7 +856,9 @@ impl ClientState { earliest(self.next_dns_refresh, self.node.poll_timeout()) } - pub fn handle_timeout(&mut self, now: Instant) { + /// Returns whether resources statuses have updated + pub fn handle_timeout(&mut self, now: Instant) -> bool { + let mut resources_updated = false; self.node.handle_timeout(now); match self.next_dns_refresh { @@ -894,6 +896,7 @@ impl ClientState { match event { snownet::Event::ConnectionFailed(id) => { self.cleanup_connected_gateway(&id); + resources_updated = true; } snownet::Event::NewIceCandidate { connection, @@ -915,9 +918,12 @@ impl ClientState { }), snownet::Event::ConnectionEstablished(id) => { self.update_site_status_by_gateway(&id, Status::Online); + resources_updated = true; } } } + + resources_updated } fn update_site_status_by_gateway(&mut self, gateway_id: &GatewayId, status: Status) { diff --git a/rust/connlib/tunnel/src/lib.rs b/rust/connlib/tunnel/src/lib.rs index 5d4451eb1..d540cf5a0 100644 --- a/rust/connlib/tunnel/src/lib.rs +++ b/rust/connlib/tunnel/src/lib.rs @@ -118,9 +118,13 @@ where self.device_read_buf.as_mut(), )? { Poll::Ready(io::Input::Timeout(timeout)) => { - self.role_state.handle_timeout(timeout); - self.callbacks - .on_update_resources(self.role_state.resources()); + let resources_updated = self.role_state.handle_timeout(timeout); + + if resources_updated { + self.callbacks + .on_update_resources(self.role_state.resources()); + } + continue; } Poll::Ready(io::Input::Device(packet)) => {