From 3fb1da6c2ed2f3a1fd53066cbaf85710980b2ba7 Mon Sep 17 00:00:00 2001 From: Luna Yao <40349250+ZnqbuZ@users.noreply.github.com> Date: Tue, 31 Mar 2026 19:12:26 +0200 Subject: [PATCH] node & peer_mgr: refactor refresh logic, add my_peer_id check node --- easytier/src/dns/node.rs | 24 ++++++------------------ easytier/src/dns/peer_mgr.rs | 31 ++++++++++++++++++++----------- 2 files changed, 26 insertions(+), 29 deletions(-) diff --git a/easytier/src/dns/node.rs b/easytier/src/dns/node.rs index 1b08afb8..991b5132 100644 --- a/easytier/src/dns/node.rs +++ b/easytier/src/dns/node.rs @@ -1,6 +1,5 @@ use crate::common::global_ctx::{ArcGlobalCtx, GlobalCtxEvent}; use crate::common::scoped_task::ScopedTask; -use crate::common::PeerId; use crate::dns::config::{DNS_SERVER_ELECTION_INTERVAL, DNS_SERVER_RPC_ADDR}; use crate::dns::peer_mgr::DnsPeerMgr; use crate::dns::server::DnsServer; @@ -185,7 +184,12 @@ impl DnsNode { event = subscriber.recv() => { match event { Ok(GlobalCtxEvent::PeerInfoUpdated(peer_ids)) => { - self.refresh(&mut tasks, peer_ids); + for peer_id in peer_ids { + let mgr = self.mgr.clone(); + tasks.spawn(async move { + mgr.refresh(peer_id).await; + }); + } continue; } Ok( @@ -242,20 +246,4 @@ impl DnsNode { Ok(()) } - - fn refresh(&self, tasks: &mut JoinSet<()>, peer_ids: Vec) { - let my_peer_id = self.peer_mgr.my_peer_id(); - for peer_id in peer_ids { - if peer_id == my_peer_id { - continue; - } - let mgr = self.mgr.clone(); - let route = self.peer_mgr.get_route(); - tasks.spawn(async move { - if let Some(peer_info) = route.get_peer_info(peer_id).await { - mgr.refresh(peer_id, peer_info.dns).await; - } - }); - } - } } diff --git a/easytier/src/dns/peer_mgr.rs b/easytier/src/dns/peer_mgr.rs index 83237db5..72e88a96 100644 --- a/easytier/src/dns/peer_mgr.rs +++ b/easytier/src/dns/peer_mgr.rs @@ -5,6 +5,7 @@ use crate::dns::utils::dirty::DirtyFlag; use crate::dns::zone::ZoneGroup; use crate::peer_center::instance::PeerCenterPeerManagerTrait; use crate::peers::peer_manager::PeerManager; +use crate::peers::route_trait::Route; use crate::proto::dns::{ DnsPeerMgrRpc, DnsPeerMgrRpcClientFactory, DnsSnapshot, GetExportConfigRequest, GetExportConfigResponse, ZoneData, @@ -78,12 +79,24 @@ impl DnsPeerMgr { } } - pub(super) async fn refresh(&self, peer_id: PeerId, digest: Vec) { - if let Some(info) = self.peers.get(&peer_id).await { - if info.digest == *digest { - return; - } + pub async fn refresh(&self, peer_id: PeerId) { + if peer_id == self.peer_mgr.my_peer_id() { + self.dirty.mark(); + self.dirty.notify_one(); + return; + } + + let Some(route) = self.peer_mgr.get_route().get_peer_info(peer_id).await else { + return; }; + if self + .peers + .get(&peer_id) + .await + .is_some_and(|info| info.digest == *route.dns) + { + return; + } self.dirty.mark(); @@ -91,12 +104,8 @@ impl DnsPeerMgr { Ok(info) => { self.peers.insert(peer_id, info).await; } - Err(e) => { - tracing::warn!( - "failed to fetch dns export config from peer {}: {:?}", - peer_id, - e - ); + Err(error) => { + tracing::warn!(%peer_id, ?error, "failed to fetch dns export config from peer"); self.peers.invalidate(&peer_id).await; } }