From 30b88bf626722219682e39518a665d0b461515f2 Mon Sep 17 00:00:00 2001 From: Luna Yao <40349250+ZnqbuZ@users.noreply.github.com> Date: Tue, 28 Apr 2026 18:38:30 +0200 Subject: [PATCH] peer_mgr: invalidate unreachable peer fmt --- easytier/src/dns/peer_mgr.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/easytier/src/dns/peer_mgr.rs b/easytier/src/dns/peer_mgr.rs index 971e0511..53870bf1 100644 --- a/easytier/src/dns/peer_mgr.rs +++ b/easytier/src/dns/peer_mgr.rs @@ -90,7 +90,15 @@ impl DnsPeerMgrInner { tracing::trace!(?peer_id, "peer info refreshed"); return result; } - Err(_) if attempts == 0 => return result, + Err(_) if attempts == 0 => { + self.peers.invalidate(&peer_id).await; + self.dirty.mark(); + tracing::error!( + ?peer_id, + "exhausted all attempts to refresh peer info, invalidating cache" + ); + return result; + } Err(error) => { tracing::error!( ?error, @@ -688,7 +696,10 @@ mod tests { .expect("route to keep_peer should appear"); local_dns.dirty.reset(); - local_dns.try_refresh(fail_id).await.unwrap(); + local_dns + .refresh(fail_id, Default::default(), Default::default()) + .await + .unwrap_err(); assert!(local_dns.dirty.peek()); assert!(local_dns.peers.get(&fail_id).await.is_none());